四大隔离级别与脏读、不可重复度、幻读,联系密切。
首先来理解它们到底是什么,以及之间的区别。
脏读、不可重复读、幻读
脏读:表示一个事务写入了数据,但是 还没有提交,就可以被另一个事务读取到
不可重复读:表示针对具体的一行数据,一个事务在开启时,先后两次对这行数据的读,读取的结果不一致
幻读:表示针对多行数据,一个事务两次读取,读取到的数据行数不一致。
好,接下来具体分析。
隔离级别
读未提交(RU):每次都读取最新的数据,没有多版本并发控制(MVCC),读数据不上锁,写数据上记录锁,事务问题最多。
读已提交(RC):拥有多版本并发控制(MVCC),可以读到最新的已提交数据,读的数据都是已提交的,解决了脏读问题
可重复读(RR):解决了脏读问题后,出现了新的问题。RC隔离级别,每次都可以读到最新的已提交数据,那么就是说,一个事务中,可能对于某条记录,读取出来的结果不一致?如果我要保证一条记录在一个事务当中保证一致性,怎么办?
RR的解决方案是改进MVCC,在RC中,每次查询都会生成新的ReadView(MVCC接下来我也会介绍),那么RR,就在第一次查询时生成一个ReadView,后面都不生成,