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查询中再次连续?
顺便说一下,我确信这个过程有一个技术术语.任何人?
更新:"序列"列不是主键.它仅用于确定记录在应用程序中显示的顺序.
......然后,正如本问题其他部分所述,您不应该更改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)
(查询未经测试.)
这将把所有以下值"洗牌"为一.
| 归档时间: |
|
| 查看次数: |
5159 次 |
| 最近记录: |