在 MySQL 8.0 版本,将自增值的变更记录在了 redo log 中,重启的时候依靠 redo log 恢复重启之前的值。...自增值修改机制
在插入一行数据的时候,自增值的行为如下:
如果插入数据时 id 字段指定为 0、null 或未指定值,那么就把这个表当前的 AUTO_INCREMENT 值填到自增字段;
如果插入数据时...values(null,2,2);
//插入的行是(3,2,2)
原因分析,为什么不能回退:
假设有两个并行执行的事务,在申请自增值的时候,为了避免两个事务申请到相同的自增 id,肯定要加锁,然后顺序申请...t2 values(null, 5,5);
insert…select,实际上往表 t2 中插入了 4 行数据。...之后,再执行 insert into t2 values(null, 5,5),实际上插入的数据就是(8,5,5)。
小结
在 MyISAM 引擎里面,自增值是被写在数据文件上的。