mysql将一个项目id设置为自动增量最大id

mysql将一个项目id设置为自动增量最大id,mysql,Mysql,例如,一个表中有几个项目 id |name|info 1 |Jim |Male 2 |Rob |Male 表的id是自动递增的,现在我想将Jim的行更新到Rob的底部,并获取最新的id,aka id |name|info 2 |Rob |Male 3 |Jim |Male 获取(3)的id,sql表达式是什么 由于不能在同一个更新查询中选择max(id),因此必须将max(id)定义为变量。您需要的查询: SET @max = (SELECT max(`id`) FROM

例如,一个表中有几个项目

 id |name|info
 1  |Jim |Male
 2  |Rob |Male
表的id是自动递增的,现在我想将Jim的行更新到Rob的底部,并获取最新的id,aka

 id |name|info
 2  |Rob |Male
 3  |Jim |Male

获取(3)的id,sql表达式是什么

由于不能在同一个更新查询中选择max(id),因此必须将max(id)定义为变量。您需要的查询:

SET @max = (SELECT max(`id`) FROM `table` FOR UPDATE);
UPDATE `table` SET `id` = @max+1 WHERE `name` = "Jim";

编辑:您不应该更新id,因为它是唯一的标识符。如果要使用排序方法,应该添加一个整数列“position”。

因为不能在同一个更新查询中选择max(id),所以必须将max(id)定义为变量。您需要的查询:

SET @max = (SELECT max(`id`) FROM `table` FOR UPDATE);
UPDATE `table` SET `id` = @max+1 WHERE `name` = "Jim";

编辑:您不应该更新id,因为它是唯一的标识符。如果您想使用排序方法,您应该添加一个整数列“position”。

自动增量列没有更新。您可以删除Jims行,然后再次插入它,它将是id=3

 DELETE FROM `table` where id = 1
然后


“自动增量”列没有更新。您可以删除Jims行,然后再次插入它,它的id将为3

 DELETE FROM `table` where id = 1
然后


这听起来好像您想将id用于某种目的,而不仅仅是识别记录,比如排序。不要那样做。这不是id的工作。这听起来好像你想将id用于某种目的,而不仅仅是识别记录,比如排序。不要那样做。这不是id的工作。您可能需要将更新的
添加到第一个查询中。以防有人在更新前偷偷进入并插入另一条记录。另外,除非你真的必须这样做,否则不要弄乱自动增量,它会咬你的。@Vatev:当然!我没有把重点放在安全性上,但是我编辑了我的答案以包含它。行是自动增量的,在我更新了id之后,我怎么能让自动增量继续?否则在我插入一个新的id后,该id将被复制。你必须
更改TABLE TABLE auto_increment=max(id)…
,它会变得非常混乱。这就是为什么不应该更新id列!那个“因为我们数据库中的一些旧数据被污染了,我们必须将它们移到新的位置,而不能改变表的结构;您可能需要将更新的
添加到第一个查询中。以防有人在更新前偷偷进入并插入另一条记录。另外,除非你真的必须这样做,否则不要弄乱自动增量,它会咬你的。@Vatev:当然!我没有把重点放在安全性上,但是我编辑了我的答案以包含它。行是自动增量的,在我更新了id之后,我怎么能让自动增量继续?否则在我插入一个新的id后,该id将被复制。你必须
更改TABLE TABLE auto_increment=max(id)…
,它会变得非常混乱。这就是为什么不应该更新id列!这是因为我们数据库中的一些旧数据被污染了,我们必须将它们移动到新的位置,而不能改变表的结构;