【发布时间】:2019-07-09 18:22:47
【问题描述】:
这就是我的表格与几条记录的样子。
+--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 中的表实时查询来做到这一点.
【问题讨论】:
-
事实上,像您展示的那样的
UPDATE语句将消除间隙,但您应该添加ORDER BY ord以确保它保留顺序。演示:sqlfiddle.com/#!9/8d29db/1 -
确定@BillKarwin 我找到了同样的例子,谢谢。
标签: mysql performance gaps-in-data