TRUNCATE TABLE – Vider une table
Bonne lecture et bon apprentissage !
Junior TSAFACK – 08/08/2026
⏱️ Temps de lecture estimé : 4 minutes
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 vider la table. Cette instruction diffère de la commande DROP qui a pour but de supprimer les données ainsi que la table qui les contient.
Bon à savoir : L’instruction
TRUNCATEest semblable à l’instructionDELETEsans utilisation deWHERE. Parmi les petites différences,TRUNCATEest toutefois plus rapide et utilise moins de ressources. Ces gains en performance se justifient notamment parce que la requête n’indiquera pas le nombre d’enregistrements supprimés et qu’il n’y aura pas d’enregistrement des modifications dans le journal de transaction.
Syntaxe
Section titled “Syntaxe”Cette instruction s’utilise dans une requête SQL semblable à celle-ci :
TRUNCATE TABLE nom_table;Dans cet exemple, toutes les données de la table « nom_table » seront perdues une fois cette requête exécutée, mais la structure de la table (colonnes, index, contraintes) reste intacte.
Exemple concret
Section titled “Exemple concret”Pour montrer un exemple concret de l’utilisation de cette commande, imaginons 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;Résultat : 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. La table existe toujours et peut accueillir de nouvelles données.
SELECT * FROM fourniture;-- Résultat : 0 ligne(s) retournée(s)DELETE vs TRUNCATE
Section titled “DELETE vs TRUNCATE”| Critère | DELETE | TRUNCATE |
|---|---|---|
| Vitesse | Plus lent (suppression ligne par ligne) | Plus rapide (supprime les pages de données) |
| Condition WHERE | Peut utiliser WHERE |
Non (supprime toutes les lignes) |
| Transactions | Peut être annulé (ROLLBACK) | Peut être annulé (dans la plupart des SGBD) |
| Déclencheurs | Déclenche les triggers DELETE |
Ne déclenche pas les triggers |
| Compteur AUTO_INCREMENT | Ne le réinitialise pas | Le réinitialise généralement |
| Verrouillage | Verrouille les lignes une par une | Verrouille la table entière |
| Journal de transaction | Enregistre chaque suppression | Enregistre seulement la libération des pages |
| Espace disque | Ne le libère pas toujours | Libère l’espace disque |
| Nombre de lignes supprimées | Indiqué dans le résultat | Non indiqué (retourne 0) |
Avantages de TRUNCATE
Section titled “Avantages de TRUNCATE”-
Performance :
TRUNCATEest beaucoup plus rapide queDELETEsur de grandes tables car il supprime des pages de données entières plutôt que ligne par ligne. -
Réinitialisation des identifiants : Dans la plupart des SGBD,
TRUNCATEréinitialise le compteurAUTO_INCREMENT(ouSERIAL,IDENTITY) à sa valeur initiale. -
Libération d’espace :
TRUNCATElibère l’espace disque alloué à la table, ce qui peut être utile pour récupérer de l’espace de stockage. -
Moins de logs :
TRUNCATEgénère moins d’entrées dans le journal de transaction, ce qui peut être avantageux sur les systèmes avec des contraintes de performance.
Limitations de TRUNCATE
Section titled “Limitations de TRUNCATE”-
Impossible avec des contraintes de clé étrangère : Si une table est référencée par une clé étrangère, la plupart des SGBD n’autorisent pas
TRUNCATEsur cette table. Il faut d’abord supprimer les contraintes ou les lignes référencées. -
Pas de condition WHERE : Impossible de ne supprimer qu’une partie des données. Si vous avez besoin d’une condition, utilisez
DELETE. -
Pas de déclencheurs : Les triggers
DELETEne sont pas déclenchés parTRUNCATE. Si votre application dépend de ces triggers, utilisezDELETE. -
Permissions : Certains SGBD exigent des permissions spécifiques pour
TRUNCATE(parfois plus restrictives que pourDELETE).
Bonnes pratiques
Section titled “Bonnes pratiques”1. Utiliser TRUNCATE pour vider des tables temporaires
Section titled “1. Utiliser TRUNCATE pour vider des tables temporaires”-- Créer une table temporaireCREATE TEMPORARY TABLE tmp_data AS SELECT * FROM source WHERE condition;
-- Traiter les données-- ...
-- Vider la table temporaire après utilisationTRUNCATE TABLE tmp_data;2. Sauvegarder avant un TRUNCATE
Section titled “2. Sauvegarder avant un TRUNCATE”-- Créer une sauvegarde avant de vider la tableCREATE TABLE fourniture_backup AS SELECT * FROM fourniture;
TRUNCATE TABLE fourniture;3. Utiliser dans une transaction (pour pouvoir annuler)
Section titled “3. Utiliser dans une transaction (pour pouvoir annuler)”START TRANSACTION;
TRUNCATE TABLE fourniture;
-- Vérifier le résultat (la table est vide)SELECT COUNT(*) FROM fourniture;
-- Valider ou annulerCOMMIT;-- ou ROLLBACK;4. Attention aux clés étrangères
Section titled “4. Attention aux clés étrangères”Si votre table est référencée par une autre table, vous ne pourrez pas utiliser TRUNCATE dans la plupart des SGBD :
-- ❌ Échoue si la table est référencéeTRUNCATE TABLE categorie;
-- ✅ Solution : supprimer les références d'abordDELETE FROM produit WHERE categorie_id IN (SELECT id FROM categorie);TRUNCATE TABLE categorie;Cas particulier : TRUNCATE avec RESTART IDENTITY / CONTINUE IDENTITY
Section titled “Cas particulier : TRUNCATE avec RESTART IDENTITY / CONTINUE IDENTITY”Certains SGBD (comme PostgreSQL) offrent des options supplémentaires :
-- PostgreSQL : réinitialiser les identifiantsTRUNCATE TABLE fourniture RESTART IDENTITY;
-- PostgreSQL : ne pas réinitialiser les identifiantsTRUNCATE TABLE fourniture CONTINUE IDENTITY;Prochain chapitre
Section titled “Prochain chapitre”Vous savez désormais comment vider rapidement une table avec TRUNCATE TABLE. Il est maintenant temps de passer à la création et la gestion des bases de données et des tables elles-mêmes.
👉 Chapitre 26 : CREATE DATABASE – Créer une base de données
Bonne continuation !
Junior TSAFACK – 08/08/2026