MySQL :: MySQL 8.0 Reference Manual :: 13.1.37 TRUNCATE TABLE Statement (Français)

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 TABLEsoit 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 un InnoDB table ou NDB table s’il y a des FOREIGN 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 avecTRUNCATE 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 pour MyISAM Et InnoDB, 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évaloir ON DELETE déclencheurs.

  • tronquer une tableInnoDB 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.

Share

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *