使用SQLite的Android中的外键约束?关于删除级联

发布于 2021-02-02 22:50:17

我有两个表:航迹和航路点,一个航迹可以有多个航路点,但是航路点仅分配给1条航迹。

在点表的方式中,我有一个名为“ trackidfk”的列,一旦创建了轨道,该列就会插入track_ID,但是我没有在此列上设置外键约束。

删除轨道时,我想删除分配的航点,这可能吗?我读过有关使用触发器的信息,但我认为Android不支持它们。

要创建航点表:

public void onCreate(SQLiteDatabase db) {
    db.execSQL( "CREATE TABLE " + TABLE_NAME 
                + " (" 
                + _ID         + " INTEGER PRIMARY KEY AUTOINCREMENT, " 
                + LONGITUDE   + " INTEGER," 
                + LATITUDE    + " INTEGER," 
                + TIME        + " INTEGER,"
                + TRACK_ID_FK + " INTEGER"
                + " );"
              );

    ...
}
关注者
0
被浏览
265
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    支持带有on delete级联的外键约束,但是你需要启用它们。
    我只是将以下内容添加到我的SQLOpenHelper中,这似乎可以解决问题。

    @Override
    public void onOpen(SQLiteDatabase db) {
        super.onOpen(db);
        if (!db.isReadOnly()) {
            // Enable foreign key constraints
            db.execSQL("PRAGMA foreign_keys=ON;");
        }
    }
    

    我声明了我的引用列如下。

    mailbox_id INTEGER REFERENCES mailboxes ON DELETE CASCADE
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看