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

时间:2011-08-28 21:46:31

标签: android sqlite

我正在使用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+"));"); 

2 个答案:

答案 0 :(得分:5)

您需要ALTER TABLE DROP CONSTRAINT命令SQLite doesn't support this,有关解决方法,请参阅How do I DROP a constraint from a sqlite (3.6.21) table?

答案 1 :(得分:5)

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

自API 16(Aka Android 4.1)以来,可以使用SQLiteDatabase#setForeignKeyConstraintsEnabled(boolean enabled)打开FK约束。

作为per the docs

  

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

     

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

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

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