Mysql:truncate

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Type Commande SQL MySQL (TRUNCATE TABLE)
Voir aussi Mysql:drop · Mysql

TRUNCATE TABLE vide entièrement une table en une seule opération : plus rapide qu'un DELETE FROM sans condition, mais avec des différences de comportement importantes.

Syntaxe

TRUNCATE TABLE nom_table;

TRUNCATE vs DELETE

  • TRUNCATE réinitialise le compteur AUTO_INCREMENT ; DELETE FROM table (sans WHERE) ne le réinitialise pas systématiquement.
  • TRUNCATE est une opération DDL implicitement validée (commit automatique) : elle ne peut pas être annulée par un ROLLBACK, contrairement à un DELETE exécuté dans une transaction InnoDB.
  • TRUNCATE est bloqué par les clés étrangères (FOREIGN KEY) référençant la table, sauf à désactiver temporairement leur vérification.

Exemples

Vider une table référencée par des clés étrangères

SET FOREIGN_KEY_CHECKS=0;
TRUNCATE TABLE nom_table;
SET FOREIGN_KEY_CHECKS=1;

⚠️ Désactiver FOREIGN_KEY_CHECKS lève seulement le blocage : ça ne supprime pas les lignes orphelines dans les tables qui référencent celle qu'on vide. À réserver aux cas où l'on truncate aussi les tables liées, ou où l'on sait précisément ce qu'on fait.

Générer les commandes TRUNCATE pour toutes les tables de plusieurs bases

Utile pour préparer un script de remise à zéro (environnement de test, par exemple) :

SELECT CONCAT('TRUNCATE TABLE ', table_schema, '.', TABLE_NAME, ';')
FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema IN ('nom_base1', 'nom_base2');

La requête ne fait que générer le texte des commandes (colonne résultat) — il faut ensuite exécuter la sortie obtenue.

Voir aussi