# 事务级别
三类数据读问题
~~~
1.Dirty Read(脏读)
事务 A 读取了事务 B 未提交的数据,并在这个基础上又做了其他操作。
2.Unrepeatable Read(不可重复读)
事务 A 读取了事务 B 已提交的更改数据。
3.Phantom Read(幻读)
事务 A 读取了事务 B 已提交的新增数据。
~~~
两类数据更新问题
~~~
1.第一类丢失更新
2.第二类丢失更新
~~~
### Dirty Read(脏读)
余额应该为 1100 元才对!请看 T6 时间点,事务 A 此时查询余额为 900 元,这个数据就是脏数据,它是事务 A 造成的,明显事务没有进行隔离,渗过来了,乱套了。
所以脏读这件事情是非常要不得的,一定要解决掉!让事务之间隔离起来才是硬道理。
![](https://box.kancloud.cn/ec577638db9d43143579d5d848e2e162_745x286.jpg)
### Unrepeatable Read(不可重复读)
事务 A 其实除了查询了两次以外,其他什么事情都没有做,结果钱就从 1000 变成 0 了,这就是重复读了
这种现象基本上是可以理解的,但在有些变态的场景下却是不允许的。
![](https://box.kancloud.cn/d3ce9f75a5a2983cc96cfdcba3e6ea4f_746x229.jpg)
### Phantom Read(幻读)
银行工作人员,每次统计总存款,都看到不一样的结果。不过这也确实也挺正常的,总存款增多了,肯定是这个时候有人在存钱。
![](https://box.kancloud.cn/68268667adea935e8da8998bad9fac0f_746x201.jpg)
### 第一类丢失更新
A事务撤销时,把已经提交的B事务的更新数据覆盖了。这种错误可能造成很严重的问题
![](https://box.kancloud.cn/9a7d1963fac776bc57063443ec63002e_746x287.jpg)
### 第二类丢失更新
B事务覆盖A事务已经提交的数据,造成A事务所做操作丢失
![](https://box.kancloud.cn/77f0bb598da5458324b3abbc684499c3_748x260.jpg)
### 事务隔离级别
从上往下,级别越来越高,并发性越来越差,安全性越来越高,反之则反
MySQL 数据库的默认事务隔离级别就是 READ\_COMMITTED
![](https://box.kancloud.cn/0614d195f28a3551d172eb4deefa3e3e_745x145.jpg)