【MySQL篇】事务的认识以及四大特性

发布时间:2026/10/23 11:46:11

【MySQL篇】事务的认识以及四大特性 何为事务-----*事务Transaction是指一组操作的集合这些操作要么全部执行成功要么全部不执行。事务通常用于保证数据库的一致性、完整性和可靠性确保数据的完整性与正确性。有效避免部分执行部分未执行而引起的问题**引入例子 **假设以下场景转账 第一步A用户转账给B用户100元 账户-100 – 从账户A扣款 UPDATE accounts SET balance balance - 100 WHERE account_id ‘A’; 第二步B用户收到A转账100元 账户100 – 向账户B存款 UPDATE accounts SET balance balance 100 WHERE account_id ‘B’; 此时如果第一步完成之后由于受到各种原因例网络波动主机关机MySQL服务器崩溃等等因素导致第二步未操作这可损失大了A凭空丢失100所以这种情况是不允许发生的。 此时由于是俩个操作所有MySQL会将这俩个操作打包成一个操作原子性要么一起完成要么都不完成。 如果中途发生异常此时操作将会进行“回滚”操作所有操作将会被撤销。 **补充MySQL会将每一步操作都会记录在MySQL的日志中所以可以根据日志里面的内容进行还原操作在 MySQL 中事务是由多个 SQL 语句组成的一个操作单元要么所有的操作都成功执行提交commit要么在发生错误时所有操作都不执行回滚rollback。通过事务MySQL 能够提供更强的错误恢复能力并保证数据库在并发访问时的一致性。* *事务的四大特性--------事务有四个核心特性通常被称为 ACID 特性原子性Atomicity一致性Consistency持久性Durability隔离性Isolation### **原子性****在上述操作中将多个操作打包成一个操作时此时代表这个操作具有“原子”的原子就是以前最小的单位不可拆分。*事务中的操作要么全部成功要么全部失败。原子性确保了事务是最小的执行单位无法再分割。即使在事务执行的过程中发生故障数据库也会通过回滚操作使事务的状态恢复到事务开始之前。* *### **一致性**在执行事务开始前后要保证数据是一致的不会出现对不上的情况。一旦触发“回滚”操作也要保证回滚回去的数据跟原来一样事务执行前后数据库的状态必须从一个一致的状态转变到另一个一致的状态。所有事务都必须遵循数据库的完整性约束如主键、外键等确保数据的完整性和准确性。*### 持久性一旦事务提交它对数据库的更改是永久性的即使发生系统崩溃或断电提交的事务所做的更改也会保留下来。*###隔离性****在并发环境下多个客户端同时对服务器发起事务请求一个事务的执行不应受到其他事务的干扰。每个事务应该像是在独占数据库一样执行直到它提交或回滚。在并发环境下可能会产生以下问题脏读不可重复读幻读*####脏读****脏读指的是一个事务读取了另一个事务尚未提交的数据。这可能会导致读取到不一致的数据因为另一个事务可能回滚使得当前事务读取的数据变得无效。例子 假设有一场随堂考试小明学渣抄袭小强学霸的试卷这种行为是不好的只是比喻此时小强写完了试卷给小明抄小明写着写着写完了之后小明就直接提交试卷了。但小强在检查试卷的时候发现检查试卷的时候很多答案填错了那么小强肯定将答案改正了回来,而小明吃了大亏心里想我*****还不如自己写… **核心在于当小强不仅写完试卷并且还检查完毕确保不会修改的情况下小明再去抄写他的答案不然都可能出错解法方法*当事务B查看事务A写操作的数据时候将事务A的数据进行“加锁”此时事务B不能查看A的数据必须等待事务A确定下来才可以查看。 这就相当于降低了 ‘并发能力’也就降低了数据库服务器的处理效率提高了 ‘隔离性’ 也提高了数据的准确性。在并发执行事务过程中相互之间是互相影响的彼此的影响越小隔离性越高反之影响越大隔离性越低。* *####不可重复读在上述基础上我们已经把写操作加上锁这就意味着读操作的事务不能中途查询以免没有查询到最终结果。 例子当我们写博客的时候此时读者必须等我们发布完成之后才能阅读我们的博客。 假设我们写完已经发布了 这是事务A 然后读者去查看博客的内容 这是事务B 当我们发布完 我们还觉得内容需要修改一下 可能存在一点问题 又进行发布了这是事务C **问题出现在事务B此时在读数据的时候此时我们事务C也执行了假设博客页面刷新了事务B发现此时读到的数据跟刚才读到的数据不一样这就是不可重复读问题****解法****在事务B读操作的时候 我们也不能执行事务C必须等事务B执行完之后才能修改数据也就是说在“读数据”的时候也不能“写数据”**所以对事务B读操作也加上“锁”就可以保证事务 B 前后两次读取的数据都是一致的。脏读和不可重复读的区别脏读关注的是一个事务读取另一个事务未提交的数据且这个数据可能最终会被回滚因此它是不可靠的。不可重复读关注的是同一个事务内在多次读取同一数据时数据发生了变化通常是由于其他事务的提交导致读取结果不一致。*####幻读****幻读是指一个事务在查询数据时其他事务可能插入、删除或修改记录导致该事务查询的数据集发生变化即查询结果出现幻象。在一个事务中查询的结果集在不同的查询操作之间可能不一致。例子 刚才约定对读和写操作进行加上锁。 事务A发布第一篇博客 **事务B在查询博客的内容 此时我们并不修改第一篇博客的内容闲着也是闲着于是我们继续写了新的一篇博客第二篇博客。 事务C *在B再一次查询的时候发现了多出来了一篇博客此时就是幻读。****解法****当读者在阅读博客的时候叫我们啥事别做了好好休息简单来说就是一个事务一个事务来在执行事务的时候不要执行任何操作*实现串行化操作此时没有并发了因此效率最低并且也是隔离性最高的数据是最准确的。* *####隔离性的隔离级别隔离级别脏读不可重复读幻读适用场景读未提交Read Uncommitted是是是高并发、无需完全一致性的数据场景读已提交Read Committed否是是适用于实时性要求较高的场景可重复读Repeatable Read否否是适用于大部分应用默认隔离级别串行化Serializable否否否保证最大程度的一致性但性能最低#### 总结脏读、不可重复读和幻读都是由于并发事务互相干扰所导致的问题。为了避免这些问题可以选择合适的事务隔离级别 *读未提交出现脏读不可重复读幻读。 *读已提交防止脏读但可能会出现不可重复读和幻读。 *可重复读防止脏读和不可重复读但可能会出现幻读。 *串行化完全避免所有并发问题但性能最差。
延伸阅读

