MysqL> create table t (i int);
MysqL> insert into t values (1), (2), (3), (100), (4);
MysqL> select * from t;
+------+
| i |
+------+
| 1 |
| 2 |
| 3 |
| 100 |
| 4 |
+------+
MysqL> set @seq := 0;
MysqL> update t set i = (@seq:=@seq+1);
Rows matched: 5 Changed: 2 Warnings: 0
MysqL> select * from t;
+------+
| i |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
+------+
@ChristianKuetbach的评论很有意义。我回答了一种解决问题的方法,但是关于这些ID值是否用于表的主键,问题尚不清楚。
这些值是主键ID,则应重新考虑按照描述的方式对它们重新编号。主键值必须唯一,但不能连续。您永远不要依赖自动生成的数字是连续的甚至是顺序的。由于DELETE或ROLLBACK或失败的INSERT仍会生成ID,因此始终会丢失数字。试图强制对ID进行排序最多是毫无意义的,并且可能会导致数据引用混乱。