alter sqlite表在多列上添加唯一约束
我有一个由sqlite表支持的ContentProvider。所以创建我的表我使用alter sqlite表在多列上添加唯一约束
public class H extends SQLiteOpenHelper {
@Override
public void onCreate(SQLiteDatabase sqliteDatabase) {
…// here I defined my original table without constraints
}
}
最初创建时,该表具有列:name,age,height。没有限制。没有。
现在我需要添加约束到表。所以我增加了DATABASE_VERSION,然后在onCreate String中添加了UNIQUE(name,age) ON CONFLICT REPLACE
。 我的问题是,我应该怎么做onUpgrade
方法?更简单地说:我怎样才能拨打ALTER TABLE
来增加限制?我尝试失败
ALTER TABLE myTable ADD UNIQUE(name,age) ON CONFLICT REPLACE
以下是错误消息:
Caused by: android.database.sqlite.SQLiteException: near "CONSTRAINT": syntax error (code 1): , while compiling: ALTER TABLE myTable ADD CONSTRAINT UNIQUE(name,age) ON CONFLICT REPLACE
#################################################################
Error Code : 1 (SQLITE_ERROR)
Caused By : SQL(query) error or missing database.
(near "CONSTRAINT": syntax error (code 1): , while compiling: ALTER TABLE myTable ADD CONSTRAINT UNIQUE(name,age) ON CONFLICT REPLACE)
修改表中SQLite是相当有限的。然而,您的目的CREATE UNIQUE INDEX也适用。
创建唯一约束与创建唯一索引之间通常没有区别。参见:
SQLite - Any difference between table-constraint UNIQUE & column-constraint UNIQUE?https://dba.stackexchange.com/questions/144/when-should-i-use-a-unique-constraint-instead-of-a-unique-index
所以你的情况改变你的代码,使用应更改代码在你的onCreate使用CREATE INDEX的语法来代替。
请注意,如果您的表已经有重复的条目,这可能仍然失败。
你不能在SQLite的一个ALTER TABLE
添加约束。
仅支持ALTER TABLE 命令的RENAME TABLE和ADD COLUMN变体。其他类型的ALTER TABLE操作(例如 DROP COLUMN,ALTER COLUMN,ADD CONSTRAINT等)将被省略。