我们如何在sqlite中删除外键?

ksh*_*f_x 4 sqlite android

我正在使用SQLite数据库.我有一个表,其中包含2个其他表的主键作为外键; 我想删除其中一个.这是表的代码:

protected static final String Item_places=(" CREATE TABLE " 
    + Item_place + "(" 
    + place_id + " INTEGER ," 
    + Item_id + " INTEGER  ," 
    + "FOREIGN KEY("+place_id+ ") REFERENCES " + PlaceTable + "("+ PlaceID+ " ) ON DELETE CASCADE" 
    + "FOREIGN KEY("+Item_id+ ") REFERENCES "+ contentTable+ "("+contentID+"));"); 
Run Code Online (Sandbox Code Playgroud)

Phi*_*art 5

您需要一个ALTER TABLE DROP CONSTRAINT命令,但SQLite不支持此命令,请参阅如何从sqlite(3.6.21)表中删除约束?解决方法.


Mau*_*ker 5

这是一个老问题,但最好提供更新的答案.

从API 16(Aka Android 4.1)开始,可以使用启用FK约束SQLiteDatabase#setForeignKeyConstraintsEnabled(boolean enabled).

根据文档:

设置是否为数据库启用外键约束.

默认情况下,数据库不强制执行外键约束. 此方法允许应用程序启用外键约束.每次打开数据库时都必须调用它,以确保为会话启用了外键约束.

要使其工作,请在自定义内部SQLiteOpenHelper使用以下代码:

@Override
public void onConfigure(SQLiteDatabase db) {
    // Enable FK constraints.
    db.setForeignKeyConstraintsEnabled(true);
    super.onConfigure(db);
}
Run Code Online (Sandbox Code Playgroud)