一文搞懂MySQL隔离级别的区别与问题解决

四大隔离级别与脏读、不可重复度、幻读,联系密切。

首先来理解它们到底是什么,以及之间的区别。

脏读、不可重复读、幻读

脏读:表示一个事务写入了数据,但是 还没有提交,就可以被另一个事务读取到

不可重复读:表示针对具体的一行数据,一个事务在开启时,先后两次对这行数据的读,读取的结果不一致

幻读:表示针对多行数据,一个事务两次读取,读取到的数据行数不一致。

好,接下来具体分析。

隔离级别

读未提交(RU):每次都读取最新的数据,没有多版本并发控制(MVCC),读数据不上锁,写数据上记录锁,事务问题最多

读已提交(RC):拥有多版本并发控制(MVCC),可以读到最新的已提交数据,读的数据都是已提交的,解决了脏读问题

可重复读(RR):解决了脏读问题后,出现了新的问题。RC隔离级别,每次都可以读到最新的已提交数据,那么就是说,一个事务中,可能对于某条记录,读取出来的结果不一致?如果我要保证一条记录在一个事务当中保证一致性,怎么办?

RR的解决方案是改进MVCC,在RC中,每次查询都会生成新的ReadView(MVCC接下来我也会介绍),那么RR,就在第一次查询时生成一个ReadView,后面都不生成,

你可能感兴趣的:(详解MySQL,mysql,数据库)