mysql中的事务是什么_mysql事务基础原理讲解

发布时间 - 2025-12-26 00:00:00    点击率:
MySQL事务是由InnoDB引擎实现的ACID特性保障机制,解决如银行转账中数据不一致问题:原子性靠Undo Log,隔离性靠锁+MVCC,持久性靠Redo Log,一致性由多机制协同达成。

MySQL 中的事务,就是一组数据库操作的“打包执行单元”——它要么全部成功,要么全部不执行,中间不能卡在半道上。这不是 MySQL 自己加的功能,而是由底层存储引擎(主要是 InnoDB)实现的机制,MyISAM 这类引擎就不支持事务。

事务解决什么实际问题?

最典型的例子是银行转账:

  • 你账户减 100 元
  • 对方账户加 100 元
  • 网络断了、程序崩了、服务器宕机……只要其中一步失败,整个操作就得撤销

没有事务的话,可能出现“你扣了钱,对方没到账”的严重数据错乱。事务正是用来兜底的——靠的是 ACID 四大特性保障。

ACID 是怎么落地的?

每条特性背后都有具体的机制支撑,不是空口号:

  • 原子性:靠 Undo Log 实现。事务开始前,把原始数据记下来;一旦要回滚,就用这些快照恢复回去
  • 一致性:不是事务单独负责,而是靠原子性 + 隔离性 + 约束检查(如主键、外键、CHECK)共同达成的结果状态
  • 隔离性:靠 锁 + MVCC(多版本并发控制) 实现。比如可重复读级别下,事务启动时会拍一个“数据快照”,后续读都基于这个快照,不受其他事务干扰
  • 持久性:靠 Redo Log 实现。事务提交前,先把修改写进磁盘上的重做日志;即使断电,重启后也能按日志把已提交的操作补上

事务是怎么运行起来的?

InnoDB 使用 WAL(Write-Ahead Logging,预写式日志)机制:

  • 所有变更先写 Redo Log(确保能持久),再更新内存中的数据页(Buffer Pool)
  • Undo Log 同步生成,为回滚和 MVCC 提供历史版本
  • 事务 ID 在第一次增删改时才分配,只读事务默认不分配
  • 提交(COMMIT)触发 Redo Log 刷盘;回滚(ROLLBACK)则用 Undo Log 撤销未提交的修改

几个关键注意点

  • 事务必须搭配支持事务的引擎(如 InnoDB),建表时不指定引擎或用了 MyISAM,BEGINCOMMIT 就形同虚设
  • 自动提交(autocommit=1)默认开启,单条 SQL 会自动成事务;想手动控制,得先 SET autocommit = 0 或显式用 BEGIN
  • 长事务会持续占用 Undo Log 空间,还可能拖慢 purge 线程,影响性能和空间回收
  • 隔离级别影响并发行为:MySQL 默认是 可重复读(Repeatable Read),不是读已提交(Read Committed)


# mysql  # red  # sql  # Logging  # 线程  # 并发  # 数据库  # 是由  # 是怎么  # 的是  # 几个  # 都有  # 半道  # 就不  # 也能  # 形同虚设  # 用了 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 5种Android数据存储方式汇总  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  重庆市网站制作公司,重庆招聘网站哪个好?  如何正确选择百度移动适配建站域名?  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  如何实现建站之星域名转发设置?  Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程  Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】  Laravel中间件如何使用_Laravel自定义中间件实现权限控制  Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件  为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】  浅析上传头像示例及其注意事项  网站制作免费,什么网站能看正片电影?  Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】  EditPlus中的正则表达式实战(5)  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  Laravel如何处理文件下载请求?(Response示例)  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  桂林网站制作公司有哪些,桂林马拉松怎么报名?  详解Android图表 MPAndroidChart折线图  Laravel Blade模板引擎语法_Laravel Blade布局继承用法  宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程  使用C语言编写圣诞表白程序  laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法  如何在自有机房高效搭建专业网站?  如何用IIS7快速搭建并优化网站站点?  Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】  Laravel如何配置和使用缓存?(Redis代码示例)  Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南  Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】  Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践  中山网站制作网页,中山新生登记系统登记流程?  如何选择PHP开源工具快速搭建网站?  实例解析angularjs的filter过滤器  如何快速登录WAP自助建站平台?  Python正则表达式进阶教程_复杂匹配与分组替换解析  香港服务器部署网站为何提示未备案?  php打包exe后无法访问网络共享_共享权限设置方法【教程】  详解jQuery中的事件  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】  Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】  Laravel如何为API编写文档_Laravel API文档生成与维护方法  如何用PHP快速搭建CMS系统?  如何在腾讯云服务器上快速搭建个人网站?  如何快速生成ASP一键建站模板并优化安全性?  Laravel如何实现本地化和多语言支持?(i18n教程)  Laravel怎么连接多个数据库_Laravel多数据库连接配置  Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】  javascript中闭包概念与用法深入理解