我有一个表,其中有一个列,我想对其施加唯一约束。 然后,我想执行一个查询来更新该列的值,并且最终结果不应违反唯一约束。这在mssql中可以完美运行,但是sqllite光荣地失败了此任务,抛出了唯一的约束异常
这是一个例子
Create table page (
id BLOB NOT NULL CONSTRAINT "PK_Page" PRIMARY KEY,
Name nvarchar(200),
ParentId BLOB NOT NULL,
Placement int
);
CREATE UNIQUE INDEX "IX_Page_ParentId_Placement" ON "Page" ("ParentId", "Placement");
insert into page (id,name,parentid,placement) values ('id1','A','r',1);
insert into page (id,name,parentid,placement) values ('id2','A','r',2);
insert into page (id,name,parentid,placement) values ('id3','A','r',3);
insert into page (id,name,parentid,placement) values ('id4','A','r',4);
update page set placement = placement + 1;
https://www.db-fiddle.com/f/rSz1iU1jkcDBdahqJNqGat/0
反转插入语句的顺序是可行的,但在生产环境中则行不通。
有解决方案吗?
答案 0 :(得分:1)
一种方法是使用两次更新:
update page
set placement = - (placement + 1);
update page
set placement = - (placement + 1);