更新主键而不触发唯一键冲突

MPe*_*ier 3 sql sqlite

我刚刚谈到这个非常简单的情况,我需要将主键移动到某个值.假设下表:

CREATE TABLE Test (
 Id INTEGER PRIMARY KEY,
 Desc TEXT);
Run Code Online (Sandbox Code Playgroud)

加载以下值:

INSERT INTO Test VALUES (0,'one');
INSERT INTO Test VALUES (1,'two');
Run Code Online (Sandbox Code Playgroud)

如果尝试更新主键,它当然会失败:

UPDATE Test SET Id = Id+1;
Run Code Online (Sandbox Code Playgroud)

错误:列ID不唯一

有没有办法在更新查询运行之前暂停unicity检查?

Ric*_*iwi 7

找到一个不错的支点,并围绕该支点移动数据.例如,如果您的所有ID都是正数,则良好的数据透视表为0.

你通常会这样做

UPDATE Test SET Id = Id+1;
Run Code Online (Sandbox Code Playgroud)

改为执行此序列

UPDATE Test SET Id = -Id;
UPDATE Test SET Id = -Id +1;
Run Code Online (Sandbox Code Playgroud)

有时候,你可以找到一个类似的支点,但公式只是有点难度.