赞
踩
读取的是记录的最新版本,读取时还要保证其他并发事务不能修改当前记录,会对读取的记录进行加 锁。对于我们日常的操作,如:select ... lock in share mode(共享锁),select ... for update、update、insert、delete(排他锁)都是一种当前读。
由此可知,当前读通过next-key来解决幻读问题。
简单的select(不加锁)就是快照读,快照读,读取的是记录数据的可见版本,有可能是历史数据, 不加锁,是非阻塞读。
快照读sql提取的数据是MVCC根据readview来选择的。不同的隔离级别,生成ReadView的时机不同:
在RR的隔离级别下下,快照读本身就解决了幻读问题。
即在RR的隔离级别下,MVCC和锁一起解决了幻读问题
四大特性中,redo log解决了持久性(Durability)问题,undo log解决了原子性(Atomicity),MVCC和锁解决了幻读问题,最终一起实现了终极目标——解决了一致性(Consistency)问题。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。