| 脏读
核心要领:A事物数据读取后,B事物回滚,导致A读取数据有误
时间顺序 | 转账事务(A) | 取款事务(B) |
---|---|---|
1 | 开始事务 | |
2 | 开始事务 | |
3 | 查询账户余额为2000元 | |
4 | 取款1000元,余额被更改为1000元 | |
5 | 查询账户余额为1000元(产生脏读) | |
6 | 取款操作发生未知错误,事务回滚,余额变更为2000元 | |
7 | 转入2000元,余额被更改为3000元(脏读的1000+2000) | |
8 | 提交事务 |
说明 :按照正确逻辑,此时账户余额应该为4000元
| 幻读
核心要领:A事物第一次和第二次读取数据之间,B提交事物,导致A读取不同
时间顺序 | 事务A | 事物B |
---|---|---|
1 | 开始事务 | |
2 | 第一次查询,数据总量为100条 | |
3 | 开始事务 | |
4 | 新增100条数据 | |
5 | 提交事务 | |
6 | 第二次查询,数据总量为200条 | |
7 | 提交事务 |
说明 :按照正确逻辑,事务A前后两次读取到的数据总量应该一致
| 不可重复读
核心要领:同幻读,区别在于幻读事物B是插入和删除数据,不可重复读是修改数据
时间顺序 | 事务A | 事物B |
---|---|---|
1 | 开始事务 | |
2 | 第一次查询,小明年龄20岁 | |
3 | 开始事务 | |
4 | 将小明年龄修改为30岁 | |
5 | 提交事务 | |
6 | 第二次查询,发现小明年龄为30岁 | |
7 | 提交事务 |
说明 :按照正确逻辑,事务A前后两次读取到的数据应该一致