我有一个整数列,我想向其中添加外键约束。唯一的问题是,如果该列没有/需要一个值,则默认情况下,MySQL将其设置为“0”。这显然打破了外键约束,因为主表中没有PK为0的记录。
我该如何克服这个问题?
您可能需要将外键设置为接受NULL值,并使用aNULL代替0值。
NULL
0
从概念上讲,NULL意味着 缺失的未知值 。如果您的行“没有/需要值”,那么我认为这NULL很合适。
是的,一个NULL值不会破坏您的外键约束。
让我们建立一个基本的例子:
CREATE TABLE parents ( id int PRIMARY KEY, value int ) ENGINE = INNODB; CREATE TABLE children ( id int PRIMARY KEY, parent_id int, FOREIGN KEY (parent_id) REFERENCES parent (id) ) ENGINE = INNODB;
然后:
INSERT INTO parents VALUES (1, 100); Query OK, 1 row affected (0.00 sec) INSERT INTO children VALUES (1, 1); Query OK, 1 row affected (0.00 sec) INSERT INTO children VALUES (2, 0); ERROR 1452 (23000): A foreign key constraint fails INSERT INTO children VALUES (2, NULL); Query OK, 1 row affected (0.00 sec) SELECT * FROM children; +----+-----------+ | id | parent_id | +----+-----------+ | 1 | 1 | | 2 | NULL | +----+-----------+ 2 rows in set (0.01 sec)