事务详解及面试常考知识点整理
事务详解及面试常考知识点整理
1. 什么是事务?
**事务(Transaction)**是将多条 SQL 语句打包执行的操作单元,具有“一气呵成”的特性。就好比你要完成“把大象放进冰箱”这件事,一共分三步:
- 打开冰箱门
- 把大象放进去
- 关上冰箱门
这三步操作必须作为一个整体完成,否则就不能称之为“把大象放进冰箱”。这就是一个事务的概念。
为什么需要事务?
现实中,很多操作必须是原子性的,比如银行转账。你妈妈给你打生活费:
- 从她的账户扣除 1000 元
- 给你的账户增加 1000 元
这两个步骤必须同时成功。如果在第一个步骤完成后,系统宕机了,而第二步未执行成功,你妈妈的钱扣掉了,但你却没有收到,这显然是不可以接受的。
因此,我们需要事务来保证这类操作的可靠性和一致性。事务的作用就是:要么全部成功,要么全部失败。
💡 即使出现故障,事务也能通过“回滚(rollback)”机制恢复数据库状态,仿佛“什么都没发生过”。
2. 事务的基本操作
事务的基本流程如下:
START TRANSACTION; -- 开始事务
-- 多条SQL操作
COMMIT; -- 提交事务
-- 或
ROLLBACK; -- 回滚事务(撤销之前的所有操作)
在 START TRANSACTION
与 COMMIT
之间的 SQL 操作,构成一个完整的事务。
实际开发中,还会配合业务逻辑编程语言(如 Java、Python)做错误处理或手动触发回滚。
3. 回滚(Rollback)是如何实现的?
事务的回滚是通过日志机制实现的。MySQL 会在执行下一条 SQL 前,把当前状态写入日志文件。如果后续操作失败,就从日志中恢复数据。
比如你写代码的时候,每改完一段就保存一次。如果发现写错了,可以“撤销(Ctrl+Z)”返回上一个保存点。数据库也是类似的原理。
✅ 即使断电或系统崩溃,只要日志在磁盘上,MySQL 也能在重启后进行恢复。
4. 事务的四大特性(ACID)——面试高频考点!
事务的四大特性简称为 ACID:
(1)原子性(Atomicity)
事务是一个不可分割的整体。就像打包的快递,要么整个快递成功送达,要么压根就没有发货。
(2)一致性(Consistency)
事务执行前后,数据库都必须处于一致状态。
示例:你妈妈给你转 1000 元,执行完事务后,妈妈账户少 1000,你账户多 1000。总额没变,这就是一致性。不能出现“转了 1000,你收到 8000”这种现象。
(3)持久性(Durability)
事务一旦提交,修改将永久保存,即使服务器宕机也不会丢失。
示例:你做完一个大项目,点了“保存”。电脑突然蓝屏,但重启后还能找到文件,这就是持久性带来的保护。
(4)隔离性(Isolation)
多个事务并发执行时,相互之间不应互相干扰。并发控制是事务系统的一大难点。
5. 并发执行下的事务问题及隔离级别
什么是并发执行?
比如你和室友一起做饭,只有一个炉灶,就得排队做(串行);但如果有两个灶,就能同时炒菜(并发)。数据库中的并发执行可以提升处理效率,但也容易引发问题。
下面是三大经典并发问题,每一个问题都有对应的隔离级别来解决。
问题一:脏读(Dirty Read)
定义:一个事务读取了另一个未提交事务修改的数据。
例子:
你正在写代码(事务 A),同学来抄作业(事务 B)。你突然发现写错了就撤回修改,而同学却抄走了你写错的版本。这就是“脏读”。
**解决方案:**给写操作加锁,只有等事务提交后,其他事务才能读取,避免读到未确认数据。
问题二:不可重复读(Non-repeatable Read)
**定义:**同一个事务在两次读取同一数据时,结果却不同,因为其他事务在中间修改了数据。
例子:
你同学在看你的作业(读取),你把作业改了并重新提交,他再看一次,内容已经不一样了,他就懵了。
**解决方案:**给读操作加锁,在整个事务执行期间,不允许其他事务修改已读取的数据。
问题三:幻读(Phantom Read)
**定义:**同一个事务中,多次读取符合条件的数据时,返回的行数发生变化。
例子:
你同学抄完代码 A 后再刷新页面,突然发现多了段代码 B(你新增的)。他以为这是你原来写的,也一起交了上去,这就是幻读。
**解决方案:**只有最高隔离级别“串行化(Serializable)”才能避免幻读,但效率最低。
6. MySQL 的四种隔离级别(按从低到高)
隔离级别 | 能否避免脏读 | 能否避免不可重复读 | 能否避免幻读 | 并发性能 |
---|---|---|---|---|
Read Uncommitted | ✗ | ✗ | ✗ | 高 |
Read Committed | ✓ | ✗ | ✗ | 较高 |
Repeatable Read | ✓ | ✓ | ✗(默认) | 中 |
Serializable | ✓ | ✓ | ✓ | 低 |
💡 MySQL 默认隔离级别是:Repeatable Read
7. 总结与建议
事务本质上是为了解决数据一致性与并发效率之间的矛盾。在设计数据库操作时:
- 若业务要求强一致性(如转账、库存),优先选择高隔离级别;
- 若业务对一致性要求不高(如点赞数统计),可使用低隔离级别以换取高性能。
如果你正在准备数据库或后端开发方向的面试,请务必掌握以下几点:
- 事务四大特性(ACID)
- 三大并发问题(脏读、不可重复读、幻读)
- 四种隔离级别及其对应能力
- MySQL 默认的隔离级别
如需更深入地学习事务的原理与实现,如Undo Log、Redo Log、MVCC机制等,请在评论区留言或关注后续更新!
如果你有任何数据库方面的困惑,欢迎留言或私信交流 😊
相关文章:
事务详解及面试常考知识点整理
事务详解及面试常考知识点整理 1. 什么是事务? **事务(Transaction)**是将多条 SQL 语句打包执行的操作单元,具有“一气呵成”的特性。就好比你要完成“把大象放进冰箱”这件事,一共分三步: 打开冰箱门把…...

