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对读取的行都加锁

  • 相关阅读:
    内存溢出和内存泄漏的区别
    java 23种设计模式 深入理解
    关于安装office注册表权限的解决方法
    Tomcat在Linux上的安装与配置
    初窥Linux 之 我最常用的20条命令
    redis使用初体验
    学习进度条——第12周
    找水王
    学习进度条——第11周
    学习进度条——第10周
  • 原文地址:https://www.cnblogs.com/taoshihan/p/10677999.html
Copyright © 2011-2022 走看看