SQLite级联删除
父表是:SQLite级联删除,sql,cascading-deletes,Sql,Cascading Deletes,父表是: CREATE TABLE BHEAD ( ID INTEGER primary key asc, DESCR TEXT, LINECTR INT, UNITCTR INT) CREATE TABLE BDET ( ID INTEGER primary key asc, BID INTEGER, BCODE TEXT, QTY INTEGER, FOREIGN KEY (BID) REFERENCES BHEAD(ID) ON DELETE CASCADE ) 子表是: CREATE
CREATE TABLE BHEAD (
ID INTEGER primary key asc,
DESCR TEXT,
LINECTR INT,
UNITCTR INT)
CREATE TABLE BDET (
ID INTEGER primary key asc,
BID INTEGER,
BCODE TEXT,
QTY INTEGER,
FOREIGN KEY (BID) REFERENCES BHEAD(ID) ON DELETE CASCADE
)
子表是:
CREATE TABLE BHEAD (
ID INTEGER primary key asc,
DESCR TEXT,
LINECTR INT,
UNITCTR INT)
CREATE TABLE BDET (
ID INTEGER primary key asc,
BID INTEGER,
BCODE TEXT,
QTY INTEGER,
FOREIGN KEY (BID) REFERENCES BHEAD(ID) ON DELETE CASCADE
)
我还执行SQLPRAGMA foreign_keys=ON代码>。
但是,它不起作用;当我从BHEAD
中删除一行时,BDET
中与其关联的行不会消失
为什么会这样?您使用的是什么版本的SQLite
请参阅:
为了在SQLite中使用外键约束,必须在编译库时既不定义SQLite_OMIT_foreign_键,也不定义SQLite_OMIT_触发器
但是,您也可以实现on delete cascade来删除所有子对象
删除父行时的行
我还不能让它与SQLite3 3.6.12版一起工作,但在客户端中使用指定的pragma时,它在SQLite3 3.7.8版中确实可以工作。