(三十二)大白话MySQL一起来看看INSRET语句的undo log回滚日志长什么样?

news2024/9/25 13:26:19

昨天我们讲解了undo log回滚日志的作用,说白了,就是你执行事务的时候,里面很多INSERT、UPDATE和DELETE语句都在更新缓存页里的数据,但是万一事务回滚,你必须有每条SQL语句对应的undo log回滚日志,根据回滚日志去恢复缓存页里被更新的数据。

比如你执行了INSERT语句,那么你的undo log必须告诉你插入数据的主键ID,让你在回滚的时候可以从缓存页里把这条数据给删除了;

如果你执行了DELETE语句,那么你的undo log必须记录下来被删除的数据,回滚的时候就得重新插入一条数据;

如果你执行了UPDATE语句,那么你必须记录下来修改之前的数据,回滚的时候就得把数据给更新回去,如下图所示。

那么今天我们就一起来看看这个INSERT语句的undo log日志到底长什么样子呢?

INSERT语句的undo log的类型是TRX_UNDO_INSERT_REC,这个undo log里包含了以下一些东西:

  • 首先,一条日志必须得有自己的一个开始位置,这个没什么好说的是吧?

  • 那么主键的各列长度和值是什么意思?大家都知道,你插入一条数据,必然会有一个主键

​ 如果你自己指定了一个主键,那么可能这个主键就是一个列,比如id之类的,也可能是多个列组成的一个主键,

​ 比如“id+name+type” 三个字段组成的一个联合主键,也是有可能的。

​ 所以这个主键的各列长度和值,意思就是你插入的这条数据的主键的每个列,他的长度是多少,具体的值是多少。

​ 即使你没有设置主键,前面也讲过,MySQL自己也会给你弄一个row_id作为隐藏字段,做你的主键。

  • 接着是表id,这个就不用多说了,你插入一条数据必然是往一个表里插入数据的,那当然得有一个表id,记录下来是在哪个表里插入的数据了。

  • undo log日志编号,这个意思就是,每个undo log日志都是有自己的编号的。

​ 而在一个事务里会有多个SQL语句,就会有多个undo log日志,在每个事务里的undo log日志的编号都是从0开始的,

​ 然后依次递增。

​ 至于undo log日志类型,就是TRX_UNDO_INSERT_REC,insert语句的undo log日志类型就是这个东西。

  • 最后一个undo log日志的结束位置,这个自然也不用多说了,他就是告诉你undo log日志结束的位置是什么。

那么接着我们用一个图画一下这个INSERT语句的undo log回滚日志的结构,大家来看一眼,感受一下。

image-20230102113205438

大家可以想象一下,有了这条日志之后,剩下的事儿就好办了。

万一要是你现在在buffer pool的一个缓存页里插入了一条数据了,执行了insert语句,然后你写了一条上面的那种undo log,现在事务要是回滚了,你直接就把这条insert语句的undo log拿出来。

然后在undo log里就知道在哪个表里插入的数据,主键是什么,直接定位到那个表和主键对应的缓存页,从里面删除掉之前insert语句插入进去的数据就可以了,这样就可以实现事务回滚的效果了!

好了,今天先初步的看一下insert语句的undo log回顾日志,delete语句和update语句的回滚日志我们暂时就不细讲了,其实大家应该都能想象到他们是如何实现的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/367369.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Docker 名词介绍

Docker核心名词镜像文件镜像:简单理解为就是一个安装包,里面包含容器所需要运行的的基础文件和配置信息,比如:redis镜像、mysql镜像等。镜像的来源方式:1. 自己做镜像 比如(自己开发微服务项目)2. 拉取别人…

python学习笔记——数据类型总结

1.基本数据类型  数据类型对应的内置函数:将其他类型,转换成自己的类型。 int()float()bool()str()list()tuple()set()dict() 2.数据类型对比  3.列表 w [a,b,c] #查 print(w[0]) print(w[0:3:2]) #增 w.appe…

css 属性和属性值的定义

文章目录css文本属性作业列表属性背景属性作业css文本属性 序号属性描述说明1font-size字体大小浏览器默认16px;2font-family字体当字体是中文字体,英文字体,中间有空格时候,要加双引号,多字体之间用逗号隔开 默认微软…

绿通科技在创业板开启申购:超额募资约19亿元,收入依赖贴牌

2月23日,广东绿通新能源电动车科技股份有限公司(下称“绿通科技”,SZ:301322)开启申购。据贝多财经了解,绿通科技本次上市的发行价为131.11元/股,发行数量为1749万股,市盈率73.75倍。 按发行价…

为什么数字孪生技术对工业物联网基础设施至关重要

随着工业物联网基础设施的不断建设和发展,数字孪生技术的重要性也变得越来越明显。由于数字孪生模型是工厂或其资产的虚拟版本,其高度精确和详细的特点使决策者获得了更高的可见性。下面让我们了解一下数字孪生技术给工业物联网基础设施带来的有效帮助。…

【Axure教程】自动生成页码的中继器表格

