每日一面
本问题参考自: https://www.zhihu.com/question/437916819/answer/1661679374, 解答为 个人原创 Key TakeAways InnoDB 引擎中 有三种 AutoIncrement 锁模式 : innodb_autoinc_lock_mode=0(traditional lock mode):获取表锁, 语句执行结束后释放 innodb_autoinc_lock_mode=1(consecutive lock mode,MySQL 8.0 之前默认 ):对于不确定插入数量的语句(例如 INSERT ... SELECT , REPLACE ... SELECT 和 LOAD DATA )和 innodb_autoinc_lock_mode=0 一样,其他的确定数量的语句在执行前先 批量获取 id , 之后再执行语句 。 innodb_autoinc_lock_mode=2(interleaved lock mode,MySQL 8.0+ 默认 ):采用 乐观锁 , CAS 更新计数器获取。 AutoIncrement 计数器在 MySQL 8.0 之前,存储在内存中,在 MySQL 8.0 之后,持久化存储到磁盘。通过每次更新写入 Redo Log,并在检查点刷入 innodb 引擎表中记录下来。 AutoIncrement