我需要改变表的所有主键
UPDATE TODO SET id = id + 1
但我做不到( Ahmad Al-Mutawa 的演示回答)描述了原因。不能像这样更改主键。
我也不能根据这是 sqlite 来改变表:http ://www.sqlite.org/omited.html
我正在考虑对其他列进行一些硬编码的递归更改,但是如果没有 tsql 和存储过程,我很难理解如何做到这一点?
我需要改变表的所有主键
UPDATE TODO SET id = id + 1
但我做不到( Ahmad Al-Mutawa 的演示回答)描述了原因。不能像这样更改主键。
我也不能根据这是 sqlite 来改变表:http ://www.sqlite.org/omited.html
我正在考虑对其他列进行一些硬编码的递归更改,但是如果没有 tsql 和存储过程,我很难理解如何做到这一点?
当你执行你的UPDATE
命令时,你会暂时得到重复的 ID。
为避免这种情况,请分两步更改 ID。
首先,选择一个大于最大 ID 的数字,并将其添加到所有 ID:
UPDATE TODO SET id = id + 1000000000
然后,从所有 ID 中减一:
UPDATE TODO SET id = id - (1000000000 - 1)
如果不首先更改表(通过删除 PRIMARY 键属性),就不可能更新 SQLite 主键。
不确定 Sqlite 是否具有禁用主键的功能。如果是,您可以禁用它,更新表并重新打开主键。