Innodb中的快照读和当前读

2021年11月22日 阅读数:2
这篇文章主要向大家介绍Innodb中的快照读和当前读,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

1、前言

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

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

  • 快照读:读取的是记录的可见版本(有多是历史版本),不加锁。
其实就是简单的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 ?
 
 

3、快照读的实现

 

4、当前读的实现

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

上一篇: MySQL中的锁