7

我有一个 MySQL 5 服务器和一个表,其中有一个 id 字段(主键)的自动增量。现在我想在两者之间添加一条记录,因此我必须将所有其他 id 加一。这是我尝试过的:

UPDATE myTable SET id=id+1 WHERE id >= 53

这不起作用,因为例如已经存在 id = 52 的记录。我怎样才能做到这一点?如果他从最后一个条目开始并进行更新,我认为它应该可以工作。但是怎么做?

4

4 回答 4

14

我看不出有什么好的理由。只有问题。在运行以下语句之前,请检查您是否FOREIGN定义了引用 this 的键id。他们设置为ON UPDATE CASCADE? 另外,您是否有与此表相关的触发器?

但首先考虑一下,为什么你(认为你)需要这个。它会用于订购桌子吗?在这种情况下,正如@Mark 指出的那样,您应该使用单独的列来指定所需的顺序。


但是,如果您决定确实需要这个,请使用:

UPDATE myTable 
SET id = id + 1 
WHERE id >= 53
ORDER BY id DESC  ;
于 2012-04-06T12:47:09.837 回答
6

快速而肮脏,您只需 2 个步骤即可完成。

  • 将 id 增加到比所有其他人更高的数字
  • 将所有ID减少到您想要的数字

像那样

UPDATE myTable SET id=id+10000 WHERE id >= 53
UPDATE myTable SET id=id-9999 WHERE id >= 53
于 2012-04-06T12:42:38.150 回答
0

我想这样的工作:

UPDATE myTable SET id=id+1 WHERE id >= (select id from myTable order by id DESC)
于 2012-04-06T12:38:45.443 回答
0

我遇到了同样的问题。并且还尝试了 OP 和 @Romain Hoog 的查询。但没有成功。

最后在excel中导出整个表的数据并在excel中完成(不是一个一个,而是使用使它非常快的技巧)。

然后备份原始表重新创建新表并从更新的 excel 导入数据。

于 2012-04-06T12:41:55.530 回答