当前位置: 首页 > news >正文

MySQL数据库的MVCC详解

在MySQL的事务隔离锁机制中,MVCC是一个非常重要的概念,学会MVCC可以更好地理解MySQL如何实现各种隔离级别。

首先,大概地介绍一下mysql的事务隔离级别:

1、读未提交(Read Uncommited):指的是,在一个事务中,允许读取其他事务未提交的数据,也就是脏数据。因此在这个隔离级别下存在“脏读”的问题。。

2、读未提交(Read Commited):在一个事务中,只允许读取其他事务已经提交的数据,但是在事务中前后两次可能读到不一样的数据,因为可能在这期间其他事物对当前读的数据进行修改,并且修改数据的事务已经提交了。所以,在RC级别下,存在“不可重复读”的问题。

3、可重复读(Read Repeatable):在同一个事务中,在任意时刻读取到的同一条记录的数据是一样的,但是并不能保证在这期间表内的数据不会变化,可能在事务期间,其他事务中插入了几条数据,导致当前事务两次读取的数据记录数不一样。因此,RR级别下,存在“幻读”的问题。

4、序列化/串行化(Serializable):所有操作都加锁,保数据在同一时刻只有一个事务在读取数据,所以就不存在上面的问题了。这个隔离级别下,保证了数据的一致性,但是牺牲了读写的性能。

 

什么是MVCC?

MVCC:Muti Version Concurent Control,多版本并发控制,是MySQL中保证数据读写安全的一种机制。

MVCC中设计的概念:

  • ReadView
  • trx_id:事务ID
  • roll_pointer:回滚指针

 

在四种隔离机制中,只有RC和RR支持MVCC。

当开启一个事务时,会创建一个ReadView,ReadView中保存了当前活跃的事务ID,将这些事务ID从小到大排序生成一个数组。

隐含字段:在MySQL的聚簇索引中,包含了两个隐含的字段trx_id、roll_pointer

当读取数据时,获取数据的最大事务ID和ReadView中的事务ID进行比较

  • 如果trx_id比ReadView中的所有事务ID都小,说明是之前的事务已经提交的数据,允许读取。
  • 如果trx_id在当前ReadView中,说明事务还没有提交,根据ReadView中最小的roll_pointer(也就是上一个事务的ID),去读取之前的数据。
  • 如果trx_id比当前ReadView中的事务ID都大,说明数据是在当前事务开启之后新增的,不允许读取。

 

RC:每次创建事务时,都会新创建一个ReadView,所以可能读到的数据不一样。

RR:每次创建事务时,不会创建新的ReadView,所以读到的数据一样。

 

 

http://www.lryc.cn/news/188585.html

相关文章:

  • AI:10-基于TensorFlow的玉米病害识别
  • vue3前端开发系列 - electron开发桌面程序(2023-10月最新版)
  • 前端uniapp生成海报并保存相册
  • 0基础学习VR全景平台篇 第104篇:720全景后期软件安装
  • CMakeLists编译前拷贝文件或目录
  • mysql面试题35:MySQL有关权限的表有哪些?
  • ES6:什么是Symbol_
  • E. Li Hua and Array
  • 【项目】在线oj
  • 第十章-输入输出系统
  • TensorFlow学习:使用官方模型进行图像分类、使用自己的数据对模型进行微调
  • Matlab地理信息绘图—研究区域绘制
  • [CSAWQual 2019]Web_Unagi - 文件上传+XXE注入(XML编码绕过)
  • ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061)的问题解决
  • 什么是函数库和动态链接库?
  • POM配置
  • 微电网单台并网逆变器PQ控制matlab仿真模型
  • 计算机毕业设计选什么题目好?springboot 旅游网站
  • Android Fragment中使用Arouter跳转到Activity后返回Fragment不回调onActivityResult
  • hive add columns 后查询不到新字段数据的问题
  • 【linux】权限相关问题
  • “.NET视频总结:认识框架的结构和组件,掌握开发工具的奥妙“一
  • 02-RocketMQ开发模型
  • 第83步 时间序列建模实战:Catboost回归建模
  • 开源任务调度框架
  • Android Native 开发 要点记录
  • 数据库中查询所有表信息,查询所有字段信息
  • 改进智能优化算法常用指标一键导出为EXCEL,最优值,平均值,标准差,最差值,中位数,秩和检验,箱线图...
  • 在asp.net中,实现类似安卓界面toast的方法(附更多弹窗样式)
  • 一站式解决方案:Qt 跨平台开发灵活可靠