<分区>
Possible Duplicate:
Using unused primary keys
我创建了一个带有自动递增的 id 列的表 现在,当我删除该表中 ID 为 8、12、30 的行时。
现在当我插入一条新记录时,我想将下一条记录插入 8 然后 12 等等。
有没有办法让 MySQL 自动递增来为我做这个?
我试图将自动增量设置为某个数字,但我不想那样做。
<分区>
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。
我不会为您编写代码,但这些是让您朝着正确方向前进的一些步骤。它应该是您应该能够处理的真正基本的编程。
希望这对您有所帮助。
正如其他人指出的那样,您最好的做法就是留下空白。除非 table 上有一些长度上限并且 ID 必须为 1-30(奇怪),否则不要管它。填补空白没有任何好处。
还有一件事需要考虑:如果出于某种原因您确实必须保留 1-30,请不要删除您的行。添加一列以将每一行标记为事件或不活动,然后在需要时更新不活动的行,然后将它们标记为事件。这非常 hacky,但您的要求有点 hacky,所以...
关于mysql - 使自动增量填充以前删除的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12969161/
相关文章:
android - 如何在 Android Gradle 中自动增加 versionCode
mysql - NHibernate.ISession.Linq<T>.Where(expression) 检索整个表
MySQL - 如何使用 VARCHAR 作为 AUTO INCREMENT 主键
mysql - 一次更改所有记录。使用相同的输入mysql更新一个字段
mysql - Laravel 中删除关系时将外键设置为 'NULL'
sql - PostgreSQL解释: How do I see a plan AS IF certain tables had millions of rows?