MySQL更新行以消除int辅助列的差距

时间:2019-07-09 18:22:47

标签: mysql performance gaps-in-data

这就是我的带有两个记录的表的样子。

+--ID--+--DESC--+--ORD--+
| 001  |  lal1  |  003  |
| 002  |  lal2  |  001  |
| 003  |  lal3  |  002  |
| 005  |  lal4  |  004  |
| 006  |  lal5  |  006  |
| 007  |  lal8  |  009  |
+------+--------+-------+

ORD列对于建立特定顺序是必要的,该顺序来自另一个不同于PKey的系统。

此时,问题是ORD列中的空白; 如您所见,没有数字5,7,8。

此查询无法正常工作:

SET @count = 0;

UPDATE table 
SET table.ord = @count := @count + 1;

ALTER TABLE table AUTO_INCREMENT = 1;

因为它不能消除差距。

我想要以下结果:

+--ID--+--DESC--+--ORD--+
| 001  |  lal1  |  003  |
| 002  |  lal2  |  001  |
| 003  |  lal3  |  002  |
| 005  |  lal4  |  004  |
| 006  |  lal5  |  005  |
| 007  |  lal8  |  006  |
+------+--------+-------+

与UNIX一起使用时,可以使用SORT命令并将其移到临时目录,但是我不知道是否有任何命令可以通过MySQL中的表上实时查询来执行该命令

1 个答案:

答案 0 :(得分:0)

解决这个问题:

SET @count = 0;
UPDATE tableSET table.ord = @count:= @count + 1 ORDER BY table.ord ASC;

添加Order By