Innodb中的快照读和当前读

一、前言

上篇文章记录了对MVCC的相关理解,其中有提到快照读。其实在MVCC并发控制中,读操作可以分为两类:快照读(snapshot read)和当前读(current read)
 

二、什么是快照读和当前读

  • 快照读:读取的是记录的可见版本(有可能是历史版本),不加锁。
其实就是简单的select 操作。形如:select * from table where ?。 但还跟事务隔离级别有关。
 
  • 当前读:读取的是记录的最新版本,并且当前读返回的记录都会加上锁,保证其他事务不会再并发修改这条记录。
其实就是特殊的读操作,比如插入、更新、删除属于当前读,需要加锁的也属于当前读。如下:
select * from table where ? lock in share mode -- 共享锁 (这里可能不同版本的mysql对应命令不一样)
select * from table where ? for update -- 排他锁
insert into table values(?)
update table set ? where ?
delete from table where ?
 
 

三、快照读的实现

 

四、当前读的实现

主要靠加锁(行记录锁+间隙锁)实现,保证其他事务不会再并发修改这条记录。

posted @ 2021-04-28 17:10  玉树临枫  阅读(1029)  评论(0编辑  收藏  举报