2012-06-19 8 views
32

MySQLではテーブルを削除します。
私はたくさんのことを試みましたが、berichtという名前のテーブルを削除できないというエラーが発生し続けます。外部キー制約は、私は、このテーブルを削除するにはどうすればよいテーブルを削除できません:外部キーの制約が失敗します

が失敗した: - 削除または親行を更新できません

#1217:これは私が取得していますエラーですか?外部キーを表示する

+2

外部キーを使用して他のテーブルを参照しているものを調べ、そのテーブルにFK制約をドロップしてから、このテーブルを削除します。 –

+0

あなたはもう必要としないもので他のテーブルの要件を削除する必要があります – BugFinder

+1

これらの回答はあなたに役立ちますか? http://stackoverflow.com/questions/1905470/cannot-delete-or-update-a-parent-row-a-foreign-key-constraint-fails http://stackoverflow.com/questions/3334619/delete-or-update-a-parent-row-a-foreign-key-constraint-は失敗します –

答えて

44

試用:

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

これは、あなたがこれらの参照、またはあなたがこれが何をすべきテーブル

+4

この解決策は良い方法です。それはより安全で、選択された答えのような悪い習慣でもありません。 – Sloganho

+1

それは私のために働いた、この答えは受け入れられたとしてマークする必要があります。 – parvez

68

をドロップすることができるようになりますこの表の参照データセットのデータセットを落とした後の表は、あなたがドロップしたいテーブルへの参照を持っているあなたを提供すべきですトリック:他の人が指摘するように

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

、これは問題に尋ねていただきましだにも関わらず、あなたが欲しいものなることはほとんどありません。より安全な解決策は、berichtを削除する前にberichtに応じてテーブルを削除することです。それを行う方法については、CloudyMarbleの回答を参照してください。私はbashと私の投稿のメソッドを使用して、データベースを削除したくない、またはデータベース自体を再作成したくないときに、データベース内のすべてのテーブルを削除します。

#1217他のテーブルに、削除しようとしているテーブルに外部キー制約があり、InnoDBデータベースエンジンを使用していると、エラーが発生します。この解決策は、拘束のチェックを一時的に無効にしてから再度有効にします。詳細はdocumentationをお読みください。 berichtに応じてテーブルの外部キーの制約とフィールドを削除してください。そうしないと、データベースが壊れた状態になる可能性があります。

+2

この回答は – kyeno

+0

まで選択する必要があります。これは最高の回答であり、トップにすべきです!!!!!! –

+1

これは間違いありませんが、これを行うには驚くほど悪い練習です。複数のユーザー(Rune Kaagaardを含む)から指摘されているように、参照を見つけ、必要に応じて分析して削除する必要があります。 – zozo

1

これはおそらく、そのエラーが発生している理由を他のスキーマと同じ表にしています。

最初に子行と親行を削除する必要があります。

0

は、私は、これはしばらくの間、陳腐であると認識し、その答えが選択されていたが、どのように代替については、外部キーがNULLなり、その後、DELETE SET NULLの ON を選択することができるようにします。

基本的には、あなたのテーブルがそうのように変更する必要があり

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;

個人的に私は避けるために "UPDATE CASCADE ON" と同様に "DELETE SET NULLのON" の両方を使用することをお勧めします不必要な合併症、しかし、あなたのセットアップは別のアプローチを指示するかもしれません。

これが役に立ちます。

関連する問題