Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

SQL Server :SUPPRIMER ou TRONQUER

T-SQL fournit deux mots clés qui vous permettent de supprimer des données d'une table. Ils sont SUPPRIMER et TRUNCATE . Ceux-ci se ressemblent dans ce qu'ils font, cependant, ils utilisent des méthodes très différentes. Dans cet article, nous abordons les mécanismes sous-jacents de ces mots clés.

Une différence entre TRUNCATE et DELETE

TRUNCER :

  1. TRUNCATE est une commande DDL.
  2. TRUNCATE TABLE verrouille toujours la table et la page. Cependant, il ne verrouille pas chaque ligne.
  3. La condition WHERE ne peut pas être utilisée.
  4. La commande supprime toutes les données.
  5. TRUNCATE TABLE ne peut pas activer un déclencheur car l'opération n'enregistre pas les suppressions de lignes individuelles.
  6. Plus rapide en termes de performances, car il ne conserve pas de journaux.
  7. La restauration est possible.

SUPPRIMER :

  1. SUPPRIMER est une commande DML.
  2. L'instruction DELETE utilise un verrou de ligne lors de l'exécution. Chaque ligne du tableau est verrouillée pour suppression.
  3. Vous pouvez spécifier des filtres dans la clause WHERE.
  4. La commande supprime les données spécifiées si la condition WHERE existe.
  5. DELETE active un déclencheur car les opérations sont enregistrées individuellement.
  6. DELETE est plus lent que TRUNCATE car il conserve les journaux.
  7. La restauration est possible.

Comment supprimer des données à l'aide de TRUNCATE ?

L'exemple suivant supprime toutes les données de la table Person. SÉLECTIONNER les instructions sont incluses avant et après TRUNCATE TABLE déclaration pour comparer les résultats.

USE AdventureWorks2012;
GO
SELECT COUNT(*) AS BeforeTruncateCount
FROM Person.Person;
GO
TRUNCATE TABLE Person.Person;
GO
SELECT COUNT(*) AS AfterTruncateCount
FROM Person.Person;
GO

Soulignons quelques avantages.

La TRUNCATE TABLE La commande supprime toutes les lignes d'une table en libérant les pages de données utilisées pour stocker les données de la table. Une fois l'opération terminée, la table contient zéro page. Il n'effectue aucune journalisation pour les suppressions de lignes individuelles. La commande enregistre la désallocation de page dans le journal des transactions. Le TRUNCATE La commande utilise moins d'espace dans le journal. Moins de serrures sont généralement utilisées. La commande supprime toutes les lignes d'une table, mais la structure de la table et ses colonnes, contraintes, index, etc. sont conservés. Pour supprimer le tableau. vous devez utiliser DROP TABLE .

Si une table contient une colonne d'identité, le compteur de cette colonne est réinitialisé à la valeur de départ définie pour la colonne. Si aucune graine n'a été définie, la valeur par défaut 1 est utilisée. Pour conserver le compteur d'identité, utilisez SUPPRIMER à la place.

Suppression de toutes les lignes à l'aide de DELETE

L'exemple suivant supprime toutes les lignes de la table Person :

DELETE FROM Person.Person;
GO

SUPPRIMER supprime les lignes une par une. La commande ajoute le nouvel enregistrement au journal des transactions pour chaque ligne supprimée. SUPPRIMER utilise un verrou de ligne lors de l'exécution, ce qui signifie que chaque ligne de la table est verrouillée pour la suppression. Une fois SUPPRIMER est exécuté, une table peut encore contenir des pages de données vides. Par exemple, les pages vides dans le tas ne peuvent pas être désallouées sans au moins un verrou de table exclusif (LCK_M_X). SUPPRIMER et TRUNCATE les deux peuvent être annulés lorsqu'ils sont utilisés avec TRANSACTION .

Lire aussi

Différence entre DELETE et TRUNCATE Table dans SQL Server