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

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

Ответы на вопрос(2)

Решение Вопроса

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

Ваш ответ на вопрос