Maison  >  Article  >  base de données  >  Pourquoi ne puis-je pas supprimer cette table ? La contrainte de clé étrangère échoue même s’il n’y en a pas !

Pourquoi ne puis-je pas supprimer cette table ? La contrainte de clé étrangère échoue même s’il n’y en a pas !

DDD
DDDoriginal
2024-11-05 00:37:02486parcourir

Why Can't I Drop This Table? Foreign Key Constraint Fails Even Though There Are None!

Énigme d'échec de contrainte de clé étrangère bidon

Lorsque vous essayez de supprimer une table, vous rencontrez le message d'erreur énigmatique : "Impossible de supprimer ou de mettre à jour un ligne parent : une contrainte de clé étrangère échoue." Ce problème déroutant se pose malgré la confirmation de l'absence de toute référence de clé étrangère dans la base de données.

L'examen de la structure de la table révèle qu'elle possède une clé primaire sur la colonne "area_id" et une clé unique sur la colonne "nombre_area". . Il est logique de savoir pourquoi cette table entraverait le processus de suppression, compte tenu de l'absence de toute contrainte de clé étrangère dans la base de données.

Après une exploration plus approfondie, une curieuse découverte est faite : l'utilisation du navigateur de requêtes MySQL ou de phpMyAdmin entraîne la création d'une connexion distincte pour chaque requête, contrairement aux attentes. Cela nécessite l'exécution de toutes les instructions drop dans une seule requête pour résoudre le problème.

L'extrait de code suivant résume cette solution :

SET FOREIGN_KEY_CHECKS=0;
DROP TABLE my_first_table_to_drop;
DROP TABLE my_second_table_to_drop;
SET FOREIGN_KEY_CHECKS=1;

La définition de FOREIGN_KEY_CHECKS sur 0 désactive temporairement les vérifications de clés étrangères, permettant la suppression des tableaux sans interférence. Une fois les tables supprimées, FOREIGN_KEY_CHECKS est remis à 1, garantissant que les futures contraintes de clé étrangère sont appliquées.

Ce comportement particulier met en évidence l'importance de l'utilisation de la commande SET FOREIGN_KEY_CHECKS pour contrôler dynamiquement les contraintes de clé étrangère, en particulier lorsque vous travaillez avec outils de gestion de base de données qui établissent plusieurs connexions par requête.

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