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 ?;
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容