web-dev-qa-db-ja.com

テーブルを削除できません:外部キー制約が失敗します

MySQLでは、テーブルを削除します。
多くのことを試しましたが、berichtという名前のテーブルを削除できないというエラーが表示され続けます。これは私が得ているエラーです:

#1217-親行を削除または更新できない:外部キー制約が失敗する

このテーブルを削除するにはどうすればよいですか?

44
roy

これでうまくいくはずです:

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

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

#1217エラーは、他のテーブルに削除しようとしているテーブルへの外部キー制約があり、InnoDBデータベースエンジンを使用している場合に発生します。このソリューションは、拘束のチェックを一時的に無効にしてから、再び有効にします。 ドキュメント を読んでください。 berichtに応じて、テーブル内の外部キー制約とフィールドを必ず削除してください。そうしないと、データベースが破損した状態のままになる可能性があります。

118
Rune Kaagaard

これを試して:

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

これにより、ドロップするテーブルへの参照を持つテーブル、これらの参照をドロップした後、またはこのテーブルのデータセットを参照するデータセットを提供し、テーブルをドロップできます

66
CloudyMarble

つかいます show create table tbl_name外部キーを表示するには

この構文を使用して、外部キーを削除できます。

ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol

ここにも詳細情報があります(Frank Vanderhallenの投稿を参照): http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

6
mihaisimi

これはおそらく、他のスキーマと同じテーブルを持っているため、そのエラーが発生する理由です。

最初に子行、次に親行をドロップする必要があります。

1
Kip Russel

私はこれがしばらくの間古く、答えが選択されていたことを認識していますが、外部キーを[〜#〜] null [〜#〜 ]そして、ON DELETE SET NULLを選択します。

基本的に、テーブルは次のように変更する必要があります。

_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;

個人的には、「ON UPDATE CASCADE」と「ON DELETE SET NULL」の両方を使用して不要な複雑化を回避することをお勧めしますが、設定によって異なるアプローチが必要になる場合があります。

お役に立てれば。

0
Marius Cucuruz