简写 全写 名称 解释 实现原理
脏写 两个事务同时修改一行数据,结果一个事务回退了,导致另一个事务的数据也被修改了,就是两个事务互相影响到对方未提交的数据
UR Uncommited Read 脏读 (未提交读) 一个事务修改了一条数据的值,结果还没提交呢,另外一个事务就读到了你修改的值,然后你回滚了,人家事务再次读,就读不到了,也就是说人家事务读到了你修改之后还没提交的值,这就是脏读了。
CS Cursor Stability 提交读 在一个事务中进行查询时,允许读取提交前的数据,数据提交后,当前查询就可以读取到数据,update数据的时候并不锁表
RS Read Stability 不可重复读 在一个事务中进行查询时,不允许读取其他事务update的数据,允许读取到其他事务已提交的新增数据
RR Repeatable Read 可重复读 一条数据的值在同一个事务中读取的值都是不变的 MVCC(Multi-Version Concurrency Control )机制,多版本并发控制
幻读 一个事务用一样的SQL多次查询,结果每次查询都会发现查到了一些之前没看到过的数据

什么情况下会用到重复读这个场景

从DBA角度

重复读也就是快照读,他是在事务中的第一个select开始申请的read_view结构(也就是快照的入口) ,重复读中有gap锁大大增加了锁等待和死锁概率 ,很大程度上要求你要保证不同事务内的相同逻辑sql的顺序性(这个不好理解 你需要多想下) ,提交读相比重复读 他的并发性得到了一个很好的保证(锁等待少)

从开发角度

你要看下业务逻辑 比如 修改一组数据 这组数据是否需要保证一致性,如果一致性要求没那么强 可以使用提交读 (事务内 多次查询数据 有可能不一致) ,这样你并发会提高很多 减少了锁冲突的概率,代码也会写的飞起(不用考虑那么多了哈)