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

MySql 码拜 9年前 (2016-02-20) 1073次浏览
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再次进行查询,发现表中查询结果和第一次不一样了。
小弟感觉不可重复读和虚读的意思理解起来有点模糊,不可重复读里的红色字段能否成立?假如成立,不可重复读和虚读又有什么区别呢?

求高手!

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

解决方案

30

不可重复度是指读的时候 别的事务修改了数据update
幻读是指读的时候 别的事务插入活着删除了数据 insert delete

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明这个例子算不可重复读还是虚读(幻读)
喜欢 (0)
[1034331897@qq.com]
分享 (0)