O T-SQL fornece duas palavras-chave que permitem excluir dados de uma tabela. Eles são EXCLUIR e TRUNCAR . Estes são semelhantes no que estão fazendo, no entanto, eles usam métodos muito diferentes. Neste artigo, discutimos mecanismos subjacentes para essas palavras-chave.
Uma diferença entre TRUNCATE e DELETE
TRUNCAR:
- TRUNCATE é um comando DDL.
- TRUNCATE TABLE sempre bloqueia a tabela e a página. No entanto, ele não bloqueia cada linha.
- A condição WHERE não pode ser usada.
- O comando remove todos os dados.
- TRUNCATE TABLE não pode ativar um gatilho porque a operação não registra exclusões de linhas individuais.
- Mais rápido no desempenho, porque não mantém registros.
- É possível reverter.
EXCLUIR:
- DELETE é um comando DML.
- A instrução DELETE usa um bloqueio de linha durante a execução. Cada linha da tabela está bloqueada para exclusão.
- Você pode especificar filtros na cláusula WHERE.
- O comando exclui dados especificados se a condição WHERE existir.
- DELETE ativa um acionador porque as operações são registradas individualmente.
- DELETE é mais lento que TRUNCATE porque mantém registros.
- É possível reverter.
Como excluir dados com a ajuda de TRUNCATE?
O exemplo a seguir remove todos os dados da tabela Person. SELECIONAR instruções são incluídas antes e depois de TRUNCATE TABLE declaração para comparar os resultados.
USE AdventureWorks2012;
GO
SELECT COUNT(*) AS BeforeTruncateCount
FROM Person.Person;
GO
TRUNCATE TABLE Person.Person;
GO
SELECT COUNT(*) AS AfterTruncateCount
FROM Person.Person;
GO
Vamos destacar algumas vantagens.
A TABELA TRUNCADA O comando exclui todas as linhas de uma tabela desalocando as páginas de dados usadas para armazenar os dados da tabela. Uma vez concluída a operação, a tabela contém zero páginas. Ele não registra as exclusões de linhas individuais. O comando registra a desalocação de página no log de transações. O TRUNCAR comando usa menos espaço de log. Menos bloqueios são normalmente usados. O comando exclui todas as linhas de uma tabela, mas a estrutura da tabela e suas colunas, restrições, índices etc. permanecem. Para remover a mesa. você precisa usar DROP TABLE .
Se uma tabela contiver uma coluna de identidade, o contador dessa coluna será redefinido para o valor de semente definido para a coluna. Se nenhuma semente foi definida, o valor padrão 1 é usado. Para manter o contador de identidade, use DELETE em vez de.
Excluindo todas as linhas usando DELETE
O exemplo a seguir exclui todas as linhas da tabela Person:
DELETE FROM Person.Person;
GO
EXCLUIR remove as linhas uma de cada vez. O comando adiciona o novo registro ao log de transações para cada linha excluída. EXCLUIR usa um bloqueio de linha durante a execução, o que significa que cada linha na tabela está bloqueada para exclusão. Uma vez EXCLUIR é executado, uma tabela ainda pode conter páginas de dados vazias. Por exemplo, páginas vazias no heap não podem ser desalocadas sem pelo menos um bloqueio de tabela exclusivo (LCK_M_X). EXCLUIR e TRUNCAR ambos podem ser revertidos quando usados com TRANSACTION .
Leia também
Diferença entre a tabela DELETE e TRUNCATE no SQL Server