跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
SQLjava

MySQL 事务核心概念与四大特性详解

MySQL 事务确保数据操作的原子性与一致性,遵循 ACID 原则。原子性保证操作全成或全败;一致性维护数据约束;持久性确保提交后更改永久保存;隔离性处理并发干扰。常见并发问题包括脏读、不可重复读和幻读,通过调整隔离级别(如读已提交、可重复读等)可在性能与数据准确性间取得平衡。

DotNetGuy发布于 2026/3/29更新于 2026/10/2484 浏览
MySQL 事务核心概念与四大特性详解

事务是什么?

事务(Transaction)本质上是一组操作的集合,它们要么全部成功执行,要么全部回滚。引入事务的核心目的,是为了保证数据库在并发访问时的一致性、完整性和可靠性。

举个常见的转账场景:A 用户给 B 用户转账 100 元。这涉及两个步骤:A 账户扣款 100,B 账户入账 100。如果第一步完成后,系统因网络波动或宕机导致第二步失败,A 的钱凭空消失,这是绝对不允许的。因此,MySQL 会将这两个操作打包成一个原子单元,要么一起完成,要么都不做。若中途异常,系统会通过日志进行回滚,撤销所有已执行的操作。

在 MySQL 中,事务由多个 SQL 语句组成一个操作单元。提交(commit)意味着所有更改永久生效;回滚(rollback)则意味着恢复到事务开始前的状态。

事务的四大特性

事务遵循 ACID 原则,即原子性、一致性、持久性和隔离性。

原子性(Atomicity)

原子性确保事务是最小的执行单位,不可再分。事务中的操作要么全部成功,要么全部失败。即使执行过程中发生故障,数据库也会通过回滚机制将状态恢复到事务开始前。

一致性(Consistency)

一致性要求事务执行前后,数据库的状态必须从一个一致状态转变到另一个一致状态。这意味着所有数据必须符合完整性约束(如主键、外键)。一旦触发回滚,数据也必须恢复到原来的正确状态,不能出现对不上的情况。

持久性(Durability)

一旦事务提交,它对数据库的更改就是永久性的。即使随后发生系统崩溃或断电,已提交的更改也会保留下来,不会丢失。

隔离性(Isolation)

在并发环境下,多个客户端同时发起事务请求,一个事务的执行不应受到其他事务的干扰。每个事务应像是在独占数据库一样执行,直到它提交或回滚。

并发可能引发的问题

当隔离性不足时,可能会出现以下三类问题:

1. 脏读(Dirty Read)

指一个事务读取了另一个事务尚未提交的数据。如果那个事务最终回滚,当前事务读取到的数据就无效了。

例子: 好比小明抄小强的试卷。小强写完还没检查(未提交),小明就抄走了答案并提交(提交)。结果小强发现错了并修改了答案(回滚),小明拿到的就是错误信息。

解决思路: 当事务 B 查看事务 A 的数据时,需要对 A 的数据加锁,等待 A 确定后再读取。这会降低并发能力,但提高了准确性。

2. 不可重复读(Non-repeatable Read)

指同一个事务内,多次读取同一数据时,由于其他事务提交了修改,导致读取结果不一致。

例子: 读者(事务 B)正在阅读博客内容(事务 A 已发布)。此时作者(事务 C)又修改并发布了一篇新内容。读者刷新页面时发现数据变了,这就是不可重复读。

解决思路: 在读操作期间禁止写操作,对读数据也加上锁,保证前后两次读取一致。

3. 幻读(Phantom Read)

指一个事务查询数据时,其他事务插入了新记录或删除了旧记录,导致该事务查询的结果集发生变化,仿佛出现了'幻影'。

例子: 事务 A 发布第一篇博客。事务 B 查询博客列表。此时事务 C 发布了第二篇博客。事务 B 再次查询时,发现多了一篇博客。

解决思路: 实现串行化操作,暂停其他事务的执行。虽然效率最低,但能最大程度保证数据准确。

隔离级别对比

MySQL 提供了四种隔离级别,用于平衡性能与数据一致性:

隔离级别脏读不可重复读幻读适用场景
读未提交 (Read Uncommitted)是是是高并发、无需完全一致性的场景
读已提交 (Read Committed)否是是实时性要求较高的场景
可重复读 (Repeatable Read)否否是大部分应用,MySQL 默认级别
串行化 (Serializable)否否否保证最大一致性,性能最低
总结

脏读、不可重复读和幻读都是并发干扰导致的。选择合适的隔离级别是关键:

  • 读未提交:并发最高,但数据风险大。
  • 读已提交:防止脏读,适合实时性要求高的场景。
  • 可重复读:防止脏读和不可重复读,兼顾性能与稳定,是默认推荐。
  • 串行化:完全避免并发问题,但性能损耗严重。

目录

  1. 事务是什么?
  2. 事务的四大特性
  3. 原子性(Atomicity)
  4. 一致性(Consistency)
  5. 持久性(Durability)
  6. 隔离性(Isolation)
  7. 并发可能引发的问题
  8. 隔离级别对比
  9. 总结

更多推荐文章

查看全部
  • 两款免费开源音乐播放器
  • 基于 SpringBoot 的家具商城管理系统设计与实现
  • LangGraph 工具调用实战:构建 ReAct 搜索机器人
  • AI 写作实战:自动写作助手的架构设计与代码实现
  • OpenClaw WebUI 空白页及 Not Found 问题排查与修复
  • StarUML 6.3.3 环境配置与 C++ 扩展搭建教程(Windows 11)
  • 零基础如何开始学习网络安全
  • 本地部署 Llama3:使用 Ollama 与 AnythingLLM 快速搭建私有化 AI 助手
  • AI 大模型核心知识点梳理
  • Spring Cloud Gateway 统一服务入口实战指南
  • 深入理解 C++ 中的 std::toupper():字符大写转换的用法与陷阱
  • 从零搭建 AI 系统权限控制系统
  • 前端监控:错误、性能与用户行为追踪
  • Milvus 实战:Attu 可视化安装与 Python 整合
  • 开源能源管理系统:开放代码如何重构产业底层逻辑
  • 预训练语言模型与BERT实战应用
  • VS Code 远程连接服务器后 GitHub Copilot 失效排查指南
  • 人工智能(AI)简介
  • 学生与教育工作者免费获取 GitHub Copilot 权限指南
  • LFM2.5-1.2B-Thinking-GGUF 模型:GGUF 格式与 llama.cpp 机制详解

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • SQL 美化和格式化

    在线格式化和美化您的 SQL 查询(它支持各种 SQL 方言)。 在线工具,SQL 美化和格式化在线工具,online

  • SQL转CSV/JSON/XML

    解析 INSERT 等受限 SQL,导出为 CSV、JSON、XML、YAML、HTML 表格(见页内语法说明)。 在线工具,SQL转CSV/JSON/XML在线工具,online