Eli*_*ite 3 sql sqlite web-sql
我创建了一个表
CREATE TABLE `tests` (`num` INTEGER UNIQUE, value VARCHAR(255))
Run Code Online (Sandbox Code Playgroud)
我向其中添加两行:
INSERT INTO `tests` VALUES(0, "a")
INSERT INTO `tests` VALUES(1, "b")
Run Code Online (Sandbox Code Playgroud)
我现在的目标是插入num= 0 的行,但为了能够做到这一点,我需要上移这两行上的索引。
当我执行时:
UPDATE `tests` SET `num` = `num` + 1 WHERE `num` >= 0
Run Code Online (Sandbox Code Playgroud)
我收到错误:
由于约束失败而无法执行语句(19 约束失败)
我的猜测是,它正在增加每一行,当它通过将其设置为 来增加第一行时1,已经有一行带有numof 1,因此失败。
在标准代码中,这可以通过向后迭代集合来解决,在 Sqlite 中有没有办法做到这一点?有没有不同的方法来解决这个问题?
如果您不就地进行更新而是在临时表的帮助下进行更新,则更新将起作用:
CREATE TEMP TABLE t2 AS SELECT * FROM tests WHERE num >= 0;
DELETE FROM tests WHERE num >= 0;
INSERT INTO tests SELECT num + 1, value FROM t2;
DROP TABLE t2;
Run Code Online (Sandbox Code Playgroud)
或者,使用足够大的增量,以免发生冲突。然后您必须再次执行此操作才能恢复到所需的值:
UPDATE tests SET num = num + 3 WHERE num >= 0;
UPDATE tests SET num = num - 3 + 1 WHERE num - 3 >= 0;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1075 次 |
| 最近记录: |