我只是遇到了这个问题,尽管在一个更具体的情况下。
在我的例子中,我已经向现有表添加了一个我需要可以为空的列并充当外键的列(即,对于由外键约束绑定的非空条目)。
引用的列看起来像这样:
+-------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+----------------+
| id | int(10) | NO | PRI | NULL | auto_increment |
+-------------+-------------+------+-----+---------+----------------+和引用这样的:
+-------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+----------------+
| bed_id | int(10) | YES | | NULL | |
+-------------+-------------+------+-----+---------+----------------+原来我忘记在将引用列添加到现有表时指定DEFAULT NULL,因此它自动填充了零,这使得外键约束失败。
我将它们更改为NULL:
update devices set bed_id = NULL where bed_id = 0;然后成功添加了外键约束。希望这有助于某人