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.
Escreva um comentário