13.1.37 TRUNCATE TABLE Statement
TRUNCATE tbl_name
TRUNCATE TABLE
empties a table completely. It requires the DROP
privilege. Logically, TRUNCATE TABLE
is similar to a DELETE
statement that deletes all rows, or a sequence of DROP TABLE
and CREATE TABLE
statements.,
para alcançar alto desempenho, TRUNCATE TABLE
contorna o método DML de exclusão de dados. Assim, ele não causa ON DELETE
gatilhos para disparar, ele não pode ser realizado para InnoDB
tabelas com relações de chave externas pais-filhos, e não pode ser rolado para trás como uma operação DML. However, TRUNCATE TABLE
operations on tables that use an atomic DDL-supported storage engine are either fully commited or rolled back if the server halts during their operation. Para mais informações, ver secção 13.1.,1, “Atomic Data Definition Statement Support”.
embora TRUNCATE TABLE
seja semelhante aDELETE
, é classificado como uma declaração DDL em vez de uma declaração DML. Difere de DELETE
das seguintes formas:
-
Truncate operations drop and re-create the table, which is much faster than deleting rows one by one, particularly for large tables.
-
as operações truncadas causam um commit implícito, pelo que não podem ser revertidas. Ver Secção 13.3.,3, “Statements That Cause an implícito Commit”.
-
as operações de truncamento não podem ser realizadas se a sessão mantiver um bloqueio activo da tabela.
-
TRUNCATE TABLE
falha para umInnoDB
tabela ouNDB
tabela se houverFOREIGN KEY
restrições a partir de outras tabelas que fazem referência a tabela. São permitidas restrições de chave estrangeiras entre colunas da mesma tabela. -
as operações de truncamento não devolvem um valor significativo para o número de linhas apagadas., O resultado usual é “0 linhas afetadas”, que deve ser interpretado como ” nenhuma informação.”
-
desde que a definição da tabela seja válida, a tabela pode ser re-criada como uma tabela vazia com
TRUNCATE TABLE
, mesmo que os dados ou arquivos de índice se tenham corrompido. -
qualquer
AUTO_INCREMENT
o valor é reposto ao seu valor inicial. Isto é verdade mesmo paraMyISAM
eInnoDB
, que normalmente não reutilizam valores de sequência., -
Quando usado com tabelas particionadas,
TRUNCATE TABLE
preserva o particionamento; isto é, os dados e os arquivos de índice são descartados e recriados, enquanto a partição definições não são afetados. -
A declaração
TRUNCATE TABLE
não invocaON DELETE
gatilhos. -
truncando um
InnoDB
a tabela é suportada.
TRUNCATE TABLE
for a table closes all handlers for the table that were opened with.,
TRUNCATE TABLE
é tratado para fins de Registo binário e replicação comoDROP TABLE
seguido porCREATE TABLE
—isto é, como DDL em vez de DML. Isto é devido ao fato de que, ao usar InnoDB
e outros mecanismos de armazenamento transacional, onde o nível de isolamento de transação não permite a declaração de log baseado em (READ COMMITTED
ou READ UNCOMMITTED
), a declaração não foi registrado e replicados quando usando STATEMENT
ou MIXED
modo de registo., (Bug # 36763) However, it is still applied on Replica using InnoDB
in the manner described previously.
em MySQL 5.7 e anteriormente, em um sistema com um grande buffer pool e innodb_adaptive_hash_index
habilitado, uma operação TRUNCATE TABLE
pode causar uma queda temporária no desempenho do sistema devido a uma varredura LRU que ocorreu ao remover as entradas do Índice adaptativo de hash da tabela (Bug #68184). The remapping of TRUNCATE TABLE
to DROP TABLE
and CREATE TABLE
in MySQL 8.0 avoids the problematic LRU scan.,
TRUNCATE TABLE
pode ser usado com tabelas de resumo do esquema de desempenho, mas o efeito é repor as colunas de resumo em 0 ouNULL
, não para remover linhas. Ver Secção 27.12.18, “Performance Schema-Resumo Tables”.
truncando um InnoDB
table that resides in a file-per-table tablespace drops the existing tablespace and creates a new one. A partir de MySQL 8.0.,21, se o tablespace foi criado com uma versão anterior e reside num directório desconhecido, InnoDB
cria o novo tablespace no local por omissão e escreve o seguinte aviso para o registo de erros: a localização do directório de dados deve estar num directório conhecido. A localização da pasta de dados será ignorada e o ficheiro será colocado na localização predefinida dos dados. Conhecido diretórios são aquelas definidas por datadir
innodb_data_home_dir
e innodb_directories
variáveis., Ter TRUNCATE TABLE
criar a tablespace para a sua localização atual, adicione o diretório para o innodb_directories
configuração antes de executar o TRUNCATE TABLE
.