358 votes

Ce qui ' la différence entre TRUNCATE et DELETE dans SQL

J’ai écrit une réponse à cette question par erreur en réponse à une question sur la différence entre baisse, TRUNCATE, mais je pense que c’est dommage de ne pas partager alors je posterai ma propre réponse à ma propre question... qui est même éthique ? :)

Edit : Si votre réponse est plateforme spécifique pouvez vous indiquer que.

295voto

David Aldridge Points 27624

Voici ma liste complète. Certaines sont probablement Oracle spécifiques, mais les autres seront généralement applicables. Certains sont évidents, mais encore utile de préciser je pense.

  • Type d'instruction: Supprimer est DML, Tronquer est DDL
  • Commit: Supprimer a pas de validation, un truncate est autocommited (en fait, il y a deux commits, je crois)
  • La récupération de l'espace: Supprimer ne permet pas de récupérer de l'espace, de Tronquer récupère de l'espace (sauf si vous utilisez la RÉUTILISATION de STOCKAGE de la clause)
  • Ligne portée: Supprimer permet de supprimer uniquement certaines lignes. Tronquer supprime toutes les lignes, sauf lorsqu'il est utilisé dans un tel contexte.
  • Les types d'objet: Suppression peut être appliquée à des tables et des tables à l'intérieur d'un cluser. Tronquer s'applique uniquement aux tables ou de l'ensemble du cluster
  • Données d'identification de l'Objet: Suppression n'affecte pas les données d'identification de l'objet, mais tronquer attribue un nouvel objet de données id à moins qu'il n'a jamais été un insert sur la table (même un seul insert qui est annulée sera la cause de nouvelles données à l'id de l'objet à être cédé).
  • Restauration: Dans certaines implémentations (eg. Oracle) truncate ne peut pas être annulée.
  • Flashback: retour de flamme fonctionne à travers les supprime, mais un truncate empêche flashback opérations avant l'opération.
  • Subventions: Supprimer peut être accordée sur un tableau à un autre utilisateur ou un rôle, mais tronquer ne peut pas être sans l'aide d'une liste de n'IMPORTE quelle TABLE de la subvention.
  • Refaire/Défaire: Supprimer génère une petite quantité de refaire et une grande quantité de l'annuler. Tronquer génère une quantité négligeable de chacun.
  • Index: Un tronquer opération rend inutilisable les indices de nouveau utilisables. Supprimer ne fonctionne pas.
  • Les Clés étrangères: Un truncate ne peuvent pas être appliquées lorsqu'un permis de clé étrangère référence la table. Le traitement avec la suppression dépend de la configuration des clés étrangères
  • Verrouillage: Truncate nécessite un verrou de table exclusif, supprimer nécessite un verrou de table partagée.
  • Déclencheurs déclencheurs DML ne pas tirer sur un truncate. (merci Polara)

Euh ... laissez-moi réfléchir ... je vais ajouter plus si je pense à eux. Permettez-moi de savoir si j'ai manqué de tout, et je vais les ajouter et de crédit.

214voto

Bhaumik Patel Points 2063

La différence entre les deux tronquer et delete est mentionné ci-dessous :

enter image description here

24voto

polara Points 1692

Toutes les bonnes réponses, auxquels je dois ajouter :

Étant donné que TRUNCATE TABLE n’est pas une commande DML, les déclencheurs delete ne courez pas.

20voto

mathieu Points 17729

Avec SQL Server, s’il y a un PK avec incrémentation automatique, sera tronquée réinitialiser le compteur

12voto

Walter Mitty Points 8726

"Truncate ne log rien" est correct. J'irais plus loin:

Tronquer n'est pas exécuté dans le contexte d'une transaction.

L'avantage de vitesse de tronquer sur supprimer devrait être évident. Cet avantage varie de trivial énorme, selon votre situation.

Cependant, j'ai vu tronquer involontairement rupture de l'intégrité référentielle, et de la violation d'autres contraintes. La puissance que vous gagner par la modification des données en dehors d'une transaction doit être équilibré contre la responsabilité que vous héritez lorsque vous marcher sur la corde raide sans filet.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X