我想在SQLite中使用约束。
场景:如果有孩子,请停止父删除。
我怎样才能做到这一点?
答案 0 :(得分:3)
更正:SQLite支持外键约束,但默认情况下它们处于关闭状态。您必须使用此语句在运行时启用它们。 (这意味着你不能设置一次,并期望它坚持。如果你忘记只设置一次,你可以从父项中删除行并在子表中留下孤立。)
sqlite> PRAGMA foreign_keys = ON;
详细信息位于Enabling Foreign Key Support
可以使用完全禁用的外键支持编译SQLite。这是要记住的事情。
答案 1 :(得分:0)
假设您有表A(ID,NAME)和表B(ID,A_ID,NICK_NAME)
当你创建表A时,你会做
create table A (
ID INTEGER PRIMARY KEY,
NAME TEXT NOT NULL UNIQUE
);
create table B (
ID INTEGER PRIMARY KEY,
A_ID INTEGER NOT NULL,
NICK_NAME TEXT,
CONSTRAINT A_FK FOREIGN KEY (A_ID) REFERENCES A (ID) ON DELETE RESTRICT
);
如果您尝试删除B列引用的表A中的内容,则应该导致错误。
编辑:正如原始海报的评论和我自己的评论中所述,这显然不起作用。还有其他人对此有所了解吗?