我有一个 MySQL 5 服务器和一个表,其中有一个 id 字段(主键)的自动增量。现在我想在两者之间添加一条记录,因此我必须将所有其他 id 加一。这是我尝试过的:
UPDATE myTable SET id=id+1 WHERE id >= 53
这不起作用,因为例如已经存在 id = 52 的记录。我怎样才能做到这一点?如果他从最后一个条目开始并进行更新,我认为它应该可以工作。但是怎么做?
我有一个 MySQL 5 服务器和一个表,其中有一个 id 字段(主键)的自动增量。现在我想在两者之间添加一条记录,因此我必须将所有其他 id 加一。这是我尝试过的:
UPDATE myTable SET id=id+1 WHERE id >= 53
这不起作用,因为例如已经存在 id = 52 的记录。我怎样才能做到这一点?如果他从最后一个条目开始并进行更新,我认为它应该可以工作。但是怎么做?
我看不出有什么好的理由。只有问题。在运行以下语句之前,请检查您是否FOREIGN
定义了引用 this 的键id
。他们设置为ON UPDATE CASCADE
? 另外,您是否有与此表相关的触发器?
但首先考虑一下,为什么你(认为你)需要这个。它会用于订购桌子吗?在这种情况下,正如@Mark 指出的那样,您应该使用单独的列来指定所需的顺序。
但是,如果您决定确实需要这个,请使用:
UPDATE myTable
SET id = id + 1
WHERE id >= 53
ORDER BY id DESC ;
快速而肮脏,您只需 2 个步骤即可完成。
像那样
UPDATE myTable SET id=id+10000 WHERE id >= 53
UPDATE myTable SET id=id-9999 WHERE id >= 53
我想这样的工作:
UPDATE myTable SET id=id+1 WHERE id >= (select id from myTable order by id DESC)
我遇到了同样的问题。并且还尝试了 OP 和 @Romain Hoog 的查询。但没有成功。
最后在excel中导出整个表的数据并在excel中完成(不是一个一个,而是使用使它非常快的技巧)。
然后备份原始表重新创建新表并从更新的 excel 导入数据。