Introdução
Compreenda a diferença entre delete e truncate em sql, com exemplos detalhados e fáceis de entender.
DELETE e TRUNCATE são comandos ambos utilizados para remover tuplas de uma relação, mas são diferentes em muitos aspectos. O ponto central que nos permite diferenciar entre DELETE e TRUNCATE é que DELETE é capaz de remover tuplas específicas de uma relação, enquanto TRUNCATE remove todas as tuplas/linhas de uma relação/tabela.
Veja outras diferenças na tabela abaixo:
Tópico de comparação | DELETE | TRUNCATE |
Básico | Você pode especificar as tuplas que quer deletar | Remove todas as tuplas da relação |
Linguagem | É um comando DML (Data Manipulation Language) | É um comando DDL (Data Definition Language) |
Cláusula Where | Pode ter a cláusula where | Não pode utilizar where |
Deleção | Remove as tuplas uma a uma | Exclui todas as tuplas de uma relação |
lock | Usa lock antes de excluir a tupla | Usa lock antes de deletar uma data page |
Velocidade | Mais lento em relação ao truncate | Mais rápido em ralação ao delete |
Restauração | Pode ser seguido de commit e rollback | Não pode usar rollback após a exclusão |
Quando usar o DELETE?
Delete é um comando DML (Data Manipulation Language). O comando DELETE é utilizado para remover registros de uma tabela. Em uma forma mais simples, você pode remover todas as linhas de uma tabela/relação ou adicionar a cláusula WHERE para remover apenas as linhas/tuplas que atendem aos critérios especificados.
Quando o comando DELETE é executado o DBSM registrará todas as linhas removidas. Devido a isso o processo de restauração se torna mais fácil, em relação ao TRUNCATE. Para isso você pode redefinir o banco de dados usando o comando ROLLBACK.
O comando delete bloqueia a linha a ser excluída, e em seguida, excluí uma a uma. Por exigir muitos bloqueios, torna a execução mais lenta.
Veja a sintaxe do comando delete:
DELETE FROM table_name WHERE [conditon] ;
O comando:
DELETE FROM employee;
... irá remover todos os funcionários da tabela employee. Enquanto que o comando:
DELETE FROM employee
WHERE firstName = ‘Maria’;
... irá excluir todos os funcionários que o primeiro nome seja Maria.
Quando utilizar o truncate?
TRUNCATE é um comando DDL (Data Definition Language). É semelhante ao DELETE, pois exclui linhas/tuplas de uma relação. A diferença é que o TRUNCATE exclui todas as linhas/tuplas de uma tabela/relação. A estrutura da tabela ainda é mantida no banco de dados. A primary key é redefinida para seu valor inicial.
Ao usar TRUNCATE, menos informações serão registradas. TRUNCATE opera sobre data pages, entao ele bloqueia os data pages em vez das tuplas. Isso significa que menos bloqueios são necessários e a execução se torna mais rápida. No entanto, ele não registra cada linha excluída. Observação: em alguns bancos de dados é possível reverter o comando TRUNCATE usando códigos avançados.
Veja a sintaxe do comando TRUNCATE:
TRUNCATE TABLE table_name;
O comando:
TRUNCATE TABLE employee;
irá remover todas as linhas da tabela employee.
Use TRUNCATE quando você quiser redefinir a tabela para seu estado vazio ou quando precisar limpar os dados da tabela de forma rápida.
TRUNCATE bloqueia a tabela, então, não use o comando em uma tabela compartilhada por muitos usuários simultâneos.
Conclusão
Use DELETE para personalizar a exclusão de registros de uma tabela. Use truncate quando quiser esvaziar a tabela;