自从我找到答案以来的新问题。
练习要求我们创建一个带有回复级别的评论表。 有一个帖子(' id')有评论(' comment_id')并且有一个 评论回复字段(' reply_to'),如果它是对帖子本身的评论,则需要指向现有评论(' comment_id')或NULL。 ' ID' &安培; ' COMMENT_ID'是主键 ' USER_ID'是不同表的外键 我需要第二个外键,即回复字段(' reply_to') 删除评论时,也应删除以下评论。
我成功的是将外键设置为' comment_id'但是之后 如果有很多帖子具有相同的评论号,则会导致混乱。 删除帖子#1评论#1将导致发布#x评论#9这是一个回复 评论#5(而不是#1)也要删除。
我应该如何定义密钥,以便只有正确的评论树 淘汰? (下面的数据库说明)
由于
实施例: TBL
post_id-----comment_id-----reply_to
0 0 NULL (to post)
0 1 0
1 0 NULL (to post)
1 1 0
通缉行动:
Delete: 0 0 NULL (to post)
想要的结果:
post_id-----comment_id-----reply_to
1 0 NULL (to post)
1 1 0
=============================================== ============================
练习要求我们创建一个带有回复级别的评论表。 有一个帖子(' id')有评论(' comment_id')并且有一个 评论回复字段(' reply_to'),如果它是对帖子本身的评论,则需要指向现有评论(' comment_id')或NULL。 ' ID' &安培; ' COMMENT_ID'是主键 ' USER_ID'是不同表的外键 我需要第二个外键,即回复字段(' reply_to') 删除评论时,也应删除以下评论。
我正在尝试从同一个表中添加一个外键但我一直在增加 这个错误:
#1005 - Can't create table db.#sql-148f_1027d34' (errno: 150)
以下是表格的定义:
CREATE TABLE IF NOT EXISTS `PostComments` (
`id` int(11) NOT NULL,
`comment_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
`content` varchar(512) COLLATE utf8_unicode_ci NOT NULL,
`reply_to` int(11) DEFAULT NULL,
`rating` int(11) NOT NULL DEFAULT '0',
`report_counter` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`,`comment_id`),
KEY `user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
ALTER TABLE `PostComments`
ADD CONSTRAINT `PostComments_ibfk_1` FOREIGN KEY (`id`) REFERENCES `Posts` (`id`),
ADD CONSTRAINT `PostComments_ibfk_2` FOREIGN KEY (`id`) REFERENCES `Posts` (`id`),
ADD CONSTRAINT `PostComments_ibfk_3` FOREIGN KEY (`user_id`) REFERENCES `Users` (`id`);
这就是我想要做的事情:
ALTER TABLE `PostComments`
ADD CONSTRAINT `fk_ReplyToT`
FOREIGN KEY (`reply_to`)
REFERENCES `PostComments` (`comment_id`)
ON DELETE CASCADE
在几个不同的线程中漫步后,我尝试删除所有的线程 此表中的条目但仍然没有成功。 字段也具有相同的类型(INT)
我可能还缺少什么? 提前谢谢!
答案 0 :(得分:0)
您试图在表格帖子中使用相同ID的同一列引用两次相同的列:
ALTER TABLE `PostComments`
ADD CONSTRAINT `PostComments_ibfk_1` FOREIGN KEY (`id`) REFERENCES `Posts` (`id`),
ADD CONSTRAINT `PostComments_ibfk_2` FOREIGN KEY (`id`) REFERENCES `Posts` (`id`),
ADD CONSTRAINT `PostComments_ibfk_3` FOREIGN KEY (`user_id`) REFERENCES `Users` (`id`);
没用。
FOREIGN KEY语句中的第一个(id
)(所以FOREIGN KEY (id
))是您正在应用约束的表中的列(在这种情况下的postcomments表。)
所以用实际想要放置约束的列替换第二个约束的id(首先,无关紧要)。