您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何按ID以自然顺序对行进行重新排序

如何按ID以自然顺序对行进行重新排序

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进行排序最多是毫无意义的,并且可能会导致数据引用混乱。

其他 2022/1/1 18:48:12 有327人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