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

Mysql的事务隔离级别实现原理

一、事务隔离级别

mysql支持四种事务隔离级别:

  1. 读未提交:一个事务可以读取到另一个事务还未提交的数据;
  2. 读已提交:一个事务可以读取到另一个事务已经提交的数据;
  3. 可重复读:同一个事务中,无论读取多少次,结果都和第一次读一样;
  4. 串行化:多个事务之间读写和写写按照间隙锁互斥。

二、事务隔离级别实现原理

2.1 读未提交

直接读取最新的数据就好。

2.2 读已提交和可重复读

读已提交和可重复读,都是通过MVCC进行实现的,两者的区别在于ReadView生成方式不同。
MVCC的两个重要概念:版本链ReadView

2.2.1 版本链

在InnoDB引擎中,每行记录都会有两个隐藏列,即trx_idroll_pointer

  1. trx_id:记录最近修改该行的事务id;
  2. roll_pointer:指针,指向该行数据的上一个版本地址。

2.2.2 ReadView

ReadView有四个重要的字段:

  • creator_trx_id:创建该RV的事务id;
  • m_ids:在创建该RV时,当前数据库活跃事务的id列表,即还没提交的事务id列表;
  • min_trx_id:最小的活跃事务id;
  • max_trx_id:最大的活跃事务id+1。
    在这里插入图片描述

2.2.3 ReadView创建区别

读已提交时,一个事务中,每次执行select都会创建一个ReadView
可重复读时,一个事务中,只在第一次执行select时,创建一个ReadView

2.2.4 ReadView的使用规则

在一个事务中,执行select只能看到trx_idmin_trx_idmax_trx_id之间的事务。

读已提交和可重复读的底层原理均是MVCC,但是,由于两者创建ReadView的时机不同,故出现了两种隔离表现。

2.3 串行化

使用间隙锁,对读-写和写-写进行互斥。

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

相关文章:

  • 计算机体系结构:缓存一致性ESI
  • log4j2漏洞练习(未完成)
  • 常见网络攻击方法原理、应用场景和防御方法(一)
  • 【leetcode十分钟】覆盖所有点的最少矩形数目(C++思路详解)
  • 【Vue3】默认插槽
  • 华清day4 24-7-31
  • 搜维尔科技:Manus VR数据手套-适用于机器人、人工智能和机器学习解决方案
  • 知识文库杂志知识文库杂志社知识文库编辑部2024年第12期目录
  • 【Linux网络编程】套接字Socket
  • es之must、filter、must_not、should
  • RocketMQ消息发送基本示例(推送消费者)
  • 23 MySQL基本函数、分组查询、多列排序(3)
  • PHP与SEO,应用curl库获取百度下拉关键词案例!
  • MySQL:子查询
  • C++—— IO流
  • vue+node后台处理大文件切片上传--前端部分
  • 【通俗理解】艺术与数学交融
  • 深入探讨 Docker 容器文件系统
  • 《LeetCode热题100》---<4.子串篇三道>
  • 全国区块链职业技能大赛样题第9套前端源码
  • 如何提高编程面试成功率:LeetCode Top 100 问题及解答解析(详细面试宝典)
  • K-近邻和神经网络
  • 用EasyV全景图低成本重现真实场景,360°感受数字孪生
  • 【Golang 面试 - 进阶题】每日 3 题(九)
  • 孟德尔随机化、R语言,报错,如何解决?
  • 一文剖析高可用向量数据库的本质
  • JavaScript青少年简明教程:异常处理
  • 科普文:Lombok使用及工作原理详解
  • 飞致云开源社区月度动态报告(2024年7月)
  • mybatis-plus——实现动态字段排序,根据实体获取字段映射数据库的具体字段