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
Libérer: 2024-11-18 07:10:02
original
491 Les gens l'ont consulté

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))
Copier après la connexion

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;
Copier après la connexion

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;
Copier après la connexion

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;
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal