码迷,mamicode.com
首页 > 其他好文 > 详细

事务ID分配时间

时间:2019-03-19 21:24:36      阅读:299      评论:0      收藏:0      [点我收藏+]

标签:orm   innodb   客户   两种方法   tar   隔离级别   ffffff   water   数据   

  • 我们一般会用start transaction或begin开始一个事务,自然而言的我们认为在这个时候就已经分配了一个事务ID,其实并不是这样,我们下面来看一个案例
  • 首先我们添加测试数据
  • 技术图片
  • 技术图片
  • 技术图片
  • 我们开启两个客户端,分别为session1和session2,事务隔离级别为RR
  • 技术图片
  • 大家心里会有个疑问,为什么我sessio1先开启的事务,但session2事务提交后,我还能看到了,这不成了不可重复读了吗,其实很简单,那是因为session1的start transaction;并没有分配事务ID,到第5步的时候才分配,所以session1.trx_id>session2.trx_id,所以看到session2提交的数据这就很正常了
  • 那么大家就会有疑问,RR隔离级别在什么时候才会分配事务ID呢,有两种方法分配
    1. start transaction; 后面的第一个select
    2. 要不就以这种方式开启一个事务 START TRANSACTION WITH CONSISTENT SNAPSHOT;
  • 下面我们来试下第一种方法, 我们把id=100的还是改为1来做测试
    • 技术图片
    • 这时候session1查出来的值还是1,但是因为我们在第3步已经为session1分配了trx_id,而session2在step4才分配,因此session1.trx_id<session2.trx_id,所以就算session2提交了,session1也看不到
  • 下面我们来试下第二种方法
    • 技术图片
    • 还是没看到session2修改后的100,那说明START TRANSACTION WITH CONSISTENT SNAPSHOT;就会分配事务ID
  • 提示:
    • 什么时候分配事务ID,可以通过监控这个表的记录 select * from information_schema.INNODB_TRX;每执行一步就看下数据,那么就自然而然的知道是什么时候分配的事务ID了
  • 事务ID分配时间

    标签:orm   innodb   客户   两种方法   tar   隔离级别   ffffff   water   数据   

    原文地址:https://blog.51cto.com/itzhoujun/2365607

    (0)
    (0)
       
    举报
    评论 一句话评论(0
    登录后才能评论!
    © 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
    迷上了代码!