我的“天”表创建如下
"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 ...
所以我想要的是如果我删除那天,那么相应的轨道也应该被删除......但是在我的情况下不会发生..
我的sqlite版本为 3.5.9
而且我在我的帮助类中添加了一行
> db.execSQL(“PRAGMA foreign_keys = ON;”);
但仍然无法正常工作..请帮帮我..
答案 0 :(得分:9)
直到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
只是描述触发器功能的名称,这只是我使用的模式;我相信你可以任意命名。
答案 1 :(得分:1)
根据SQLite Documentation对外键的支持直到3.6.19才被添加。
使用3.5.9,你必须以其他方式进行级联删除。