内容来自《收割Offer:互联网大厂面经》

面试官提问

● 什么是当前读与快照读?

1 当前读

当前读读取的是最新版本数据,并且对读取的记录加锁,阻塞其他事务同时改动相同记录。比如如下形式的SQL 属于当前读:

    select...lock in share mode (共享读锁)
     select...for update

2 快照读

快照读读取快照中的数据,不需要进行加锁。快照读通过 MVCC 机制实现,MVCC 作用于读已提交和可重复读这两个隔离级别,这两个隔离级别下的普通select操作就是快照读。

● 读已提交隔离级别:事务每次 select 都生成一个最新的 ReadView。

● 可重复读隔离级别:只在开启事务后第一次 select 时生成一次 ReadView。

ReadView中存储当前活跃着的读写事务列表,也就是开启了但还未提交的事务。通过这个读写事务列表来判断记录的某个版本是否对当前事务可见。