ограничение внешнего ключа на delete CASCADE не работает в базе данных sqlite на android
у меня есть таблица "дней", созданная следующим образом
"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
а также я добавил 1 строку в моем помощнике класс
> db.execSQL ("PRAGMA foreign_keys=ON;");
но все равно не будет работать.. пожалуйста, помоги мне..
2 ответов
каскадное удаление не поддерживается до версии Sqlite 3.6.19, которая впервые включена в Android 2.2.
к счастью, есть альтернатива.
вы можете выполнить другой запрос, как это ниже вашего запроса create table:
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, вам придется делать каскадные удаления каким-то другим способом.