脏读、幻读、不可重复读

前言: 了解三种场景的前提是我们需要了解数据库的四种事务级别:

串行化 - 可避免所有问题

可重复读 - 不可避免幻读

读已提交 - 避免脏读、幻读

读未提交 - 都不可避免

一 脏读

概念:读取到了其他事务未提交的数据。

![image](images/TYRss-XRzInmDTd12Owxa2yd9u9oBcrrAP3MQw4NwNo.png)

二 不可重复读

概念:同一次事务前后查询到的数据不一致的问题。

![image](images/DohaolIrWh4DFpoAofl6TLRGGB3QUyJhBXGlOcPBFSk.png)

三 幻读

概念:幻读是一次事务中前后数据量发生变化用户产生不可预料的问题。

![image](images/0A1XAtDS193SafMI5BqOlU1WTn-zmNnThLbuEUZ5F5M.png)

四 总结

脏读指读取到其他事务正在处理的未提交数据

不可重复读指并发更新时,另一个事务前后查询相同数据时的数据不符合预期

幻读指并发新增、删除这种会产生数量变化的操作时,另一个事务前后查询相同数据时的不符合预期

五 四种隔离级别

![image](images/PGyO6IJPvNapRh5ZVHvn2Ezwd_316pnSujwf8QW5k4U.png)

![image](images/uXn1DXnGp3wuLSovu_yyNamzO-fzgmQLR-oms2hKlLk.png)

MySQL默认Repeatable Read(RR)-可重复读

MySQL 5.1以后默认存储引擎就是InnoDB

因此MySQL默认RR也能解决幻读问题

Last modification:July 5, 2022
If you think my article is useful to you, please feel free to appreciate