MySQL :: MySQL 8.0 Reference Manual :: 13.1.37 TRUNCATE TABLE Statement (Português)

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 TABLEseja 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 um InnoDB tabela ou NDB tabela se houver FOREIGN 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 para MyISAM e InnoDB, 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çãoTRUNCATE 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 TABLEseguido 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.

Share

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *