01.25 Day 6 - InnoDB 的事务和锁

2024-02-04 09:18
文章标签 day 事务 innodb 01.25

本文主要是介绍01.25 Day 6 - InnoDB 的事务和锁,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

大家好,我是 Snow Hide,作为《MySQL 实战》这个专栏的学员之一,这是我打卡的第 6 天,也是我第 47 次进行这种操作。

今天我温习了该专栏里一篇叫《事务到底是隔离的还是不隔离的?》的文章。

关键词总结:事务启动时机、MySQL 两个 “视图” 的概念、“快照” 在 MVCC 里是怎么工作的?(数据版本 row trx_id 的几种可能、对事务视图来说的数据版本)、更新逻辑(读提交和可重复读的区别)。

 

所学总结:

 

事务启动时机

  • 第一种启动方式,执行第一个快照读语句时创建一致性视图;
  • 第二种启动方式,执行 start transaction with consistent snapshot 时创建一致性视图。

 

MySQL 两个 “视图” 的概念

  • View 视图:通过查询语句定义的虚拟表,调用时执行查询语句并生成结果。语法是 create view … ,它的查询方法与表一样;
  • Consistent Read 视图:InnoDB 在实现 MVCC 时用的一致性读视图,以支持读提交(RC,Read Committed)以及可重复读(RR,Repeatable Read)隔离级别的实现。
     

“快照” 在 MVCC 里是怎么工作的?

InnoDB 里每个事务有一个唯一的事务 ID,叫 transaction id。它是由事务开始时向 InnoDB 事务系统申请的,按申请顺序严格递增。
每行数据有多个版本。每次事务更新数据时,生成一个新的数据版本,并将 transaction id 赋予数据版本的事务 ID,也就是 row trx_id。保留旧数据版本,新数据版本中能直接获取它。

数据版本 row trx_id 的几种可能

  • 在已提交事务(低水位):该版本是已提交或当前事务所生成的,该数据是可见的;
  • 未开始事务(高水位):该版本是将来启动事务所生成的,该数据不可见;
  • 未提交事务集合(当前事务):两种情况:
  • row trx_id 在数组中:该版由还未提交的事务所生成,不可见;
  • row trx_id 不在数组中:该版由已提交事务所生成,可见。

对事务视图来说的数据版本

  • 版本未提交:不可见;
  • 版本已提交:在视图创建后提交的,不可见;
  • 版本已提交:在视图创建前提交的,可见。
     

更新逻辑

读提交和可重复读的区别

  • 可重复读隔离级别:事务开始时创建一致性视图,之后事务的其他查询共用该一致性视图;
  • 读提交隔离级别:语句执行前会重新计算一个新视图。

 

末了

重新总结了一下文中提到的内容:InnoDB 行数据有多个版本、数据版本有自己的 row trx_id、事务或语句有自己的一致性视图、普通查询语句是一致性读、一致性读会根据 row trx_id 和一致性视图确定数据版本可见性、可重复读查询认可在事务启动前就提交的数据、读提交查询认可在语句启动前就提交的数据。

这篇关于01.25 Day 6 - InnoDB 的事务和锁的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/676986

相关文章

Spring事务传播机制最佳实践

《Spring事务传播机制最佳实践》Spring的事务传播机制为我们提供了优雅的解决方案,本文将带您深入理解这一机制,掌握不同场景下的最佳实践,感兴趣的朋友一起看看吧... 目录1. 什么是事务传播行为2. Spring支持的七种事务传播行为2.1 REQUIRED(默认)2.2 SUPPORTS2

MySQL之InnoDB存储引擎中的索引用法及说明

《MySQL之InnoDB存储引擎中的索引用法及说明》:本文主要介绍MySQL之InnoDB存储引擎中的索引用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录1、背景2、准备3、正篇【1】存储用户记录的数据页【2】存储目录项记录的数据页【3】聚簇索引【4】二

MySQL中的InnoDB单表访问过程

《MySQL中的InnoDB单表访问过程》:本文主要介绍MySQL中的InnoDB单表访问过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、访问类型【1】const【2】ref【3】ref_or_null【4】range【5】index【6】

MySQL之InnoDB存储页的独立表空间解读

《MySQL之InnoDB存储页的独立表空间解读》:本文主要介绍MySQL之InnoDB存储页的独立表空间,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、独立表空间【1】表空间大小【2】区【3】组【4】段【5】区的类型【6】XDES Entry区结构【

关于MyISAM和InnoDB对比分析

《关于MyISAM和InnoDB对比分析》:本文主要介绍关于MyISAM和InnoDB对比分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录开篇:从交通规则看存储引擎选择理解存储引擎的基本概念技术原理对比1. 事务支持:ACID的守护者2. 锁机制:并发控制的艺

MySQL启动报错:InnoDB表空间丢失问题及解决方法

《MySQL启动报错:InnoDB表空间丢失问题及解决方法》在启动MySQL时,遇到了InnoDB:Tablespace5975wasnotfound,该错误表明MySQL在启动过程中无法找到指定的s... 目录mysql 启动报错:InnoDB 表空间丢失问题及解决方法错误分析解决方案1. 启用 inno

MySQL 事务的概念及ACID属性和使用详解

《MySQL事务的概念及ACID属性和使用详解》MySQL通过多线程实现存储工作,因此在并发访问场景中,事务确保了数据操作的一致性和可靠性,下面通过本文给大家介绍MySQL事务的概念及ACID属性和... 目录一、什么是事务二、事务的属性及使用2.1 事务的 ACID 属性2.2 为什么存在事务2.3 事务

Spring Boot 事务详解(事务传播行为、事务属性)

《SpringBoot事务详解(事务传播行为、事务属性)》SpringBoot提供了强大的事务管理功能,通过@Transactional注解可以方便地配置事务的传播行为和属性,本文将详细介绍Spr... 目录Spring Boot 事务详解引言声明式事务管理示例编程式事务管理示例事务传播行为1. REQUI

MySQL中的事务隔离级别详解

《MySQL中的事务隔离级别详解》在MySQL中,事务(Transaction)是一个执行单元,它要么完全执行,要么完全回滚,以保证数据的完整性和一致性,下面给大家介绍MySQL中的事务隔离级别详解,... 目录一、事务并发问题二、mysql 事务隔离级别1. READ UNCOMMITTED(读未提交)2

如何合理使用Spring的事务方式

《如何合理使用Spring的事务方式》:本文主要介绍如何合理使用Spring的事务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、底层构造1.1.事务管理器1.2.事务定义信息1.3.事务状态1.4.联系1.2、特点1.3、原理2. Sprin