Maison >base de données >tutoriel mysql >TRUNCATE ou DELETE dans SQL : quand dois-je utiliser lequel ?
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!