Mysql 由于外键约束,无法删除行
我有两张桌子<代码>用户和Mysql 由于外键约束,无法删除行,mysql,Mysql,我有两张桌子用户和注释。我希望用户能够对评论进行投票,所以我制作了另一个名为user\u vote\u comment的表格。我让user表上的id列和comment表上的id列成为user\u vote\u comment表上的复合主键 这是user\u vote\u comment表的结构: CREATE TABLE IF NOT EXISTS `user_vote_comment` ( `user_id` INT(11) UNSIGNED NOT NULL, `comment_i
注释
。我希望用户能够对评论进行投票,所以我制作了另一个名为user\u vote\u comment
的表格。我让user
表上的id
列和comment
表上的id
列成为user\u vote\u comment
表上的复合主键
这是user\u vote\u 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
现在,我在用户投票\u评论中添加了一些行,但随后我想删除一些投票,因为我想让用户拥有取消投票的选项。但是我得到了这个错误信息:
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\u vote\u comment
中的某些行依赖于该信息,而不是相反
我不明白为什么我不能删除user\u vote\u comment
中的行,我觉得如果我甚至不能删除其中的行,我会受到太多的限制
我该怎么办?您可以在DELETE CASCADE上设置,而不是在DELETE NO ACTION上设置
我认为您的SQL没有任何问题。可能是您在上述问题中遗漏了导致问题的其他内容
我用SQLFiddle()做了一个快速测试,我可以很好地从USER\u VOTE\u COMMENT表中删除 这不会尝试删除所有用户和评论吗?因为它认为它们是子表,所以应该是相反的。我不知道为什么在尝试从user\u vote\u comment
中删除一行时,外键约束会失败,但是,删除无操作时的将阻止删除注释
或用户
表中被用户投票(注释)
表中的行引用的行
以避免孤立条目更新无操作时的也会发生同样的情况
,这将阻止更新comment
或user
表中user\u vote\u comment
引用的行的主键。至于数据的一致性,我认为如果您允许删除用户和评论,您应该在DELETE CASCADE上指定。