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

上記のように、テーブルのdaysのday_idを参照する外部キーday_idがあります...

だから私が望むのは、その日を削除すると、対応するトラックも削除されるはずです...しかし、私の場合は起こりません..

バージョン3.5.9のsqliteがあります

また、ヘルパークラスに1行追加しました

> db.execSQL("PRAGMAforeign_keys=ON;");

しかし、まだ動作しません..私を助けてください..

4

2 に答える 2

9

カスケード削除は、Android 2.2 に最初に含まれる Sqlite バージョン 3.6.19 までサポートされていません。

幸いなことに、代替手段があります。

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これは、トリガーの動作を説明する名前にすぎないことに注意してください。これは、私が使用するパターンにすぎません。好きな名前を付けることができると思います。

于 2012-05-23T12:15:44.587 に答える
1

SQLite ドキュメントによると、Foreign Keys のサポートは 3.6.19 まで追加されませんでした。

3.5.9 を使用すると、カスケード削除を別の方法で行う必要があります。

于 2012-05-23T12:13:18.597 に答える