MySQLでは、テーブルを削除したいと思います。
いろいろ試してみましたが、名前の付いたテーブルbericht
を削除できないというエラーが表示され続けます。これは私が得ているエラーです:
#1217-親行を削除または更新できません:外部キー制約が失敗します
このテーブルを削除するにはどうすればよいですか?
MySQLでは、テーブルを削除したいと思います。
いろいろ試してみましたが、名前の付いたテーブルbericht
を削除できないというエラーが表示され続けます。これは私が得ているエラーです:
#1217-親行を削除または更新できません:外部キー制約が失敗します
このテーブルを削除するにはどうすればよいですか?
これでうまくいくはずです:
SET FOREIGN_KEY_CHECKS=0; DROP TABLE bericht; SET FOREIGN_KEY_CHECKS=1;
他の人が指摘しているように、質問で尋ねられたものであっても、これはほとんどあなたが望むものではありません。bericht
より安全な解決策は、削除する前にに応じてテーブルを削除することbericht
です。その方法については、CloudyMarble の回答を参照してください。データベース自体を削除して再作成したくない、またはできない場合は、bash と私の投稿のメソッドを使用して、データベース内のすべてのテーブルを削除します。
この#1217
エラーは、削除しようとしているテーブルに対する外部キー制約が他のテーブルにあり、InnoDB データベース エンジンを使用している場合に発生します。この解決策は、拘束のチェックを一時的に無効にしてから、再度有効にします。詳細については、ドキュメントを参照してください。に応じてテーブル内の外部キー制限とフィールドを必ず削除してくださいbericht
。そうしないと、データベースが壊れた状態のままになる可能性があります。
これを試して:
SELECT *
FROM information_schema.KEY_COLUMN_USAGE
WHERE REFERENCED_TABLE_NAME = 'YourTable';
これにより、削除するテーブルへの参照を持つテーブルが表示されます。これらの参照を削除するか、このテーブル内のデータセットを参照するデータセットを削除すると、テーブルを削除できます。
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
しかし幸いなことに、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/
これはおそらく、他のスキーマと同じテーブルを持っているため、そのエラーが発生しています。
最初に子行を削除してから、親行を削除する必要があります。