【发布时间】:2013-07-09 14:52:29
【问题描述】:
较新版本的 SQLite support foreign key constraints。可以定义
CREATE TABLE MASTER (_ID INTEGER PRIMARY KEY, ...);
CREATE TABLE SERVANT (_ID INTEGER PRIMARY KEY, MASTERID INTEGER,
FOREIGN KEY(MASTERID) REFERENCES MASTER(_ID);
根据文档,默认情况下“NO ACTION”用于 ON DELETE 和 ON UPDATE。但与其他 DBS 不同,“NO ACTION”似乎并不意味着不执行删除或更新。这似乎意味着没有采取任何措施来保持完整性,至少根据我的测试(*)并且如果我理解 documentation 正确:
配置“NO ACTION”意味着:当父键被修改时 或从数据库中删除,不采取任何特殊措施。
这样
INSERT INTO MASTER (_ID) VALUES (1);
INSERT INTO SERVANT (_ID, MASTERID) VALUES (1,1);
DELETE FROM MASTER;
给我一个空的 MASTER 表和一个 SERVANT 表,外键指向任何地方。
任何人都可以确认这种行为并解释为什么以这种方式实施吗?还是我必须配置一些东西才能使外键支持工作? 我是 SQLite 开发的新手,如果这是一个愚蠢的问题,请原谅我。
编辑: (*) 我的测试有缺陷,请参阅my answer below。
【问题讨论】:
-
我无法回答您的具体问题,但我发现 SQLite 文档在准确性和精确度方面优于平均水平(尽管经常找到您正在寻找的信息是挑战)。
标签: sqlite