innodb的操作可以分为当前读(current read)和快照读(snapshot read):
1. 快照读(snapshot read)
简单的select操作(不包括 select ... lock in share mode, select ... for update)
2.当前读(current read)
select ... lock in share mode
select ... for update
insert
update
delete
在RR级别下,快照读是通过MVVC(多版本控制)和undo log来实现的,当前读是通过加record lock(记录锁)和gap lock(间隙锁)来实现的。
innodb在快照读的情况下并没有真正的避免不可重复读(出现幻读,也导致了不可重复读), 但是在当前读的情况下避免了不可重复读和幻读!!!