delete级联的sqlite不在Android上工作



我有这两个表级别和翻译。在级别表中,对翻译有一个外键限制。SQL语句看起来像这样

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()。

也就在

检查删除命令之前
db.execSQL("PRAGMA foreign_keys;");

如果它返回并返回1,因此其活动。

有人知道我可以测试什么或在哪里做错了?我已经测试了很多东西,以至于我不再知道错误在哪里。

谢谢您已提前

当试图删除正在引用的记录thorugh thorugh作为外键约束的记录时,使用级联来防止数据库丢弃参考约束错误。

在您的情况下,删除级别记录不会造成这种情况。它只会删除参考记录,但不会删除正在引用的记录。

它以相反的方式工作。如果删除翻译记录,则相应的级别记录将级联,即被删除,因为否则,它将引用不再存在的翻译记录。

如果您期望它能正常工作,那就没什么意义。例如,假设我有一个客户表和订单表。订单必须参考客户。如果删除客户,也可以删除订单,因为我不能有不参考客户的订单。但是,如果删除了订单,则删除客户是没有意义的。拥有没有订单的客户对于数据库是一个完全有效的状态。

最新更新