Qual é a diferença entre os operadores DELETE e TRUNCATE?
sobes.tech IA
Resposta da IA
DELETE remove linhas uma a uma, registando cada remoção no log de transações. Suporta operadores WHERE para remoção seletiva e devolve a quantidade de linhas removidas. Pode ser revertido (ROLLBACK).
TRUNCATE remove todas as linhas de uma tabela, libertando o espaço utilizado, sem registar remoções individuais no log de transações (apenas regista o facto da operação). Não suporta operadores WHERE. Geralmente, é mais rápido que DELETE sem condição WHERE. TRUNCATE não ativa os triggers ON DELETE. Não pode ser completamente revertido na maioria dos casos, pois a operação é considerada DDL (Linguagem de Definição de Dados), embora em alguns SGBD (por exemplo, PostgreSQL), TRUNCATE possa participar em transações e ser revertido.
Diferenças principais:
| Característica | DELETE | TRUNCATE |
|---|---|---|
| Tipo de operação | DML (Linguagem de Manipulação de Dados) | DDL (Linguagem de Definição de Dados) |
| Registo | Cada linha removida | Apenas o facto da operação |
| Condição WHERE | Suportada | Não suportada |
| Reversão (ROLLBACK) | Possível | Na maioria dos SGBD, não possível (exceto em algumas implementações) |
| Triggers ON DELETE | São ativados | Não são ativados |
| Retorno de linhas | Retorna o número de linhas removidas | Não retorna |
| Desempenho | Mais lento (quando remove todas as linhas), mais rápido (quando remove subconjuntos) | Mais rápido (quando remove todas as linhas) |
| Reinicialização de identidade | Não | Sim (para a maioria dos SGBD) |