Sobes.tech
Middle

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)