2023

1 mysql的可重复度并没有完全解决虚读幻读问题

 

如果是开启事务后,如果只有简单的select,那么它会触发快照读,为当前事务生成一个readview,后面的简单select也依旧会使用第一次生成的这个readview;

如果当前事务中,要是做了update,或者select... for update,就会变成当前读,如果执行了update并且where条件id小于10,那么小于10会被添加间隙锁,并执行当前读,获取最新的其他事务数据;后面如果在读取小于10 的数据,如果其它事务中间有insert发生,就会产生幻读。  如果当前事务后面的查询查的是大于10,那么可以避免幻读问题。

 

总结:

两个事务,事务1正在执行,此时事务2插入一条数据并提交了事务;这时如果事务1中做了当前读的操作,并且二次查询时覆盖到事务2的更新范围,那RR事务的隔离级别也会产生幻读。

 

当前读语句:

            select * from table where ? lock in share mode;

                    select * from table where ? for update;

                    insert into table values (…);

                    update table set ? where ?;

                    delete from table where ?;

posted @ 2023-09-04 14:08  soft.push("zzq")  Views(6)  Comments(0Edit  收藏  举报