mysql事物和自增id那些事儿

当在MySQL中进行事务操作时,主键自增不会因事务回滚而回滚,导致插入新数据时主键跳过已使用过的值。这是因为主键递增是独立于事务的,以避免并发插入时的主键冲突。例如,在两个事务几乎同时插入数据的情况下,不等待事务完成就递增主键可以防止主键重复。
摘要由CSDN通过智能技术生成

如下表,自增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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值