13.1.37 TRUNCATE TABLE Statement
TRUNCATE tbl_name
TRUNCATE TABLE
empties a table completely. It requires the DROP
privilege. Logically, TRUNCATE TABLE
is similar to a DELETE
statement that deletes all rows, or a sequence of DROP TABLE
and CREATE TABLE
statements.,
pour obtenir des performances élevées,TRUNCATE TABLE
contourne la méthode DML de suppression des données. Ainsi, il ne provoque pas le déclenchement des déclencheurs ON DELETE
, il ne peut pas être effectué pour les tables InnoDB
avec des relations de clé étrangère parent-enfant et il ne peut pas être annulé comme une opération DML. Cependant, TRUNCATE TABLE
les opérations sur les tables qui utilisent un moteur de stockage pris en charge par atomic DDL sont entièrement validées ou annulées si le serveur s’arrête pendant leur fonctionnement. Pour plus d’informations, voir la Section 13.1.,1,”Prise En Charge De La Définition Des Données Atomiques ».
bien queTRUNCATE TABLE
soit similaire àDELETE
, il est classé comme une instruction DDL plutôt qu’une instruction DML. Il diffère de DELETE
de la manière suivante:
-
Les opérations tronquées déposent et recréent la table, ce qui est beaucoup plus rapide que la suppression de lignes une par une, en particulier pour les grandes tables.
-
Les opérations tronquées provoquent un commit implicite et ne peuvent donc pas être annulées. Voir Rubrique 13.3.,3, « déclarations qui provoquent un engagement implicite ».
-
Les opérations de troncature ne peuvent pas être effectuées si la session contient un verrou de table actif.
-
TRUNCATE TABLE
échoue pour unInnoDB
table ouNDB
table s’il y a desFOREIGN KEY
contraintes à partir d’autres tables de référence de la table. Les contraintes de clé étrangère entre les colonnes de la même table sont autorisées. -
Les opérations de troncature ne renvoient pas de valeur significative pour le nombre de lignes supprimées., Le résultat habituel est « 0 lignes affectées », ce qui doit être interprété comme » aucune information.”
-
tant que la définition de la table est valide, la table peut être recréée en tant que table vide avec
TRUNCATE TABLE
, même si les données ou les fichiers d’index sont corrompus. -
Tout
AUTO_INCREMENT
valeur est réinitialisée à sa valeur de départ. Cela est vrai même pourMyISAM
EtInnoDB
, qui normalement ne réutilisent pas les valeurs de séquence., -
lorsqu’il est utilisé avec des tables partitionnées,
TRUNCATE TABLE
préserve le partitionnement; c’est-à-dire que les fichiers de données et d’index sont supprimés et recréés, tandis que les définitions de partition ne sont pas affectées. -
Le
TRUNCATE TABLE
instruction de ne pas se prévaloirON DELETE
déclencheurs. -
tronquer une table
InnoDB
corrompue est pris en charge.
TRUNCATE TABLE
pour une table de ferme tous les gestionnaires de la table qui ont été ouvertes avec HANDLER OPEN
.,
TRUNCATE TABLE
est traité, aux fins de journalisation binaire et la réplication DROP TABLE
suivi de CREATE TABLE
—qui est, comme DDL plutôt que de DML. Cela est dû au fait que, lors de l’utilisation de InnoDB
et d’autres moteurs de stockage transactionnels où le niveau d’isolation des transactions ne permet pas la journalisation basée sur les instructions (READ COMMITTED
ou READ UNCOMMITTED
), l’instruction n’a pas été enregistrée>
ouMIXED
mode de journalisation., (Bug # 36763) cependant, il est toujours appliqué sur les répliques utilisant InnoDB
de la manière décrite précédemment.
dans MySQL 5.7 et versions antérieures, sur un système avec un grand pool de tampons etinnodb_adaptive_hash_index
activé, une opérationTRUNCATE TABLE
pourrait provoquer une baisse temporaire des performances du système en raison d’une analyse LRU survenue lors de la suppression des entrées d’index de hachage adaptatif de Le remappage deTRUNCATE TABLE
enDROP TABLE
EtCREATE TABLE
dans MySQL 8.0 évite l’analyse LRU problématique.,
TRUNCATE TABLE
peut être utilisé avec les tableaux récapitulatifs de schéma de Performance, mais l’effet est de réinitialiser les colonnes récapitulatives à 0 ouNULL
, pas de supprimer des lignes. Voir Section 27.12.18, « Tableaux Récapitulatifs Du Schéma De Performance ».
la troncature d’une tableInnoDB
qui réside dans un espace de table fichier par table supprime l’espace de table existant et en crée un nouveau. À partir de MySQL 8.0.,21, si l’espace de table a été créé avec une version antérieure et réside dans un répertoire inconnu, InnoDB
crée le nouvel espace de table à l’emplacement par défaut et écrit l’avertissement suivant dans le journal des erreurs: l’emplacement du répertoire de données doit être dans un répertoire connu. L’emplacement du répertoire de données sera ignoré et le fichier sera placé dans l’emplacement datadir par défaut. Connu répertoires sont celles définies par la balise datadir
, innodb_data_home_dir
et innodb_directories
variables., Pour que TRUNCATE TABLE
crée l’espace de table à son emplacement actuel, ajoutez le répertoire au paramètre innodb_directories
avant d’exécuter TRUNCATE TABLE
.