更多相关文章

2026/10/23 12:34:21

【MySQL】链接池原理:简单理解网站的数据流动

前言:本节内容是博主快速上手mysql专栏的最后一篇文章。 本节内容不讲解mysql语法了, 而是以网站为例,讲一下前后端的逻辑与联系。 友友们可以当成一个故事听。> > ps:本节不需要门槛, 当成一个故事听即可!*目录…

2026/10/21 5:23:34

从GLM-5.3-Flash到MHS标准:大模型成本与信任的双线竞争

早上打开 BestBlogs 早报,08-28 这一期被我扫到了两条:一条是 GLM-5.3-Flash 发布,另一条是 Anthropic 推进 MHS 标准。单看标题,这两句话都可以当普通的行业动态刷过去——每天都有模型发布,每天都有公司说自己在做标…

2026/10/13 21:44:30

Shell脚本实战:从基础语法到自动化运维脚本编写

Shell 脚本是 Linux 自动化运维里最基础也最高频的技能。很多新手把ls、cd当成 shell 的全部,但遇到批量改文件、清理日志、定时备份、服务异常拉起这些任务时,才发现自己只会手动一条条敲命令,敲完还容易漏掉某一步。这篇文章默认读者没有写…

2026/10/23 19:26:12

UEFI启动链下的开机图标修改:HackBGRT 1.5.1实操与避坑

