当前位置: 首页 > 面试题库 >

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

苍德寿
2023-03-14
问题内容

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

1
2
3
4

…成为…

1
2
4

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

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

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


问题答案:

如果该字段是您的主键…

…然后,如该问题的其他地方所述,您不应该更改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;

(查询未经测试。)

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



 类似资料:
  • 想改进这个问题吗 通过编辑此帖子,更新问题,使其只关注一个问题。 我需要删除此电话号码中重复的号码序列,并使用正则表达式稍微更改格式 这就是我拥有的(83)9 9954-0720/(83)9 9954-0725/(83)3531-442 我需要做的是(83)9 9954-0720/0725,(83)3531-442 如果有人能帮我我会很感激的

  • 问题内容: 我正在使用WebDriver,并且已经下载了InternetExplorerDriver,并且想知道下载后如何处理? 这就是说要把驾驶员放在我的路上。不确定他们到底在说什么。 有人使用过吗?如果可以,您是否可以提供有关如何设置它的详细步骤,使其能够正常工作? 我收到以下错误: 驱动程序可执行文件的路径必须由webdriver.ie.driver系统属性设置 我下载了IE和Chrome驱

  • 问题内容: 如何使用Java获取硬盘的序列号? 问题答案: 该序列号是由操作系统在格式化驱动器时创建的,而不是制造商的序列号。它是唯一的,因为它是根据当前时间信息动态创建的。AFAIK,没有返回制造商SN的API。充其量,可以读取高清固件的序列号,但这将涉及一些非常底层的API调用。请记住,即使您获得该编号,也无法保证该编号是唯一的,因为每个制造商都可以根据需要分配编号。

  • 问题内容: 我怎样才能得到一个的使用驱动器上? 我想使用Python模块来执行此操作,而不是运行诸如的外部程序。也许使用模块? 问题答案: 如您所建议,fcntl是在Linux上执行此操作的方法。您要转换的C代码如下所示: 在Ubuntu 9.10上将其翻译成Python,它有点像这样: 抱歉,我将原始的C结构作为注释包含在内非常有用。另外,我对和模块都还很陌生,所以我可能正在做一些单调的事情。无

  • 问题内容: 我正在尝试停止执行例程,但是我找不到实现此目的的方法。我当时在考虑使用第二个频道,但是如果我从中读取它会阻止它,不是吗?这是一些代码,我希望这些代码可以解释我要做什么。 玩这个东西 问题答案: 实现这一点的方法很少,最简单,最方便的是使用其他渠道,例如: 您也可以研究使用

  • 问题内容: 我已经在Glassfish中使用jndi资源设置了一个连接池,并对其进行了设置。我很困惑如何配置hibernate以获取它。 我遇到了很多文章,将其配置为使用C3P0连接池。好吧,我迷路了。我发现我需要设置: 数据源是否与连接池中的数据源相同? hibernate.jndi.class是什么? hibernate.connection.username和hibernate.connec