【MySQL】浅谈MySQL事务原理

简介: 国庆假期后的第一个工作日,简析MySQL事务实现原理,助你跟面试官对线不落下风~

MySQL系列文章

事务特性

首先mysql事务的四大特性分别为

  • 原子性
  • 一致性
  • 隔离性
  • 持久性

其中原子性、一致性、持久性通过依赖MySQL的日志系统做保证,概念模糊的同学可以过一下往期整理的日志系统文章【浅谈日志系统】。而隔离性则是通过MVCC特性readview实现。

redolog与undolog在【浅谈日志系统】中都有介绍,遇到这个问题的时候可以把相关的点串起来回答,本篇主要说一下隔离性的实现。


MVCC

基本概念

  • 当前读:读取当前记录的最新版本,对数据加锁。sql中如select ... lock in share mode(共享锁),select ... for update、update、insert、delete(排他锁)都是一种当前读。
  • 快照读:读取的是数据版本链上的某一个版本,有可能是历史数据,不加锁,属于非阻塞读。常见的select * from语句就属于快照读。
  • mvcc:全称为多版本并发控制,可以通俗理解为数据并不是只存一份,而是对与不同的事务存储了一整数据变动版本链条。用于实现不同事务之间读写操作不用通过加锁来避免冲突。


实现原理

隐藏字段

  • 其实在数据表中的每行数据除了使用者自己创建出的字段以外,InnoDB还为每一行存储了两个关键隐藏字段。
  1. DB_TRX_ID,最近修改事务ID,记录这条记录的最后一次修改该记录的事务id
  2. DB_ROLL_PTR,回滚指针,指向这条记录的上一个版本,用于配合 undolog,指向上一个版本。


undolog

  • 回滚日志,所有的insert、update、delete语句都会产生用于于数据回滚的日志。
  • undolog分为
  1. insert undolog,insert语句产生的的日志,事务提交后
  2. update undolog,delete和update语句产生的日志,事务提交后放到history list中,用于保证快照读,等待purge线程进行最终删除。
  • 不同事务或相同事务对同一条记录进行修改,会导致该记录的undo log生成一条记录版本链表,链表的头部是最新的旧记录,链表尾部是最早的旧记录。


read view

  • 读视图,与create view的视图概念截然不同。ReadView(读视图)是快照读 SQL执行时MVCC提取数据的依据,记录并维护系统当前活跃的事务(未提交的)id
  • 包含四个核心字段
  • m_ids,当前活跃的事务 ID 集合
  • min_trx_id,最小活跃事务 ID
  • max_trx_id,预分配事务 ID ,当前最大事务 ID+1 (因为事务 ID 是自增的)
  • creator_trx_id,ReadView 创建者的事务 ID
  • readview将当前系统活跃的读写事务,把它们的事务id放到一个m_ids列表中
  • 被访问版本的事务id小于m_ids的最小事务id,表示生成该版本的事务在生成readview前已经提交
  • 如果被访问版本的 trx_id 属性值大于 m_ids 列表中最大的事务id,表明生成该版本的事务在生成 ReadView 后才生成,所以该版本不可以被当前事务访问。
  • 如果被访问版本的 trx_id 属性值在 m_ids 列表中最大的事务id和最小事务id之间,那就需要判断一下 trx_id 属性值是不是在 m_ids 列表中,如果在,说明创建 ReadView 时生成该版本的事务还是活跃的,该版本不可以被访问;如果不在,说明创建 ReadView 时生成该版本的事务已经被提交,该版本可以被访问
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
3月前
|
SQL 关系型数据库 MySQL
MySQL锁机制:并发控制与事务隔离
本文深入解析了MySQL的锁机制与事务隔离级别,涵盖锁类型、兼容性、死锁处理及性能优化策略,助你掌握高并发场景下的数据库并发控制核心技巧。
|
4月前
|
存储 监控 Oracle
MySQL事务
MySQL事务具有ACID特性,包括原子性、一致性、隔离性和持久性。其默认隔离级别为可重复读,通过MVCC和间隙锁解决幻读问题,确保事务间数据的一致性和并发性。
MySQL事务
|
5月前
|
存储 SQL 关系型数据库
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
|
2月前
|
关系型数据库 MySQL 数据库
【赵渝强老师】MySQL的事务隔离级别
数据库并发访问时易引发数据不一致问题。如客户端读取到未提交的事务数据,可能导致“脏读”。MySQL通过四种事务隔离级别(读未提交、读已提交、可重复读、可序列化)控制并发行为,默认为“可重复读”,以平衡性能与数据一致性。
275 0
|
3月前
|
关系型数据库 MySQL 数据库
MySql事务以及事务的四大特性
事务是数据库操作的基本单元,具有ACID四大特性:原子性、一致性、隔离性、持久性。它确保数据的正确性与完整性。并发事务可能引发脏读、不可重复读、幻读等问题,数据库通过不同隔离级别(如读未提交、读已提交、可重复读、串行化)加以解决。MySQL默认使用可重复读级别。高隔离级别虽能更好处理并发问题,但会降低性能。
171 0
|
9月前
|
自然语言处理 搜索推荐 关系型数据库
MySQL实现文档全文搜索,分词匹配多段落重排展示,知识库搜索原理分享
本文介绍了在文档管理系统中实现高效全文搜索的方案。为解决原有ES搜索引擎私有化部署复杂、运维成本高的问题,我们转而使用MySQL实现搜索功能。通过对用户输入预处理、数据库模糊匹配、结果分段与关键字标红等步骤,实现了精准且高效的搜索效果。目前方案适用于中小企业,未来将根据需求优化并可能重新引入专业搜索引擎以提升性能。
426 5
|
5月前
|
安全 关系型数据库 MySQL
mysql事务隔离级别
事务隔离级别用于解决脏读、不可重复读和幻读问题。不同级别在安全与性能间权衡,如SERIALIZABLE最安全但性能差,READ_UNCOMMITTED性能高但易导致数据不一致。了解各级别特性有助于合理选择以平衡并发性与数据一致性需求。
186 1
|
5月前
|
SQL 关系型数据库 MySQL
MySQL group by 底层原理详解。group by 执行 慢 原因深度分析。(图解+秒懂+史上最全)
MySQL group by 底层原理详解。group by 执行 慢 原因深度分析。(图解+秒懂+史上最全)
MySQL group by 底层原理详解。group by 执行 慢 原因深度分析。(图解+秒懂+史上最全)
|
10月前
|
关系型数据库 MySQL 数据库
RDS用多了,你还知道MySQL主从复制底层原理和实现方案吗?
随着数据量增长和业务扩展,单个数据库难以满足需求,需调整为集群模式以实现负载均衡和读写分离。MySQL主从复制是常见的高可用架构,通过binlog日志同步数据,确保主从数据一致性。本文详细介绍MySQL主从复制原理及配置步骤,包括一主二从集群的搭建过程,帮助读者实现稳定可靠的数据库高可用架构。
567 9
RDS用多了,你还知道MySQL主从复制底层原理和实现方案吗?
|
10月前
|
SQL 存储 关系型数据库
MySQL主从复制 —— 作用、原理、数据一致性,异步复制、半同步复制、组复制
MySQL主从复制 作用、原理—主库线程、I/O线程、SQL线程;主从同步要求,主从延迟原因及解决方案;数据一致性,异步复制、半同步复制、组复制
1082 11

推荐镜像

更多