Maison >base de données >tutoriel mysql >TRUNCATE ou DELETE dans SQL : quand dois-je utiliser lequel ?

TRUNCATE ou DELETE dans SQL : quand dois-je utiliser lequel ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-15 06:52:44119parcourir

TRUNCATE vs. DELETE in SQL: When Should I Use Which?

La différence entre TRUNCATE et DELETE en SQL

TRUNCATE et DELETE offrent deux options lors de la suppression de données de table dans SQL. Comprendre leurs différentes caractéristiques est essentiel pour prendre des décisions éclairées.

Aperçu

Si l'objectif est de supprimer rapidement toutes les lignes d'un tableau sans conserver aucune donnée, TRUNCATE est généralement plus rapide que DELETE. Toutefois, des facteurs spécifiques au système doivent également être pris en compte.

Type de relevé

TRUNCATE est classé comme une instruction Data Definition Language (DDL), tandis que DELETE est une instruction Data Manipulation Language (DML). Cette distinction affecte leur comportement dans certains contextes.

Commit et rollback

En fonction du fournisseur de base de données, TRUNCATE peut ou non être annulable. PostgreSQL et SQL*Server permettent d'annuler TRUNCATE, tandis qu'Oracle le traite comme une opération validée.

Recyclage spatial

TRUNCATE récupère l'espace de stockage en libérant les segments de données alloués. DELETE, en revanche, conserve l'espace occupé par les lignes supprimées.

Plage de lignes

TRUNCATE supprime toutes les lignes d'un tableau, tandis que DELETE peut cibler des lignes spécifiques en fonction de conditions.

Type d'objet

TRUNCATE peut être appliqué à une table ou à un cluster entier (spécifique au fournisseur). DELETE fonctionne sur les tables et les tables d'un cluster.

Identifiant de l'objet de données

Dans Oracle, DELETE n'affecte pas l'ID de l'objet de données, mais TRUNCATE attribuera un nouvel ID à moins que des données n'aient été insérées dans la table auparavant.

Flashback (Oracle)

DELETE prend en charge le flashback, permettant de restaurer les données à partir d'un état précédent. TRUNCATE, en revanche, empêche le retour en arrière vers l'état précédant la troncature. Cependant, la fonctionnalité FLASHBACK ARCHIVE d'Oracle 11gR2 peut atténuer ce problème.

Autorisations

La possibilité d'accorder des autorisations TRUNCATE varie selon le fournisseur. Oracle nécessite l'autorisation DROP ANY TABLE, tandis que d'autres systèmes peuvent autoriser l'octroi de cette autorisation à des utilisateurs ou à des rôles spécifiques.

Index

TRUNCATE dans Oracle réactive les index indisponibles. DELETE n’a pas cet effet.

Clé étrangère

TRUNCATE ne peut pas être effectué s'il existe des références de clé étrangère actives à la table. Le comportement de DELETE dépend de la configuration des clés étrangères.

Déclencheur

Les déclencheurs DDL peuvent être activés par des opérations TRUNCATE, tandis que les déclencheurs DML ne seront pas déclenchés.

Exécution à distance

Dans Oracle, TRUNCATE ne peut pas être effectué sur un lien de base de données.

Colonne Identité

Dans SQL*Server, TRUNCATE réinitialise la séquence des colonnes IDENTITY, contrairement à DELETE.

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