Vous êtes sur la page 1sur 2

17/04/2019 Quelle différences y-a-t-il entre TRUNCATE et DELETE ?

| Le Blog SQL Server d'ElSüket

FORUMS TUTORIELS MAGAZINE FAQ BLOGS CHAT NEWSLETTER ÉTUDES EMPLOI CLUB

ALM Java .NET Dév. Web EDI Programmation SGBD Office Solutions d'entreprise Applications Mobiles Systèmes

TUTORIELS FAQ LIVRES TÉLÉCHARGEMENTS SOURCES DÉBATS WIKI DICO CALENDRIER HUMOUR

Newsletter Developpez.com

Inscrivez-vous gratuitement au Club pour recevoir


la newsletter hebdomadaire des développeurs et IT pro

Le Blog SQL Server d'ElSüket


Nicolas Souquet – Expert SQL Server

Quelle différences y-a-t-il entre TRUNCATE et DELETE ?


Contacter le responsable de la rubrique Accueil

PubliéParticipez
Nous contacter le 21 mai Hébergement
2010
Informations légales
Partenaire : Hébergement Web
TRUNCATE et DELETE peuvent avoir le même effet sur une table si le DELETE n’a pas de clause WHERE.
Copyright © 2000-2019 - www.developpez.com
Mais est-ce bien la même chose qui se passe au niveau des données ?

En réalité, ces deux instructions ont bien des éléments qui les différencient :

=> TRUNCATE est une instruction DDL, alors que DELETE est une instruction DML.
Conséquence directe : TRUNCATE ne peut pas avoir de clause WHERE.

=> TRUNCATE ne peut pas être exécuté :

1. sur une table disposant de contraintes d’intégrité (clé primaire référencée par au moins une table, et clés étrangères)
2. sur une table qui est répliquée
3. dans une base de données répliquée par envoi de journaux

DELETE peut l’être si les contraintes d’intégrité restent respectées.

=> TRUNCATE ne déclenche pas un trigger sur DELETE, ce qui est le cas pour DELETE.
Donc l’utilisation de TRUNCATE peut causer des problèmes de consistance des données, car si l’on a supprimé les contraintes d’intégrité
pour pouvoir exécuter un TRUNCATE, le traitement du trigger sur DELETE ne sera pas exécuté non plus.

=> TRUNCATE enregistre dans le fichier du journal des transactions les pages de données désallouées, et supprime les pointeurs des
index.
C’est ce qui fait que TRUNCATE est plus rapide à s’exécuter que DELETE : TRUNCATE utilise très peu de verrous par rapport à
DELETE, qui nécessite dont plus de ressources disque.
En effet, DELETE enregistre dans le fichier du journal des transactions toutes les données de chaque ligne affectée par l’instruction.
En realité donc, TRUNCATE n’efface pas les données contenues dans les pages, mais marque celles-ci comme réutilisables.
DELETE en revanche supprime physiquement les données.

=> En conséquence, les données supprimées par un DELETE sont restaurables; les données « supprimées » par un TRUNCATE ne le
sont pas.

=> TRUNCATE réinitialise la valeur d’une colonne de type entier avec la propriété d’auto-incrémentation (IDENTITY). DELETE laisse
cette valeur inchangée.

Et bonne suppression de données

ElSüket.

Ce contenu a été publié dans Moteur de base de données SQL Server, T-SQL par elsuket. Mettez-le en favori avec son permalien
[https://blog.developpez.com/elsuket/p8929/moteur-de-base-de-donnees-sql-server/quelle_differences_y_a_t_il_entre_trunca] .

2 RÉFLEXIONS AU SUJET DE « QUELLE DIFFÉRENCES Y-A-T-IL ENTRE TRUNCATE ET DELETE ? »

https://blog.developpez.com/elsuket/p8929/moteur-de-base-de-donnees-sql-server/quelle_differences_y_a_t_il_entre_trunca 1/2
17/04/2019 Quelle différences y-a-t-il entre TRUNCATE et DELETE ? | Le Blog SQL Server d'ElSüket

Le 25 mai 2010 à 7 h 36 min,


elsuket
a dit :

Bonjour,

Je ne suis pas sûr d’avoir bien compris. Quand j’écris :

« TRUNCATE réinitialise la valeur d’une colonne de type entier avec la propriété d’auto-incrémentation (IDENTITY). DELETE
laisse cette valeur inchangée. »

Cela signifie que si la valeur de départ de la propriété IDENTITY a été fixée à 0, alors le TRUNCATE la remet à 0.

Mais si la colonne est d’un autre type que TINYINT, on peut mettre toute autre valeur

@++

Le 25 mai 2010 à 6 h 50 min,


moosh
a dit :

Une différence supplémentaire en MySql : Le truncate remet le compteur de l’autoincrement à 0, pas le delete. (ce qui est logique
à la lecture de l’article)

https://blog.developpez.com/elsuket/p8929/moteur-de-base-de-donnees-sql-server/quelle_differences_y_a_t_il_entre_trunca 2/2