如何重置序列号才能连续?

Urb*_*coz 7 mysql sql database-design sequencing

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

1
2
3
4
Run Code Online (Sandbox Code Playgroud)

... ...变

1
2
4
Run Code Online (Sandbox Code Playgroud)

有没有一种巧妙的方法来"重置"排序,所以它在一个SQL查询中再次连续?

顺便说一下,我确信这个过程有一个技术术语.任何人?

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

Lig*_*ica 7

如果该字段是您的主键...

......然后,正如本问题其他部分所述,您不应该更改ID.ID已经是唯一的,您既不需要也不想重复使用它们.

现在,那说......


除此以外...

对于某些应用程序定义的排序,您很可能有不同的字段(也就是PK).只要这种排序不是某些其他领域固有的(例如,如果它是用户定义的),那么这没有任何问题.

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

我会UPDATE按升序诱惑并应用递增变量.

SET @i = 0;
UPDATE `table`
   SET `myOrderCol` = @i:=@i+1
 ORDER BY `myOrderCol` ASC;
Run Code Online (Sandbox Code Playgroud)

(查询未经测试.)

每次删除项目都这样做似乎相当浪费,但不幸的是,如果您想要保持列的完整性,那么使用这种手动排序方法并不是很多.

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

SET @i = 5;
UPDATE `table`
   SET `myOrderCol` = @i:=@i+1
 WHERE `myOrderCol` > 5
 ORDER BY `myOrderCol` ASC;
Run Code Online (Sandbox Code Playgroud)

(查询未经测试.)

这将把所有以下值"洗牌"为一.