如下表,自增id最大到了23
插入一条数据并回滚:
毫无疑问表中应该是没有插入的数据,自增id也应该是23:
此时再来新增一条数据:
查看id:
变成了25,而不是我们想象的24,这是为啥呢?
原因是:mysql数据库主键不是事务性质的,所以当没有提交事务时,主键的自动递增是不会回滚的,之所以不把主键自增加入到事务管理,可以看一下例子
//transaction1
begain transaction
insert into A
commit
//transaction2
begain transaction
insert into A
commit
当两次给A表插入数据时间间隔1毫秒,事务1插入进去id自增1了,还没等事务1完成,事务2也开始插入数据,这时他们拿到的id都还是没有自增的、同一个id,所以这会造成主键的重复,所以mysql没有将主键纳入事务管理,只要有数据插入,不管事务是否提交完成,主键先自增1,这样就不会造成上述的问题了
参考文章链接:https://blog.csdn.net/qq_33473340/article/details/108429630