Mysql 可重复读

事务隔离级别 RR 可重复读

在RC 已提交读 级别下,同一事务中:

当我们使用读语句时:

  • 确定扫描行
  • 多次读取都是返回最新值,不锁行,值在期间可被其他事务提交修改,修改后,再读取就是修改后的值了

当我们使用写语句时:

  • 确定扫描行
  • 不锁行,值在期间可被其他事务提交修改
针对当前读,RC隔离级别保证对读取到的记录加锁 (记录锁),存在幻读现象

在RR 可重复读级别下,同一事务中:

当我们使用读语句时:

  • 确定扫描行
    • 有索引按索引确定
    • 没有索引按全表确定
  • 缓存扫描行
  • 多次读取都是返回缓存

当我们使用写语句时:

  • 确定扫描行
  • 使用间隙锁锁定扫描行
  • 写入时引用的值按最新值
    快照读:简单的select操作,属于快照读,不加锁。(当然,也有例外)
        select * from table where ?;
 
    当前读:特殊的读操作,插入/更新/删除操作,属于当前读,需要加锁
 
        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 ?;

你可能感兴趣的:(Mysql 可重复读)