英文全称为Multi-Version Concurrency Control,多版本并发控制,是乐观锁的一种实现方式.
基本原理:通过保存数据在某个时间点的快照来实现.
基本特征:
- 每行数据都存在一个版本,每次数据更新时都更新该版本。
- 修改时Copy出当前版本随意修改,各个事务之间无干扰。
- 保存时比较版本号,如果成功(commit),则覆盖原记录;失败则放弃copy(rollback)
InnoDB存储引擎MVCC的实现策略
在每一行数据中额外保存两个隐藏的列:当前行创建时的版本号和删除时的版本号
MVCC下InnoDB的增删查改是怎么work的
- 插入数据(insert):记录的版本号即当前事务的版本号
- 更新操作,采用的是先标记旧的那行记录为已删除,并且删除版本号是事务版本号,然后插入一行新的记录
- 删除操作,就把事务版本号作为删除版本号
- 查询操作,要符合以下两个条件的记录才能被事务查询出来
(1)删除版本号未指定或者大于当前事务版本号.
(2)创建版本号小于或者等于当前事务版本号.
MVCC手段只适用于Msyql隔离级别中的读已提交(Read committed)和可重复读(Repeatable Read).
Mysql的MVCC并非真正的MVCC,因为Mysql的写操作会加排他锁,Mysql只是借用MVCC的名号实现了读的非阻塞而已