SQLite表约束 - 在多列上唯一
我可以在SQLite网站上找到关于此的语法“图表”,但没有示例和我的代码崩溃。我有其他表在单个列上具有唯一约束,但是我想向两列上的表添加约束。这就是我所引发的带有“语法错误”消息的SQLiteException。SQLite表约束 - 在多列上唯一
CREATE TABLE name (column defs)
UNIQUE (col_name1, col_name2) ON CONFLICT REPLACE
我基于以下这样:
要清楚,我所提供的链接的文件说,应该CONTSTRAINT name
我约束定义之前。
可能导致解决方案的东西是,无论在括号括起来的列定义之后,调试器都会抱怨什么。
如果我把
...last_column_name last_col_datatype) CONSTRAINT ...
错误是附近的 “约束”:语法错误
如果我把
...last_column_name last_col_datatype) UNIQUE ...
错误是附近的 “独一无二”:语法错误
把列定义节中的唯一声明:
CREATE TABLE name (column defs, UNIQUE (col_name1, col_name2) ON CONFLICT REPLACE);
工作例如:
CREATE TABLE a (i INT, j INT, UNIQUE(i, j) ON CONFLICT REPLACE);
哇。我可以让你的简单例子完美地工作。一个更复杂的例子是踢我的屁股。当你有十几个人时,很难找到多余的括号。我终于搞定了。感谢您的简洁回答。 – Justin 2011-08-26 20:08:28
不错的答案+1。 此创建语法是否允许我使用常规插入方法,而不是SQLiteDatabase.CONFLICT_REPLACE标志的insertWithOnConflict? – 2014-01-25 16:23:34
我使用'ON CONFLICT IGNORE'(还没有尝试替换)超过2列,但我没有看到它荣幸的独特约束,它只是愉快地添加重复。 – Michael 2014-07-17 00:10:58
那么,你的语法,包括链接不匹配,它规定:
CREATE TABLE name (column defs)
CONSTRAINT constraint_name -- This is new
UNIQUE (col_name1, col_name2) ON CONFLICT REPLACE
UNIQUE在开始之前缺少一个逗号。 – magid 2016-11-29 06:48:55