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,
BEGIN和COMMIT就形同虚设 - 自动提交(
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中闭包概念与用法深入理解
上一篇:Js自定义多选框效果的实例代码
上一篇:Js自定义多选框效果的实例代码


原始数据记下来;一旦要回滚,就用这些快照恢复回去