当前位置: 首页 > news >正文

✅ 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 撤销事务并释放锁

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

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


http://www.dtcms.com/a/136036.html

相关文章:

  • Lua 第6部分 函数
  • 金融的未来
  • Hyperlane 是一款专为 Rust 构建的高性能 HTTP 服务框架
  • GitLab本地安装指南
  • Web Worker在uniapp鸿蒙APP中的深度应用
  • 【区块链通用服务平台及组件】全国产金融级区块链一体机 | FISCO BCOS 应用案例
  • React 18/19 使用Ant Design全局弹窗message
  • 【python】django sqlite版本过低怎么办
  • RTDETR融合[CVPR2025]BHViT中的token_mixer模块
  • 从 PyTorch 到 ONNX:深度学习模型导出全解析
  • Mamba 原理汇总
  • 【虚幻C++笔记】接口
  • MySQL联表查询底层原理
  • http/https请求解析
  • Pikachu靶场——Cross-Site Scripting
  • 需求分析---软件架构师武器库中的天眼系统
  • 记录小程序第一次调用Api,基于腾讯云Serverless函数,实现小程序的成功接入api,以及数据调用
  • 实验四 中断实验
  • 【Linux】第七章 控制对文件的访问
  • 实现类似 “更新中” 的水平进度条按钮效果
  • 高级java每日一道面试题-2025年4月10日-微服务篇[Nacos篇]-Nacos的服务健康检查机制是如何工作的?
  • 下载maven低版本(官网)
  • 网站301搬家后谷歌一直不收录新页面怎么办?
  • maven如何解决jar包依赖冲突
  • Maven 多仓库和多镜像配置
  • 红宝书第四十七讲:Node.js服务器框架解析:Express vs Koa 完全指南
  • 408 计算机网络 知识点记忆(9)
  • 【今日三题】添加字符(暴力枚举) / 数组变换(位运算) / 装箱问题(01背包)
  • 阿里云短信服务与ASP.NET对接实例
  • 21、c#中“?”的用途