首页 > 其他分享 >事务间的可见性

事务间的可见性

时间:2024-05-23 22:18:15浏览次数:16  
标签:事务 记录 read 可见 trx id view

事务内部的数据修改

对事物本身可见,对其他事务要取决于事务隔离级别。

事务间

为了描述事务间可见性,引入几个数据库内部变量。

  1. trx_id: 某个事务对聚集索引记录修改时,trx_id会记录该事务的id
  2. m_ids: 创建read_view时,已开启但未commit的事务(活跃状态事务)id集合。
  3. min_trx_id:创建read_view后,m_ids中最小id对应的事务
  4. max_trx_id:创建read_view后,数据库为下一个还未启动事务预分配的id。
  5. creator_trx_id:创建read view所在事务的id
  6. roll_pointer:当某个事务对聚集索引记录修改时,将上一个版本的记录写到undo log, 让roll_pointer指向旧版记录,通过它可以找到修改前的记录。

事物的状态

  • 已提交的事务
  • 已启动未提交的事务
  • 还未启动的事务

image

  1. 绿色区域描述了一种事务的状态,这些事务已经启动,并且已经commit了,这时只要事务的read view更新,事务间的数据的更新对彼此就是可见的(一个事务可以看到其他事务对某条记录的更新结果)
  2. 红色区域指未来需要启动的事务,该类事务对记录的更新发生在read view创建之后,所以对当前活跃状态的事务是不可见的
  3. 黄色区域需要分为两种情况讨论:1)修改了记录,但是没有commit,这种情况更新read view之后事务对数据记录的更新互相不可见。2)修改了记录,并且已经commit,在事务更新read view之后数据之间可以看到彼此对数据记录的更新

我们再来看一下前面几个变量的关系。

  1. trx_id < min_trx_id说明在read view创建前,该事务就已经commit,理所当然对当前事务可见

  2. trx_id >= max_trx_id,在read view创建之后,新启动的事务对记录的更新对当前事务不可见

  3. min_trx_id <= trx_id < max_trx_id,1) 如果某个事务已经commit,则它对该记录更新结果对当前事务可见,此时它位于绿色区域,这也说明,绿色区域的事务id不一定都比min_trx_id小; 2) 如果某事务没有提交commit,则对当前记录不可见

标签:事务,记录,read,可见,trx,id,view
From: https://www.cnblogs.com/songyaxuan/p/18209480

相关文章

  • 创建事务批量删除DataGridView数据(含关联表中的数据)
    新建一个CommandInfo.cs类usingSystem;usingSystem.Collections.Generic;usingSystem.Data.Common;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespaceWinStuSystem{publicclassCommandInfo{publicstringCommand......
  • JavaWeb分布式事务处理
    哈喽,大家好,我是木头左!一、分布式事务的概念与特性在开始之前,首先需要理解什么是分布式事务以及其特性。将从最基础的定义和特性开始,逐步深入到其在实际应用中的表现和影响。1.1分布式事务的概念分布式事务是指跨越多个独立的计算机资源(如数据库、应用服务器等)的一组事务的......
  • Spring 对于事务上的应用的详细说明
    1.Spring对于事务上的应用的详细说明@目录1.Spring对于事务上的应用的详细说明每博一文案2.事务概述3.引入事务场景3.1第一步:准备数据库表3.2第二步:创建包结构3.3第三步:准备对应数据库映射的Bean类3.4第四步:编写持久层3.5第五步:编写业务层3.6第六步:编写Spring配置......
  • 数据库中了解的知识点:视图、触发器、事务、存储过程、函数、流程控制、索引
    【视图】1什么是视图?2视图就是通过查询得到一张虚拟表,然后保存下来,下次可以直接用3其实视图也是表45为什么要用视图?6如果要频繁的操作一张虚拟表,就可以制作成视图,下次可以直接操作78如何操作9#固定语法10createview......
  • spring事务原理
    1、事务概念事务,就是一组操作数据库的动作集合,要么全部成功,要么全部失败。spring支持两种方式的事务:编程式事务:编程式事务管理使用TransactionTemplate,需要显式执行事务,比如,需要显示调用commit或者rollback方法。声明式事务:声明式事务管理建立在AOP之上的。其本质是......
  • MySQL面试必备三之事务
    本文首发于公众号:Hunter后端原文链接:MySQL面试必备三之事务这一篇笔记介绍一下MySQL的事务,面试中常被问到关于事务的几个问题如下:事务是什么为什么需要事务,事务有什么作用事务的特点事务可能带来哪些问题事务有哪些隔离级别,这些隔离级别都可以解决哪些问题可重复读隔......
  • ❤️‍ Solon Cloud Event 新的事务特性与应用
    1、SolonCloudEvent?是Solon分布式事件总线的解决方案。也是Solon“最终一致性”分布式事务的解决方案之一2、事务特性事务?就是要求Event有原子性,当多个Event发布时,要么全成功,要么全失败。publicclassEventDemo{publicvoidevent_tran(){//新建......
  • lightdb mysql 8.0兼容之不可见主键
    数据库设计通常需要满足一定的范式要求,其中主键更是最基本的要求。不过,数据库管理系统却允许我们创建没有主键的表。这样的表在数据库中会带来查询性能低下、复制延迟甚至无法实现高可用配置等问题。为此,lightdb在22.1版本引入了一个新的功能,叫做不可见主键(GeneratedInv......
  • openGauss 事务隔离说明
    事务隔离说明openGauss基于MVCC(多版本并发控制)并结合两阶段锁的方式进行事务管理,其特点是读写之间不阻塞。SELECT是纯读操作,UPDATE和DELETE是读写操作。读写操作和纯读操作之间并不会发生冲突,读写操作之间也不会发生冲突。每个并发事务在事务开始时创建事务快照,并发事务之间不......
  • mybatis多线程插入数据表已经事务回滚
    importlombok.extern.slf4j.Slf4j;importorg.apache.commons.collections4.CollectionUtils;importorg.apache.commons.collections4.ListUtils;importorg.apache.ibatis.session.ExecutorType;importorg.apache.ibatis.session.SqlSession;importorg.apache.ibati......