MySQL外键约束 - 整数列

GST*_*TAR 9 mysql sql foreign-keys

我有一个整数列,我想添加一个外键约束.唯一的问题是,如果该列没有/需要一个值,默认情况下MySQL会输入一个'0'值.这显然打破了外键约束,因为主表中没有PK为0的记录.

我怎样才能克服这个问题?

Dan*_*llo 8

您可能希望将外键设置为接受NULL值,并使用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;
Run Code Online (Sandbox Code Playgroud)

然后:

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)
Run Code Online (Sandbox Code Playgroud)