设计模式26——解释器模式
写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用,主要是下面的UML图可以起到大作用,在你学习过一遍以后可能会遗忘,忘记了不要紧,只要看一眼UML图就能想起来了。同时也请大家多多指教。 解释器模式(Interp…...

在MDK中自动部署LVGL,在stm32f407ZGT6移植LVGL-8.3,运行demo,显示label
在MDK中自动部署LVGL,在stm32f407ZGT6移植LVGL-8.3 一、硬件平台二、实现功能三、移植步骤1、下载LVGL-8.42、MDK中安装LVGL-8.43、配置RTE4、配置头文件 lv_conf_cmsis.h5、配置lv_port_disp_template 四、添加心跳相关文件1、在STM32CubeMX中配置TIM7的参数2、使能…...

ArcGIS 与 HEC-RAS 协同:流域水文分析与洪水模拟全流程
技术点目录 洪水淹没危险性评价方法及技术介绍基于ArcGIS的水文分析基于HecRAS淹没模拟的洪水危险性评价洪水风险评价综合案例分析应用了解更多 —————————————————————————————————————————————————— 前言综述 洪水危险性及…...
树莓派设置静态ip 永久有效 我的需要设置三个 一个摄像头的 两个设备的
通过 systemd-networkd 配置 此方法适用于较新的Raspberry Pi OS版本,支持同时绑定多个IP地址到同一网卡,且配置清晰稳定。 1.禁用DHCP客户端对eth0的管理:编辑/etc/dhcpcd.conf文件,添加以下内容以忽略eth0接口的自动分配 sudo nano /etc…...

多模态大语言模型arxiv论文略读(九十九)
PartGLEE: A Foundation Model for Recognizing and Parsing Any Objects ➡️ 论文标题:PartGLEE: A Foundation Model for Recognizing and Parsing Any Objects ➡️ 论文作者:Junyi Li, Junfeng Wu, Weizhi Zhao, Song Bai, Xiang Bai ➡️ 研究机构…...

Fine-tuning:微调技术,训练方式,LLaMA-Factory,ms-swift
1,微调技术 特征Full-tuningFreeze-tuningLoRAQLoRA训练参数量全部少量极少极少显存需求高低很低最低模型性能最佳中等较好接近 LoRA模型修改方式无变化局部冻结插入模块量化插入模块多任务共享不便较便非常适合非常适合适合超大模型微调❌✅✅✅(最优&…...
vscode连接的linux服务器,上传项目至github
问题 已将项目整个文件夹拷贝到克隆下来的文件夹中,并添加了所有文件,并修改了commit -m,使用git push -u origin main提交的时候会出现vscode请求登录github,确定之后需要等待很久,也无果 原因 由于 远程服务器无法…...

XCTF-web-mfw
发现了git 使用GitHack下载一下源文件,找到了php源代码 <?phpif (isset($_GET[page])) {$page $_GET[page]; } else {$page "home"; }$file "templates/" . $page . ".php";// I heard .. is dangerous! assert("strpos…...
indel_snp_ssr_primer
indel标记使用 1.得到vcf文件 2.提取指定区域vcf文件并压缩构建索引 bcftools view -r <CHROM>:<START>-<END> input.vcf -o output.vcf bgzip -c all.filtered.indel.vcf > all.filtered.indel.vcf.gz tabix -p vcf all.filtered.indel.vcf.gz3.准备参…...
图论核心:深度搜索DFS 与广度搜索BFS
一、深度优先搜索(DFS):一条路走到黑的探索哲学 1. 算法核心思想 DFS(Depth-First Search)遵循 “深度优先” 原则,从起始节点出发,尽可能深入地访问每个分支,直到无法继续时回溯&a…...
Java 调用 HTTP 和 HTTPS 的方式详解
文章目录 1. HTTP 和 HTTPS 基础知识1.1 什么是 HTTP/HTTPS?1.2 HTTP 请求与响应结构1.3 常见的 HTTP 方法1.4 常见的 HTTP 状态码 2. Java 原生 HTTP 客户端2.1 使用 URLConnection 和 HttpURLConnection2.1.1 基本 GET 请求2.1.2 基本 POST 请求2.1.3 处理 HTTPS …...
Redis--基础知识点--28--慢查询相关
1 慢查询的原因 1.1 非命令数据相关原因 1.1.1 网络延迟 原因:客户端与 Redis 服务器之间的网络延迟可能导致客户端感知到的响应时间变长。 解决方案:优化网络环境 排查: 1.1.2 CPU 竞争 原因:Redis 是单线程的,…...
目标检测:YOLO 模型详解
目录 一、YOLO(You Only Look Once)模型讲解 YOLOv1 YOLOv2 (YOLO9000) YOLOv3 YOLOv4 YOLOv5 YOLOv6 YOLOv7 YOLOv8 YOLOv9 YOLOv10 YOLOv11 YOLOv12 其他变体:PP-YOLO 二、YOLO 模型的 Backbone:Focus 结构 三、…...
HDFS存储原理与MapReduce计算模型
HDFS存储原理 1. 架构设计 主从架构:包含一个NameNode(主节点)和多个DataNode(从节点)。 NameNode:管理元数据(文件目录结构、文件块映射、块位置信息),不存储实际数据…...

电机控制选 STM32 还是 DSP?技术选型背后的现实博弈
现在搞电机控制,圈里人都门儿清 —— 主流方案早就被 STM32 这些 Cortex-M 单片机给拿捏了。可要是撞上系统里的老甲方,技术认知还停留在诺基亚砸核桃的年代,非揪着 DSP 不放,咱也只能赔笑脸:“您老说的对,…...

.NET 开源工业视觉系统 OpenIVS 快速搭建自动化检测平台
前言 随着工业4.0和智能制造的发展,工业视觉在质检、定位、识别等场景中发挥着越来越重要的作用。然而,开发一个完整的工业视觉系统往往需要集成相机控制、图像采集、图像处理、AI推理、PLC通信等多个模块,这对开发人员提出了较高的技术要求…...
从0到1掌握Kotlin高阶函数:开启Android开发新境界!
简介 在当今的Android开发领域,Kotlin已成为开发者们的首选编程语言。其高阶函数特性更是为代码的编写带来了极大的灵活性和简洁性。本文将深入探讨Kotlin中的高阶函数,从基础概念到实际应用,结合详细的代码示例和mermaid图表,为你呈现一个全面且深入的学习指南。无论你是…...
【OSS】 前端如何直接上传到OSS 上返回https链接,如果做到OSS图片资源加密访问
使用阿里云OSS(对象存储服务)进行前端直接上传并返回HTTPS链接,同时实现图片资源的加密访问,可以通过以下步骤实现: 前端直接上传到OSS并返回HTTPS链接 设置OSS Bucket: 确保你的OSS Bucket已创建…...

AI智能分析网关V4室内消防逃生通道占用检测算法打造住宅/商业/工业园区等场景应用方案
一、方案背景 火灾严重威胁生命财产安全,消防逃生通道畅通是人员疏散的关键。但现实中通道被占用、堵塞现象频发,传统人工巡查监管效率低、不及时。AI智能分析网关V4结合消防逃生通道占用算法,以强大的图像识别和数据分析能力,…...
商城前端监控体系搭建:基于 Sentry + Lighthouse + ELK 的全链路监控实践
在电商行业,用户体验直接关乎转化率和用户留存。一个页面加载延迟1秒可能导致7%的订单流失,一次未捕获的前端错误可能引发用户信任危机。如何构建一套高效的前端监控体系,实现错误实时追踪、性能深度优化与数据可视化分析?本文将揭…...
Kotlin 中的数据类型有隐式转换吗?为什么?
在 Kotlin 中,基本数据类型没有隐式转换。主要出于安全性和明确性的考虑。 1 Kotlin 的显式类型转换规则 Kotlin 要求开发者显式调用转换函数进行类型转换, 例如: val a: Int 10 val b: Long a.toLong() // 必须显式调用 toLong() // 错…...
基于 HTTP 的邮件认证深入解读 ngx_mail_auth_http_module
一、模块启用与示例配置 mail {server {listen 143; # IMAPprotocol imap;auth_http http://auth.local/auth;# 可选:传递客户端证书给认证服务auth_http_pass_client_cert on;auth_http_timeout 5s;auth_http_header X-Auth-Key "shared_se…...

关于无法下载Qt离线安装包的说明
不知道出于什么原因考虑,Qt官方目前不提供离线的安装包下载,意味着网上各种文章提供的各种下载地址都失效了,会提示Download from your IP address is not allowed,当然目前可以在线安装,但是据说只提供了从5.15开始的…...

Java开发经验——阿里巴巴编码规范实践解析4
摘要 本文主要介绍了阿里巴巴编码规范中关于日志处理的相关实践解析。强调了使用日志框架(如 SLF4J、JCL)而非直接使用日志系统(如 Log4j、Logback)的 API 的重要性,包括解耦日志实现、统一日志调用方式等好处。同时&…...

HTML应用指南:利用GET请求获取全国捞王锅物料理门店位置信息
随着新零售业态的快速发展,门店位置信息的获取变得越来越重要。作为知名中式餐饮品牌之一,捞王锅物料理自2009年创立以来,始终致力于为消费者提供高品质的锅物料理与贴心的服务体验。经过多年的发展,捞王在全国范围内不断拓展门店…...

算法日记32:埃式筛、gcd和lcm、快速幂、乘法逆元
一、埃式筛(计算质数) 1.1、概念 1.1.1、在传统的计算质数中,我们采用单点判断,即判断(2~sqrt(n))是否存在不合法元素,若存在则判否,否则判是 1.1.2、假设,此时我们需要求1~1000的所有质数&am…...

黑马点评-分布式锁Lua脚本
文章目录 分布式锁Redis setnxredis锁误删Lua脚本 分布式锁 当我们的项目服务器不只是一台(单体),而是部署在多态服务器上(集群/分布式),同样会出现线程安全问题。不同服务器内部有不同的JVM,每…...
P7-大规模语言模型分布式训练与微调框架调研文档
1. 引言 随着大语言模型(LLMs)在自然语言处理(NLP)、对话系统、文本生成等领域的广泛应用,分布式训练和高效微调技术成为提升模型性能和部署效率的关键。分布式训练框架如 Megatron-LM 和 DeepSpeed 针对超大规模模型…...

机械师安装ubantu双系统:三、GPT分区安装Ubantu
目录 一、查看磁盘格式 二、安装ubantu 参考链接: GPT分区安装Ubuntu_哔哩哔哩_bilibili 一、查看磁盘格式 右击左边灰色区域,点击属性 二、安装ubantu 插入磁盘,重启系统,狂按F7(具体我也忘了)&#…...