MVCC 的实现,

是通过保存数据在某个时间点的快照来实现的。每个事务读到的数据项都是⼀个历史快照,被称为快照读,不同于当前读的是快照 读读到的数据可能不是最新的,但是快照隔离能使得在整个事务看到的数据都是它启动时的数据状态。


当前读

像select lock in share mode( 共享锁),select for update ; update, insert ,delete( 排他锁) 这些操作都是⼀种当前读,为什么叫当前读? 就是它读取的是 记录的最新版本,读取时还要保证其他并发事务不能修改当前记录,会对读取的记录进⾏加锁。


快照读

像不加锁的select 操作就是快照读,即不加锁的⾮阻塞读;

快照读的前提是隔离级别不是未提交读和串⾏化级别,因为未提交读总是读取最新的数据⾏,⽽不是符合当前事务版本的数据⾏。⽽串⾏化则会对所有读取的⾏都加锁