Voir tout
← 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é.
SQL 22/02/2026
Truncate VS Delete

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…

🔒
Accès complet réservé aux membres
Connecte-toi pour lire l’article en entier.
Sections
Clique sur un rond pour ouvrir le dernier article publié de la section.
Tous les articles