mysql事务原理分析

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: mysql事务原理分析

事务

       事务是希望mysql数据库将多条sql语句作为整体进行处理;因为有多条连接,可能出现多个并发事务处理;在这多个并发处理的事务中,可能乱序交叉执行,我们需要解决这乱序交叉执行的问题,让数据库知道接下来的语句是一个事务;

     发送start transaction | begin给mysql,是发送了具体的协议,mysql会返回是否开启事务成功的结果;开启事务成功后可能有多个sql语句发给mysql;最后commit提交事务,同样是发送了具体的协议,mysql会返回是否提交事务成功的结果;事务提交成功后,mysql会对事务执行的结果整体进行持久化;

acid特性

       1)原子性,一个事务要么都做要么都不做;

       2)一致性,数据库完整约束的一致性,还有唯一约束,非空约束,外键约束等,这些约束在事务的操作过程中到操作结束,它的一致性不会受到影响;一致性通常是由原子性,一致性,隔离性,持久性一起来实现的;

       3)隔离性,acid中最重要的一个特性,通常是由原子性,一致性,持久性一起来实现的;程序员可以修改隔离级别,通过了解隔离级别内部的原理,进行相应的处理;目的是用来防止多个并发事务交叉执行导致数据的不一致性;隔离性通过加锁和mvcc来实现;

       4)持久性,对数据库的变更进行持久化,落到磁盘中;持久性通常使用redolog来实现,redolog是事务提交后,记录dml操作对应物理页修改的内容;undolog记录了dml操作步骤,用于回滚,通过逆运算回滚;mvcc记录事务dml操作提交后产生行数据版本信息;

隔离级别

       隔离级别的目的是为了提升并发性能,读和写全部加锁是级别最高的隔离级别,但是效率是最低的;mysql采用的是repeatable read隔离级别,oracle采用的是read committed隔离级别;

MVCC

       mvcc即一致性非锁定读,其核心是read view来实现的;

       聚集索引记录的隐藏列;

       mvcc原理由聚集索引记录的隐藏列和read view来决定;聚集索引记录的隐藏列和read view都是为了解决事务可见性的问题;事务可见性问题即事务之间我们能看到事务之间的哪些数据;事务可以看到事务本身修改的数据;

       全局锁,用于锁数据库,整个库是可读的状态;

       表级锁分为表锁,元数据锁,意向锁,auto-inc锁; 表锁加锁后自己也不能操作;元数据锁用于数据在修改的时候不能让其他连接修改这个表的结构,一个在修改表结构,一个在修改数据,这两者是冲突的,所以要添加元数据锁;意向锁,比如对表中某一行加锁了,我们就对表插入一个意向共享锁,用来标识表里面的行是否加锁了,这时就不需要全表扫描了,直接读标记就能知道是否加锁了;auto-inc锁是往表中插入insert数据的时候会使用,与行级锁的区别是不需要commit或rollback才释放锁,而是insert插入后马上释放锁;

       行级锁分为记录锁,间隙锁,临键锁;

       记录锁分为S锁(共享锁),X锁(排他锁);

       间隙锁是用来解决幻读问题的;幻读即两个select得到的数据集不一样;

       临键锁是记录锁和间隙锁的综合;

