Mysql:如果缺少id,如何以递增方式获取更新行?

时间:2012-07-26 04:58:22

标签: mysql sql

我有一个都有唯一ID的数据库。它们按升序排列,我想这样做..

update text SET name = 'hello french man' where id=1;

并将每行的名称更改为我拥有的数据。所以我可以继续增加

id = id + 1;

但问题出现在这里,我过去删除了一些行,因此缺少ID。例如,第1,2,3,5行。因为我删除了第4行,所以如何在不跳过名称的情况下更新每一行,因为更新第4行不会执行任何操作?

至关重要的是,我要对所有这些进行1-1映射,并且不要跳过任何名称,因为顺序很重要。

谢谢,非常感谢任何帮助!

1 个答案:

答案 0 :(得分:3)

您可以使用此解决方案:

UPDATE tbl a
INNER JOIN
(
    SELECT id, @rn:=@rn+1 AS rn
    FROM tbl
    CROSS JOIN (SELECT @rn:=0) var_init
    ORDER BY id
) b ON a.id = b.id
LEFT JOIN
(
    SELECT id, @rn2:=@rn2+1 AS rn
    FROM tbl
    CROSS JOIN (SELECT @rn2:=-1) var_init
    ORDER BY id
) c ON b.rn = c.rn
SET a.id = COALESCE(c.id, a.id + 1)

See the SQLFiddle Demo