Documente Academic
Documente Profesional
Documente Cultură
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
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.
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
=> 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.
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] .
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
Bonjour,
« 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
@++
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