我有一个表,该表具有引用其自身的“外键”。这将非常有用,除非我不确定如何将第一条记录添加到这样的表中。无论我添加什么,我都无法为表本身提供有效的“外来”键,尚无任何条目。也许我没有正确地解决这个问题,但是我希望该表代表始终是其自身成员的某种东西。有没有办法“引导”这样的表,或者有另一种进行自我引用的方法?
一种选择是使您的字段NULL可用,并将根记录的父键设置为NULL:
NULL
CREATE TABLE tb_1 ( id int NOT NULL PRIMARY KEY, value int NOT NULL, parent int NULL, FOREIGN KEY (parent) REFERENCES tb_1(id) ) ENGINE=INNODB; Query OK, 0 rows affected (0.43 sec) -- This fails: INSERT INTO tb_1 VALUES (1, 1, 0); ERROR 1452 (23000): A foreign key constraint fails. -- This succeeds: INSERT INTO tb_1 VALUES (1, 1, NULL); Query OK, 1 row affected (0.08 sec)
否则,您仍然可以使用NOT NULL父键并将其指向根记录本身:
NOT NULL
CREATE TABLE tb_2 ( id int NOT NULL PRIMARY KEY, value int NOT NULL, parent int NOT NULL, FOREIGN KEY (parent) REFERENCES tb_2(id) ) ENGINE=INNODB; Query OK, 0 rows affected (0.43 sec) -- This fails: INSERT INTO tb_2 VALUES (1, 1, 0); ERROR 1452 (23000): A foreign key constraint fails. -- This succeeds: INSERT INTO tb_2 VALUES (1, 1, 1); Query OK, 1 row affected (0.08 sec)