✅ MySQL 事务 & MVCC & ROLLBACK


🧠 一、MVCC 与可重复读(REPEATABLE READ)

项目 内容
MVCC 概念 多版本并发控制,事务中读到的是开启事务时的数据快照
实现机制 依赖 Read View + trx_id + Undo Log 实现版本判断
快照读 普通 SELECT,使用 MVCC,不加锁,读取历史版本
当前读 SELECT ... FOR UPDATE / UPDATE,不使用快照,读取当前版本并加锁
默认隔离级别 MySQL InnoDB 默认 REPEATABLE READ,快照在事务首次读时固定
插入型幻读 快照读无法解决,InnoDB 通过"间隙锁(Gap Lock)"解决

🔬 二、实验验证行为(你亲自操作的)

场景描述 验证结果
快照读能否看到别的事务提交的新记录 ❌ 不能,看到的是旧版本
当前读是否能看到别的事务刚提交的记录 ✅ 能看到,当前读不走 MVCC
当前读是否加锁 ✅ 加排他锁,阻塞并发写操作
锁是否在事务中立即释放 ❌ 不会,直到 COMMIT / ROLLBACK 才释放
如何查看锁持有状态 ✅ 用 SHOW ENGINE INNODB STATUS + innodb_trx 查看
performance_schema 能否替代老锁表 ✅ 推荐使用 data_locks 和 data_lock_waits

🔄 三、ROLLBACK 撤销事务

内容点 说明与示例简述
作用 撤销事务内的所有操作,恢复到事务开始前的状态
常见用法 校验失败、异常中断、业务取消、死锁回滚
搭配 SAVEPOINT 实现"部分回滚"逻辑控制
行锁释放 ROLLBACK 会自动释放当前读加的锁
对 DDL 无效 如 ALTER TABLE 会隐式提交,不能被 ROLLBACK 撤销
自动提交下无效 autocommit = 1 时每条语句立即提交,ROLLBACK 无效
底层机制依赖 依赖 Undo Log 回滚数据,不会写 binlog,Redo 不落盘

🔍 四、事务状态排查方法

工具/命令 说明
SHOW ENGINE INNODB STATUS\G 查看当前事务、锁、死锁、读视图等 InnoDB 信息
information_schema.innodb_trx 查看活动事务、事务ID、锁、回滚等
performance_schema.data_locks 替代 innodb_locks,查看当前所有锁持有情况
performance_schema.data_lock_waits 查看事务之间的锁等待关系

📚 五、实操项目(高价值)

  • ✅ 快照读实验(多次 SELECT 结果一致)

  • ✅ 当前读实验(FOR UPDATE 加锁)

  • ✅ 插入新记录事务可见性测试

  • ✅ 锁状态监控与观察

  • ✅ ROLLBACK 撤销事务并释放锁

  • ✅ 配合事务工具查看锁结构

  • ✅ 手动设置事务隔离级别,排查幻读来源


相关推荐
网硕互联的小客服1 小时前
MYSQL数据库和MSSQL数据库有什么区别?分别适用于什么脚本程序?
数据库·mysql·sqlserver
weixin_462446231 小时前
【原创实践】python 获取节假日列表 并保存为excel
数据库·python·excel
计算机毕设匠心工作室2 小时前
【python大数据毕设实战】全球大学排名数据可视化分析系统、Hadoop、计算机毕业设计、包括数据爬取、数据分析、数据可视化、机器学习、实战教学
后端·python·mysql
千寻技术帮2 小时前
10413_基于Springboot的智慧养老院管理系统
spring boot·mysql·源码·安装·文档·ppt·养老院
RPA 机器人就找八爪鱼2 小时前
RPA 赋能银行数字化转型:四大核心应用场景深度解析
数据库·人工智能·rpa
掂掂三生有幸2 小时前
使用openGauss搭建一个监狱管理系统
数据库
VX:Fegn08952 小时前
计算机毕业设计|基于Java人力资源管理系统(源码+数据库+文档)
java·开发语言·数据库·vue.js·spring boot·后端·课程设计
siriuuus2 小时前
Redis 安装、多实例部署、主从复制及 Cluster 实践
数据库·redis·centos
Polaris_GQ2 小时前
Navicat连接Oracle数据库报错:12514问题
数据库
老华带你飞3 小时前
健身房|基于springboot + vue健身房管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端