L'instruction MySQL TRUNCATE TABLE est une instruction DDL utilisée pour supprimer tous les enregistrements de la table MySQL. Lorsque nous exécutons cette commande, elle supprime d'abord la table existante, puis crée une nouvelle table à l'aide de la définition de table. La séquence d'exécution de la requête de la commande TRUNCATE TABLE est DROP TABLE et CREATE TABLE.
Les caractéristiques de l'instruction TRUNCATE TABLE sont les suivantes :
- Lorsque nous exécutons l'instruction TRUNCATE TABLE au lieu de supprimer des lignes, MySQL supprime la table et la recrée. Elle est plus rapide que l'instruction DELETE, en particulier pour les grandes tables.
- TRUNCATE TABLE contourne les déclencheurs DELETE pour atteindre des performances élevées.
- TRUNCATE TABLE ne peut pas être annulé car il provoque une validation implicite.
- Si vous utilisez des moteurs de stockage compatibles DDL atomique et que le serveur s'arrête pendant les opérations TRUNCATE TABLE, les transactions seront entièrement validées ou annulées.
- Il réinitialise les valeurs des colonnes AUTO_INCREAMENT à la valeur de départ.
- L'instruction TRUNCATE TABLE échoue si vous avez créé des clés étrangères sur les tables InnoDB ou NDB.
- Même si la table ou l'index est corrompu et que la définition de la table est valide, l'instruction TRUNCATE TABLE recrée une table vide.
- L'instruction TRUNCATE TABLE préserve le partitionnement. Les fichiers d'index et les données seront supprimés, mais la définition de la partition ne sera pas affectée.
- Vous pouvez tronquer une table InnoDB corrompue.
- Si vous utilisez un tablespace fichier par table, l'instruction TRUNCATE TABLE supprime le tablespace et en crée un nouveau.
- Nous pouvons utiliser TRUNCATE TABLE dans les tableaux récapitulatifs des schémas de performances, mais cela ne supprime pas les données des tableaux. Il réinitialise les valeurs de la colonne récapitulative à NULL ou à zéro (0).
Différences entre les instructions de table DELETE et TRUNCATE
Sr. | SUPPRIMER l'instruction | Instruction TRUNCATE TABLE |
1 | L'instruction DELETE est une instruction DML. Les modifications sont consignées dans les journaux binaires de la base de données. | TRUNCATE TABLE est une instruction DDL. L'opération n'est pas enregistrée dans les journaux binaires. |
2 | L'opération peut être annulée. | Cette opération ne peut pas être annulée. |
3 | C'est plus lent car les modifications sont enregistrées dans les journaux binaires, les déclencheurs DML sont exécutés. | C'est plus rapide car il supprime la table existante et en crée une nouvelle. |
4 | L'instruction DELETE acquiert le verrou au niveau de la ligne. | TRUNCATE TABLE verrouille les pages de données avant de supprimer les données. |
5 | Vous pouvez supprimer des enregistrements spécifiques en utilisant la clause WHERE | Tronquer le tableau supprime toutes les données du tableau. |
Utilisation de l'instruction TRUNCATE TABLE en pratique
La syntaxe de l'instruction Truncate Table est la suivante :
TRUNCATE TABLE [DatabaseName].[TABLE_NAME]
Remarque :Le nom de la table dont vous souhaitez supprimer l'enregistrement se trouve après TRUNCATE TABLE déclaration. Supposons que vous vouliez tronquer le tblStudent table. La requête doit être la suivante :
TRUNCATE TABLE tblStudent
Pour la démonstration, j'ai installé MySQL 8.0 Server et créé une base de données nommée studentsDB . Là, j'ai créé les tables nommées tblStudent , tblÉcole, et tblStudentCounsiler.
Le script suivant crée la base de données et les tables :
Create database studentDB;
CREATE TABLE studentDB.tblstudent (
studentID integer NOT NULL AUTO_INCREMENT,
StudentName varchar(255) DEFAULT NULL,
StudentGrade char(1) DEFAULT NULL,
SchoolID int,
PRIMARY KEY (studentID)
)
ENGINE = INNODB;
CREATE TABLE studentDB.tblschool (
SchoolID int NOT NULL AUTO_INCREMENT,
SchoolName varchar(255) DEFAULT '',
City varchar(255) DEFAULT '',
PRIMARY KEY (SchoolID)
)
ENGINE = INNODB;
CREATE TABLE studentDB.tblStudentCounsiler (
CounsilerID int NOT NULL AUTO_INCREMENT,
CounsilerName varchar(255) DEFAULT '',
PRIMARY KEY (CounsilerID)
)
ENGINE = INNODB;
J'ai créé une clé étrangère sur le tblStudent table qui référence le SchoolID colonne du tblStudent tableau.
Le script pour créer une clé étrangère est le suivant :
ALTER TABLE studentDB.tblstudent
ADD CONSTRAINT FK_tblstudent_SchoolID FOREIGN KEY (SchoolID)
REFERENCES studentDB.tblschool (SchoolID) ON DELETE NO ACTION;
Le diagramme ER est ci-dessous :
Le script suivant insère les données additionnées dans toutes les tables :
Use studentDB;
insert INTO tblSchool(SchoolName,City) VALUES ('Nalanda School','Mehsana');
insert INTO tblSchool(SchoolName,City) VALUES ('Sarvajanik School','Mehsana');
insert INTO tblSchool(SchoolName,City) VALUES ('Diwan Ballubhai','Ahmedabad');
INSERT INTO tblstudent (StudentName,StudentGrade,SchoolID) VALUES ('Nisarg Upadhyay','A',1);
INSERT INTO tblstudent (StudentName,StudentGrade,SchoolID) VALUES ('Nirali Upadhyay','A',2);
INSERT INTO tblstudent (StudentName,StudentGrade,SchoolID) VALUES ('Manushi Upadhyay','C',3);
INSERT INTO tblstudent (StudentName,StudentGrade,SchoolID) VALUES ('Dixit Upadhyay','B',1);
INSERT INTO tblstudent (StudentName,StudentGrade,SchoolID) VALUES ('Bharti Upadhyay','A',1);
INSERT INTO tblStudentCounsiler (CounsilerName) VALUES ('Raghav Dave');
INSERT INTO tblStudentCounsiler (CounsilerName) VALUES ('Keyur Dalwadi');
INSERT INTO tblStudentCounsiler (CounsilerName) VALUES ('Sawan Panchal');
Voyons maintenant les cas d'utilisation.
Tout d'abord, tronquons le tblStudentCounsiler avec la requête suivante :
mysql> truncate table studentdb.tblStudentCounsiler;
La sortie :
Query OK, 0 rows affected (0.08 sec)
Exécutez l'instruction SELECT pour afficher les données :
mysql> select * from studentdb.tblStudentCounsiler;
Résultat de la requête :
Empty set (0.01 sec)
Comme vous pouvez le voir dans la capture d'écran ci-dessus, la commande a été exécutée avec succès.
Maintenant, essayons de tronquer le tblSchool table avec la requête suivante :
mysql> Truncate table tblSchool;
L'erreur suivante se produit car nous ne pouvons pas tronquer une table référencée par une autre table :
ERROR 1701 (42000): Cannot truncate a table referenced in a foreign key constraint (`studentdb`.`tblstudent`, CONSTRAINT `FK_tblstudent_SchoolID`)
Pour corriger cette erreur, nous devons supprimer la clé étrangère. Exécutez la requête suivante pour le faire :
mysql> ALTER TABLE tblstudent DROP FOREIGN KEY FK_tblstudent_SchoolID;
Résultat de la requête :
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
Une fois la clé étrangère supprimée, exécutez la commande truncate table :
mysql> Truncate table tblSchool;
Résultat de la requête :
Query OK, 0 rows affected (0.08 sec)
Résumé
L'article actuel a présenté l'instruction TRUNCATE TABLE et ses caractéristiques. Nous nous sommes familiarisés avec les différences entre TRUNCATE TABLE et les commandes DELETE, et avons exploré quelques exemples pratiques pour clarifier les concepts.