您当前的位置:首页 > 计算机 > 软件应用 > 数据库 > MySQL

到底什么才是幻读?

时间:09-14来源:作者:点击数:
CDSY,CDSY.XYZ

2.7 幻读

概念:一次事务多次读取到的条数不一致而引发的问题;

在InnoDB(暂时理解是MySQL)中幻读在很多地方都得到了解决,但在一些特殊的情况下,还是会引发幻读问题;

为什么有的情况下能解决,有的情况下解决不了?因为一次事务多次读取到的条数不一致会导致有很多情况发生!

2.7.1 幻读解决情况1):

还原数据:

update account set money=1000;

-- 设置隔离级别为repeatable read
set global transaction isolation level repeatable read;

记得重启客户端

session-01 session-02
begin;  
  begin;
select * from account;  
  insert into account values(3,‘c’,1000);
  commit;
select * from account;  

观察变化:

在这里插入图片描述

幻读问题得到解决

2.7.2 幻读解决情况2):

还原数据

案例:

session-01 session-02
begin;  
  begin;
select sum(money) from account;  
  insert into account values(3,‘c’,1000);
  commit;
select sum(money) from account;  

观察变化:

在这里插入图片描述
2.7.3 幻读问题出现情况1):

还原数据

  • 案例:
session-01 session-02
begin;  
  begin;
select count(id) from account;  
  insert into account values(3,‘c’,1000);
  commit;
select count(id) from account;  
update account set money=0;  
select count(id) from account;  

观察变化:

在这里插入图片描述
2.7.3 特殊情况:

还原数据

  • 案例:
session-01 session-02
  begin;
begin;  
select * from account;  
  select * from account;
  insert into account values(3,“c”,1000);
  commit;
select * from account;  
insert into account values(3,“c”,1000);  

观察变化:

在这里插入图片描述

Tips:严格意义来说,上述案例是MySQL的快照机制导致的,不能算幻读;关于幻读我们理解概念就行,即:两次读取到的条数不一致!这就是幻读

CDSY,CDSY.XYZ
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