事务的并发读问题(脏读,不可重复读,幻读)

  1. 事务的并发读问题
  1. 脏读:读取到另一个事务未提交数据;
  2. 不可重复读:两次读取不一致;(针对数据数值查询)
  3. 幻读(虚读):读到另一事务已提交数据。(针对记录统计)

 

2 并发事务问题

因为并发事务导致的问题大致有5类,其中两类是更新问题,三类是读问题。

  1. 脏读(dirty read):读到另一个事务的未提交更新数据,即读取到了脏数据;
  2. 不可重复读(unrepeatable read):对同一记录的两次读取不一致,因为另一事务对该记录做了修改;
  3. 幻读(虚读)(phantom read):对同一张表的两次查询不一致,因为另一事务插入了一条记录;

 

脏读

事务1:张三给李四转账100元

事务2:李四查看自己的账户

  1. t1:事务1:开始事务
  2. t2:事务1:张三给李四转账100元
  3. t3:事务2:开始事务
  4. t4:事务2:李四查看自己的账户,看到账户多出100元(脏读)
  5. t5:事务2:提交事务
  6. t6:事务1:回滚事务,回到转账之前的状态

 

不可重复读

事务1:酒店查看两次1048号房间状态

事务2:预订1048号房间

  1. t1:事务1:开始事务
  2. t2:事务1:查看1048号房间状态为空闲
  3. t3:事务2:开始事务
  4. t4:事务2:预定1048号房间
  5. t5:事务2:提交事务
  6. t6:事务1:再次查看1048号房间状态为使用
  7. t7:事务1:提交事务

对同一记录的两次查询结果不一致!

 

幻读

事务1:对酒店房间预订记录两次统计

事务2:添加一条预订房间记录

  1. t1:事务1:开始事务
  2. t2:事务1:统计预订记录100条
  3. t3:事务2:开始事务
  4. t4:事务2:添加一条预订房间记录
  5. t5:事务2:提交事务
  6. t6:事务1:再次统计预订记录为101记录
  7. t7:事务1:提交

  对同一表的两次查询不一致!

 

猜你喜欢

转载自blog.csdn.net/qq_26514509/article/details/85199703
今日推荐