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 ?
É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!