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

如何重用auto_increment值?[重复]

蔺昊穹
2023-03-14
问题内容

这个问题已经在这里有了答案

8年前关闭。

可能重复:

mysql中id(auto_increment列)的碎片

我的数据库中有此列。假设其名称为“ threadid”。它包含赋予每个线程以区别的唯一ID。

线程号9 8 7 6 5 4 3 2 1

假设我已删除ID为5和6的线程。

线程号9 8 7 4 3 2 1

但是,当删除后有一个提交时,给该线程的唯一ID是10。不是5。我认为这不是整齐的。

如何获得列中的最小可能值?(在这种情况下,为5.)

我认为我可以使用MIN()获得列的最小值,并保持+1直到获得未使用的唯一值,但是我认为这太复杂了。

有没有简单的方法可以做到这一点?

谢谢。


问题答案:

我同意所有人的其他观点,实现自己的最小查找公开号码是一个非常糟糕的主意。但是在我工作的地方,给我们一个封闭的数字集,当释放一个数字时,我们必须重用。

这是我们的方法。

我们不会删除该行,而是将每列的所有值都设置为null,所以您要做的是在SELECT min(id)WHERE columnA IS
NULL的情况下进行操作,如果返回值,则将重用,否则,插入一个新行。



 类似资料:
  • 问题内容: 我怎样才能 重新 在一个领域? 我希望它从头开始计算。 问题答案: 您可以使用以下方法重置计数器: 对于InnoDB,您不能将值设置为小于或等于当前最大索引。(引自ViralPatel): 请注意,您不能将计数器重置为小于或等于已使用的任何值。对于MyISAM,如果该值小于或等于AUTO_INCREMENT列中当前的最大值,则该值将重置为当前的最大值加1。对于InnoDB,如果该值小于

  • 问题内容: 我有一个带有AUTO_INCREMENT主键的表。如果删除表中的最后一行,则下一个插入的行将具有相同的ID。 有没有办法让MySQL表现得像t-SQL,而不重用ID?然后,如果从数据库外部错误地引用了已删除的行,则不会返回任何行,突出显示错误。 问题答案: 在这种情况下,您可能不应该在可公开访问的地方使用AUTO_INCREMENT索引。 可以从其他数据派生关键字段,或者使用其他机制来

  • 在Java中的ArrayList或List声明提出了疑问并回答了如何声明一个空的,但是我如何声明一个带有值的ArrayList? 我尝试了以下操作,但它返回了一个语法错误:

  • 我有一个简单的项目,该项目将个人信息提供给数据库(sqlite),现在我想避免插入重复值(按名称),我不能做什么?谢谢你们

  • 问题内容: 我正在尝试学习Hibernate的工作方式,并且几乎陷入了无法接受的学习曲线。我看不到如何使Hibernate尊重我的对象的auto_increment策略。而是使用现有ID(从1开始)覆盖数据库中的条目。 我有一个简单的对象,由定义如下的MySQL表支持: 我已经确认使用SQL()手动插入多个Foo对象是正确的。 我的Java类具有使用如下注释来指定的ID: 然后,我执行一些测试代码

  • 我有一个数据框,看起来像: 因为行(1,2)和行(3,4)具有重复的