首页 > 数据库 >MySQL实现事务隔离的原理

MySQL实现事务隔离的原理

时间:2024-03-11 11:56:37浏览次数:22  
标签:事务 隔离 read 创建 trx MySQL id view

一、read view四个字段
create_trx_id:创建该read view的事务的事务id
m_ids:创建read view时,当前数据库中的活跃事务(指启动但还没提交的事务)
min_trx_id:m_ids的最小值
max_trx_id:创建read view后,下一个事务的id

二、聚簇索引的隐藏列
trx_id:最近一次改动该聚簇索引记录的事务id
roll_pointer:指向旧版本记录,形成版本链

三、read view在mvcc中工作原理
1.如果trx_id<min_trx_id,说明已经提交了,该版本对该事务可见
2.如果trx_id>max_trx_id,说明该版本在创建read view后才生成的,所以该版本对该事务不可见
3.如果min_trx_id<trx_id<max_trx_id:在m_ids中,说明未提交,不可见;不在m_ids中,说明已提交,可见

四、四种隔离级别实现
1.读未提交:直接读取最新数据即可
2.读提交:每次读取数据都生成新的read view
3.可重复读:在启动事务时生成一个read view,整个事务期间都在用这个read view
4.串行化:通过加读写锁来避免并行访问

标签:事务,隔离,read,创建,trx,MySQL,id,view
From: https://www.cnblogs.com/fly-smart/p/18065768

相关文章

  • Mysql和Clickhouse数据查询-按照时间分组统计并且对无无数据的日期补0
      最近在做数据查询需求的时候,遇到按照时间分组查询统计指标的需求,比如说查询模块的最近15天访问数据量,没有数据的日期补0,以前对于这种类似的需求都是通过代码来补数据,想试试sql实现这种查询,因此查询了不少文章,对于类似实现方法的文章网上也有很多,差异也很多,因此这篇文章只......
  • MySQL 8.0.26版本升级32版本查询数据为空的跟踪
    某业务系统将MySQL8.0.26升级为GreatSQL8.0.32-24后,某些特定的SQL语句不能查询到数据。经测试MySQL8.0.32也存在相同的问题此BUG已在GreatSQL8.0.32-25版本中解决MySQL8.0.26版本升级32版本查询数据为空的跟踪接到客户反馈的问题后,对问题进行了复现和分析。版本信......
  • 政府军工等行业物理隔离后 如何实现文件安全导入导出?
    政府、军工等重点行业的核心数据比较多,比如国家机密、军事情报、人员信息、技术数据、财务数据等,一旦泄露将会造成不可挽回的影响。所以政府、军工这些行业需要使用一些手段将数据保护起来,其中网络隔离就是一个比较普遍的方式,隔离后,再使用一些文件安全导入导出的工具或产品,来进行......
  • Mysql如何给字符串添加索引(前缀索引)
    在日常开发中,我们经常给字符串添加索引,那么给字段添加索引有什么技巧吗,我们看看下面的例子,我们给一个邮箱添加索引,应该如何添加呢看看下面这条sqlselect*fromuserwhereemail='[email protected]'如果我们不添加索引,肯定是要进行全表扫描的,那么我们如何添加呢有两种方式a......
  • MYSQL学习笔记23: 多表查询(自连接内连接+左右外连接)
    多表查询(自连接)自连接查询,可以是内连接查询,也可以是外连接查询select字段列表from表A别名Ajoin表A别名Bon条件...;自连接内连接查询员工以及所属领导的名字#可以这样写selecte1.name'员工',e2.name'上司'fromempe1joinempe2one1.man......
  • MYSQL学习笔记24: 多表查询(联合查询,Union, Union All)
    多表查询(联合查询,union,unionall)union查询需要多张表的列数一致,字段类型也保持一致对于union查询,就是把多次查询的结果合并起来,形成一个新的查询结果集select字段列表from表A...union[all]select字段列表from表B...;查询出薪资低于10000,或年龄......
  • MYSQL学习笔记25: 多表查询(子查询)[标量子查询,列子查询]
    多表查询(子查询)子查询,也称嵌套查询子查询的语句可以是insert/update/delete/select中的任何一个根据子查询的结果不同,可以分为:标量子查询(结果为单个值)列子查询(结果为一列)行子查询(子查询结果为一行)表子查询(子查询结果为多行多列)select*fromt1wh......
  • MySQL-扩展
    存储引擎体系结构连接层最上层是一些客户端和链接服务,主要是完成一些类似于链接处理、授权认证及相关的安全方案。服务器也会为安全接入的每个客户端验证它所具有的操作权限。服务层第二层架构主要完成大多数的核心服务功能,如SQL接口,并完成缓存的查询,SQL的分析和优化,部分内......
  • Mysql-基础
    数据模型可以建立多个数据库,各数据库隔离数据库中可以建立多各关系型数据表SQL分类DDL数据定义语言,用来定义数据库对象(数据库、表、字段)数据库操作查询查询所有数据库SHOWDATABSE;查询当前数据库SELECTDATABASE();创建创建数据库CREATADATABASE[IFNOTEXIS......
  • Mysql8.0在windows系统安装一直卡在Starting the server的解决方案
    报错:Beginningconfigurationstep:StartingServerAttemptingtostartserviceMySQL80一直卡在这里,手动启动服务也起不起来情况一:到这里直接显示叉情况二:一直停留在StartingServer可以参考下述步骤进行操作:1、使用Win+R-->运行“services.msc”-->打开服务管理......