TRUNCATE vs DELETE : comprendre la différence Quand tu veux “vider” une table en SQL, tu as deux options principales : DELETE et TRUNCATE. Les deux peuvent sembler similaires, mais ils n’ont pas du tout le même comportement (performance, journalisation, contraintes, auto-incrément, triggers…). ℹ️ Résumé rapide DELETE supprime des lignes (avec filtre possible) et respecte les contraintes ligne par ligne. TRUNCATE “réinitialise” la table (très rapide) mais est plus strict avec les clés étrangères. DELETE : supprimer des lignes DELETE supprime des lignes une par une (logiquement), peut être filtré et déclenche les contraintes et triggers associés. Supprimer une ligne précise DELETE FROM clients WHERE id = 42; Supprimer plusieurs lignes (avec condition) DELETE FROM clients WHERE actif = 0; Supprimer toutes les lignes (sans condition) DELETE FROM clients; ⚠️ Attention Un DELETE sans WHERE supprime toutes les lignes. Vérifie toujours ta requête avant exécution. Ce que DELETE implique ✅ Peut supprimer partiellement une table (avec WHERE) ✅ Respecte les contraintes, peut déclencher des actions ON DELETE (CASCADE/RESTRICT/SET NULL…) ✅ Déclenche les triggers BEFORE DELETE / AFTER DELETE (si présents) ⚠️ Peut être plus lent sur de très grosses tables ⚠️ L’auto-incrément n’est pas forcément réinitialisé (dépend du SGBD / paramétrage) TRUNCATE : vider une table très rapidement TRUNCATE vide une table en une opération. Dans beaucoup de SGBD (MySQL/MariaDB), c’est proche d’un “reset” de la table (suppression physique / réinitialisation). Vider la table TRUNCATE TABLE clients; Ce que TRUNCATE implique ✅ Très rapide (surtout sur gros volumes) ✅ Réinitialise généralement l’auto-incrément (AUTO_INCREMENT) ⚠️ Ne permet pas de filtrer : pas de WHERE ⚠️ Peut être bloqué par des clés étrangères ⚠️ Selon le SGBD, les triggers DELETE ne se déclenchent pas (souvent le cas) 💡 Astuce Utilise TRUNCATE pour des tables temporaires, caches, logs, tables de test… quand tu veux repartir “à zéro” vite. TRUNCATE et clés étrangères : pourquoi ça bloque ? Si une table est référencée par une clé étrangère (une autre table pointe vers elle), un TRUNCATE peut échouer. Exemple : Exemple de schéma -- Table parent CREATE TABLE clients ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, nom VARCHAR(120) NOT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB; -- Table enfant (référence clients) CREATE TABLE commandes ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, client_id INT UNSIGNED NOT NULL, total DECIMAL(10,2) NOT NULL DEFAULT 0, PRIMARY KEY (id), CONSTRAINT fk_commandes_clients FOREIGN KEY (client_id) REFERENCES clients(id) ) ENGINE=InnoDB; Si tu fais : TRUNCATE TABLE clients; Tu risques un blocage car commandes.client_id dépend de clients.id. ⚠️ Attention Même si commandes est vide, le simple fait d’avoir une contrainte peut empêcher TRUNCATE selon la…
← Retour
Truncate VS Delete
DELETE ou TRUNCATE, c’est loin d’être pareil.
Dans cet article, tu vois quand supprimer ligne par ligne (DELETE) ou vider une table en un éclair (TRUNCATE), ce que ça change sur l’auto-incrément, les contraintes et les triggers, et surtout comment gérer les clés étrangères : les désactiver proprement, tronquer tes tables, puis les réactiver sans casser l’intégrité.
🔒
Accès complet réservé aux membres
Connecte-toi pour lire l’article en entier.
Section SQL
Autres articles de cette section.
CRUD
Maîtrise l’essentiel de toute application : le CRUD. En quelques minutes, découvre à quoi il sert, comment le mettre en place proprement, et des exemples SQL concrets pour créer, lire, modifier et supprimer tes données — étape par étape.
Lecture partielleLire →
Base de donnée (BDD)
Une base de données, c’est ce qui rend ton projet fiable : stockage, recherche, cohérence, performance et sécurité. Dans cet article, tu vas comprendre à quoi ça sert, comment la mettre en place, et surtout comment créer un utilisateur limité à une seule base (MySQL/MariaDB + bonus PostgreSQL), avec des exemples prêts à l’emploi.
Lecture partielleLire →
Sections
Clique sur un rond pour ouvrir le dernier article publié de la section.