13

我有如下创建的“天”表

"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;");

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

4

2 回答 2

9

直到 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只是一个描述触发器功能的名称,这只是我使用的模式;我相信你可以随意命名它。

于 2012-05-23T12:15:44.587 回答
1

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

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

于 2012-05-23T12:13:18.597 回答