当表格数据较多时,我们经常会分页显示,这时我们就需要用到页码的元件了。所以作者今天就教大家如何在Axure中制作一个能自动根据中继器表格的数据以及分页情况,自动生成对应页码的原型模板。一、效果展示1、页码能根据表格数据和每页显示条数…

Apache Commons FileUpload Apache Tomcat拒绝服务漏洞解决方案

近日,安全狗应急响应中心关注到Apache官方发布安全公告,披露在Apache Commons FileUpload<1.5版本中存在一处拒绝服务漏洞(CVE-2023-24998)。Commons FileUpload是Apache组织提供的免费的上传组件。由于Apache Commons…

pyaudio声卡信息中hostApi是什么意思?

hostApi是声卡驱动协议,声卡驱动模式,有如下很多类。下面的类型是网上找的PortAudio的类,不不确定是不是python的。typedef enum PaHostApiTypeId{paInDevelopment0, /* use while developing support for a new host API */paDirectSound1,p…

EMC诊断技术

第一课 探讨EMC诊断技术-滤波篇EMC法规:CISPR16-1、GB/T 6113.1 GB/T 7343dBuV3dB是1.41倍6dB是2倍20dB是10倍差模噪声在电源/信号到地上走,差模噪声是电源/地/信号/到EGNDEMI滤波器的性能指标:滤波器插入损坏(共模插损、差模插损)

儿童全脑九大能力,3-6岁的家长都应该知道

什么是全脑? 人的大脑分左右两个半球,形态虽然相似,功能却各有不同。其中,左脑负责文字、数学、计算、分析、逻辑、顺序、事实和记忆,掌管右侧肢体的感觉和运动;右脑则负责颜色、音乐、想象、韵律、感觉、…

【原创】java+swing+mysql物业管理系统设计与实现

之前的文章里也讲过物业管理系统的开发,不过使用的是javaweb技术,bs架构,网页的形式。今天我们主要介绍使用javaswing技术同样去开发一套物业管理系统。以方便管理员进行物业信息的管理。 功能分析: 物业管理系统主要是为了方便…

买卖股票的最佳时机II-力扣122-java贪心策略

一、题目描述给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。 返回 你能获得的 最大 利润 。…

SAP PI PO JDBC接口培训视频

SAP PI PO JDBC接口培训视频XML Document Format for the Message Protocol XML SQL Format You can modify one or more database tables by means of a message. Depending on the content of the message, you can either insert (INSERT), update (UPDATE), or delete (DEL…

Java ”框架 = 注解 + 反射 + 设计模式“ 之 反射详解

Java ”框架 注解 反射 设计模式“ 之 反射详解 每博一文案 无论幸福还是苦难,无论光荣还是屈辱,你都要自己遭遇与承受。—————— 《平凡的世界》 孙少平多少美好的东西消失和毁灭了,世界还像什么事也没有发生,是的&#…

Head First设计模式---5.单例模式

2.2单例模式 单例模式运用的可能比其他几种简单,通俗点理解就是,我这个对象只能存在一个。 问题 保证一个类只有一个实例。 为什么会有人想要控制一个类所拥有的实例数量? 最常见的原因是控制某些共享资源 (例如数据库或文件&am…

STL库实践

STL库实践1 写在最前面的话1.1 容器(container)1.2 算法(algorithm)1.3 迭代器(iterator)1.4 仿函数1.5 适配器1.6 空间配置器1.7 stl初试牛刀2 容器之 string2.1 string 构造函数2.2 string基本赋值操作2.3 string存取字符操作2.4 string拼接操作2.5 string查找和替换2.6 stri…

Windows安装 MySQL5.7(超详细)

Windows安装 MySQL5.7安装包下载安装步骤解压添加环境变量初始化MySQL初始登录MySQL并修改root密码注意,截至2023年2月23日,MySQL所有版本不提供ARM芯片架构的Windows版本(8.0.12开始支持Red Hat系统的ARM版本),所以ARM架构的Windows无法安装…

什么是软件测试中的人工智能?

什么是软件测试中的人工智能?近日,由人工智能实验室OpenAI开发的全新“对话机器人”ChatGPT在各大中外媒体平台掀起了一阵狂热之风。从正式发布到风靡全球,不过100天,用户已突破1亿,成为史上用户增长最快的应用程序。C…

图解 | 工信部网络与数据安全57项“执法事项清单”来了

2023年2月,工业和信息化部根据《工业和信息化部全面推行行政执法公示制度执法全过程记录制度重大执法决定法制审核制度暂行实施方案》的相关要求,结合有关法律法规依据的修订情况及行政执法工作实际,编制发布了《工业和信息化部行政执法项目清…

高效制作知识库的软件工具,这6个都很不错哦!

任何工作流程都离不开文档管理,因此文档管理也是企业数字化转型中的重要环节。面对复杂的业务流程、频繁的文档编辑任务和跨区域的文件共享需求,优秀的文档管理体系能够帮助企业实现安全的文档存储,高效的文档搜索,便捷的文档协作…