MySQL篇(四)事务相关知识详解

MySQL篇(四)事务相关知识详解

  • MySQL篇(四)事务相关知识详解
    • 一、事务的特性(ACID)
      • 原子性(Atomicity)
      • 一致性(Consistency)
      • 隔离性(Isolation)
      • 持久性(Durability)
    • 二、并发事务带来的问题
      • 脏读(Dirty Read)
      • 不可重复读(Non - repeatable Read)
      • 幻读(Phantom Read)
    • 三、解决并发事务问题的方法
      • 读未提交(Read Uncommitted)
      • 读已提交(Read Committed)
      • 可重复读(Repeatable Read)
      • 串行化(Serializable)
    • 四、MySQL的默认隔离级别
    • 五、undo log和redo log的区别
      • undo log
      • redo log
    • 六、MySQL中的MVCC(多版本并发控制)

MySQL篇(四)事务相关知识详解

一、事务的特性(ACID)

原子性(Atomicity)

原子性是指事务是一个不可分割的工作单位,事务中的操作要么全部执行,要么全部不执行。比如在银行转账中,从一个账户扣款和向另一个账户存款这两个操作必须同时成功或者同时失败,不能只执行其中一个操作 ,确保了数据的完整性和一致性。

一致性(Consistency)

一致性是指事务执行前后,数据库的完整性约束没有被破坏 。例如转账前后,两个账户的总金额应该保持不变。它关注的是业务逻辑上的正确性,通过原子性、隔离性和持久性来保证。

隔离性(Isolation)

隔离性是指多个事务并发执行时,一个事务的执行不能被其他事务干扰。不同的隔离级别决定了事务之间相互干扰的程度,比如在高并发场景下,多个事务同时操作相同数据时,隔离性可以防止数据出现脏读、不可重复读、幻读等问题。

持久性(Durability)

持久性是指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的,接下来的其他操作或故障不应该对其执行结果有任何影响 。例如转账成功提交事务后,即使系统崩溃,转账的结果依然存在。

二、并发事务带来的问题

脏读(Dirty Read)

一个事务读取到了另一个事务尚未提交的数据。比如事务A修改了某条记录但未提交,此时事务B读取了这条被修改但未提交的记录,如果事务A回滚,事务B读取到的数据就是无效的脏数据。

不可重复读(Non - repeatable Read)

在一个事务内多次读取同一数据时,由于其他事务对该数据进行了修改并提交,导致在本事务中多次读取的数据不一致。例如事务A读取某条记录,然后事务B修改并提交了这条记录,事务A再次读取时得到了不同的值。

幻读(Phantom Read)

在一个事务中执行查询操作,在事务执行过程中,由于其他事务插入了新的数据,当该事务再次执行相同的查询时,结果集发生了变化,就好像产生了“幻影”数据。比如事务A查询符合某条件的记录,事务B插入了符合该条件的新记录并提交,事务A再次查询时就会发现多了一些记录。

三、解决并发事务问题的方法

通过设置不同的事务隔离级别来解决并发事务问题:

读未提交(Read Uncommitted)

最低的隔离级别,允许读取未提交的数据,会导致脏读、不可重复读和幻读问题,一般很少使用。

读已提交(Read Committed)

一个事务只能读取其他事务已经提交的数据。可以避免脏读,但仍然可能出现不可重复读和幻读问题,是大多数数据库的默认隔离级别(MySQL默认不是这个 )。

可重复读(Repeatable Read)

在一个事务内的多次读取操作会返回相同的数据,即使其他事务对数据进行了修改并提交。可以避免脏读和不可重复读,但在某些情况下仍可能存在幻读问题。MySQL的默认隔离级别是可重复读,通过MVCC(多版本并发控制)机制在一定程度上解决了幻读问题。

串行化(Serializable)

最高的隔离级别,事务会按照顺序依次执行,就像单线程环境一样,能避免脏读、不可重复读和幻读的所有问题,但并发性能较差。

四、MySQL的默认隔离级别

MySQL的默认隔离级别是可重复读(Repeatable Read) 。在这种隔离级别下,MySQL通过MVCC机制来实现事务的并发控制。MVCC为每个事务维护一个一致性视图,事务在读取数据时,根据这个视图来判断数据的可见性,从而在保证数据一致性的同时提高并发性能。

五、undo log和redo log的区别

undo log

undo log主要用于事务的回滚操作。当事务执行过程中需要回滚时,undo log可以记录数据修改前的版本信息,通过这些信息将数据恢复到事务开始前的状态。同时,undo log在MVCC机制中也起到重要作用,用于构建一致性视图,提供旧版本数据的可见性判断依据。

