2つのテーブルがあります。 user
およびcomment
。ユーザーがコメントに投票できるようにして、user_vote_comment
という別のテーブルを作成しました。 user
テーブルのid
列と、comment
テーブルのid
列をuser_vote_comment
テーブルの複合主キーにします。外部キー制約のため行を削除できません
これはuser_vote_comment
テーブルの構造である:
CREATE TABLE IF NOT EXISTS `user_vote_comment` (
`user_id` INT(11) UNSIGNED NOT NULL,
`comment_id` INT(11) UNSIGNED NOT NULL,
PRIMARY KEY (`user_id`, `comment_id`),
INDEX `fk_user_vote_comment_comment1_idx` (`comment_id` ASC),
CONSTRAINT `fk_user_vote_comment_user1`
FOREIGN KEY (`user_id`)
REFERENCES `user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_user_vote_comment_comment1`
FOREIGN KEY (`comment_id`)
REFERENCES `comment` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
は今、私はuser_vote_comment
にいくつかの行を追加しましたが、私は、ユーザーがそのオプションを持っていると思ったので、私はいくつかの票を削除したいですunvoteする。しかし、私はこのエラーメッセージが表示されます:
Error 1451: Cannot delete or update a parent row: a foreign key constraint fails (`user_vote_comment`, CONSTRAINT `fk_user_vote_comment_comment1` FOREIGN KEY (`comment_id`) REFERENCES `comment` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION)
ここでは、ユーザーとコメントテーブルが親テーブルであると思いましたか? user_vote_comment
の一部の行はその情報に依存していますが、他の方法では使用できないため、ユーザーまたはコメントを削除すると制約があると意味があります。
user_vote_comment
の行を削除できない理由がわかりません。行を削除できないと、あまりにも制限されているようです。
どうすればよいですか?
'user_vote_comment'から行を削除しようとしたときに外来キー制約が失敗するのはなぜか分かりませんが、' ON DELETE NO ACTION'は 'comment'や' user'テーブルの行の削除を防ぎます'user_vote_comment'テーブルの行によって参照されて孤立したエントリを避ける ' UP UP NO NOTION ACTION'と同じことが起こります。これは、 'comment'や' user'で参照される行の主キーを更新しないようにします。 'user_vote_comment 'テーブル。 データの一貫性については、ユーザとコメントの削除を許可する場合は、 'ON DELETE CASCADE'を指定する必要があると思います。 –