更新NULL字段时,Android SQLite ON UPDATE CASCADE无法正常工作

时间:2014-06-03 16:27:51

标签: android sqlite cascade

在开发Android应用程序的过程中,我注意到ON UPDATE CASCADE字段更新时NULL无效。但是,当字段为NON NULL时,ON UPDATE CASCADE的工作正常。

我在网上搜索但无法找到具体的答案。

我的类扩展了SQLiteOpenHelper,我有覆盖onOpen方法,我激活了外键约束。我不相信这是问题所在,因为它在更新NULL字段时无法正常工作。

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

我使用的架构是:

CREATE TABLE IF NOT EXIST users (
    role_id INTEGER,
    user_id NUMERIC,
    username TEXT,
    PRIMARY KEY(user_id)
)

CREATE TABLE IF NOT EXIST devices (
    user_id NUMERIC,
    device_id NUMERIC,
    device_name TEXT,
    PRIMARY KEY(device_id),
    FOREIGN KEY(user_id) REFERENCES users(user_id)
        ON UPDATE CASCADE
)

INSERT INTO users (role_id, user_id, username) VALUES (1, NULL, 'test')
INSERT INTO devices (user_id, devices, device_name) VALUES (NULL, NULL, 'test')

当我们现在更新此用户行并将NULL替换为1时,更新未被级联到设备行。

1 个答案:

答案 0 :(得分:0)

“chue x”回答:

在子表中使用NULL时,不认为它与父项相关。 NULL是一个特殊值,不适用于关系约束。因此,您可以在子级中插入行(使用NULL键),而父级中不包含任何行。强制与父关系的唯一方法是将子字段声明为不可为空。