一尘不染

MySQL外键约束-整数列

sql

我有一个整数列,我想向其中添加外键约束。唯一的问题是,如果该列没有/需要一个值,则默认情况下,MySQL将其设置为“0”。这显然打破了外键约束,因为主表中没有PK为0的记录。

我该如何克服这个问题?


阅读 128

收藏
2021-05-16

共1个答案

一尘不染

您可能需要将外键设置为接受NULL值,并使用aNULL代替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)
2021-05-16