【问题标题】:Mysql restart auto int primary keymysql重启自动int主键
【发布时间】:2012-01-16 18:58:33
【问题描述】:

您好,是否可以将已删除的自动递增主键保存在我的数据库中。例如

我有 Name_ID

  • 1
  • 2
  • 3
  • 4

如果我删除主键 4 并再次插入,我插入的主键应该是 4。

所以。姓名 1 2 3 4 5


我删除了主键 5(名称 1 2 3 4)


我添加了一个数据主键应该是 5 而不是 6。谢谢!

【问题讨论】:

  • 如果您不想自动递增,为什么还要 auto 递增字段?如果您删除密钥 2,您希望发生什么?

标签: mysql database primary-key auto-increment


【解决方案1】:

在这些情况下,自动生成的字段总是有间隙。

如果您有一个审计或历史表存储 ID = 4、ID = 5 的行怎么办?然后再次删除它们?你如何区分行?

在您的示例中,您只删除了最后一行?你删除的ID = 1是什么?然后呢?

也就是说,它们只是该表(以及任何关联的表,如审计表)唯一的内部编号:不应附加任何外部含义

【讨论】:

  • 谢谢!我不会使用这种方法然后看到缺点。 :))
  • @rjtubera:自动增量字段的差距是标准和预期的行为:不是缺点。 “滚你自己”会有更多弊端,以泪水收场
【解决方案2】:

与此处的其他 cmets 和答案一样,我不建议这样做,特别是如果自动增量列中的数据被外部引用,但您可以通过 ALTER TABLE 查询将下一个自动增量编号设置为特定值

ALTER TABLE T_YourTable AUTO_INCREMENT=4

您也可以删除该列,然后重新添加具有相同属性的列(如果您有很多行,这可能会很昂贵)。

【讨论】:

    【解决方案3】:

    为什么?

    它只是一个唯一的标识符。

    您还会在数据库集群以及回滚与已提交事务重叠的插入事务时遇到间隙 - 而不仅仅是在您删除数据时。

    填补空白的机制会很复杂、缓慢且难以维护 - 而且它不是必需的。

    【讨论】:

      猜你喜欢
      • 2018-11-30
      • 2023-04-03
      • 2010-12-11
      • 2011-10-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-26
      • 2010-12-09
      • 2015-11-13
      相关资源
      最近更新 更多