四种情况不是连续的:
- 自增初始值和自增步长设置不为 1
- 唯一键冲突
- 事务回滚
- 批量插入(如
insert...select
语句)
- MySQL 5.7 版本之前在内存中存储
AUTO_INCREMENT
计数器,实例重启后会根据表中的数据重新设置,在删除记录后重启就可能出现重复的主键,该问题在 8.0 版本使用redo日志解决,保证了主键的单调性; - MySQL 插入数据获取
AUTO_INCREMENT
时不会使用事务锁,而是会使用互斥锁,并发的插入事务可能出现部分字段冲突导致插入失败,想要保证主键的连续需要Serialiable串行地执行插入语句;