【MySQL】当前读和快照读

文章目录

在学习 MVCC 多版本并发控制之前,必须先了解一下,什么是 MySQL InnoDB 下的 当前读快照读?

当前读

读取的是记录的最新版本,读取时还要保证其他并发事务不能修改当前记录,会对读取的记录进行加锁。对于我们日常的操作,如:select ... lock in share mode(共享锁),select ... for update、update、insert、delete(排他锁)都是一种当前读。

例如下图:

  • 假设事务A第一次读取id为1的数据为1
  • 此时事务B对id为1的数据进行了修改操作,修改后的数据为2
  • 事务A再次读取id为1的数据,此时数据为2

这里不管是读还是更新还是写数据或者删除数据,都是加了锁的,自然效率不高

快照读

简单的select(不加锁)就是快照读,快照读,读取的是记录数据的可见版本有可能是历史数据,不加锁,是非阻塞读。

  1. Read Committed(读已提交):每次select,都生成一个快照读。

同样还是这张图,在RC策略等级下 两次读到的数据时不一样的,读到的数据依然是最新数据

  1. Repeatable Read(可重复读):开启事务后第一个select语句才是快照读的地方。
    >在RR策略等级下 两次读到的数据必然是一样的,读到的不一定是最新数据,而是与之前读到的一样的数据。
相关推荐
梓沂6 分钟前
dockercompose启动mysql容器和springboot项目容器时,mysql容器启动慢导致springboot项目容器启动失败
数据库·spring boot·mysql
CodeAmaz8 分钟前
MySQL 各种锁机制详解
数据库·mysql·mysql锁
Swift社区9 分钟前
数据库连接池监控最佳实践:用 Prometheus + Grafana 打造可视化监控体系
数据库·grafana·prometheus
牛奶咖啡1314 分钟前
达梦数据库在国产系统的生产环境下安装部署实践教程(下)
数据库·达梦数据库·国产达梦数据库的安装部署·达梦数据库的目录结构介绍·使用命令行登录达梦数据库·达梦数据库的常用查询命令·使用图形化工具管理达梦数据库
小满、15 分钟前
Redis:高级数据结构与进阶特性(Bitmaps、HyperLogLog、GEO、Pub/Sub、Stream、Lua、Module)
java·数据结构·数据库·redis·redis 高级特性
xiangzhihong819 分钟前
Windows环境下安装使用Redis
数据库·windows·redis
islandzzzz26 分钟前
从0开始的SQL表DDL学习(基础语法结构、索引/约束关键字)
数据库·sql·学习
qq_3814549930 分钟前
数据脱敏全流程解析
java·网络·数据库
qq_3482318534 分钟前
MySQL 与 PostgreSQL对比
数据库·mysql·postgresql
梁bk43 分钟前
苍穹外卖项目总结(一)[MyBatis-Plus,文件上传,Redis]
数据库·redis·mybatis