IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Mysql——INSERT操作对应的undo日志 -> 正文阅读

[大数据]Mysql——INSERT操作对应的undo日志

一、undo日志概述

  • 一般来说,每对一条记录进行一次改动,就对应着1条undo日志(某些情况下,也可能会对应着2条undo日志)。

  • 一个事务中,这些undo日志会从0开始编号,每生成一条undo日志,那么该条日志的undo no就加1。即:第0号undo日志、第1号undo日志等等。这个编号也称为undo no

  • 这些undo日志被记录到类型为FIL_PAGE_UNDO_LOG的页面中

  • 对于表中数据进行不同操作都会产生什么样的undo日志?先创建一张sys_user表作为下面实验用的基表。
    在这里插入图片描述

  • InnoDB为每张表都分配了一个唯一的table_id,那么如何查询表id?
    (1)、 mysql 5.x查询innodb_sys_tables
    (2)、 mysql 8.x查询innodb_tables

    SELECT * FROM information_schema.`INNODB_SYS_TABLES`;
    

    在这里插入图片描述

二、INSERT操作对应的undo日志

  • 如果希望回滚一个插入操作,无论是乐观插入还是悲观插入,那么只需要把插入的这条记录删除就可以了。也就是说,在写对应的undo日志时,只要把这条记录的主键信息记上就好了。对应的undo日志类型为TRX_UNDO_INSERT_REC。

  • TRX_UNDO_INSERT_REC类型的undo日志结构,如下图所示:
    在这里插入图片描述(1)、end of record本条undo日志结束,下一条开始时在页面中的地址。
    (2)、undo type本条undo日志的类型,也就是TRX_UNDO_INSERT_REC
    (3)、undo no本条undo日志对应的编号
    (4)、table id本条undo日志对应的记录所在表的table_id
    (5)、主键各列信息 <len, value>列表主键的每个列占用的存储空间大小和真实值
    (6)、start of record上一条undo日志结束,本条开始时在页面中的地址

  • 当我们向某个表中插入一条记录时,实际上需要向聚簇索引和所有二级索引都插入记录。不过在记录undo日志时,我们只需要针对聚簇索引记录来记录一条undo日志就好了。如果回滚,会根据主键信息进行对应的删除操作。在执行删除操作时,就会把聚簇索引和二级索引中相应的记录都删掉。

  • 演示插入操作生成undo日志。

    # 我们先插入两条记录:
    BEGIN; # 显示开启一个事务,假设该事务的事务id为100
    
    # 插入两条记录
    INSERT INTO sys_user(id, name, city) 
    VALUES(1, 'xz','北京市'), (2, 'tom','天津市');
    

    在这里插入图片描述
    注:因为id主键的类型为INT,存储长度为4个字节。所以主键列表值为<4, 1> 和 <4, 2>。

  • roll_pointer本质上就是一个指向记录对应的undo日志的指针。
    (1)、聚簇索引记录存放到类型为FIL_PAGE_INDEX的页面;
    (2)、undo日志存放到类型为FIL_PAGE_UNDO_LOG的页面。
    (3)、聚簇索引记录和undo日志的存放位置,如下图所示:
    在这里插入图片描述

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-11-10 12:28:04  更:2021-11-10 12:30:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:53:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码