- 事务的并发读问题
- 脏读:读取到另一个事务未提交数据;
- 不可重复读:两次读取不一致;(针对数据数值查询)
- 幻读(虚读):读到另一事务已提交数据。(针对记录统计)
2 并发事务问题
因为并发事务导致的问题大致有5类,其中两类是更新问题,三类是读问题。
- 脏读(dirty read):读到另一个事务的未提交更新数据,即读取到了脏数据;
- 不可重复读(unrepeatable read):对同一记录的两次读取不一致,因为另一事务对该记录做了修改;
- 幻读(虚读)(phantom read):对同一张表的两次查询不一致,因为另一事务插入了一条记录;
脏读
事务1:张三给李四转账100元
事务2:李四查看自己的账户
- t1:事务1:开始事务
- t2:事务1:张三给李四转账100元
- t3:事务2:开始事务
- t4:事务2:李四查看自己的账户,看到账户多出100元(脏读)
- t5:事务2:提交事务
- t6:事务1:回滚事务,回到转账之前的状态
不可重复读
事务1:酒店查看两次1048号房间状态
事务2:预订1048号房间
- t1:事务1:开始事务
- t2:事务1:查看1048号房间状态为空闲
- t3:事务2:开始事务
- t4:事务2:预定1048号房间
- t5:事务2:提交事务
- t6:事务1:再次查看1048号房间状态为使用
- t7:事务1:提交事务
对同一记录的两次查询结果不一致!
幻读
事务1:对酒店房间预订记录两次统计
事务2:添加一条预订房间记录
- t1:事务1:开始事务
- t2:事务1:统计预订记录100条
- t3:事务2:开始事务
- t4:事务2:添加一条预订房间记录
- t5:事务2:提交事务
- t6:事务1:再次统计预订记录为101记录
- t7:事务1:提交
对同一表的两次查询不一致!