当前读和快照读有什么区别 ?
一、定义
所谓快照读,就是读取快照数据,即快照生成的那一刻的数据,像我们常用的普通的 select 语句在不加锁情况下就是快照读如:
select * from xx_table where ...
和快照读相对应的另外一个概念叫做当前读,当前读就是读取最新数据,所以加锁的 select,或者对数据进行增删改都会进行当前读,比如:
select * from xx_table lock in share mode;
select * from xx_table for update;
insert into xx_table ...
delete from xx_table ...
update xx_table ...
在MySQL 中,只有READ COMMITTED 和 REPEATABLE READ 这两种事务隔离级别才会进行快照读,而快照读需依赖读视图(ReadView)
1、在可重复读(Repeatable Read)级别下,读视图(ReadView)会在事务中第一次 select 语句执行时生成,
在本事务第二次 select 语句时会复用第一次的读视图(ReadView),只有在本事务中对数据进行更改才会更新读视图
2、在读已提交(Read Committed)级别下,每次读取都会重新生成一个读视图(ReadView),总是读取行的最新版本
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号