MySQL中InnoDB引擎下的自增字段不是连续的。

6

MySQL自增ID不是按顺序的。

当我尝试上传CSV批量数据时,会跳过一些自增ID。

自增ID不是按顺序的。

数据库引擎为InnoDB,ID是自动递增的。

例如:

   id      颜色 
    1      红色
    2      蓝色
    3      绿色
    4      橙色
    9      粉色
    10     白色
    11     黑色 
    16     灰色
    17     棕色

ID不是按顺序的。


为什么这是顺序的还是不顺序的很重要呢? - Rob
问题出在哪里呢?(顺便说一下:它确实是顺序的,只是不是无间隔的) - user330315
我能理解你的好奇心。但是我们需要更多的输入来帮助... CSV文件是如何上传的?等等。 - nl-x
简单的表单上传通过PHP应用程序完成,然后读取CSV数据并将所有数据推入一个数组中,在CodeIgniter框架中使用insert batch函数在一个事务中插入。 - Arun Duraisamy
2个回答

3
我不了解CodeIgniter和事务的具体内容,但我知道查询中的“catched fails”(例如insert ignore)会导致不插入数据,但会增加自动增量。 在这里寻找答案。 对于其他问题,请不必尝试“修复”这个问题。

3
如果您使用的是MySQL版本新于5.1.22,那么可能是由于InnoDB 锁策略引起的,正如Miguel Angel Nieto在这篇博客文章中所解释的那样。
您可以通过设置innodb_autoinc_lock_mode参数来更改此行为:
  • innodb_autoinc_lock_mode = 0: “传统”锁模式,与5.1.22之前的行为相同
  • innodb_autoinc_lock_mode = 1: “连续”锁模式,默认行为,可能是您设置的,旨在提高并发性和性能,但序列中会有空洞
  • innodb_autoinc_lock_mode = 2: “交错”锁模式,这是最快和最可扩展的锁模式,但在使用基于语句的复制或从二进制日志回放SQL语句的恢复场景不安全

关于使用innodb_autoinc_lock_mode的详细信息,可以查看mysql详细文档


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接