0

我有一个 MySQL 表,其中包含大约 2,600 个现有行,每个行都有自己的主键。

这些主键有很多随机值。我想用一组从零开始的新数字替换它们。请记住,我想更改现有行的主键值。

这可以在 MySQL 中完成吗?

4

2 回答 2

2

您可以使用用户定义的变量来做到这一点:

set @i := -1; -- one less than the first id value you want
update mytable set
id = (@i := @i + 1)
order by id;

order by确保键保持相同的顺序并防止 id 在更新过程中发生冲突。

在 SQLFiddle 中查看现场演示。

于 2013-07-30T02:34:41.887 回答
2

安全的做法是删除现有列和主键并分配一个新列。

alter table t drop primary key, add newkey int primary key auto_increment;

这将添加一个新的自动递增主键。

你可以在SQL Fiddle看到这个。

于 2013-07-30T00:52:17.177 回答