Maison  >  Article  >  base de données  >  Pourquoi ne puis-je pas supprimer une table avec des contraintes de clé étrangère à l'aide de plusieurs requêtes ?

Pourquoi ne puis-je pas supprimer une table avec des contraintes de clé étrangère à l'aide de plusieurs requêtes ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-04 17:32:02967parcourir

Why Can't I Drop a Table with Foreign Key Constraints Using Multiple Queries?

Échec de la contrainte de clé étrangère erronée

Lors de la tentative de suppression d'une table nommée zone d'une base de données, un message d'erreur a été rencontré indiquant une clé étrangère échec de contrainte. Bien que toutes les autres tables ayant des relations de clé étrangère avec la zone aient été supprimées, la contrainte a continué à persister.

Raisons possibles

InnoDB, le moteur de stockage utilisé par la base de données, ne permet généralement pas aux clés étrangères de référencer des tables en dehors du schéma actuel. Par conséquent, il était curieux de savoir pourquoi les contraintes de clé étrangère empêchaient toujours la suppression de la table de zone.

Solution

Après une enquête plus approfondie, il a été découvert que certains outils de base de données, tel que MySQL Query Browser ou phpMyAdmin, ouvrez une nouvelle connexion pour chaque requête. Ce comportement empêche la propagation des modifications sur plusieurs requêtes. Pour résoudre le problème, il est nécessaire d'exécuter toutes les instructions drop au sein d'une seule requête :

SET FOREIGN_KEY_CHECKS=0;  -- Disable foreign key checks
DROP TABLE my_first_table_to_drop;
DROP TABLE my_second_table_to_drop;
SET FOREIGN_KEY_CHECKS=1;  -- Re-enable foreign key checks

La désactivation des vérifications de clé étrangère permet la suppression des tables impliquées dans des relations de clé étrangère sans déclencher l'erreur de contrainte. La réactivation ultérieure des vérifications de clés étrangères garantit l'intégrité de la base de données pour les opérations futures.

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