0

データベースオブジェクトから行を削除できません。私の場合、dbオブジェクトは自己索引付けを行っています。
フィールドroot_idは、key_id(主キー)と外部キーの関係にあります。参照整合性はとして設計されていON UPDATE NO ACTION AND ON DELETE NO ACTIONます。それでも削除できません。

CONSTRAINT `fk_MyTab` FOREIGN KEY (`root_id`) REFERENCES `MyTab` (`key_id`) ON DELETE NO ACTION ON UPDATE NO ACTION)

このテーブルからレコードを削除する必要がありますWHERE key_id = root_id
削除しようとすると、次のようになります。

エラーコード:1451。親行を削除または更新できません:外部キー制約が失敗します( `MyTab`、CONSTRAINT` fk_MyTab` FOREIGN KEY( `root_id`)REFERENCES` MyTab`( `key_id`)ON DELETE NO ACTION ON UPDATE NOアクション)

私を正しい方向に向けてください。

4

2 に答える 2

1

多くの外部キーを持つデータベースを設計している場合、これは良い習慣だと思います。他のテーブルへの他のフィールドとリンクされている ON DELETE CASCADE オプションを持つテーブルがある場合、カスケード削除オプションは失敗します (mysql はテーブルを作成するのと同じ順序で削除できなかったため)". この場合の解決策は、次のように宣言することです。その他の外部キーの節 ON DELETE SET NULL

于 2012-10-30T07:32:17.187 に答える
1

それがNO ACTION、子行を持つ行の削除を防ぎます。子も削除する場合は、 を使用しますCASCADE

に設定してデータを保持することもできますON DELETE SET NULL。この場合、親が削除されると、子行の外部キー列が null に設定されます。

于 2012-10-30T07:27:44.877 に答える