一尘不染

如何重设序列号以使其连续?

sql

我有一个mysql表,其中的每一行在“序列”列中都有自己的序列号。但是,当一行被删除时,它会留下空白。所以…

1
2
3
4

…成为…

1
2
4

是否有一种巧妙的方式来“重置”排序,以便在一个SQL查询中再次变得连续?

顺便说一句,我确定此过程有一个技术术语。任何人?

更新:“序列”列不是主键。它仅用于确定记录在应用程序中的显示顺序。


阅读 225

收藏
2021-03-10

共1个答案

一尘不染

如果该字段是您的主键…

…然后,如该问题的其他地方所述,您不应该更改ID。这些ID已经是唯一的,您既不需要也不想重复使用它们。

现在,那…


否则…

对于某些应用程序定义的排序,您很有可能具有 不同的 字段(即PK)。只要此排序不是其他字段所固有的(例如,如果它是用户定义的),那么这没有什么错。

您可以使用(临时)auto_increment字段重新创建表,然后再删除auto_increment

我很想UPDATE按升序排列并应用一个递增变量。

SET @i = 0;
UPDATE `table`
   SET `myOrderCol` = @i:=@i+1
 ORDER BY `myOrderCol` ASC;

(查询未经测试。)

每次 删除项目 这样做确实很浪费,但是不幸的是,如果要维护列的完整性,使用这种手动排序方法就无能为力了。

您可以减轻负载,例如在删除myOrderCol等于的条目后5

SET @i = 5;
UPDATE `table`
   SET `myOrderCol` = @i:=@i+1
 WHERE `myOrderCol` > 5
 ORDER BY `myOrderCol` ASC;

(查询未经测试。)

这会将以下所有值“随机”减一。

2021-03-10