浏览 Bill Karwin 的书“SQL Antipatterns”,第 3 章,Naive Trees(邻接表、父子关系),有一个注释表的示例。
CREATE TABLE Comments (
comment_id SERIAL PRIMARY KEY,
parent_id BIGINT UNSIGNED,
comment TEXT NOT NULL,
FOREIGN KEY (parent_id) REFERENCES Comments(comment_id)
);
样本数据
| comment_id | parent_id | comments
|------------| ----------|-------------------------------------
|1 | NULL |What’s the cause of this bug?
|2 | 1 |I think it's a null pointer
|3 | 2 |No, I checked for that
|4 | 1 |We need to check for invalid input
|5 | 4 |Yes,that's a bug
|6 | 4 |Yes, please add a check
|7 | 6 |That fixed it
该表有一个comment_id、parent_id 和一个comment 列。 Parent_id 是引用comment_id 的外键。
comment_id从1开始自动递增。
问题。
如果parent_id应该是引用comment_id的外键,那么为什么comment_id = 1的行的parent_id为null/0,而使用外键的目的是为了确保引用完整性。
注意:我按原样创建了表并尝试输入数据并收到此错误
#1452 - 无法添加或更新子行:外键约束失败(`category`.`comments`、CONSTRAINT `comments_ibfk_1` FOREIGN KEY (`parent_id`) REFERENCES `comments` (`comment_id`))
从 CW 答案中的上述评论中收集一些结论。
The parent_id
is NULL
在此表中,“根”节点位于树的顶部,因此没有父节点。
Read https://dev.mysql.com/doc/refman/5.7/en/null-values.html https://dev.mysql.com/doc/refman/5.7/en/null-values.html: 请注意,NULL
value 与数字类型的 0 或字符串类型的空字符串等值不同。有关详细信息,请参阅“问题与NULL Values https://dev.mysql.com/doc/refman/5.7/en/problems-with-null.html”.
还要注意关键字NULL
与带有单词的文字字符串不同'NULL'
.
Read https://dev.mysql.com/doc/refman/5.7/en/numeric-type-overview.html https://dev.mysql.com/doc/refman/5.7/en/numeric-type-overview.html:在MySQL中SERIAL
是一个别名BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)