MVCC (Multi-Version Concurrency Control 多版本的并发控制协议)

文章目录

  • 简介
  • 实现原理
    • 数据结构
      • 隐藏列
      • 基于`undo log`的版本链
      • ReadView
    • ReadView
      • RU(READ UNCOMMITTED)和SERIALIZABLE
      • RC(READ COMMITTED) 和 RR(REPEATABLE READ)
      • 判断可见性的方法
      • 例子
    • 增删改查
      • 快照读和当前读

简介

MVCC,多版本并发控制协议:顾名思义就是每个记录有多个版本,从而实现以下功能:

  1. Innodb的MVCC能防止幻读的发生。(不是每个MVCC都可以,看MVCC怎么实现)
  2. 实现了多个事务并发下,读操作的非阻塞。

实现原理

数据结构

隐藏列

InnoDB中每行数据都有两个隐藏列,一个保存了行的事务ID(DB_TRX_ID),一个保存了行的回滚指针(DB_ROLL_PT)。每开始一个新的事务,都会自动递增产生一个新的事务id。事务开始时刻的会把事务id放到当前事务影响的行事务id中,当查询时需要用当前事务id每行记录的事务id进行比较。

数据的历史版本就是不同事务修改数据的过程事务id,这个过程不一定是递增或者递减的

基于undo log的版本链

前面说到每行数据的隐藏列中包含了指向undo log

你可能感兴趣的:(MySQL,数据库)