Diferença entre os comandos TRUNCATE e DELETE em bancos de dados

Qual a diferença entre os comandos TRUNCATE e DELETE?

Ambos os comandos são empregados para excluir registros (linhas) em uma tabela em um banco de dados, porém eles funcionam de forma diferente, e possuem aplicação distinta.

Comando TRUNCATE TABLE

O comando TRUNCATE TABLE é executado de forma muito rápida. Porém, não é realizado um registro de log de cada linha excluída. Por isso, é preciso tomar muito cuidado ao decidir usar esse comando. Dependendo do SGBD usado, não é possível realizar ROLLBACK após executar o TRUNCATE (por exemplo, em Oracle Database), pois um COMMIT implícito é realizado por este comando.

Sintaxe
Sua sintaxe é muito simples:

TRUNCATE TABLE nome_tabela;

Exemplo

TRUNCATE TABLE tbl_Livros;

Este comando limpa a tabela de livros. Cuidado!

Se esse comando for executado por engano, será muito difícil recuperar os dados que serão apagados. Além disso, pode haver propagação de exclusões, o que pode levar à perda maciça de dados em outras tabelas relacionadas. O TRUNCATE também bloqueia (lock) a tabela durante sua execução, tornando-a inacessível aos usuário durante esse tempo.

Quando o TRUNCATE TABLE é empregado?

Quando você quer realmente limpar totalmente uma tabela. Todas as linhas são então removidas, e inclusive os valores de auto-incremento são resetados. Geralmente fazemos isso em tabelas de teste, durante o desenvolvimento do banco de dados. Desta forma, a operação é realizada de forma muito mais rápida do que, por exemplo, apagar e recriar uma tabela (ou usar o comando DELETE FROM).

Um uso mais avançado é excluir os dados de uma tabela por completo, mas sem ativar o trigger AFTER em uma operação DELETE.

O comando TRUNCATE é como o comando DELETE sem o uso da cláusula WHERE.

Obs.: Não é possível usar o comando TRUNCATE TABLE em tabelas que sejam referenciadas por uma restrição de chave estrangeira (FOREIGN KEY), ou ainda que façam parte de uma view indexada. Nestes casos, é necessário usar o comando DELETE, ou desabilitar a restrição correspondente.

Comando DELETE FROM

O comando DELETE FROM é empregado para remover registros especificados de uma tabela. Por exemplo, é possível excluir um pequeno grupo de registros baseado em uma condição, ou ainda excluir um único registro. Para isso, o comando DELETE é executado em conjunto com uma cláusula WHERE.

Ao executar esse comando, as linhas removidas são registradas em log pelo SGBD. Desta forma, é possível recuperar dados excluídos por acidente.

Sintaxe:

DELETE FROM nome_tabela
WHERE condição_filtro;

Exemplo:

DELETE FROM tbl_Editoras
WHERE ID_Editora = 3;

Este comando exclui a editora de ID igual a 3. Porém, se for executado sem a cláusula WHERE, como em:

DELETE FROM tbl_Editoras;

Todas as linhas desta tabela serão excluídas, uma a uma.

Ao excluir linhas com o DELETE, valores de auto-incremento não são resetados – a contagem continua normalmente para os próximos registros inseridos. Assim, se uma coluna de auto-incremento possuir o valor, digamos, 15, e esse registro for excluído, ao inserirmos uma nova linha posteriormente o valor nessa coluna será 16 (e não 15).

Conclusão: O que recomendamos?

Recomendamos sempre usar o comando DELETE FROM com a cláusula WHERE para excluir linhas de uma tabela, exceto em casos muito especiais onde é necessário limpar a tabela toda, para resetá-la ao seu estado inicial (vazio), de forma rápida e eficiente – neste caso, use o comando TRUNCATE TABLE.

 

Sobre Fábio dos Reis (1405 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 25 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Unix, Linux e Open Source em geral, adora Eletrônica e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.
Contato: Website

Escreva um comentário

Seu e-mail não será divulgado


*