80

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

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

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

4

6 に答える 6

169

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

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

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

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

于 2014-04-25T12:25:14.133 に答える
89

これを試して:

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

これにより、削除するテーブルへの参照を持つテーブルが表示されます。これらの参照を削除するか、このテーブル内のデータセットを参照するデータセットを削除すると、テーブルを削除できます。

于 2012-06-19T12:31:32.950 に答える
12

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

于 2012-06-19T12:30:27.240 に答える
12

しかし幸いなことに、MySQL の FOREIGN_KEY_CHECKS 変数を使用すると、DROP TABLE ステートメントの順序をまったく気にする必要がなく、次のように好きな順序で (正反対でも) 記述できます。

SET FOREIGN_KEY_CHECKS = 0;
drop table if exists customers;
drop table if exists orders;
drop table if exists order_details;
SET FOREIGN_KEY_CHECKS = 1;

詳細については、以下のリンクをご覧ください。

http://alvinalexander.com/blog/post/mysql/drop-mysql-tables-in-any-order-foreign-keys/

于 2020-08-18T05:58:40.633 に答える
1

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

最初に子行を削除してから、親行を削除する必要があります。

于 2017-02-05T10:19:29.033 に答える