美文网首页
MYSQL事务隔离级别的实现原理

MYSQL事务隔离级别的实现原理

作者: 技术灭霸 | 来源:发表于2021-11-27 23:24 被阅读0次

    MYSQL事务隔离级别的实现原理

    1、未提交读:直接读写,没什么控制
    2、已提交读:一致性视图。每次select都去重新计算一次一致性视图。
    3、可重复读:一致性视图。以后每次select都用第一次计算的一致性视图。
    4、串行化:读就用读锁,写就用写锁

    蓝色是已提交事务id,红色是未提交事务id,事务id是递增的,会分为两个队列,已提交事务队列和未提交事务队列

    已提交读的实现

    当事务A trx_id=6执行select 语句,发现x=2这个版本数据的事务trx_id是5,然后拿trx_id=5去已提交事务队列查,发现trx_id=5这是事务还没提交,然后通过undo log回滚到数据的上一个版本,上一个版本是x=1及其trx_id=7,发现trx_id=7这是事务也没提交,然后通过undo log再回滚到数据的上一个版本,上一个版本是x=0及其trx_id=4,拿trx_id=4去已提交事务队列查,发现trx_id=4这是事务已经提交了,而且小于等于事务A的 trx_id=6(4小于6),所以trx_id=4这是事务对于事务A是可见的最终事务A 执行select 语句查询到x=0,这就是已提交读的实现

    已提交读和可重复读区别

    已提交读在第二次select的时候又走一遍上面计算一致性视图的流程,如果其他事务有提交的话,可能到不是x=0的结果了。

    而可重复读,第二次select还是使用第一次select的结果x=0,不管其他事务提不提交。以后的每次select都直接使用第一次select的结果,不再运算第二次,所以每次select的结果都是一样。

    所以已提交读和可重复读的区别就是都用一致性视图,但前者每次select都去算出最新的,后者每次select都用第一次的结果

    image.png

    相关文章

      网友评论

          本文标题:MYSQL事务隔离级别的实现原理

          本文链接:https://www.haomeiwen.com/subject/zitcxrtx.html