mvcc read view
快照读:在RR隔离级别下:快照读有可能读到数据的历史版本,也有可能读到数据的当前版本。所以快照读无需用锁也不会发生幻读的情况。
当前读:select…lock in share mode,select…for update
当前读:update,delete,insert
读取的是记录的最新版本,所以所以就需要通过加锁(行锁 间隙锁 表锁)的方式,使得被当前读读过的数据不能被新增修改或者删除,换句话说再来一次当前读要返回相同的数据。
所以面试问题:mysql如何实现RR的?答案:MVCC + 行锁 + 间隙锁。快照读:mvcc,当前读:行锁 + 间隙锁。
转载:
第一篇似乎有点小问题:针对快照读,rr下每次读取使用的是同一个rv,所以实现了重复度,rc下每次读取使用新的rv,所以实现了读提交
而针对当前度,使用了行锁 + 间隙锁 = next-key lock实现重复度