事务transaction
事务:要么都完成,要么都不完成。
ACID:原子性;一致性;隔离性;持久性
丢失更新:
时间 | 取款事务A | 存款事务B |
T1 | 开始事务 |
|
T2 |
| 开始事务 |
| 查询余额1000 |
|
|
| 查询余额1000 |
|
| 汇入100变成1100 |
|
| 提交事务 |
| 取100余额变成900 |
|
| 撤销事务 |
|
T9 | 余额恢复为1000(丢失更新) |
|
脏读:读到另一个事务还没有提交的数据。
时间 | 取款事务A | 转账事务B |
T1 | 开始事务 |
|
|
| 开始事务 |
|
| 查询账户1000 |
|
| 汇入100变为1100 |
| 查询余额1100 |
|
|
| 回滚 |
| 取款1100 |
|
T8 | 提交事务失败 |
|
不可重复读:前后读出的数据不一样,被另一个事务影响了。
时间 | 取款事务A | 转账事务B |
| 开始事务 |
|
|
| 开始事务 |
| 查询余额1000 |
|
|
| 汇入100变1100 |
|
| 提交事务 |
| 查询余额1100 |
|
| 提交事务 |
|
第二类丢失更新(不可重复读特殊情况):
时间 | 转账事务A | 取款事务B |
|
| 开始事务 |
| 开始事务 |
|
|
| 查询账户1000 |
| 查询账户1000 |
|
|
| 取100变为900 |
|
| 提交事务 |
| 汇入100 |
|
| 提交事务 |
|
| 余额改为1100(丢失更新) |
|
幻读:插入更新的问题,插入新数据影响读的结果,和不可重复读类似。
时间 | 查询学生事务A | 插入新学生事务B |
| 开始事务 |
|
|
| 开始事务 |
| 查询学生10人 |
|
|
| 插入一个新生 |
| 查询学生11人 |
|
|
| 提交事务 |
| 提交事务 |
|