简介:HackBGRT-1.5.1.zip 是面向希望替换 Windows 10 默认开机 LOGO、实现启动画面个性化用户的开源工具包,适合具备一定系统操作与编译基础、想研究 BGRT 启动图形修改机制的读者。压缩包共 20 个文件,约 73KB,包含 C 与 C# 源码…

2026/10/23 19:26:12

矩形微带天线尺寸计算:MATLAB脚本与公式详解

简介:这份资源面向无线通信、射频电路与天线设计方向的学习者和工程师,提供一套用MATLAB计算矩形微带天线尺寸的实用脚本。矩形微带天线因结构简单、易于加工而应用广泛,设计难点在于根据中心频率、相对介电常数和基板高度快速确定贴片宽度、…

2026/10/23 19:26:12

Z-EVES形式化验证原理与避坑指南

简介:本资源为形式化方法领域核心工具Z-EVES的完整安装与学习套件,面向软件工程、安全关键系统开发人员及高校形式化验证课程学习者,解决Z语言规格编写、自动推理、模型检查与交互式验证等实践难题。压缩包共5个文件(2个Windows可…

2026/10/23 19:26:12

呼叫中心防封号系统解析:外呼频次控制与号码池调度实战

1. 为什么外呼系统会被限制,防封号到底在防什么先说个实际现象:很多人刚接触呼叫中心外呼系统时,第一反应是“我只要把号码导进去,一个接一个打出去就行”。结果跑了一个上午,下午号码就进了黑名单,第二天连…

2026/10/23 19:26:12

并行计算入门:从搬砖比喻到多核编程实战

简介:这份资源是天津大学并行计算课程的配套学习资料,面向计算机专业学生、高性能计算方向的学习者以及需要系统梳理并行编程知识的技术人员,帮助其理解共享内存与分布式内存模型、掌握OpenMP与MPI等并行编程工具,并具备将串行算法…

2026/10/23 19:21:12

控制台贪吃蛇从能跑到能玩:环形数组、状态机与定点重绘实战

上一篇文章,我们把控制台贪吃蛇最基础的版本跑通了:蛇能动、食物能刷、撞墙能结束。但那个版本距离“一个能玩的游戏”还差得远。如果你真把它拿给朋友试玩,多半会被吐槽三件事:按键卡顿、画面闪烁、蛇稍微一长就找不着头在哪。这…

2026/10/22 11:29:28

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/23 0:02:26

Verilog实现FPGA密码锁:矩阵键盘与状态机设计实战

说实话,这几年接触了不少想入门FPGA的朋友,如果你问哪个项目能一口气把Verilog的核心基本功串起来,我通常会推荐电子密码锁。这个项目看着不起眼,却把矩阵键盘扫描、按键消抖、状态机设计、动态显示刷新、外设控制这些数字逻辑里的…

2026/10/23 0:02:26

数据服务监控运维实战:从指标体系到告警治理与故障排查

周末凌晨两点,手机震了。第一反应是“数据服务挂了”。打开电脑看了下,果然,某张核心报表的数据产出时间已经超过SLA两小时,下游三个业务方连着发来问询。这种场景,做过大数据运维的人都不会陌生。数据服务的监控与运维…

2026/10/23 0:02:26

FreeRTOS任务通知实战详解:内核原理、API与避坑指南

裸机编程切到RTOS之后,任务之间的通信和同步永远是躲不开的坎。前面聊过队列、信号量、互斥锁、事件组,这次把FreeRTOS任务通知(Task Notification)单独拎出来讲透。原因很简单:任务通知是FreeRTOS里最容易用错、也最容…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