Maison >base de données >tutoriel mysql >Comment tronquer des tables avec des contraintes de clé étrangère dans MySQL ?

Comment tronquer des tables avec des contraintes de clé étrangère dans MySQL ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-18 07:10:02497parcourir

How to Truncate Tables with Foreign Key Constraints in MySQL?

Tronquer des tables avec des contraintes de clé étrangère

Tronquer une table avec des contraintes de clé étrangère peut être difficile. Imaginez que vous tentiez de tronquer la table mygroup, pour ensuite rencontrer l'erreur :

ERROR 1701 (42000): Cannot truncate a table referenced in a foreign key constraint (mytest.instance, CONSTRAINT instance_ibfk_1 FOREIGN KEY (GroupID) REFERENCES mytest.mygroup (ID))

Schéma de base de données :

CREATE TABLE mygroup (
   ID    INT NOT NULL AUTO_INCREMENT PRIMARY KEY
) ENGINE=InnoDB;

CREATE TABLE instance (
   ID           INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
   GroupID      INT NOT NULL,
   DateTime     DATETIME DEFAULT NULL,

   FOREIGN KEY  (GroupID) REFERENCES mygroup(ID) ON DELETE CASCADE,
   UNIQUE(GroupID)
) ENGINE=InnoDB;

Désactivation des vérifications de clé étrangère :

La méthode conventionnelle pour tronquer une table avec des contraintes de clé étrangère est de les désactiver temporairement :

SET FOREIGN_KEY_CHECKS = 0;

TRUNCATE mygroup;
TRUNCATE instance;

SET FOREIGN_KEY_CHECKS = 1;

Attention : La désactivation des vérifications de clé étrangère autorise les données qui violent les contraintes à insérer dans les tableaux. Cela peut entraîner des problèmes d'intégrité des données.

Envisagez des alternatives :

Si possible, envisagez d'utiliser une instruction DELETE au lieu de TRUNCATE :

DELETE FROM mygroup;
DELETE FROM instance;

DELETE supprime tous les enregistrements des tables tout en respectant les contraintes de clé étrangère. Cependant, son exécution prend plus de temps que TRUNCATE.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn