外键约束ON DELETE CASCADE在android上的sqlite数据库中不起作用

我有“天”表创建如下

"create table days(" + "day_id integer primary key autoincrement, " + "conference_id integer , " + "day_date text, " + "day_start_time text, " + "day_end_time text, " + "day_summary text, " + "day_description text)"; 

我有如下创建的轨道表

 CREATE_TABLE_TRACK = "create table track(" + "track_id integer primary key autoincrement," + "day_id integer,"+ "track_name text," + "track_description text," + " FOREIGN KEY(day_id) REFERENCES days(day_id) ON DELETE CASCADE )"; 

如上所示我有外键day_id引用表天的day_id …

所以我想要的是,如果我删除那天,那么相应的轨道也应该被删除……但在我的情况下不会发生..

我有版本3.5.9的 sqlite

而且我在我的帮助类中添加了1行作为

> db.execSQL(“PRAGMA foreign_keys = ON;”);

但仍然无法工作..请帮帮我..

直到Sqlite版本3.6.19(第一次包含在Android 2.2中)才支持级联删除。

幸运的是还有另一种选择。

您可以在create table query下面执行如下所示的另一个查询:

 db.execSQL("CREATE TRIGGER delete_days_with track BEFORE DELETE ON track " + "FOR EACH ROW BEGIN" + " DELETE FROM days WHERE track.day_id = days.day_id " + "END;"); 

请注意, delete_days_with_track只是描述触发器操作的名称,这只是我使用的模式; 我相信你可以任意命名。

根据SQLite文档对外键的支持直到3.6.19才添加。

使用3.5.9,你必须以其他方式进行级联删除。