我刚刚谈到这个非常简单的情况,我需要将主键移动到某个值.假设下表:
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检查?
找到一个不错的支点,并围绕该支点移动数据.例如,如果您的所有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)
有时候,你可以找到一个类似的支点,但公式只是有点难度.