Skip to content

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 TRUNCATE est semblable à l’instruction DELETE sans utilisation de WHERE. Parmi les petites différences, TRUNCATE est 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.


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.


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)

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)

  1. Performance : TRUNCATE est beaucoup plus rapide que DELETE sur de grandes tables car il supprime des pages de données entières plutôt que ligne par ligne.

  2. Réinitialisation des identifiants : Dans la plupart des SGBD, TRUNCATE réinitialise le compteur AUTO_INCREMENT (ou SERIAL, IDENTITY) à sa valeur initiale.

  3. Libération d’espace : TRUNCATE libère l’espace disque alloué à la table, ce qui peut être utile pour récupérer de l’espace de stockage.

  4. Moins de logs : TRUNCATE gé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.


  1. 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 TRUNCATE sur cette table. Il faut d’abord supprimer les contraintes ou les lignes référencées.

  2. Pas de condition WHERE : Impossible de ne supprimer qu’une partie des données. Si vous avez besoin d’une condition, utilisez DELETE.

  3. Pas de déclencheurs : Les triggers DELETE ne sont pas déclenchés par TRUNCATE. Si votre application dépend de ces triggers, utilisez DELETE.

  4. Permissions : Certains SGBD exigent des permissions spécifiques pour TRUNCATE (parfois plus restrictives que pour DELETE).


1. Utiliser TRUNCATE pour vider des tables temporaires

Section titled “1. Utiliser TRUNCATE pour vider des tables temporaires”
-- Créer une table temporaire
CREATE TEMPORARY TABLE tmp_data AS SELECT * FROM source WHERE condition;
-- Traiter les données
-- ...
-- Vider la table temporaire après utilisation
TRUNCATE TABLE tmp_data;
-- Créer une sauvegarde avant de vider la table
CREATE 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 annuler
COMMIT;
-- ou ROLLBACK;

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ée
TRUNCATE TABLE categorie;
-- ✅ Solution : supprimer les références d'abord
DELETE 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 identifiants
TRUNCATE TABLE fourniture RESTART IDENTITY;
-- PostgreSQL : ne pas réinitialiser les identifiants
TRUNCATE TABLE fourniture CONTINUE IDENTITY;

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