- 行级锁的一个变种
- 避免了加锁,开销低
- 非阻塞读操作,写操作是行级
- 原理:使用数据在某个时间点的快照实现,不同事务在同一个时间可以看到同一个表中的不同数据。
- 分类:乐观,悲观
- 在一行中存储更多数据,检查工作也要增加,处理一些额外的内部操作。
- 适用:rr,rc级别。ur会读到最新版本,sz会读取会锁定返回的每一行。
InnoDB通过为每个事务在启动时分配一个事务ID来实现MVCC。该ID在事务(A)首次读取任
何数据时分配。在该事务中修改记录时,将向Undo日志写入一条说明如何恢复该更改的
Undo记录,并且事务的回滚指针指向该Undo日志记录。这就是事务如何在需要时执行回
滚的方法。
当不同的会话(事务B)读取聚簇主键索引记录时,InnoDB会将该记录的事务ID与该会话的读取视
图进行比较。如果当前状态下的记录不应可见(更改它的事务尚未提交),那么Undo日
志记录将被跟踪并应用,直到会话达到一个符合可见条件的事务ID。这个过程可以一直
循环到完全删除这一行的Undo记录,然后向读取视图发出这一行不存在的信号。