mysql - 使自动增量填充以前删除的数字

标签 mysql sql auto-increment

<分区>

Possible Duplicate:
Using unused primary keys

我创建了一个带有自动递增的 id 列的表 现在,当我删除该表中 ID 为 8、12、30 的行时。

现在当我插入一条新记录时,我想将下一条记录插入 8 然后 12 等等。

有没有办法让 MySQL 自动递增来为我做这个?

我试图将自动增量设置为某个数字,但我不想那样做。

最佳答案

那么您不想使用自动递增的列。如果要填补空白,请将其设置为 int 列并处理存储过程或插入中的逻辑。

编辑:

因为它是一个 int 列,您可以按数字对它们进行排序。只需执行 SELECT Ids FROM Table Order By IDs 即可获取所有 ID 并检查返回数据集中的间隙。

执行此操作可能有更流畅的方法,但您可以使用游标循环结果并与在整个循环中递增的 INT 变量进行比较。当您发现一个间隙(不匹配)时 - 打破循环并使用该 INT 值作为您的 INSERT id。

我不会为您编写代码,但这些是让您朝着正确方向前进的一些步骤。它应该是您应该能够处理的真正基本的编程。

希望这对您有所帮助。

编辑#2:

正如其他人指出的那样,您最好的做法就是留下空白。除非 table 上有一些长度上限并且 ID 必须为 1-30(奇怪),否则不要管它。填补空白没有任何好处。

编辑#3:

还有一件事需要考虑:如果出于某种原因您确实必须保留 1-30,请不要删除您的行。添加一列以将每一行标记为事件或不活动,然后在需要时更新不活动的行,然后将它们标记为事件。这非常 hacky,但您的要求有点 hacky,所以...

关于mysql - 使自动增量填充以前删除的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12969161/

相关文章:

android - 如何在 Android Gradle 中自动增加 versionCode

mysql - NHibernate.ISession.Linq<T>.Where(expression) 检索整个表

mysql - 查询到 mysql 数据库中的数据透视表

MySQL - 如何使用 VARCHAR 作为 AUTO INCREMENT 主键

mysql - 使用 Group BY 自动递增

sql - 如何合并具有相同名称的列的多个表

mysql - 一次更改所有记录。使用相同的输入mysql更新一个字段

MySql:按值排序结果,其中值=其他表中的值

mysql - Laravel 中删除关系时将外键设置为 'NULL'

sql - PostgreSQL解释: How do I see a plan AS IF certain tables had millions of rows?