【问题标题】:Mysql autoincrement bug in insert select插入选择中的Mysql自动增量错误
【发布时间】:2013-11-20 04:54:45
【问题描述】:

谁能建议我解决mysql中以下错误的解决方法。

  http://bugs.mysql.com/bug.php?id=61058

这个错误是很久以前(2007 年)用 mysql 5.0 报告的,但我仍然面临着 mysql 5.6 的同样问题。我关注了这篇文章,它首先对这个问题提供了一些见解。

Mysql auto increment jumps when insert-select

按照一些人的建议,最好设置一下帖子

ALTER TABLE `test` AUTO_INCREMENT = 1; 

这在我有一个存储过程的情况下不起作用,该存储过程将作为事件在后台运行指定的时间。

谁能给我建议一个解决方法....??

提前致谢

【问题讨论】:

    标签: mysql select insert auto-increment


    【解决方案1】:

    首先,您应该确保 mysql 是最新的,然后尝试重置自动增量,如下所示:

    ALTER TABLE tablename AUTO_INCREMENT = 1
    

    【讨论】:

    • ,正如我上面所说的,我在存储过程中尝试过同样的事情,在执行插入...选择之前我将调用上面的代码,但 auto_increment 列仍然会跳过值..
    • 如果您已经应用了与此问题相关的可能的补丁或更新,您可以联系 MySql 支持人员了解此错误。
    【解决方案2】:

    您可以从 mysql.ini 更改 innodb_autoinc_lock_mode=0(“传统”锁定模式)以避免在某些情况下跳过主键中的值。有关详细信息,请参阅手册 innodb auto increment handling

    根据手册“提供传统锁定模式选项是为了向后兼容、性能测试和解决“混合模式插入”问题,因为语义上可能存在差异。

    '在这种锁定模式下,所有“INSERT-like”语句都会获得一个特殊的表级 AUTO-INC 锁,用于插入到具有 AUTO_INCREMENT 列的表中。此锁通常保持到语句的末尾(而不是事务的末尾),以确保为给定的 INSERT 语句序列以可预测和可重复的顺序分配自动递增值,并确保自动递增任何给定语句分配的值都是连续的'。

    要检查的另一件事是 auto_increment_increment 配置变量的值。默认情况下为 1,但您可能已更改此值。将其设置为高于 1 或 2 的值非常少见,但有可能。

    【讨论】:

      猜你喜欢
      • 2016-12-10
      • 2012-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-09
      • 1970-01-01
      • 1970-01-01
      • 2014-12-05
      相关资源
      最近更新 更多