web-dev-qa-db-fra.com

Impossible de supprimer une table: une contrainte de clé étrangère échoue

Dans MySQL, je veux supprimer une table.
J'ai essayé beaucoup de choses mais je continue à avoir l'erreur de ne pas supprimer la table nommée bericht C'est l'erreur que j'obtiens:

# 1217 - Impossible de supprimer ou de mettre à jour une ligne parente: une contrainte de clé étrangère échoue

Comment puis-je laisser tomber cette table?

40
roy

Cela devrait faire l'affaire:

SET FOREIGN_KEY_CHECKS=0; DROP TABLE bericht; SET FOREIGN_KEY_CHECKS=1;

Comme d’autres le soulignent, ce n’est presque jamais ce que vous voulez, même si c’est ce qui est demandé dans la question. Une solution plus sûre consiste à supprimer les tables en fonction de bericht avant de supprimer bericht. Voir la réponse de CloudyMarble pour savoir comment faire cela. J'utilise bash et la méthode de mon article pour supprimer toutes les tables d'une base de données lorsque je ne veux pas ou ne peux pas supprimer et recréer la base de données elle-même.

L'erreur #1217 se produit lorsque d'autres tables ont des contraintes de clé étrangère pour la table que vous essayez de supprimer et que vous utilisez le moteur de base de données InnoDB. Cette solution désactive temporairement la vérification des restrictions, puis les réactive. Lisez la documentation pour plus. Assurez-vous de supprimer les restrictions de clé étrangère et les champs dans les tables en fonction de bericht, sinon vous pourriez laisser votre base de données dans un état cassé.

101
Rune Kaagaard

Essaye ça:

SELECT * 
FROM information_schema.KEY_COLUMN_USAGE 
WHERE REFERENCED_TABLE_NAME = 'YourTable';

Cela devrait vous indiquer quelles tables contiennent des références à la table que vous souhaitez supprimer, une fois que vous les supprimez ou aux ensembles de données référençant les ensembles de données de cette table, vous pourrez supprimer la table

58
CloudyMarble

Utilisez show create table tbl_name pour afficher les clés étrangères

Vous pouvez utiliser cette syntaxe pour supprimer une clé étrangère:

ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol

Vous trouverez également d'autres informations ici (voir l'article de Frank Vanderhallen): http://dev.mysql.com/doc/refman/5.5/fr/innodb-foreign-key-constraints.html

6
mihaisimi

Cela a probablement la même table à l'autre schéma la raison pour laquelle vous obtenez cette erreur.

Vous devez d'abord supprimer la ligne enfant, puis la ligne parent.

1
Kip Russel

Je me rends compte que c'est obsolète depuis un moment et qu'une réponse a été choisie, mais que dire de l'option permettant d'autoriser la clé étrangère à êtreNULLpuis de choisir ON DELETE SET NULL .

Fondamentalement, votre table devrait être modifiée comme suit:

ALTER TABLE 'bericht' DROP FOREIGN KEY 'your_foreign_key';

ALTER TABLE 'bericht' ADD CONSTRAINT 'your_foreign_key' FOREIGN KEY ('column_foreign_key') REFERENCES 'other_table' ('column_parent_key') ON UPDATE CASCADE ON DELETE SET NULL;

Personnellement, je recommanderais d'utiliser à la fois "ON UPDATE CASCADE" et "ON DELETE SET NULL" pour éviter des complications inutiles. Toutefois, votre configuration peut imposer une approche différente.

J'espère que cela t'aides.

0
Marius Cucuruz