Mysql:truncate
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
TRUNCATEréinitialise le compteurAUTO_INCREMENT;DELETE FROM table(sansWHERE) ne le réinitialise pas systématiquement.TRUNCATEest une opération DDL implicitement validée (commit automatique) : elle ne peut pas être annulée par unROLLBACK, contrairement à unDELETEexécuté dans une transaction InnoDB.TRUNCATEest 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
- Mysql:drop — supprimer une table, structure comprise
- Mysql:GRANT
- Mysql — panorama général MySQL/MariaDB