我有一个表,其中有几个ID列指向其他表。
我希望只有在将数据放入其中时,外键才能强制完整性。如果我稍后进行更新以填充该列,则它还应该检查约束。
(这可能取决于数据库服务器,我使用的是MySQL和InnoDB表类型)
我相信这是一个合理的期望,但是如果我错了,请纠正我。
是的,您只能在值不为NULL时强制执行约束。可以使用以下示例轻松测试它:
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) ) ENGINE=INNODB;
INSERT INTO child (id, parent_id) VALUES (1, NULL); -- Query OK, 1 row affected (0.01 sec)
INSERT INTO child (id, parent_id) VALUES (2, 1);
-- ERROR 1452 (23000): Cannot add or update a child row: a foreign key -- constraint fails (t/child
, CONSTRAINT child_ibfk_1
FOREIGN KEY -- (parent_id
) REFERENCES parent
(id
)) 第一次插入将通过,因为我们在中插入了NULL parent_id。由于外键约束,第二次插入失败,因为我们试图插入parent表中不存在的值。来源:stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。