【问题标题】:Mysql update row to remove int secondary column gapsMysql更新行去除int二级列间隙
【发布时间】: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


【解决方案1】:

解决这个问题:

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

添加Order By

【讨论】:

    猜你喜欢
    • 2019-03-11
    • 1970-01-01
    • 1970-01-01
    • 2013-04-14
    • 1970-01-01
    • 2012-11-14
    • 2020-06-12
    • 1970-01-01
    • 2018-02-16
    相关资源
    最近更新 更多