美文网首页mysql学习篇
mysql之MVCC的原理

mysql之MVCC的原理

作者: 先生zeng | 来源:发表于2019-10-23 00:04 被阅读0次

    定义

    MVCC:
    Multiversion concurrency control (多版本并发控制)

    白话解释: 并发访问(读或写)数据库时,对正在事务内处理的数据做多版本的管理,以达到用来避免写操作的堵塞,从而引发读操作的并发问题。

    MVCC的逻辑流程

    在我们的每一个表中的,会默认生成三列隐藏的数据,其中跟MVCC相关的只有两列,如下:

    1.数据行的版本号(DA_TRX_ID)也就是该记录入库的版本号

    1. 删除的版本号(DB_ROLL_PT)

    插入数据时



    如下图,插入数据时,此时事务未提交,此时会把该操作事务的ID作为数据行的版本号。

    删除数据时


    修改数据时



    其实是相当如把修改的数据复制一份,此时事务id作为删除版本号,然后插入新的记录,数据行的版本号为删除的版本号,再把原来的数据删除。

    查询的逻辑流程

    然后我们来看下以下的案例:

    数据准备:
    前提,先执行插入两条数据,并且提交。
    insert into teacher(name,age) value ('seven',18) ;
    insert into teacher(name,age) value ('qing',20) ;

    tx1:
    begin; ----------1
    select * from users ; ----------2
    commit;
    tx2:
    begin; ----------3
    update teacher set age =28 where id =1; ----------4
    commit;

    案例1

    执行顺序为: 1,2,3,4,2



    先执行读,不提交,再执行3,4更新,此时再执行2,读。这时候读出来的数据是未提交前的,符合逻辑。
    这时存在脏读。

    案例2
    执行顺序为: 3,4,1,2


    先执行3,4,更新字段,不提交。然后再执行读,此时,读出来的数据为未提交且更新后的数据。
    等更新提交后,独读出的数据就不一致了,此情况存在不可重复度。

    所以我们可以知道,他解决脏读,不可重复读不是通过MVCC来解决的。

    相关文章

      网友评论

        本文标题:mysql之MVCC的原理

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