En SQL, la commande TRUNCATE permet de supprimer toutes les données d’une table sans supprimer la table en elle-même. En d’autres mots, cela permet de purger la table. Cette instruction diffère de la commande DROP qui à pour but de supprimer les données ainsi que la table qui les contient.
A noter : l’instruction TRUNCATE est semblable à l’instruction DELETE sans utilisation de WHERE. Parmi les petite différences TRUNCATE est toutefois plus rapide et utilise moins de ressource. Ces gains en performance se justifie notamment parce que la requête n’indiquera pas le nombre d’enregistrement supprimés et qu’il n’y aura pas d’enregistrement des modifications dans le journal.
Syntaxe
Cette instruction s’utilise dans une requête SQL semblable à celle-ci :
TRUNCATE TABLE `table`
Dans cet exemple, les données de la table “table” seront perdues une fois cette requête exécutée.
Exemple
Pour montrer un exemple concret de l’utilisation de cette commande, nous pouvons imaginez un système informatique contenant la liste des fournitures d’une entreprise. Ces données seraient tout simplement stockées dans une table “fourniture”.
Table “fourniture” :
id | nom | date_ajout |
---|---|---|
1 | Ordinateur | 2013-04-05 |
2 | Chaise | 2013-04-14 |
3 | Bureau | 2013-07-18 |
4 | Lampe | 2013-09-27 |
Il est possible de supprimer toutes les données de cette table en utilisant la requête suivante :
TRUNCATE TABLE `fourniture`
Une fois la requête exécutée, la table ne contiendra plus aucun enregistrement. En d’autres mots, toutes les lignes du tableau présenté ci-dessus auront été supprimées.
Différence entre TRUNCATE et DELETE
La commande TRUNCATE s’avère être similaire à la commande DELETE, lorsqu’elle est utilisée de la façon suivante :
DELETE FROM `fourniture`
Il y a toutefois une différence notable : la commande TRUNCATE va ré-initialiser la valeur de l’auto-incrément, s’il y en a un.
Dès lors, il faut potentiellement noter la valeur de l’auto-incrément avant de faire un TRUNCATE, surtout s’il faut ré-indiquer l’ancienne valeur après avoir écrasé toutes les données.