3

我需要改变表的所有主键

UPDATE TODO SET id = id + 1 

但我做不到( Ahmad Al-Mutawa 的演示回答)描述了原因。不能像这样更改主键。

我也不能根据这是 sqlite 来改变表:http ://www.sqlite.org/omited.html

我正在考虑对其他列进行一些硬编码的递归更改,但是如果没有 tsql 和存储过程,我很难理解如何做到这一点?

4

3 回答 3

6

当你执行你的UPDATE命令时,你会暂时得到重复的 ID。

为避免这种情况,请分两步更改 ID。
首先,选择一个大于最大 ID 的数字,并将其添加到所有 ID:

UPDATE TODO SET id = id + 1000000000

然后,从所有 ID 中减一:

UPDATE TODO SET id = id - (1000000000 - 1)
于 2012-11-07T08:39:43.557 回答
2

它不起作用

如果不首先更改表(通过删除 PRIMARY 键属性),就不可能更新 SQLite 主键。

这是SQLFiddle 演示

于 2012-11-07T07:51:10.503 回答
1

不确定 Sqlite 是否具有禁用主键的功能。如果是,您可以禁用它,更新表并重新打开主键。

于 2012-11-07T07:47:40.513 回答