zoukankan      html  css  js  c++  java
  • [MySQL] MVCC 多版本并发控制实现的事务

    1.没有一个统一的实现标准,实现了非阻塞的读操作,写操作也只锁定必要的行
    2.通过保存数据在某个时间点的快照实现的
    3.典型的有乐观并发控制和悲观并发控制
    4.innodb的mvcc是每次事务都有递增的版本号,通过在每行记录的后面添加两列隐藏字段,两列分别是是创建版本号和删除版本号,存储操作它事务的版本号
    5.在事务中增删改查就是对两列版本号字段进行操作

    insert 为新插入的每一行保存当前事务版本号到 行创建版本号字段
    update 插入一行新的保存当前事务创建版本号,修改原行数据的删除版本号为本次事务的版本号
    delete 修改行的删除版本号字段为本次事务的版本号
    select 查询 创建版本号字段 小于等于当前事务版本的数据 确保该记录是本次之前就存在的或本次事务新插的
    查询 删除版本号字段 不存在或者大于当前版本的数据 确保该记录在本次事务之前没删除

    6.这样的设计就不需要加锁了,读和操作性能好,但是需要额外的存储空间
    7.mvcc只在REPEATABLE READ和READ COMMITED两个隔离下工作;READ UNCOMMITED总是读取最新数据;SERIALIZABLE对读取的行都加锁

  • 相关阅读:
    20210304
    20210303
    20210302
    20210210
    20210209
    20210208
    20210207
    例4-6
    例4-5
    例4-4
  • 原文地址:https://www.cnblogs.com/taoshihan/p/10677999.html
Copyright © 2011-2022 走看看