不工作在Android上的SQLite数据库的DELETE CASCADE外键约束 [英] foreign key constraint ON DELETE CASCADE not working in sqlite database on android

查看:267
本文介绍了不工作在Android上的SQLite数据库的DELETE CASCADE外键约束的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经创建了天表如下

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

创建为

和我有曲目表如下

and i have tracks table created as follows

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 ...

as shown above i have foreign key day_id referencing to the day_id of table days...

所以,如果我再删除相应的曲目也应删除这一天我想是...但它简化版,发生在我的情况。

So what i want is if i delete the day then corresponding track should also be deleted... But it does't happen in my case..

我有源码版本的 3.5.9

和还我增加了1号线在我的辅助类为

And also i have added 1 line in my helper class as

> db.execSQL(杂foreign_keys = ON;);

但仍然是行不通的..请帮助我..

but is still won't work.. please help me out..

推荐答案

级联删除不支持,直到SQLite的版本3.6.19,它是第一个包含在Android 2.2。

Cascading delete isn't supported until Sqlite version 3.6.19, which is first included on Android 2.2.

幸运的是有一个替代。

您可以执行另一个查询像这样下方的创建表查询:

You can execute another query like this below your create table query:

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 只是一个名字描述的触发做什么,而这仅仅是我用的图案;我相信你能说出它,你想要什么。

Note that delete_days_with_track is just a name descriptive of what the trigger does, and this is just the pattern I use; I believe you could name it anything you wish.

这篇关于不工作在Android上的SQLite数据库的DELETE CASCADE外键约束的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