redo log

redo log主要用于保障事务的持久性。在事务提交时,先将事务的修改操作记录到redo log中,然后再将数据真正写入磁盘。当数据库发生崩溃恢复时,可以根据redo log中的记录将数据恢复到事务提交后的状态,确保已提交事务的数据不会丢失。

六、MySQL中的MVCC(多版本并发控制)

MVCC是一种用于实现数据库并发控制的机制,它通过为数据库中的每行数据维护多个版本来实现事务的并发执行。在MySQL的InnoDB存储引擎中:

  • 实现原理:MVCC为每行数据记录多个版本,每个版本包含事务ID等信息。当事务读取数据时,根据事务的开始时间戳和数据版本的事务ID来判断数据是否可见。如果数据版本的事务ID小于当前事务的开始时间戳,那么该版本数据对当前事务可见;否则不可见。
  • 作用:MVCC可以在不使用锁(或减少锁的使用)的情况下,实现事务的并发读取,提高了数据库的并发性能,同时在可重复读隔离级别下,配合undo log有效解决了脏读、不可重复读问题,并在一定程度上缓解了幻读问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/75790.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot定时任务深度优化指南

精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 SpringBoot定时任务深度优化指南 引言 在分布式系统架构中,定时任务是实现业务逻辑自动化的重要组件。SpringBoot通过Scheduled注解提供了便捷的…

MySQL表结构导出(Excel)

目录 一、java实现MySQL表结构导出(Excel) 二、python实现MySQL表结构导出(Excel) 又到了写毕设的时候了,计算机专业在写论文第四章系统设计的时候肯定会遇到和我一样的难题——要在论文中将数据库的表结构以表格形式…

Android使用OpenGL和MediaCodec渲染视频

