我有一个整数列,想要添加外键约束。唯一的问题是如果该列没有值或不需要值,MySQL默认会放入'0'值。这显然会破坏外键约束,因为在主表中没有具有PK为0的记录。
我该如何解决这个问题?
我有一个整数列,想要添加外键约束。唯一的问题是如果该列没有值或不需要值,MySQL默认会放入'0'值。这显然会破坏外键约束,因为在主表中没有具有PK为0的记录。
我该如何解决这个问题?
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;
然后:
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)
或许可以在外键列中允许空值,并将默认值设置为 null。