【转载】深入分析事务的隔离级别

http://www.hollischuang.com/archives/943

文中对于可重复读的说明不是很正确;

当前的多数RDBMS都支持MVCC(多版本并发控制协议),与之相对的是基于锁的并发控制协议LBCC;参考http://hedengcheng.com/?p=771

MVCC最大的好处是读不加锁,读写不冲突;此处的读不加锁是指快照读。

读取操作分为快照读和当前读;

快照读不会加锁,但是可能读取的是历史版本,所以表现行为:事物1执行俩个快照读,事物2在事物1俩个快照读之间删除某个数据并提交,事物1的第二个快照读和第一个的结果是一样的,保证了可重复读的行为,这个已在MySQL中校验。

当前度包含特殊的读取操作(Lock in share mode, for update), 插入、删除、更新,需要加锁。

当前读读取的是记录的最新版本,需要加锁。并且读取之后其他并发事物不能修改当前记录或者对当前记录加锁。