2016-12-05 101 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