MySQL事务及其原理

article/2025/7/13 3:21:41

事务是一组操作的集合,这组集合要么同时成功,要么同时失败

MySQL事务默认是自动提交的,也就是说每一条sql语句就是一条事务

查看/设置事务提交方式

关闭自动提交只有在其所在的查询窗口有效

select @@autocommit;   --查看提交方式
SET @@autocommit = 0;  -- 关闭自动提交
SET @@autocommit = 1;  -- 开启自动提交(默认)

提交事务/回滚事务

关闭自动提交后,只有提交事务,修改才真正到数据库

COMMIT;  -- 提交事务ROLLBACK;  -- 回滚事务

开启事务

START TRANSACTION;

事务的控制有两种方式

  1. 关闭事务自动提交
  2. 开启事务

事务四大特性(ACID)

  • 原子性:要么都成功要么都失败
  • 一致性:数据保持一致
  • 隔离性:不受其他并发操作影响
  • 持久性:事务提交或回滚对数据库中数据的改变是永久的

并发事务问题

  1. 脏读​​:一个事务读取到其他事务未提交的数据
  2. ​不可重复读​​:同一事务内多次读取同一数据结果不同,由于另一个事务提交了修改事务
  3. ​幻读​​:一个事务按条件查询数据时,没有对应的数据行,但在插入数据时,又发现这行数据已经存在了(被另一个事务插入并提交了),好像出现了幻影
  4. ​更新丢失​​:两个事务同时更新同一数据,后提交的覆盖先提交的

事务的隔离级别

MySQL支持四种事务隔离级别:

  1. ​读未提交(Read Uncommitted)​​:最低级别,可能读取到未提交的数据(脏读)
  2. ​读已提交(Read Committed)​​:Oracle默认级别,只能读取已提交的数据,但可能出现不可重复读
  3. ​可重复读(Repeatable Read)​​:MySQL默认级别,保证同一事务多次读取结果一致
  4. ​串行化(Serializable)​​:最高级别,完全串行执行,避免所有并发问题。一个事务执行完后才能执行下一个事务

 查看事务隔离级别

-- 查看全局隔离级别
SELECT @@global.transaction_isolation;-- 查看当前会话隔离级别
SELECT @@transaction_isolation;

设置事务隔离级别

--设置当前会话事务隔离级别SET SESSION TRANSACTION ISOLATION LEVEL level_name;--其中level_name可以是以下四种之一:
--READ UNCOMMITTED (读未提交)
--READ COMMITTED (读已提交)
--REPEATABLE READ (可重复读,MySQL默认级别)
--SERIALIZABLE (串行化)

两个客户端设置隔离级别,两个开启事务,当隔离级别为Read Uncommitted时,A事务可以读到B事务还没提交的数据。

两个客户端设置隔离级别,两个开启事务,当隔离级别为Repeatable Read时,A事务读到的数据不会改变,B改变了数据并提交了,只有A在提交事务后查询才能看见被B修改的数据

事务原理

原子性、一致性、持久性由innoDB存储引擎底层两份日志实现的undo log、redo log

隔离性由innoDB存储引擎的锁机制,MVCC实现的

redo log重做日志-实现一致性

执行操作时,先去缓冲池里找有没有对应的数据

没有,缓冲池通过后台线程从磁盘中读取出来,再会缓存到内存buffer pool中

然后直接操作缓冲池中的数据,缓冲池中的数据发生了变更,但是磁盘中的数据还没有,

这是缓冲池中的数据页叫脏页,脏页在一定时机通过后台线程刷新回磁盘。这样缓存和磁盘中的数据就保持了一致。

但是脏页刷新不是实时的,是有一段时间的,如果刷新出现问题

redo log :在对缓存池中的数据叶操作时,首先将操作记录到redolog中,再持久化到磁盘中

undo log回滚日志-实现原子性

记录数据被修改前的信息,作用还包括:事务执行失败时提供回滚,MVCC多版本并发控制

当执行delete时,记录insert。当执行update时,记录一条反向update语句


http://www.hkcw.cn/article/EjYWtkrMYS.shtml

相关文章

Spring生命周期中织入代理逻辑

在Spring生命周期中织入代理逻辑 一,AOP 自动代理的实现机制如何判断某个 Bean 是否需要被代理?代理对象在哪个生命周期节点创建? 二,底层实现逻辑1,自动代理的实现实例化AwareBeanPostProcessorSmartInstantiationAwa…

参数化建模(三):SOLIDWORKS中的参数化应用实例

在现代工程设计领域,参数化设计已成为提升设计效率、优化产品性能、实现智能制造的重要手段。尤其是在三维建模软件SOLIDWORKS中,参数化设计的理念和方法被广泛应用,极大地推动了机械、建筑、电子等行业的创新发展。 那么,什么是…

STM32G4 电机外设篇(二) VOFA + ADC + OPAMP

目录 一、STM32G4 电机外设篇(二) VOFA ADC OPAMP1 VOFA1.1 VOFA上位机显示波形 2 ADC2.1 用ADC规则组对板载电压和电位器进行采样 3 OPAMP(运放)3.1 结合STM32内部运放和ADC来完成对三相电流的采样3.2 运放电路分析 附学习参考…

KVM 安装 Ubuntu 22

在 KVM 中安装 Ubuntu 22 虚拟机。 首先创建硬盘文件 sudo qemu-img create -f qcow2 /app/vms/ubuntu22.qcow2 100G安装Ubuntu 22 sudo virt-install \--name ubuntu22 \--ram 4096 \--vcpus 2 \--disk path/app/vms/ubuntu22.qcow2,formatqcow2 \--os-type linux \--os-va…

