【问题标题】:Set AUTO_INCREMENT in all tables within a MySQL DB to the largest inserted increment value将 MySQL DB 中所有表中的 AUTO_INCREMENT 设置为插入的最大增量值
【发布时间】:2017-06-08 08:38:56
【问题描述】:

是否可以将数据库中所有表的 AUTO_INCREMENT 值设置为最新的插入值?

更新 例如,如果我的表有 1000 条记录,其增量值从 1..1000 开始,并且我删除了最后 900 条记录,则该字段中的最后一个增量值为 100。我想将 AUTO_INCREMENT 设置为 101。这适用于所有表在数据库中。

【问题讨论】:

  • 如果表使用InnoDB引擎,你只需重启MySQL服务器服务即可。
  • 您想在删除后将 901-1000 重置为 1-100 并将自动增量重置为 101?

标签: mysql


【解决方案1】:

是否可以将数据库中所有表的 AUTO_INCREMENT 值设置为最新的插入值?

AUTO_INCREMENT 的值实际上是下一个可用值,即最大值加 1。

如果您的表使用InnoDB 引擎,那么您所要做的就是重新启动 MySQL 服务器(不是计算机,而是 MySQL 服务)。

documentation 解释了AUTO_INCREMENT 的值如何存储(在内存中,而不是在磁盘上)并在服务启动时恢复:

为了在服务器重启后初始化一个自动增量计数器,InnoDB 在第一次插入包含AUTO_INCREMENT 列的表时执行以下语句的等效语句。

SELECT MAX(ai_col) FROM table_name FOR UPDATE;

InnoDB 递增语句检索到的值并将其分配给列和表的自动递增计数器。默认情况下,该值以1 递增。

【讨论】:

    【解决方案2】:

    这是自动完成的。

    引用manual

    您不能将计数器重置为小于或等于当前使用的值。对于 InnoDB 和 MyISAM,如果该值小于或等于当前 AUTO_INCREMENT 列中的最大值,则将该值重置为当前最大 AUTO_INCREMENT 列值加一。

    【讨论】:

    • 如果选择每个表中增量的最大值和ALTER TABLE tablename1 AUTO_INCREMENT = $max+1
    • 好吧,那么你显然增加了 auto_increment 值。你可以随心所欲地增加它,而不是减少它。
    • 如果我的表有 1000 条记录,增量值从 1..1000 开始,并且我删除了 900 条记录,我不能将 AUTO_INCREMENT 设置为 101?
    • 是的,可以吗?你知道,有什么好方法可以找出答案?试试看……
    • @PrimozRome 关于您的编辑...您真的阅读了我的回答吗?只需为每张桌子做一个alter table <table> auto_increment = 1 就可以了。你有这方面的问题吗?有任何错误信息吗?
    【解决方案3】:

    AUTO_INCREMENT 实际上会记住它插入的最后一个数字,即使数据已被删除。因此,如果您的 AUTO_INCREMENT 编号小于 100,您可以临时插入一个 AUTO_INCREMENT 编号 = 100 的空白数据,然后将其删除。下次插入数据时,会转到101。

    您可以使用此查询将 AUTO_INCREMENT 数字重置为表中当前最高的数字。

    ALTER TABLE 表名 AUTO_INCREMENT = 1;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-13
      • 2018-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-25
      • 1970-01-01
      • 2012-11-30
      相关资源
      最近更新 更多