Ограничение внешнего ключа ON 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;");

Но все равно не сработает .. пожалуйста, помогите мне ..

Solutions Collecting From Web of "Ограничение внешнего ключа ON DELETE CASCADE не работает в базе данных sqlite на Android"

Каскадное удаление не поддерживается до Sqlite версии 3.6.19, который впервые включен в Android 2.2.

К счастью, есть альтернатива.

Вы можете выполнить другой запрос, подобный этому ниже вашего запроса на создание таблицы:

 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, вам придется делать каскадные удаления другим способом.