最近在准备面试,正把平时积累的笔记、项目中遇到的问题与解决方案、对核心原理的理解,以及高频业务场景的应对策略系统梳理一遍,既能加深记忆,也能让知识体系更扎实,供大家参考,欢迎讨论。

在数据库并发操作场景中,事务隔离级别是保障数据一致性的核心机制,不同隔离级别对应不同的并发控制策略,而 MVCC(多版本并发控制)则是实现部分隔离级别的关键技术

一、数据库事务隔离级别概述

事务隔离级别定义了多个并发事务之间的相互影响程度,从低到高分为四个级别,不同级别在数据一致性和系统性能之间呈现不同的平衡关系。

1.1 读未提交(Read Uncommitted)

• 定义:最低的隔离级别,允许当前事务读取其他事务尚未提交的数据变更。

• 核心问题:无法避免脏读、不可重复读和幻读。

• 脏读:读取到其他事务未提交的“临时数据”,若后续事务回滚,当前读取的数据将变为无效。

• 适用场景:对数据一致性要求极低,仅追求极致性能的场景(如临时统计查询,无需精确结果),实际业务中极少使用。业务场景基本都不用

1.2 读已提交(Read Committed, RC)

• 定义:允许当前事务读取其他事务已提交的数据变更,是许多数据库的默认隔离级别之一(如 Oracle)。

• 核心能力:可阻止脏读,但仍可能出现不可重复读和幻读。

◦ 不可重复读:同一事务内,对同一字段多次读取,结果因其他事务提交的更新操作而不同。◦ 幻读:同一事务内,执行相同的查询语句,结果因其他事务提交的插入/删除操作而新增或减少数据行。

• 实现依赖:基于 MVCC 机制实现,通过读取数据的“已提交版本”保障数据有效性。

1.3 可重复读(Repeatable Read, RR)

• 定义:MySQL InnoDB 引擎的默认隔离级别,确保同一事务内,对同一字段的多次读取结果一致(除非数据由当前事务自身修改)。

• 核心能力:可阻止脏读和不可重复读,但仍可能出现幻读(需通过额外机制解决)。

• 幻读解决方案:

◦ 升级隔离级别至串行化:所有事务顺序执行,完全避免并发干扰,但会导致性能大幅下降,仅适用于数据一致性要求极高且并发量低的场景。◦ MVCC 解决快照读幻读:针对简单 SELECT(快照读),通过读取数据的历史版本(非最新版本),确保同一事务内查询结果一致。MySQL使用的这个来解决幻读,相对锁解决幻读而言,性能较高。◦ GapLock + Next-KeyLock 解决当前读幻读:针对 SELECT ... FOR UPDATE、SELECT ... LOCK IN SHARE MODE 等当前读操作,通过间隙锁(GapLock)和 next-key 锁,锁定查询范围,防止其他事务插入/删除数据,避免幻读。

1.4 串行化(Serializable)

• 定义:最高的隔离级别,强制所有事务按顺序逐个执行,完全禁止并发操作。互联网项目基本没用这个的,项目上线有点并发就会非常卡顿了。

• 核心能力:完全符合 ACID 的隔离要求,可阻止脏读、不可重复读和幻读,数据一致性最强。

• 缺点:极大限制并发性能,仅适用于数据安全性优先于性能的极端场景(如金融核心交易的关键步骤)。在这里插入图片描述

二、MVCC(多版本并发控制)机制

MVCC 是一种高效的并发控制技术,主要用于实现 “读已提交(RC)” 和 “可重复读(RR)” 隔离级别,通过维护数据的多个版本,实现 “读 - 写”“写 - 读” 并发执行,在保障数据一致性的同时提升系统性能。

2.1 MVCC 的核心原理

MVCC 的核心是为每行数据维护多个历史版本,事务读取时根据自身版本号选择可见的数据版本,避免直接加锁导致的并发瓶颈。其关键机制包括:

  1. 事务版本号
    ◦ 系统会为每个新启动的事务分配一个唯一的递增版本号(transaction_id),事务开始时的版本号即为该事务的标识。

    ◦ 数据行的版本号与事务版本号关联,确保事务只能读取符合可见性规则的数据。

  2. 隐藏列与版本链
    ◦ InnoDB 引擎的聚簇索引记录中,默认包含两个隐藏列,用于构建数据的版本链:

     ▪ trx_id:存储每次修改该数据行的事务 ID,记录数据的“修改者”。▪ roll_pointer:存储一个指针,指向该数据行的上一个历史版本(存储在 Undo 日志中),通过该指针可串联所有历史版本,形成“版本链”。
    

    ◦ 注意:插入操作的 Undo 日志无 roll_pointer,因为插入的数据无历史版本。

  3. Undo 日志的作用
    ◦ Undo 日志用于保存数据的历史版本,当事务需要读取历史数据时,通过 roll_pointer 从 Undo 日志中获取对应版本。

    ◦ 事务提交后,Undo 日志不会立即删除,而是根据垃圾回收机制(Purge)在合适时机清理,确保其他事务仍能访问所需的历史版本。

2.2 MVCC 的适用范围与限制

• 适用隔离级别:仅支持 “读已提交(RC)” 和 “可重复读(RR)”,不支持 “读未提交”(需读取未提交数据,与 MVCC 的“版本可见性规则”冲突)和 “串行化”(强制顺序执行,无需 MVCC)。

• 适用读操作类型:

◦ 快照读:简单 SELECT 语句(无 FOR UPDATE、LOCK IN SHARE MODE),通过 MVCC 读取历史版本,无需加锁,并发性能高。◦ 当前读:DELETE、UPDATE、INSERT 及 SELECT ... FOR UPDATE 等操作,需读取数据最新版本,并加锁防止并发修改,不依赖 MVCC 的版本链,而是通过锁机制保障一致性。

2.3 MVCC 与乐观锁的关联

MySQL 的 MVCC 本质是乐观锁的一种实现方式:

• 每行数据的版本号(通过 trx_id 和版本链间接体现)作为乐观锁的“版本标识”。

• 事务更新数据时,会检查当前数据的版本号是否与预期一致(类似 “WHERE version = V” 的逻辑),若一致则更新并生成新版本,若不一致则重试或失败,避免并发冲突。

三、RC 与 RR 隔离级别的应用场景对比

RC 和 RR 均基于 MVCC 实现,但因版本可见性规则不同,适用场景存在显著差异:

】![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/b4d312f414f54d87822a8308adc4d046.png

四、关键总结

• 事务隔离级别从低到高为:“读未提交 → 读已提交 → 可重复读 → 串行化”,一致性越强,性能越弱,需根据业务场景权衡选择。

• MVCC 是实现 RC 和 RR 的核心技术,通过版本链和 Undo 日志实现“无锁读”,提升并发性能。

• RR 的幻读需通过“MVCC(快照读)”或“GapLock + Next-KeyLock(当前读)”解决,RC 因每次查询读最新版本,幻读问题更明显。

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

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

相关文章

【Cursor-Gpt-5-high】StackCube-v1 任务训练结果不稳定性的分析

1. Prompt 我是机器人RL方向的博士生正在学习ManiSkill,在学习时我尝试使用相同命令训练同一个任务,但是我发现最终的 success_once 指标并不是相同的,我感到十分焦虑, 我使用的命令如下: python sac.py --env_id"…

文档权限设置不合理会带来哪些问题

文档权限设置不合理会导致信息泄露、合规风险、协作效率下降、责任难以追溯、知识资产流失、员工信任受损、管理成本增加、企业战略受阻。这些问题不仅影响日常运营,更会对企业的长远发展构成威胁。根据IBM《2024数据泄露成本报告》,全球企业因数据泄露的…

Linux网络服务——基础设置

网络服务命令1.ping命令作用:测试网络连通性(使用icmp协议)常见选项:-c:指定ping的次数,默认无限次-I:指定发送请求的网卡[rootlocalhost ~]# ping 192.168.77.78 -c 4 -I ens160 PING 192.168.…

【multisim汽车尾灯设计】2022-12-1

缘由multisim汽车尾灯设计-学习和成长-CSDN问答 为什么模仿别人做的运行没啥效果,啥也看不明白,数字电子技术要做的任务。

Langchain在调用 LLM 时统计 Token 消耗

关键点解析使用上下文管理器with get_openai_callback() as cb:这一行是核心。cb 会自动收集本次调用的 prompt tokens、completion tokens 以及 total tokens。自动统计在上下文退出时,cb 中已经包含了这次调用的消耗情况,无需额外手动计算。累加到全局…

漫谈《数字图像处理》之实时美颜技术

随着移动拍摄、直播、短视频等场景的普及,用户对 “自然、流畅、可控” 的美颜效果需求日益提升 —— 既要消除皮肤瑕疵、优化面部形态,又需避免 “过度磨皮显假”“变形失真”“实时卡顿” 等问题。实时美颜技术的核心并非单一算法的堆砌,而…

MATLAB基于PSO(粒子群算法)优化BP神经网络和NSGA-II(非支配排序遗传算法)多目标优化

代码实现了一个智能算法优化BP神经网络并进行多目标优化的完整流程,结合了PSO(粒子群算法)优化BP神经网络和NSGA-II(非支配排序遗传算法)多目标优化,用于多输入多输出的回归预测问题。 ✅ 一、主要功能 数…

白平衡分块统计数据为什么需要向下采样?

在白平衡处理中,分块统计数据时引入**向下采样(Downsampling)**,核心目标是在保证统计有效性的前提下,解决“计算效率”与“统计鲁棒性”的矛盾,同时避免局部噪声对白平衡判断的干扰。要理解这一设计的必要…

Deathnote: 1靶场渗透

Deathnote: 1 来自 <Deathnote: 1 ~ VulnHub> 1&#xff0c;将两台虚拟机网络连接都改为NAT模式 2&#xff0c;攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 那么攻击机IP为192.168.23.128&#xff0c;靶场IP192.168.23.129 3&#xff0c;对靶机进行端口…

windows系统服务器测试部署springboot+vue+mysql项目

1. 后端Java应用启动 直接使用命令行启动&#xff08;推荐用于测试&#xff09;&#xff1a; cd C:\Users\Administrator\Desktop\toolset\backed java -jar -Dspring.profiles.activeprod -Dserver.port8083 admin.jar2. 前端静态文件服务 由于你已经有了dist目录&#xff0c;…

Java 与 Docker 的最佳实践

在云原生时代&#xff0c;Docker 已成为应用交付和运行的事实标准。Java 作为企业级开发的主力语言&#xff0c;也需要与容器技术深度结合。然而&#xff0c;Java 程序天然有 JVM 内存管理、启动速度、镜像体积 等特点&#xff0c;如果不做优化&#xff0c;可能导致性能下降甚至…

大数据工程师认证推荐项目:基于Spark+Django的学生创业分析可视化系统技术价值解析

&#x1f496;&#x1f496;作者&#xff1a;计算机编程小央姐 &#x1f499;&#x1f499;个人简介&#xff1a;曾长期从事计算机专业培训教学&#xff0c;本人也热爱上课教学&#xff0c;语言擅长Java、微信小程序、Python、Golang、安卓Android等&#xff0c;开发项目包括大…

【MySQL自学】SQL主键使用误区:你必须知道的关键细节

在日常数据库操作中&#xff0c;主键&#xff08;Primary Key&#xff09;是我们最常打交道的概念之一。然而&#xff0c;许多开发者&#xff0c;尤其是初学者&#xff0c;常常对其存在一些误解。一个非常经典的问题是&#xff1a;“在SQL中&#xff0c;只要用到主键&#xff0…

Electron 执行python脚本

1 需求背景 有个需求需要Electron执行在本地执行python脚本。希望通过Electron调用python服务并且实现双向通信。 2 解决思路 使用Electon 的{ exec, spawn, execFile, fork } from "child_process"; 能力来执行python脚本&#xff0c;使用spawn可以实现持续交互&…

Leetcode高频 SQL 50 题(基础版)题目记录

Leetcode sql题目记录 文章目录Leetcode sql题目记录570. 至少有5名直接下属的经理1934. 确认率1193. 每月交易I1174. 即时食物配送II176. 第二高的薪水&#xff08;1&#xff09; 子查询为空但外层用了聚合函数&#xff08;2&#xff09;子查询为空而外层没有聚合函数550. 游戏…

RAGFlow切分方法详解

RAGFlow 各切分方法的含义如下,结合文档结构、场景特点等设计,以适配不同类型的知识源: 1. General(通用分块) 逻辑:结合文本排版、格式、语义关联等因素确定分割点,再根据“建议文本块大小(Token 数)”,将文本切分为合适的块。 支持格式:DOCX、EXCEL、PPT、IMAGE、…

支付域——支付与交易概念

摘要本文详细阐述了支付域中支付与交易的核心概念及其相互关系。交易是商品或服务交换的过程&#xff0c;包含多个要素并产生订单或合同。支付则是资金流转的过程&#xff0c;是交易的资金结算环节。支付交易结合了两者&#xff0c;根据不同场景提供多样化的支付产品和服务。文…

(自用)cmd常用命令自查文档

&#xff08;自用&#xff09;cmd常用命令自查文档 Windows CMD 常用命令自查1. 文件与目录操作命令说明示例​cd​显示或切换目录​cd​&#xff1b;cd C:\Windows​​dir​列出目录内容​dir​&#xff1b;dir /a​(含隐藏文件)​md​或mkdir​创建目录​md test​&#xff1…

剧本杀APP系统开发:引领娱乐行业新潮流的科技力量

在当今数字化时代&#xff0c;科技的力量正深刻地改变着人们的生活方式和娱乐习惯。娱乐行业也不例外&#xff0c;各种新兴的娱乐形式和平台如雨后春笋般涌现。剧本杀APP系统开发作为科技与娱乐融合的产物&#xff0c;正以其独特的魅力和创新的模式&#xff0c;引领着娱乐行业的…

LangChain框架深度解析:定位、架构、设计逻辑与优化方向

LangChain框架深度解析&#xff1a;定位、架构、设计逻辑与优化方向 引言 在大语言模型&#xff08;LLM&#xff09;应用开发的浪潮中&#xff0c;LangChain作为最具影响力的开发框架之一&#xff0c;为开发者提供了构建复杂AI应用的完整工具链。本文将从框架定位、实现逻辑、设…