【数据库】tdsql(MySQL )的事务隔离级别
MySQL 的事务隔离级别是数据库并发控制的核心概念用于解决多个事务同时执行时可能产生的数据不一致问题。1. 默认值是MySQL InnoDB 默认的事务隔离级别是REPEATABLE READ可重复读。2. 四大隔离级别三个读异常脏话、不可重复、幻读解释脏读Dirty Read读到别的事务尚未提交的数据万一对方回滚这数据就是废的。不可重复读Non-Repeatable Read在同一事务内两次读取同一条记录因为别的事务修改并提交了导致两次结果不一致侧重于“改”。幻读Phantom Read在同一事务内两次执行同一个范围查询因为别的事务插入或删除了数据导致第二次多出或少了几行侧重于“增删”。隔离级别与异常的关系注意按照 SQL 标准REPEATABLE READ是允许幻读发生的。但 MySQL InnoDB 通过强大的 Next-Key Lock间隙锁行锁机制在这个级别下就杜绝了幻读。3.MySQL 默认选择 REPEATABLE READ绝大多数数据库如 Oracle、PostgreSQL、SQL Server默认都是READ COMMITTED MySQL 偏要与众不同。背后的原因不是“拍脑袋”而是由MySQL 主从复制基于 Binlog的历史架构和性能权衡共同决定的。我们可以把原因归结为三大支柱。一历史包袱与二进制日志Binlog的安全隐患最核心原因在 MySQL 5.0 及更早版本以及当下的某些配置中Binlog 的格式默认是STATEMENT基于语句的复制。也就是记录UPDATE t SET a1 WHERE id10;这样的 SQL 语句然后发给从库执行。如果此时隔离级别是READ COMMITTED会产生一个致命的主从数据不一致风险我们称之为“Binlog 惊魂”。让我们用一个经典场景复现假设主库并发执行以下两个事务TxA 删除TxB 插入时间线 1TxA 执行DELETE FROM users WHERE age 20;此时表中有 id1(age25) 和 id2(age30)TxA 扫到了这两行准备删除。时间线 2TxB 执行INSERT INTO users (id3, age28);并提交。时间线 3在READ COMMITTED下由于 TxB 已提交TxA 重新评估条件age20新插入的 id3 不会被删除因为 InnoDB 的删除是通过隐藏字段标记此时读视图变化了。时间线 4TxA 提交。主库结果id1, id2 被删id3 存活。Binlog 记录顺序STATEMENT 格式INSERTTxB的记录先写DELETETxA的记录后写。从库重放先执行INSERT插入 id3后执行DELETE FROM users WHERE age20;。在从库执行 DELETE 时它会无情地把刚刚插入的 id3 也一起删掉从库结果id1, id2, id3 全部被删。结果主从数据严重不一致如何解决MySQL 选择了REPEATABLE READ。在这个级别下TxA 在开始时创建了一致性读视图快照直到事务结束。即使 TxB 提交了TxA 依然看不到新插入的 id3所以 DELETE 语句只作用于它一开始看到的 id1 和 id2。这条 DELETE 记录到 Binlog 后在从库执行时也会基于从库的 MVCC 快照或锁机制只删除这两条从而保证主从一致。二MVCC 实现的读视图Read View生成时机不同为了理解这一点我们需要看一眼 InnoDB 的多版本并发控制MVCC机制。在READ COMMITTED下每一次执行普通SELECT语句都会重新生成一个新的 Read View读视图。在REPEATABLE READ下事务内第一次执行SELECT时生成一个 Read View并复用到事务结束。这种机制天然保证了“可重复读”并且为基于 STATEMENT 的复制提供了确定性。虽然生成 Read View 的代价很小但REPEATABLE READ减少了生成的次数在极高并发下对 CPU 也算一种微小的优化。三间隙锁Gap Lock带来的“伪串行化”优势虽然REPEATABLE READ带来了更高的数据一致性保障但它也有代价——间隙锁。为了阻止幻读InnoDB 不仅锁住命中的行Record Lock还会锁住索引记录之间的“间隙”Gap Lock。TxA (REPEATABLE READ)开启事务执行范围查询WHERE id BETWEEN10 AND 20获得间隙锁锁定 (10,20)之间的所有间隙再次查询结果集不变幻读被阻止提交事务释放间隙锁TxB (试图插入)尝试插入 id15阻塞等待因间隙锁未释放等待中...TxA提交后插入成功但此时已不影响TxA的一致性事务并发与幻读防范间隙锁作用MySQL 选择REPEATABLE READ核心是为了兼容早期的 STATEMENT 格式 Binlog 以保证主从一致性。虽然现在有了更安全的ROW基于行格式 Binlog推荐使用但这个默认级别作为历史传承和“更安全”的默认配置被保留了下来。4. 现代视角下的权衡既然 ROW 格式 Binlog 解决了主从不一致问题为什么 MySQL 8.0 依然不改默认值兼容性与平滑升级对于无数遗留系统修改默认隔离级别可能引发未知的性能回退或死锁变化作为基础软件MySQL 必须保持高度的向下兼容。业务语义更严谨对于金融、报表统计等需要事务内多次读取同一批数据的场景REPEATABLE READ直接提供了开箱即用的强一致性减少了应用层处理“不可重复读”的代码负担。但也要注意它的“副作用”由于间隙锁的存在在高并发写入尤其是高冲突的插入场景下REPEATABLE READ比READ COMMITTED更容易产生死锁。因为间隙锁是“范围锁”两个事务很容易相互等待。5. MySQL 的隔离级别决策逻辑READ UNCOMMITTEDREAD COMMITTEDREPEATABLE READSERIALIZABLE用户发起事务当前隔离级别无锁读性能极致但如同走钢丝易脏读极少生产环境使用Oracle/PostgreSQL默认每次查询生成新快照无间隙锁并发高但主从需配合ROW格式BinlogMySQL默认首次查询生成快照并复用加间隙锁防幻读主从兼容性好STATEMENT/ROW均可代价更高死锁风险所有读加共享锁完全串行化性能最差仅用于极端严格场景结束事务结论“MySQL 默认是 REPEATABLE READ。这主要源于早期的 STATEMENT 模式 Binlog 复制如果使用 READ COMMITTED 会导致主从数据不一致。虽然现在我们可以通过设置 binlog_formatROW 并切换到 READ COMMITTED 来获得更高并发和更少死锁但 InnoDB 为了向后兼容和提供更稳健的默认行为在 8.0 版本中依然保留了 REPEATABLE READ 作为默认值。”

