TRUNCATE et DELETE de SQL : une comparaison détaillée
SQL propose deux commandes distinctes pour supprimer des lignes de tableau : TRUNCATE
et DELETE
. Bien que les deux parviennent à supprimer les données, ils diffèrent considérablement en termes de vitesse, de flexibilité et d’impact sur les opérations de base de données. Choisir la bonne commande est essentiel pour une gestion efficace de la base de données.
Différences clés en un coup d'œil
Pour une suppression rapide et complète des rangées, TRUNCATE
est généralement plus rapide. Cependant, DELETE
offre un contrôle plus granulaire, permettant la suppression sélective de lignes. Le choix dépend de vos besoins spécifiques et de votre système de base de données.
Classification des déclarations
DELETE
est une commande Data Manipulation Language (DML), tandis que TRUNCATE
est une commande Data Definition Language (DDL). Cette différence fondamentale influence leur comportement et leurs capacités.
Gestion des transactions (validation et restauration)
La prise en charge de la restauration varie selon les systèmes de base de données :
TRUNCATE
et DELETE
prennent en charge les restaurations.TRUNCATE
ne peut pas être annulé (en raison de sa nature DDL), même si l'opération échoue.Espace de stockage
TRUNCATE
récupère l'espace de stockage physique utilisé par les lignes supprimées. DELETE
ne le fait pas, laissant l'espace disponible pour la réutilisation mais ne le libérant pas immédiatement.
Sélection de lignes
DELETE
permet la suppression sélective de lignes à l'aide des clauses WHERE
. TRUNCATE
supprime toutes lignes sans condition.
Types d'objets applicables
DELETE
fonctionne sur les tables et les tables cluster. TRUNCATE
fonctionne principalement sur des tables (des variations spécifiques au système peuvent exister).
Identité de l'objet de données (spécifique à Oracle)
Dans Oracle, DELETE
conserve l'ID de l'objet de données, tandis que TRUNCATE
attribue de nouveaux ID à moins que la table ne soit entièrement vide.
Récupération de données (Flashback - Spécifique à Oracle)
La fonctionnalité flashback d'Oracle permet la récupération des données après une DELETE
opération, mais pas après une TRUNCATE
.
Privilèges requis
Les exigences en matière de privilèges diffèrent :
DELETE
nécessite DELETE
privilèges, tandis que TRUNCATE
a besoin de DROP ANY TABLE
privilèges.Journalisation (Rétablir/Annuler)
TRUNCATE
génère un minimum de journaux de rétablissement et d'annulation, ce qui permet une exécution plus rapide. DELETE
génère beaucoup plus.
Gestion des index (spécifique à Oracle)
Dans Oracle, TRUNCATE
reconstruit automatiquement les index désactivés. DELETE
ne le fait pas.
Contraintes des clés étrangères
TRUNCATE
échouera si des contraintes de clé étrangère faisant référence à la table existent. DELETE
le comportement dépend de la configuration de la clé étrangère.
Verrouillage
TRUNCATE
nécessite un verrou de table exclusif, tandis que DELETE
utilise un verrou partagé. Cela peut avoir un impact sur la simultanéité.
Déclencheurs
Les déclencheurs DML ne sont pas déclenchés par TRUNCATE
. Oracle, cependant, prend en charge les déclencheurs DDL.
Exécution à distance (spécifique à Oracle)
Oracle n'autorise pas TRUNCATE
l'exécution via des liens de base de données.
Colonnes d'identité (spécifiques à SQL Server)
Dans SQL Server, TRUNCATE
réinitialise IDENTITY
les séquences de colonnes, contrairement à DELETE
.
Ensemble de résultats
DELETE
renvoie généralement le nombre de lignes concernées. TRUNCATE
ne le fait généralement pas.
En comprenant ces différences critiques, vous pouvez sélectionner la commande optimale pour votre tâche spécifique de manipulation de données SQL, maximisant ainsi l'efficacité et l'intégrité des données.
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!