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
)
我还执行SQL
PRAGMA foreign_keys=ON。
但是,它不起作用;当我从
BHEAD
中删除一行时,
BDET
中与其关联的行不会消失


为什么会这样?

您使用的是什么版本的SQLite

请参阅:

为了在SQLite中使用外键约束,必须在编译库时既不定义SQLite_OMIT_foreign_键,也不定义SQLite_OMIT_触发器

但是,您也可以实现on delete cascade来删除所有子对象 删除父行时的行


我还不能让它与SQLite3 3.6.12版一起工作,但在客户端中使用指定的pragma时,它在SQLite3 3.7.8版中确实可以工作。