翻阅Bill Karwin的《 QL Antipatterns》一书,第3章,朴素树(邻接表,父子关系),其中有一个注释表的示例。
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鈥檚 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,CONSTRAINTcomments_ibfk_1FOREIGN KEY(parent_id)参考” comments(comment_id))
,CONSTRAINT
FOREIGN KEY(
)参考” comments
comment_id
从此CW答案的以上评论中收集一些结论。
的parent_id是NULL在此表中为“根”节点,该节点是在树的顶部,并因此没有父。
parent_id
NULL
阅读https://dev.mysql.com/doc/refman/5.7/en/null-values.html:请注意,该NULL值不同于数字类型的值,例如0或字符串类型的空字符串。欲了解更多信息,请参见`[价值](https://dev.mysql.com/doc/refman/5.7/en/problems-with-null.html)[问题NULL`](https://dev.mysql.com/doc/refman/5.7/en/problems-with-null.html)’‘一节。
`[价值](https://dev.mysql.com/doc/refman/5.7/en/problems-with-null.html)[问题
另请注意,关键字NULL与带有单词的文字字符串不同'NULL'。
'NULL'
阅读https://dev.mysql.com/doc/refman/5.7/en/numeric-type-overview.html:在MySQL中,它SERIAL是的别名BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE。
SERIAL
BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE