【问题标题】:I want to reuse the gaps of the deleted rows我想重用已删除行的间隙
【发布时间】:2013-03-05 04:55:16
【问题描述】:

我的一张表上有一个自动递增的主键。如果我有 3 行,例如,删除第三行,我只剩下两行。但是,如果我插入一个新行,它的 ID 自动为 4,并且 ID 为 1、2 和 4。

如何重新使用删除的ID,让新插入的记录的ID自动为3?

【问题讨论】:

  • 请不要。没必要。
  • 你为什么要这样做?主键的实际值无论如何都不重要。如果你出于某种原因依赖它,那么你的设计就是错误的。
  • 如果您需要一个没有间隙的编号系统,正确的关系设计将要求您将该列设置为不是主键,因为它的重要性超出了唯一性;例如,它是支票账户中的支票号码。主键应该唯一地标识行。

标签: mysql auto-increment


【解决方案1】:

真的,你不应该。主键应该是纯技术的、无意义的值。他们的价值,以及一代人的单调,根本不重要。

此外,由于它是行的 PK,因此在其他表中可能有数十(或数千)行引用此 ID(外键),因此在表中更改它是不够的:您将必须到处改变它。

这个 ID 很有可能在其他应用程序中也被引用(例如,它可能是浏览器中带有书签的 URL 的一部分),并且更改它的值会使所有这些引用无效。

您永远不应该更改主键。它应该是不可变的,永远。

编辑:我误读了这个问题。您实际上想重用旧 ID。这也是一个坏主意。现有的引用会引用它们最初引用的东西。当您更改电话号码并且它被其他人重复使用时,就会发生这种情况,他们开始接到许多仍然认为这个电话号码是您的人的电话。很烦人。你想避免这种情况。

【讨论】: