account表中有3条数据
id name money
1 aaa 1000
2 bbb 1000
3 ccc 1000
这时用a,b两个命令行窗口访问这张表。
a窗口中设置事务隔离级别为Read committed,并开启事务
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
幻读是指读的时候 别的事务插入活着删除了数据 insert delete