2013-01-17 115 views
0

我已經創造了一些表:的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和WPEN不是實體,運動刪除WORKOUTPLANS一排它只是刪除行和ENEX

爲什麼上刪除級聯不工作?

回答

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中刪除。

這是一個很好的reference linkon delete行動。

這是一個很好的stackoverflow answer它聽起來像你想要的。