相关新闻

ESXi维护模式失败排查:虚拟机迁移与存储空间管理实战

ESXi维护模式失败排查:虚拟机迁移与存储空间管理实战

1. 项目概述:当ESXi宿主机“罢工”时,虚拟机为何原地不动?在虚拟化运维的日常里,把一台ESXi宿主机置入维护模式,就像给一台正在运转的机器做计划性停机检修。标准流程下,vSphere会通过vMotion自动将这台主机…

2026/10/20 17:11:58 阅读更多 →
深度优先搜索(DFS)与广度优先搜索(BFS)在连通块计数中的核心原理与实现

深度优先搜索(DFS)与广度优先搜索(BFS)在连通块计数中的核心原理与实现

1. 项目概述与问题引入“连通块”这个概念,对于任何一个接触过图论或者搜索算法的朋友来说,都像是一道绕不开的坎。它本身并不复杂,但却是理解图结构、掌握深度优先搜索(DFS)和广度优先搜索(BFS&#xff09…

2026/10/20 18:05:46 阅读更多 →
Sunshine游戏串流服务器:打造个人云游戏的终极完整指南

Sunshine游戏串流服务器:打造个人云游戏的终极完整指南

Sunshine游戏串流服务器:打造个人云游戏的终极完整指南 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 你是否梦想过在客厅大屏幕上畅玩电脑游戏?或者想在平…

2026/10/18 7:05:51 阅读更多 →

最新新闻

PPT模板即代码:用ppt-master实现幻灯片工程化生成

PPT模板即代码:用ppt-master实现幻灯片工程化生成

1. 项目概述:这不是一个PPT模板库,而是一套可编程的幻灯片生成引擎“ppt-master”这个词最近在技术圈和内容创作社区里悄悄升温,但很多人第一反应是——“又一个PPT模板网站?”其实完全不是。我第一次看到这个词是在某次内部工具分…

2026/10/20 23:29:04 阅读更多 →
2025薪资倒挂背后:计算机领域黄金赛道与入局路线图

2025薪资倒挂背后:计算机领域黄金赛道与入局路线图

先说一个我身边的真实观察。这几年陆续有朋友从传统行业跳进计算机领域,有人从建筑设计转去做三维可视化,有人从机械制造转去做工业软件,还有人从财务转去做数据分析。有意思的是,他们的薪资几乎都是翻着跟头往上走,有…

2026/10/20 23:29:04 阅读更多 →
每周arXiv论文太多?这套筛选-精读-复现-选题方法论请收好

每周arXiv论文太多?这套筛选-精读-复现-选题方法论请收好

做机器学习研究的人,每周一打开arXiv的CS.LG列表,基本和看天气一样,是固定节目。这周也一样,我照例把整个列表从头刷到尾,顺便翻完摘要,挑出值得精读的几篇。说实话,干这行久了,我对…

2026/10/20 23:29:04 阅读更多 →
Python股票自动交易系统源码解析:从回测到实盘的工程化实践

Python股票自动交易系统源码解析:从回测到实盘的工程化实践

简介:这份资源是面向高校计算机、金融相关专业毕业设计场景的完整项目源码包,主题为基于Python的股票自动交易系统,适合需要完成毕设选题、课程设计或自学金融量化开发的学生与开发者参考。压缩包共687个文件,整体约14.93MB&#…

2026/10/20 23:29:04 阅读更多 →
AI时代程序员转型指南:从会写代码到驾驭AI做工程决策

AI时代程序员转型指南:从会写代码到驾驭AI做工程决策

1. 别被标题吓到:AI首先替代的是不会用AI的程序员,而不是所有程序员1.1 从“裁员焦虑”到“招聘变化”:我看到的真实信号大模型时代喊了两年多,身边不少写代码的朋友都在问:AI到底会不会抢我饭碗?包括我自己…

2026/10/20 23:29:04 阅读更多 →
Agent工程栈五层拆解:任务编排、工具调用、记忆管理、可观测性与多Agent协作

Agent工程栈五层拆解:任务编排、工具调用、记忆管理、可观测性与多Agent协作

1. 从五条动态里拆出来的工程信号10 月 7 日那天,我关注的几个技术社区里集中冒出来五条动态,主题各不相同,但放在一起看,指向的是同一件事:Agent 这套东西,正在从"演示能跑"往"工程能交付&…

2026/10/20 23:28:02 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →