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!