我有两个SQLite表,其中一个具有另一个FOREIGN KEY
。当我DELETE
原始行时,我希望将引用(外键)设置为NULL。但是,我看不到,也不知道为什么。
这是我用来重现该问题的MCVE:
PRAGMA foreign_keys = ON;
DROP TABLE IF EXISTS Results;
DROP TABLE IF EXISTS Sessions;
CREATE TABLE Results (
ResultId INTEGER PRIMARY KEY,
File TEXT
);
CREATE TABLE Sessions (
SessionId INTEGER PRIMARY KEY,
Name TEXT,
ResultId INTEGER,
FOREIGN KEY(ResultId)
REFERENCES Results(ResultId)
ON DELETE SET NULL
);
INSERT INTO Results (File) VALUES ("a.txt");
INSERT INTO Results (File) VALUES ("b.txt");
INSERT INTO Sessions (Name,ResultId) VALUES ('a', 1);
INSERT INTO Sessions (Name,ResultId) VALUES ('b', 2);
DELETE FROM Results WHERE File="a.txt";
SELECT ResultId FROM Sessions WHERE Name="a";
我希望SELECT
语句返回NULL
,但它返回1
。
注意:我一直在使用这些official docs作为如何处理外键的参考。
请注意,以下内容返回0。
PRAGMA foreign_keys = ON;
PRAGMA foreign_keys;
我正在运行由debian发行的sqlite版本3.16.2-5+deb9u1
。我可以通过debian's packaging rules确认尚未定义SQLITE_OMIT_FOREIGN_KEY
和SQLITE_OMIT_TRIGGER
进行编译(很好!)。 SQLITE_DEFAULT_FOREIGN_KEYS=1
未定义,但PRAGMA
语句应该可以解决此问题。
我正在使用sqlite-browser
对此进行测试