Mysql 用外键删除帖子中的评论
我有一个post和comment结构,我通过添加外键对其进行了更改: 职位:Mysql 用外键删除帖子中的评论,mysql,sql,Mysql,Sql,我有一个post和comment结构,我通过添加外键对其进行了更改: 职位: CREATE TABLE IF NOT EXISTS `posts` ( `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT, `user` varchar(40) NOT NULL, `text` varchar(500) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 A
CREATE TABLE IF NOT EXISTS `posts` (
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`user` varchar(40) NOT NULL,
`text` varchar(500) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=1 ;
邮报评论:
CREATE TABLE IF NOT EXISTS `comments` (
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`postid` int(11) UNSIGNED NOT NULL,
`user` varchar(40) NOT NULL,
`texto` varchar(3000) NOT NULL,
PRIMARY KEY (`id`),
FOREIGN KEY (`postid`) REFERENCES posts (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=1 ;
因此,如果用户想要删除其帖子:
delete FROM posts WHERE id=? and user=?
他的帖子有评论mysql告诉我:无法删除或更新父行:外键约束失败
我的问题是,这个帖子/评论结构正确吗?我应该使用外键吗?如果这篇文章有评论,如何删除它?在我看来,你需要设置
cascade
选项。当删除行时,cascade
选项将删除与FK相关的任何内容。这意味着当一篇文章被删除时,与该文章相关的所有评论也将被删除
CREATE TABLE IF NOT EXISTS `comments` (
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`postid` int(11) UNSIGNED NOT NULL,
`user` varchar(40) NOT NULL,
`texto` varchar(3000) NOT NULL,
PRIMARY KEY (`id`),
FOREIGN KEY (`postid`) REFERENCES posts (`id`)
ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=1 ;