をドロップすることができない私は2つのテーブルのテーブルカテゴリでON DELETE CASCADEを、レコードが親テーブルの上に削除することができますが、親テーブルが
CREATE TABLE `category` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8
CREATE TABLE `item` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
categoryid` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`id`), KEY `fk_categoryid_item` (`categoryid`),
CONSTRAINT `fk_categoryid_item` FOREIGN KEY (`categoryid`)
REFERENCES `category` (`id`) ON DELETE CASCADE)
ENGINE=InnoDB DEFAULT CHARSET=utf8
を持っている私は、アイテムのid 2. でレコードを持っています私はid = 1、categoryid = 2、カテゴリーテーブルを参照する外部キーとして2のレコードを持っています。 id 2のカテゴリテーブルの行を削除すると、categoryidが2のアイテムテーブルのレコードも削除されます。これは、削除カスケードのために予想されるとおりです。しかし、テーブルカテゴリを削除しようとすると、エラーコードが表示されます。
1217. Cannot delete or update a parent row: a foreign key constraint fails
なぜこのようなことが起こりますか?もちろん、テーブルを削除するforeign_key_checks = 0を設定することが可能になります。しかし、なぜ私たちはレコードを削除することができますが、カスケード削除オプションでテーブルを削除することはできませんが起こっているか知りたいです。このオプションは、レコードの削除にのみ適用されますが、テーブルの削除には適用されません。
ドキュメントを確認しましたが、これについて何の説明も見つかりませんでした。
私が紛失している基本的なことがある場合や、関連するドキュメントを参考にしておくと役立ちます。私はMySQL 5.7を使用しています。
ありがとうございます。
[テーブルを削除できません:外部キー制約が失敗します](http://stackoverflow.com/questions/11100911/cant-drop-table-a-foreign-key-constraint-fails) – Rupsingh
親テーブルを削除すると、レコードを挿入または更新するときにFK制約をチェックする必要があるため、子テーブルに行を挿入/更新できなくなるという論理的な説明がある可能性があります。 –
基本的。 MySQLは**リレーショナル**データベースです。外部キーはリレーションを設定するために使用されます。リレーションに依存する部分を削除すると、リレーションが破損し、そのリレーションシップを設定してデータ**の完全性**を保証します。関係するテーブルを削除すると整合性に違反するため、エラーが発生します。それは正常です。レコードを持たないことは、テーブルを持たないことと同じではありません。 – Mjh