SQLite删除外键

时间:2018-10-24 09:14:42

标签: sqlite foreign-keys

我有两个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_KEYSQLITE_OMIT_TRIGGER进行编译(很好!)。 SQLITE_DEFAULT_FOREIGN_KEYS=1未定义,但PRAGMA语句应该可以解决此问题。

我正在使用sqlite-browser

对此进行测试

0 个答案:

没有答案