我如何排序这样的行:
如果我有这些带有数字ID的行:
1 | 2 | 3 | 100 | 4
查询将对它们进行排序,如下所示:
1 | 2 | 3 | 4 | 5
将ID为 100* 到 4 的行和ID为 4 到 5 的行更新 *
换一种说法
更新不按顺序的行。
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进行排序最多是毫无意义的,并且可能会导致数据引用混乱。