删除级联上的SQLite不起作用

时间:2013-01-17 19:27:53

标签: sqlite

我创建了一些表格:

"CREATE TABLE IF NOT EXISTS WORKOUTPLANS (ID INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL  UNIQUE , NAME TEXT NOT NULL  UNIQUE, DESCRIPTION TEXT NOT NULL  UNIQUE)";
"CREATE TABLE IF NOT EXISTS ENTITY (ID INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL  UNIQUE , NAME TEXT NOT NULL  UNIQUE , DESCRIPTION TEXT NOT NULL  UNIQUE)";
"CREATE TABLE IF NOT EXISTS EXERCISE (ID INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL  UNIQUE , NAME TEXT NOT NULL  UNIQUE , DESCRIPTION TEXT NOT NULL  UNIQUE , REPS TEXT NOT NULL , WEIGHT TEXT NOT NULL)";
"CREATE TABLE IF NOT EXISTS WPEN (PLANID, ENID, FOREIGN KEY(PLANID) REFERENCES WORKOUTPLANS(ID) ON DELETE CASCADE, FOREIGN KEY(ENID) REFERENCES ENTITY(ID) ON DELETE CASCADE)";
"CREATE TABLE IF NOT EXISTS ENEX (ENTITYID, EXERCISEID, FOREIGN KEY(ENTITYID) REFERENCES ENTITY(ID) ON DELETE CASCADE, FOREIGN KEY(EXERCISEID) REFERENCES EXERCISE(ID) ON DELETE CASCADE)";

因此,你可以看到我必须m:n关系,在这个连接表中我有删除级联的约束。我知道每次连接数据库时都必须在sqlite中激活外键,我也是如此。

但是,当我在WORKOUTPLANS中删除一行时,它只是删除了WORKOUTPLANS中的行,而不是在ENEN,EXERCISE和ENEX中的WPEN中删除

为什么删除级联不起作用?

1 个答案:

答案 0 :(得分:0)

仅从WORKOUTPLANSWPEN删除,因为其他人对on delete cascade没有WORKOUTPLANS次操作。

以下是on delete cascade架构的摘要,其中左侧是一个表,右侧的表具有on delete cascade的外键约束:

WPEN -> WORKOUTPLANS
WPEN -> ENTITY
ENEX -> ENTITY
ENEX -> EXERCISE

因此,如果您删除WORKOUTPLANS中的行,它也会从WPEN中删除。如果您从ENTITY删除,它也会从WPENENEX中删除。如果您从EXERCISE删除,它也会从ENEX删除。

这是on delete行动的好reference link

对于你想要的内容,这是一个很好的stackoverflow answer