目录 一,借助MediaCodec封装解码工具类VideoCodec 二,使用OpenGl绘制视频封装SoulFilter 一,借助MediaCodec封装解码工具类VideoCodec /*** 解码工具类* 解码完成后的数据 通过 ISurface 回调出去*/ public class VideoCodec {private ISu…

day39——输入操作:多值输入

数组输入&#xff1a; int main() {//***** 1、多值输入&#xff08;C&#xff09;/*输入&#xff1a;3 --> 3个值5 4 9*/int n;cin >> n; //输入个数const int MAX_SIZE 0xFFFF;//限定最大个数int a[MAX_SIZE];for (int i 0; i < n; i) {//用 n 作控制输入…

第九课:LoRA模型的原理及应用

文章目录 Part.01 3种LoRA的使用方式Part.02 5种LoRA的应用方向Part.01 3种LoRA的使用方式 LoRA能够在家用级设备上训练,实现对Checkpoint在某些方面的微调使用Lora的三种方式:放置Lora模型到目录中,然后作为提示词的一部分输入。点击生成按钮下面的“画”,然后打开Additio…

Cortex-M3 NVIC可以控制异常向量表的哪些部分

Cortex-M3 的 NVIC(嵌套向量中断控制器)不直接控制整个异常向量表,但可以管理向量表中与中断相关的部分行为。以下是 NVIC 对异常向量表的具体控制范围和相关机制: 1. NVIC 直接控制的部分 NVIC 主要管理 外部中断(IRQ) 和部分 系统异常 的行为,但对向量表本身的存储位…

双向链表增删改查的模拟实现

本章目标 0.双向链表的基本结构 1.双向链表的初始化 2.头插尾插 3.头删尾删 4.查找与打印 5.在指定位置之前插入数据/在指定位置之后插入数据 6.在指定位置之前删除数据/在指定位置之后删除数据 7.销毁链表 0.双向链表的基本结构 本章所实现的双向链表是双向循环带头链表,是…

实战交易策略 篇十四:江南神鹰捕捉热点和熊市生存交易策略

文章目录 系列文章捕捉热点是股市最大的掘金术市场温度不低于50是热点产生的必要条件题材的大小和新颖程度决定热点的持续时间和涨幅炒作热点的3个阶段捕捉热点的方法与步骤操作实战案例熊市生存术“熊市最好的做法是离开股市”的说法是一句空话熊市盈利模式:不轻言底部,超跌…

Linux错误(6)X64向量指令访问地址未对齐引起SIGSEGV

Linux错误(6)X64向量指令访问地址未对齐引起SIGSEGV Author: Once Day Date: 2025年4月4日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文章可参考专栏: Linux实…

解码 __iter__ 和 itertools.islice - 迭代的艺术

文章目录 前言一、`_iter__`:自定义迭代的钥匙1.1 什么是 __iter__?1.2 基本用法1.3 高级用法:独立迭代器二、itertools.islice:迭代切片的利器2.1 什么是 itertools.islice?2.2 基本用法2.3 处理无限序列2.4 实际应用三、`__iter__` 与 `islice` 的结合六、为什么需要它们…

使用VSCode编写C#程序

目录 一、环境搭建&#xff1a;构建高效开发基础1. 安装VSCode2. 配置.NET SDK3. 安装核心扩展 二、项目开发全流程1. 创建项目2. 代码编辑技巧3. 调试配置4. 高级调试技巧5. 编译与运行 三、常见问题解决指南1. 项目加载失败2. IntelliSense失效3. 代码格式化4. 典型编译错误&…

日本汽车规模性经济计划失败,日产三大品牌的合并合作共赢,还是绝地求生?本田与日产合并确认失败,将成为世界第三大汽车集团愿景失败

本田与日产(含三菱汽车)的合并计划最终因核心矛盾无法调和而宣告失败,这一事件揭示了传统车企在行业变革期的深层困境。以下从合并动机、失败原因、本质判断及未来影响等方面综合分析: 一、合并的初衷:生存压力主导的被动策略 市场危机与财务困境 中国市场溃败:日系品牌在…

AutoCAD2026中文版下载安装教程

AutoCAD是一款由Autodesk公司开发的计算机辅助设计软件&#xff0c;被广泛应用于建筑设计、机械设计、电气设计、土木工程、装饰装潢等多个领域。AutoCAD2026中文版在原有的基础上进行了多项改进和优化&#xff0c;为用户提供了更为高效、便捷的绘图和设计体验。这里我给大家分…

Latex语法入门之数学公式

Latex是一种高质量的排版系统&#xff0c;尤其擅长于数学公式的排版。本文我将带大家深入了解Latex在数学公式排版中的应用。从基础的数学符号到复杂的公式布局&#xff0c;我们都会一一讲解&#xff0c;通过本文的学习&#xff0c;你将能够轻松编写出清晰、美观的数学公式&…

洛谷 P3214 [HNOI2011] 卡农

题目传送门 前言 再次败在 d p dp dp 手下&#xff0c;但是数据范围这么小应该是可以看出是 d p dp dp 的&#xff08;毕竟对于其他组合数的问题数据范围都是 1 0 9 10^9 109 起步&#xff09;。 思路 题意简化 现有 1 , 2 , 3 , . . . , n − 1 , n 1, 2, 3, ... , n -…

【年份数据类型及使用】

在数据分析中,年份的处理需要根据具体场景选择合适的数据类型,以确保后续分析的准确性和效率。以下是常见的年份数据类型及使用场景: 1. 数值类型(整数或浮点数) 适用场景: 仅需存储年份数值(如 2020, 2023),无需进行日期计算。需要将年份作为连续变量参与数学运算(如…

详解七大排序

目录 一.直接插入排序 &#xff08;1&#xff09;基本思想 &#xff08;2&#xff09;算法步骤 &#xff08;3&#xff09;代码实现 &#xff08;4&#xff09;算法特性 &#xff08;5&#xff09;算法优化 &#xff08;6&#xff09;示例演示 二.希尔排序 &#xff08…

YOLOv12 训练从这里开始:LabelImg 标注数据集

视频讲解&#xff1a; YOLOv12 训练从这里开始&#xff1a;LabelImg 标注数据集 labelimg https://github.com/tzutalin/labelImg sudo apt-get install pyqt5-dev-tools pip3 install lxml git clone https://github.com/tzutalin/labelImg.git cd labelImg 开始编译 make…

Day2:前端项目uniapp壁纸实战

先来做一个轮番图。 效果如下&#xff1a; common-style.css view,swiper,swiper-item{box-sizing: border-box; } index.vue <template><view class"homeLayout"><view class"banner"><swiper circular indicator-dots autoplay…

SAP-ABAP:ABAP `LEAVE LIST-PROCESSING` 深度解析

ABAP LEAVE LIST-PROCESSING 深度解析 核心机制 模式切换(Dialog → List) 中断屏幕流 强制终止当前Dialog程序的PBO/PAI处理,脱离屏幕序列控制(如事务码SE38执行的程序)。触发报表事件 激活类报表程序的事件链:INITIALIZATION → AT SELECTION-SCREEN → START-OF-SEL…