这个例子算不可重复读还是虚读(幻读)

我叫阿狸猫 2013-07-18 09:59:24
account表中有3条数据
id name money
1 aaa 1000
2 bbb 1000
3 ccc 1000

这时用a,b两个命令行窗口访问这张表。
a窗口中设置事务隔离级别为Read committed,并开启事务

set transaction isolation level Read committed; --可避免脏读,但是避免不了不可重复读和虚读
start transaction;
select * from account; --发现查询出来记录还是3条



b窗口中也开启事务,并且往account表中插入一条数据,并提交

start transaction;
insert into account(id,name,money) values('4','ddd',1000);
commit;


这时a窗口再次查询account表,发现account表中有4条记录了。我小弟想问的是,这种情况属于不可重复读还是虚读(幻读)?


因为我查询出来的资料显示:
不可重复读:
当事务a在一次事务里多次查询同一条数据(我不晓得是否可以理解成同一个表),
当事务a第一次查询完后(事务a未结束),事务b对这条数据进行了修改或删除(我不晓得增加算不算)并进行了提交,此时事务a再进行查询,发现上一次和这一次查询结果不一样。

虚读:
事务a中进行了多次查询,第一次查询后(事务a未结束),事务b往表中插入了满足事务a查询条件的数据,事务b提交。这时,事务a再次进行查询,发现表中查询结果和第一次不一样了。


小弟感觉不可重复读和虚读的意思理解起来有点模糊,不可重复读里的红色字段是否成立?如果成立,不可重复读和虚读又有什么区别呢?


求大神!!!

...全文
461 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
这个情况,我感觉属于幻读
我叫阿狸猫 2013-08-07
  • 打赏
  • 举报
回复
在同一个事务中: 1.读取同一条数据发现两次结果不一样,即有别的事务更新了,就叫不可重复读。 2.查询数据发现第一次和后面几次查询的结果不一样,即有别的事务插入了新的数据,就叫幻读(虚读)
我叫阿狸猫 2013-07-23
  • 打赏
  • 举报
回复
我叫阿狸猫 2013-07-18
  • 打赏
  • 举报
回复
引用 2 楼 rucypli 的回复:
不可重复度是指读的时候 别的事务修改了数据update 幻读是指读的时候 别的事务插入活着删除了数据 insert delete
是否可以理解为 用操作类型来区分的? 查询数据时,别的事务对我当前查询的数据进行了修改操作 这时算不可重复读, 如果别的事务对我当前查询的数据进行了删除操作, 这时算幻读?
yumenfeiyu945 2013-07-18
  • 打赏
  • 举报
回复
不可重复读,a事务在不同的时间执行相同的select,得到的不同结果
rucypli 2013-07-18
  • 打赏
  • 举报
回复
不可重复度是指读的时候 别的事务修改了数据update 幻读是指读的时候 别的事务插入活着删除了数据 insert delete
我叫阿狸猫 2013-07-18
  • 打赏
  • 举报
回复

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