MVCC只能在InnoDB的已提交读和可重复读两个级别下使用
他能做的到的就是在数据库并发读写冲突的时候不加锁不阻塞来提升性能
但是MVCC是一种快照读
快照读:读取的不一定是数据的最新版本
当前读:加共享锁(select ~~~ lock in share mode)
或者排他锁(select ~~~ for update)的读,能读到最新数据
——————————————————————————————————————
实现:
每个记录行有隐藏字段,undo log 指向他的上一个版本记录行(会一个一个连成链)也有一个自增的事务ID字段(可以当作时间戳来用表示时间的先后顺序)
通过读视图在这条链上挨个比较事物ID来看到自己能看到最新的那条记录
——————————————————————————————————————
在已提交读和可重复读两个隔离级别下用读视图的方式不同
读已提交:每次查询都是单独生成一个读视图
可重复度:整个事务里用的是第一次读的那个视图