我的table:
CREATE TABLE "tests" (
"testId" INTEGER PRIMARY KEY AUTOINCREMENT,
"testUser" INTEGER UNIQUE,
"testName" INTEGER UNIQUE
);
简单的向上插入起作用:
INSERT INTO tests (testUser,testName)
VALUES (2,5)
ON CONFLICT (testUser)
DO UPDATE SET testUser=2, testName=5
但我有两个UNIQUE
列,需要在testUser
或testName
中发生冲突时触发UPDATE
。因此,我需要在ON CONFLICT
部分中检查它们:
INSERT INTO tests (testUser,testName)
VALUES (2,9)
ON CONFLICT (testUser, testName)
DO UPDATE SET testUser=2, testName=9
上述SQL命令失败,并显示以下错误:
ON冲突子句与任何主键或唯一约束都不匹配
DBFIDDLE和我尝试过的组合。
1.出了什么问题?在upsert查询中不能有多个唯一的ON CONFLICT
列吗?
1.除了REPLACE INTO
之外,还有没有其他方法可以达到upsert的效果?
我可能会使用REPLACE INTO
,但REPLACE INTO
执行的外键约束会在DELETE
上的另一个表中造成严重破坏。
2条答案
按热度按时间hsgswve41#
错误是非常明显的。
对于
ON CONFLICT (testUser, testName)
,您需要一个组合的唯一主键或组合的主键。如样品中所示
55ooxyrt2#
从Sqlite版本3.35.0开始,在SQLite版本3.35.0(2021-03-12)中,您可以有多个ON冲突子句和一个没有冲突目标的DO UPDATE解决方案。因此,您可以将命令编写为:
或
请注意,要在DBFIDDLE中测试它,您需要选择高于3.35.0的SQLite版本