【Python】第二弹:搭建 Python 环境

目录 一、安装 Python 第一步:找到官方网站 第二步:找到下载页面 第三步:双击安装包 第四步:运行 hello world 二、安装 PyCharm 第一步:找到官方网站 第二步:找到下载页面 第三步:双击安装包 第四步:运行 hello world 三、PyCharm 基本设置 3.1 设置字体大…

城市内涝精准监测・智能预警・高效应对:治理方案解析

城市化进程加速与极端天气频发叠加,城市内涝对城市安全运行和居民生活的威胁日益凸显。多地频发的强降雨引发严重内涝,"看海"现象、交通瘫痪及财产损失等问题,暴露出传统内涝防治体系在监测精准度、预警及时性和应对高效性上的不足…

解决RAGFlow(v0.19.0)有部分PDF无法解析成功的问题。

ragflow版本为:v0.19.0 1.解析的时候报错:Internal server error while chunking: Coordinate lower is less than upper。 看报错怀疑是分片的问题,于是把文档的切片方法中的“建议文本块大小”数值(默认512)调小&…

IoTDB 集成 DBeaver,简易操作实现时序数据清晰管理

数据结构一目了然,跨库分析轻松实现,方便 IoTDB “内部构造”管理! 随着物联网场景对时序数据处理需求激增,时序数据库与数据库管理工具的集成尤为关键。作为数据资产的 “智能管家”,借助数据库管理工具的可视化操作界…

比较二维结构的尺寸分布

在行列可自由变换的平面上5点结构有34个 其中尺寸在3*3范围内的有7个 在4*4范围内的有14个 在5*5范围内的有13个 现在假设平面上有5个不可分辨的点在随机的运动,这5个点可能的位置关系就只有这34种。现在假设点与点之间的距离是稳定不变的的,且每个状态只出现一次。…

WSL里执行python深度学习的一些方法记录

安装anaconda3: 可以直接从 Download Now | Anaconda 中下载,然后拷贝到WSL环境的某个目录,执行 bash xxxxxxx.sh 即可安装。 启动jupyter notebook: 先conda activate 当前环境,然后pip install jupyter 此时&am…

防爆组合式智能全温振荡防爆培养箱,守护安全场所

品牌:宇晶峰 型号:BGZ-929PY-03ZC 使用温度:4~60C 温度分辨率/波动度/分布精度:0.1C/0.5C/1C(38C时) 回旋幅度/回旋频率范围(r/min):Φ26mm(选配Φ50mm)/30~300(选配5~400) 回旋频率…

如何选择适合的冲压件清洗机?冲压件清洗机的选购指南

冲压件清洗机是工业生产中不可或缺的设备之一,主要用于去除冲压过程中产生的油污、灰尘、碎屑等污染物,确保冲压件的清洁度和质量。适当选择合适的冲压件清洗机对于提高生产效率、降低成本以及保证产品质量都具有重要意义。以下是一份关于如何选择适合的…

2023-2024-2-《移动机器人设计与实践》上机测评

2022-2023-2-移动机器人设计与实践-期末A-CSDN博客 2022-2023-2-移动机器人设计与实践-期末B-CSDN博客 理论和实践分开测评,如下是实践部分 摘要: 《移动机器人设计与实践》期末上机测评要求学生完成配置题和实践题两部分。配置题(30分&am…

[HNCTF 2022 Week1]silly_zip

下载附件 解压发现需要密码 用010打开看看,发现是伪加密 改成00点击保存 解压后得到图片 感觉图片看着怪怪的,修改一下高度看看有没有其他线索 把47改成78 最后得到flag

QSS 的选择器

1. 样式表规则 样式表包含了一系列的样式规则,每个样式规则由选择器(selector)和声明(declaration)组成。     选择器:指定了受该规则影响的部件。     声明:指定了这个部件上要设置的属性。…

Python 训练营打卡 Day 30-模块和库的导入

模块和库的导入 1.1标准导入 import mathprint("方式1: 使用 import math") print(f"圆周率π的值: {math.pi}") print(f"2的平方根: {math.sqrt(2)}\n") 1.2从库中导入特定项 from math import pi, sqrtprint("方式2:使用 f…

ToolsSet之:渐变色生成工具

ToolsSet是微软商店中的一款包含数十种实用工具数百种细分功能的工具集合应用,应用基本功能介绍可以查看以下文章: Windows应用ToolsSet介绍https://blog.csdn.net/BinField/article/details/145898264 ToolsSet中Media菜单下的Gradient Color工具是一…

智能守护电网安全:探秘输电线路测温装置的科技力量

在现代电力网络的庞大版图中,输电线路如同一条条 “电力血管”,日夜不息地输送着能量。然而,随着电网负荷不断增加,长期暴露在户外的线路,其线夹与导线在电流热效应影响下,极易出现温度异常。每年因线路过热…

云服务器如何自动更新系统并保持安全?

云服务器自动更新系统是保障安全、修补漏洞的重要措施。下面是常见 Linux 系统(如 Ubuntu、Debian、CentOS)和 Windows 服务器自动更新的做法和建议: 1. Linux 云服务器自动更新及安全维护 Ubuntu / Debian 系统 手动更新命令 sudo apt up…

Spring Advisor增强规则实现原理介绍

Spring Advisor增强规则实现原理介绍 一、什么是 Advisor?1. Advisor 的定义与本质接口定义: 2. Advisor 的核心作用统一封装切点与通知构建拦截器链的基础实现增强逻辑的灵活组合 二. Sprin当中的实现逻辑1 Advisor 接口定义2 PointcutAdvisor 接口定义…