我创建了一些表格:
"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中删除
为什么删除级联不起作用?
答案 0 :(得分:0)
仅从WORKOUTPLANS
和WPEN
删除,因为其他人对on delete cascade
没有WORKOUTPLANS
次操作。
以下是on delete cascade
架构的摘要,其中左侧是一个表,右侧的表具有on delete cascade
的外键约束:
WPEN -> WORKOUTPLANS
WPEN -> ENTITY
ENEX -> ENTITY
ENEX -> EXERCISE
因此,如果您删除WORKOUTPLANS
中的行,它也会从WPEN
中删除。如果您从ENTITY
删除,它也会从WPEN
和ENEX
中删除。如果您从EXERCISE
删除,它也会从ENEX
删除。
这是on delete
行动的好reference link。
对于你想要的内容,这是一个很好的stackoverflow answer。