我有一个表,其中有几个ID列指向其他表。我希望只有在将数据放入其中时,外键才能强制完整性。如果我稍后进行更新以填充该列,则它还应该检查约束。(这可能取决于数据库服务器,我使用的是MySQL和InnoDB表类型)我相信这是一个合理的期望,但是如果我错了,请纠正我。
3 回答
不负相思意
TA贡献1777条经验 获得超10个赞
是的,这将按您预期的那样工作。不幸的是,我似乎很难在MySQL手册中找到对此的明确声明。
外键表示该值必须存在于另一个表中。NULL表示没有值,因此当您将列设置为NULL时,尝试对其施加约束是没有意义的。
白衣染霜花
TA贡献1796条经验 获得超10个赞
上面的作品,但这不是。注意ON DELETE CASCADE
CREATE DATABASE t;
USE t;
CREATE TABLE parent (id INT NOT NULL,
PRIMARY KEY (id)
) ENGINE=INNODB;
CREATE TABLE child (id INT NULL,
parent_id INT NULL,
FOREIGN KEY (parent_id) REFERENCES parent(id) ON DELETE CASCADE
) ENGINE=INNODB;
INSERT INTO child (id, parent_id) VALUES (1, NULL);
-- Query OK, 1 row affected (0.01 sec)
添加回答
举报
0/150
提交
取消