12

コメントを保存するこのテーブルがあります。isReplyコメントが別のコメントへの返信である場合、すべてのコメントには独自の ID と列があります。コメントが削除されると、そのコメントへの返信であるすべてのコメントが自動的に削除されるように関係を設定できるかどうか疑問に思っていました。isReply参照する列に外部キーを設定しようとしましたが、次のcomments.idエラーが発生しました。

#1452 - 子行を追加または更新できません: 外部キー制約が失敗しました ( _db. #sql-1030_31f, CONSTRAINT #sql-1030_31f_ibfk_1 FOREIGN KEY ( isReply) REFERENCES comments( id) ON DELETE CASCADE ON UPDATE NO ACTION)

4

3 に答える 3

10

実際、同じテーブル内の外部キー完全に有効です。1452 は、1 つ以上のアイテムが (もう) 存在しないアイテムを参照しているため、外部キーの定義により無効であることを意味します。

詳細については、次を参照してください: Mysql エラー 1452 - 子行を追加または更新できません: 外部キー制約が失敗し、失敗した理由、失敗したレコードを見つける方法、問題を回避する方法が説明されています。

于 2013-08-25T17:04:26.053 に答える
10

コメント テーブルisReplyには、テスト中に削除されたコメントを参照する値を持つ回答が残っている可能性があります。MySQL が言おうとしていることを聞いてください。

a foreign key constraint fails

テーブルを空にし、外部キーを定義するだけで (エラーは消えます)、必要な動作が得られます。FK が作成されると、トリガーは不要になります。これが、カスケードが存在する理由です。

isReplyのデフォルト値を次のように設定する必要があることに注意nullしてください。

ALTER TABLE comments CHANGE isReply isReply integer DEFAULT NULL;
于 2013-08-25T17:04:01.123 に答える