死锁

       插入意向锁为了提高插入的性能,为了使多条插入互不干扰,我们使用插入意向锁;

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
20天前
|
存储 SQL 关系型数据库
MySQL进阶突击系列(03) MySQL架构原理solo九魂17环连问 | 给大厂面试官的一封信
本文介绍了MySQL架构原理、存储引擎和索引的相关知识点,涵盖查询和更新SQL的执行过程、MySQL各组件的作用、存储引擎的类型及特性、索引的建立和使用原则,以及二叉树、平衡二叉树和B树的区别。通过这些内容,帮助读者深入了解MySQL的工作机制,提高数据库管理和优化能力。
|
2天前
|
SQL 关系型数据库 MySQL
MySQL事务日志-Undo Log工作原理分析
事务的持久性是交由Redo Log来保证,原子性则是交由Undo Log来保证。如果事务中的SQL执行到一半出现错误,需要把前面已经执行过的SQL撤销以达到原子性的目的,这个过程也叫做"回滚",所以Undo Log也叫回滚日志。
MySQL事务日志-Undo Log工作原理分析
|
11天前
|
SQL 安全 关系型数据库
【MySQL基础篇】事务(事务操作、事务四大特性、并发事务问题、事务隔离级别)
事务是MySQL中一组不可分割的操作集合,确保所有操作要么全部成功,要么全部失败。本文利用SQL演示并总结了事务操作、事务四大特性、并发事务问题、事务隔离级别。
【MySQL基础篇】事务(事务操作、事务四大特性、并发事务问题、事务隔离级别)
|
19天前
|
SQL 关系型数据库 MySQL
MySQL 窗口函数详解:分析性查询的强大工具
MySQL 窗口函数从 8.0 版本开始支持,提供了一种灵活的方式处理 SQL 查询中的数据。无需分组即可对行集进行分析,常用于计算排名、累计和、移动平均值等。基本语法包括 `function_name([arguments]) OVER ([PARTITION BY columns] [ORDER BY columns] [frame_clause])`,常见函数有 `ROW_NUMBER()`, `RANK()`, `DENSE_RANK()`, `SUM()`, `AVG()` 等。窗口框架定义了计算聚合值时应包含的行。适用于复杂数据操作和分析报告。
60 11
|
17天前
|
SQL 关系型数据库 MySQL
MySQL进阶突击系列(04)事务隔离级别、AICD、CAP、BASE原则一直搞不懂? | 看这篇就够了
本文详细介绍了数据库事务的四大特性(AICD原则),包括原子性、隔离性、一致性和持久性,并深入探讨了事务并发问题与隔离级别。同时,文章还讲解了分布式系统中的CAP理论及其不可能三角关系,以及BASE原则在分布式系统设计中的应用。通过具体案例和图解,帮助读者理解事务处理的核心概念和最佳实践,为应对相关技术面试提供了全面的知识准备。
|
22天前
|
缓存 关系型数据库 MySQL
MySQL 索引优化与慢查询优化:原理与实践
通过本文的介绍,希望您能够深入理解MySQL索引优化与慢查询优化的原理和实践方法,并在实际项目中灵活运用这些技术,提升数据库的整体性能。
58 5
|
1月前
|
SQL 存储 关系型数据库
MySQL进阶突击系列(01)一条简单SQL搞懂MySQL架构原理 | 含实用命令参数集
本文从MySQL的架构原理出发,详细介绍其SQL查询的全过程,涵盖客户端发起SQL查询、服务端SQL接口、解析器、优化器、存储引擎及日志数据等内容。同时提供了MySQL常用的管理命令参数集,帮助读者深入了解MySQL的技术细节和优化方法。
|
2月前
|
关系型数据库 MySQL 数据库
MySQL事务隔离级别及默认隔离级别的设置
在数据库系统中,事务隔离级别是一个关键的概念,它决定了事务在并发执行时如何相互隔离。MySQL提供了四种事务隔离级别,每种级别都解决了不同的并发问题。本文将详细介绍这些隔离级别以及MySQL的默认隔离级别。
|
14天前
|
存储 Oracle 关系型数据库
数据库传奇:MySQL创世之父的两千金My、Maria
《数据库传奇:MySQL创世之父的两千金My、Maria》介绍了MySQL的发展历程及其分支MariaDB。MySQL由Michael Widenius等人于1994年创建,现归Oracle所有,广泛应用于阿里巴巴、腾讯等企业。2009年,Widenius因担心Oracle收购影响MySQL的开源性,创建了MariaDB,提供额外功能和改进。维基百科、Google等已逐步替换为MariaDB,以确保更好的性能和社区支持。掌握MariaDB作为备用方案,对未来发展至关重要。
39 3
|
14天前
|
安全 关系型数据库 MySQL
MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!
《MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!》介绍了MySQL中的三种关键日志:二进制日志(Binary Log)、重做日志(Redo Log)和撤销日志(Undo Log)。这些日志确保了数据库的ACID特性,即原子性、一致性、隔离性和持久性。Redo Log记录数据页的物理修改,保证事务持久性;Undo Log记录事务的逆操作,支持回滚和多版本并发控制(MVCC)。文章还详细对比了InnoDB和MyISAM存储引擎在事务支持、锁定机制、并发性等方面的差异,强调了InnoDB在高并发和事务处理中的优势。通过这些机制,MySQL能够在事务执行、崩溃和恢复过程中保持
42 3