Maison > base de données > tutoriel mysql > TRUNCATE ou DELETE en SQL : quand utiliser lequel ?

TRUNCATE ou DELETE en SQL : quand utiliser lequel ?

Susan Sarandon
Libérer: 2025-01-15 10:33:46
original
633 Les gens l'ont consulté

TRUNCATE vs. DELETE in SQL: When to Use Which?

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 :

  • SQL Server et PostgreSQL : TRUNCATE et DELETE prennent en charge les restaurations.
  • Oracle : 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 :

  • Oracle : 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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal