隔离级别决定了事务之间的可见性规则,直接影响数据库的并发性能和数据一致性。

SQL 标准定义了 4 种隔离级别,从低到高依次为:读未提交→读已提交→可重复读→串行化。隔离级别越高,对并发问题的解决能力越强,但对性能的消耗也越大(因限制了并发操作)。

一、读未提交(Read Uncommitted, RU)

定义:一个事务可以读取另一个事务 未提交 的修改。

解决的问题:无(是最低级别的隔离,几乎不做任何隔离控制)。

存在的问题:可能出现 脏读、不可重复读、幻读

示例

1、事务 B 执行 "修改数据 X 为 100" 但未提交

2、事务 A 读取 X=100;

3、事务 B 回滚(X 恢复为 50),事务 A 读取的 "100" 是无效的(脏读)。

适用场景:极少使用,仅在对数据一致性要求极低、追求极致并发性能时(如实时监控数据,允许临时脏数据)。

二、读已提交(Read Committed, RC)

定义:一个事务只能读取另一个事务已提交的修改(未提交的修改不可见)。

解决的问题:避免 脏读(因只能读已提交的数据)。

存在的问题:可能出现 不可重复读、幻读

示例

1、事务 A 第一次读取 X=50;

2、事务 B 修改 X 为 100 并提交;

3、事务 A 第二次读取 X=100(与第一次不一致,不可重复读)。

实现原理:通过 "行级锁" 或 "快照读" 实现(如 Oracle 默认用快照读:每个事务读取数据时,获取该数据的 "已提交版本")。

适用场景:大多数互联网业务(如电商订单、支付场景),平衡了一致性和并发性能,是 Oracle、SQL Server 的默认隔离级别

三、可重复读(Repeatable Read, RR)

定义:一个事务在执行期间,多次读取同一批数据的结果始终一致(不受其他事务提交的修改影响)。

解决的问题:避免脏读、不可重复读

存在的问题:可能出现幻读(因无法限制其他事务新增 / 删除符合条件的记录)。

示例

1、事务 A 第一次查询 "年龄> 18 的用户",返回 10 条;

2、事务 B 新增 1 条 "年龄 = 20" 的用户并提交;

3、事务 A 再次查询 "年龄> 18 的用户",返回 11 条(记录数变化,幻读)。

实现原理:通过 "多版本并发控制(MVCC)" 实现(每个事务启动时生成一个 "数据快照",后续读取基于该快照,不受其他事务提交的修改影响)。

特殊说明:MySQL 的 InnoDB 引擎对 RR 做了增强,通过 "间隙锁(Gap Lock)" 避免了部分幻读场景(但并非完全解决,极端情况仍可能出现),因此 InnoDB 的 RR 实际隔离性略高于标准定义。

适用场景:对数据一致性要求较高的业务(如金融交易、库存管理),是 MySQL InnoDB 的默认隔离级别

四、串行化(Serializable, S)

定义:所有事务 "串行执行"(即一个接一个执行,不允许并发操作同一批数据)。

解决的问题:避免 脏读、不可重复读、幻读(是最高级别的隔离,完全保证数据一致性)。

存在的问题:并发性能极差(因本质是 "单线程" 执行,会导致大量事务等待)。

实现原理:通过 "表级锁" 或 "范围锁" 强制事务串行化(如事务 A 操作某范围数据时,其他事务对该范围的读写均被阻塞)。

示例

1、事务 A 执行 "查询年龄> 18 的用户" 并准备修改;

2、事务 B 尝试新增 "年龄 = 20" 的用户时,会被阻塞,直到事务 A 完成并释放锁;

3、因此事务 A 两次查询的结果完全一致,无幻读。

适用场景:仅在对数据一致性要求极高、并发量极低的场景(如银行核心交易的对账操作,不允许任何并发不一致)。

隔离级别对比

隔离级别脏读不可重复读幻读并发性能典型数据库默认值
读未提交(RU)可能可能可能最高几乎无数据库默认
读已提交(RC)不可能可能可能较高Oracle、SQL Server
可重复读(RR)不可能不可能可能中等MySQL InnoDB
串行化(S)不可能不可能不可能最低无数据库默认

不可重复读与脏读的区别

  • 脏读(Dirty Read:读取到其他事务 未提交 的数据;
  • 不可重复读(Non-repeatable Read:读取到其他事务 已提交  修改

不可重复读与幻读的区别

  • 不可重复读(Non-repeatable Read:针对 已存在 数据的 修改
  • 幻读(Phantom Read:针对 新增或删除 的数据行。

人活一世,谋生之道,立世之途,为人之智,尽在书中。-- 烟沙九洲

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

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

相关文章

基于Python flask的电影数据分析及可视化系统的设计与实现,可视化内容很丰富

摘要:基于Python的电影数据分析及可视化系统是一个应用于电影市场的数据分析平台,旨在为广大电影爱好者提供更准确、更详细、更实用的电影数据。数据分析部分主要是对来自猫眼电影网站上的数据进行清洗、分类处理、存储等步骤,数据可视化则是…

TCP通讯开发注意事项及常见问题解析

文章目录一、TCP协议特性与开发挑战二、粘包与拆包问题深度解析1. 成因原理2. 典型场景与实例验证3. 系统化解决方案接收方每次读取10字节2. 丢包检测与验证工具3. 工程化解决方案四、连接管理关键实践1. 超时机制设计2. TIME_WAIT状态优化3. 异常处理最佳实践五、高性能TCP开发…

2021 RoboCom 世界机器人开发者大赛-本科组(复赛)解题报告 | 珂学家

前言 题解 睿抗机器人开发者大赛CAIP-编程技能赛-历年真题 汇总 2021 RoboCom 世界机器人开发者大赛-本科组(复赛)解题报告 感觉这个T1特别有意思,非典型题,着重推演下结论。 T2是一道玄学题,但是涉及一些优化技巧…

《计算机“十万个为什么”》之 MQ

《计算机“十万个为什么”》之 MQ 📨 欢迎来到消息队列的奇妙世界! 在这篇文章中,我们将探索 MQ 的奥秘,从基础概念到实际应用,让你彻底搞懂这个分布式系统中不可或缺的重要组件!🚀 作者&#x…

Django母婴商城项目实践(七)- 首页数据业务视图

7、首页数据业务视图 1、介绍 视图(View)是Django的MTV架构模式的V部分,主要负责处理用户请求和生成相应的响应内容,然后在页面或其他类型文档中显示。 也可以理解为视图是MVC架构里面的C部分(控制器),主要处理功能和业务上的逻辑。我们习惯使用视图函数处理HTTP请求,…

android 12 的 aidl for HAL 开发示例

说明:aidl for HAL 这种机制,可以自动生成java代码,app调用可以获取中间过程的jar包,结合反射调用 ServiceManager.getService 方法,直接获取 HAL 服务,不再需要费力在framework层添加代码,方便…

网络安全渗透攻击案例实战:某公司内网为目标的渗透测试全过程

目录一、案例背景二、目标分析(信息收集阶段)🌐 外部信息搜集🧠 指纹识别和端口扫描三、攻击流程(渗透测试全过程)🎯 步骤1:Web漏洞利用 —— 泛微OA远程命令执行漏洞(CV…

AI视频-剧本篇学习笔记

1.提示词万能框架是什么:ai扮演的角色做什么:解决什么问题怎么做:标准2、剧本模版假设你是一位拥有30年电影拍摄经验的世界顶级导演,拥有丰富的电影拍摄经验和高超的电影拍摄技术,同时也擅长各种影片的剧本创作。我需要你仔细阅读…

A316-HF-DAC-V1:专业USB HiFi音频解码器评估板技术解析

引言 随着高解析度音频的普及,对高品质音频解码设备的需求日益增长。本文将介绍一款专为USB HiFi音频解码器设计的专业评估板——A316-HF-DAC-V1,这是一款基于XMOS XU316技术的高性能音频解码评估平台。产品概述 A316-HF-DAC-V1是一款专业的USB HiFi音频…

超低延迟RTSP播放器在工业机器人远程控制中的应用探索

技术背景 在智能制造高速发展的今天,工业机器人已经从单一的生产作业工具,转变为协作化、智能化的生产伙伴。无论是高精度的多关节机械臂、自主导航的移动机器人,还是与人协同工作的协作机器人,都越来越多地被应用于智能工厂、仓…

Elasticsearch Java 8.x 的聚合 API 及子聚合的用法

背景 Elasticsearch 版本发布的很勤, API 客户端的用法各个版本之间差异也是很大。尤其是 Elasticsearch 8.x 版本直接废弃了 RestHighLevelClient 对象。 Query 和 Aggregation 的 Builder 的用法也有变化。 本文记录项目升级 Elasticsearch API 到 8.x 版本时聚合…

Dify功能熟悉

Dify功能熟悉 文章目录Dify功能熟悉一、介绍1.1 快速开始1.2 官方文档二、workflow2.1 开始和结束2.2 简单示例三、节点3.1 节点一览表3.2 节点-----开始3.3 节点-----LLM3.4 知识检索(增强回答准确性)3.5 Agent智能体3.6 问题分类器3.7 http四、工具&am…

app引导页设计要点与交互细节详解

在移动应用的设计中,用户第一次打开APP时看到的往往就是app引导页。它不仅是品牌与用户接触的第一道界面,也是决定用户是否愿意继续探索的关键入口。一个设计合理、信息传达清晰的app引导页,能够帮助产品建立专业感与品牌价值,同时…

香港服务器SSH安全加固方案与密钥认证实践

香港服务器SSH安全加固方案与密钥认证实践在数字化时代,服务器安全成为企业不可忽视的重要议题。香港服务器因其地理位置和网络自由优势备受青睐,但同时也面临各种网络安全威胁。本文将深入探讨香港服务器SSH安全加固的核心方案,重点解析密钥…

Python的界面美化库 QDarkStyleSheet

Python的界面美化库 QDarkStyleSheet1、官网先看效果2、github地址3、动态切换主题用法效果代码1、官网先看效果 2、github地址 https://github.com/ColinDuquesnoy/QDarkStyleSheet?tabreadme-ov-file https://qdarkstylesheet.readthedocs.io/en/latest/screenshots.html …

同步本地文件到服务器上的Docker容器

同步本地文件到服务器上的Docker容器 要将本地文件同步到服务器上的Docker容器中,有几种常用方法: 1. 使用 docker cp 命令 # 将本地文件复制到运行中的容器 docker cp /本地/文件/路径 容器名或ID:/容器内/路径# 示例 docker cp ./app.py mycontainer:/…

[学习] 笛卡尔坐标系的任意移动与旋转详解

笛卡尔坐标系的任意移动与旋转详解 文章目录笛卡尔坐标系的任意移动与旋转详解**1. 笛卡尔坐标系基础****2. 坐标变换原理****2.1 平移变换****2.2 旋转变换****3. 组合变换**Python仿真与动态展示**动画说明**:**关键数学原理**:1. 笛卡尔坐标系基础 笛…

论文笔记:Parameter Competition Balancing for Model Merging

neurips 20241 intro近年来,模型融合(model merging)技术迅速发展,使得可以将多个分别针对不同任务微调后的模型直接集成为一个统一模型,从而实现多任务处理能力,而无需重新访问原始训练数据。然而&#xf…

逆向难度真相:仅用IDA静态分析的极限挑战

逆向难度真相:仅用IDA静态分析的极限挑战 纯IDA逆向难度重排(从难到易) Python > Go > Java > E语言 > CPython (地狱级难度) IDA困境: 主逻辑完全封装在PYZ/PYC资源中,IDA无法解析字节码结构字符串表只显…

vxe-table 通过配置 ajax 方式自动请求数据,适用于简单场景的列表

vxe-table 通过配置 ajax 方式自动请求数据,适用于简单场景的列表 当系统中很多页面都是简单列表时,每次都要手动去请求接口后再赋值,过程就会比较冗余繁琐。解决方式一般就是将封装一下。本章的方式是通过 vxe-grid 配置 ajax 来实现自动请求…