2016-12-05 98 views
0

我有這兩個表級別和翻譯。在關卡表中有翻譯的外鍵約束。 sql語句看起來像這樣sqLite ON DELETE CASCADE不適用於Android

Translation table: 
CREATE TABLE Translation(idTranslation INTEGER PRIMARY KEY AUTOINCREMENT, de TEXT NOT NULL,frTEXT NOT NULL); 

Level table: 
CREATE TABLE Level (idLevel INTEGER PRIMARY KEY, fkTranslation INTEGER NOT NULL, status INTEGER NOT NULL,FOREIGN KEY (fkTranslation) REFERENCES Translation (idTranslation) ON DELETE CASCADE); 

但是現在當我試圖刪除一個條目fron級別時,相應的轉換條目不會被刪除!

不,我還沒有忘記把

db.execSQL("PRAGMA foreign_keys=ON;"); 

上的OnOpen()。

而且delete命令前右我

db.execSQL("PRAGMA foreign_keys;"); 

檢查,如果其上返回,它返回1,所以它的活躍。

有沒有人知道我可以測試什麼或者我犯了什麼錯誤?我已經測試了很多東西,我不知道錯誤在哪裏。

感謝您事先已經

回答

1

級聯來防止數據庫試圖刪除正在被thorugh一個外鍵約束引用的記錄時扔引用約束的錯誤。

就你而言,刪除關卡記錄不會造成這種情況。它只會刪除引用記錄,但不會刪除正在引用的記錄。

它反過來工作。如果刪除翻譯記錄,相應的關卡記錄將級聯,即被刪除,因爲否則,它將引用不再存在的翻譯記錄。

如果它能像你期望的那樣工作,那就沒什麼意義了。例如,假設我有一個Customer表和一個Order表。訂單必須引用客戶。如果客戶被刪除,那麼刪除訂單也是有意義的,因爲我不能有沒有引用客戶的訂單。但是,如果訂單被刪除,刪除客戶是沒有意義的。讓一個沒有訂單的客戶對數據庫來說是一個完全有效的狀態。

+0

在我的情況下,我需要刪除級別刪除時的翻譯。反過來也是如此。但它應該工作嗎?或者我錯了?並且已經非常感謝你的努力! – jor

+0

@jor我編輯了我的答案以添加更多解釋。希望現在清楚。 – wvdz

+0

你是我的朋友! – jor