Maison >base de données >tutoriel mysql >Quelle est la différence entre TRUNCATE et DELETE en SQL ?

Quelle est la différence entre TRUNCATE et DELETE en SQL ?

DDD
DDDoriginal
2025-01-15 08:42:45676parcourir

What's the Difference Between TRUNCATE and DELETE in SQL?

Explication détaillée de la différence entre TRUNCATE et DELETE en SQL

Lors de la suppression de données dans une table de base de données, il existe deux options principales : TRUNCATE et DELETE. Bien que les deux commandes puissent supprimer des lignes, elles présentent des caractéristiques différentes qui nécessitent un examen attentif.

Aperçu

Si l'objectif est de supprimer rapidement toutes les lignes de la table et qu'aucune contrainte de clé étrangère ne bloque l'opération, TRUNCATE est plus rapide que DELETE. Toutefois, des facteurs spécifiques au système peuvent modifier cette dynamique.

Types de déclarations et exécution

Contrairement à la nature DML (Data Manipulation Language) de DELETE, TRUNCATE appartient au DDL (Data Definition Language). Cette différence fondamentale affecte leur comportement et leur signification.

Commit et rollback

La possibilité d'annuler les déclarations dépend de la plate-forme. Alors que certaines implémentations autorisent l'annulation des opérations de troncature, d'autres implémentations, en particulier celles utilisant une approche DDL, interdisent l'annulation.

Recyclage spatial

Une différence clé est leur impact sur l’espace de stockage. DELETE supprime uniquement les lignes, tandis que TRUNCATE effectue un processus complet de récupération d'espace qui peut libérer une grande quantité d'espace disque.

Plage de fonctionnement

TRUNCATE supprime toutes les lignes d'un tableau à la fois, tandis que DELETE offre la possibilité de sélectionner des lignes spécifiques à supprimer.

Type d'objet

TRUNCATE s'applique généralement aux tables, tandis que DELETE peut fonctionner à la fois sur les tables et les clusters de tables (si disponible).

Identifiant de l'objet de données

Dans certaines implémentations, TRUNCATE attribue un nouvel identifiant d'objet de données à la table, tandis que DELETE ne l'affecte pas.

Flashback et annulation

La technologie Flashback (conçue pour récupérer les données perdues) peut être utilisée avec suppression, mais pas avec troncature.

Autorisations

Les mécanismes d'autorisation peuvent varier selon les implémentations. Par exemple, l'octroi de l'autorisation DELETE sur une table est autorisé, mais la troncature de la table peut nécessiter des autorisations plus élevées.

Rétablir et annuler la génération de journaux

TRUNCATE génère très peu d'entrées de journal de rétablissement et d'annulation par rapport aux journaux massifs générés par DELETE.

Impact de l'indice

Dans certains cas, TRUNCATE peut rendre à nouveau disponible un index indisponible, alors que DELETE n'a pas cette fonctionnalité.

Clés étrangères et verrouillage de table

La troncature peut ne pas être autorisée pour les tables avec des références de clé étrangère activées. La dynamique du verrouillage des tables varie également, TRUNCATE nécessitant généralement un verrou exclusif, tandis que DELETE peut utiliser un verrou partagé.

Déclencheur

Les déclencheurs DML (exécutés en réponse aux instructions de manipulation de données) ne se déclencheront pas pendant la troncature.

Exécution à distance

Certaines implémentations (telles qu'Oracle) limitent la possibilité d'exécuter des instructions TRUNCATE sur un lien de base de données.

Colonne auto-ajoutée

Dans certaines implémentations, tronquer une table avec des colonnes auto-incrémentées réinitialise la séquence de ces colonnes, contrairement à DELETE.

Ensemble de résultats

DELETE peut renvoyer les lignes supprimées au client, tandis que TRUNCATE n'a pas cette fonctionnalité.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn