MySQL高级-MVCC-undo log &版本链

文章目录

1、undo log

  • 回滚日志,在insert、update、delete的时候产生的便于数据回滚的日志。
  • insert 的时候,产生的undo log日志只在回滚时需要,在事务提交后,可被立即删除。
  • update、delete 的时候,产生的undo log日志不仅在回滚时需要,在快照读时也需要,不会立即被删除。

2、undo log 版本链

  • DB_TRX_ID:代表最近修改事务ID,记录插入这条记录或最后一次修改该记录的事务ID,是自增的。
  • DB_ROLL_PTR:由于这条数据是才插入的,没有被更新过,所以该字段值为null。

2.1、然后,有四个并发事务同时在访问这张表。

2.1.1、修改id为30记录,age改为3

事务2执行第一条修改语句时,会记录undo log日志,记录数据变更之前的样子; 然后更新记录,并且记录本次操作的事务ID,回滚指针,回滚指针用来指定如果发生回滚,回滚到哪一个版本。

2.1.2、修改id为30记录,name改为A3

事务3执行第一条修改语句时,也会记录undo log日志,记录数据变更之前的样子; 然后更新记录,并且记录本次操作的事务ID,回滚指针,回滚指针用来指定如果发生回滚,回滚到哪一个版本。

2.1.3、修改id为30记录,age改为10

事务4执行第一条修改语句时,也会记录undo log日志,记录数据变更之前的样子; 然后更新记录,并且记录本次操作的事务ID,回滚指针,回滚指针用来指定如果发生回滚,回滚到哪一个版本。

2.2、总结

最终我们发现,不同事务相同事务同一条记录进行修改,会导致该记录的undolog生成一条记录版本链表,链表的部是最新的旧记录,链表部是最早的旧记录。

相关推荐
GDAL20 分钟前
Node.js v22.5+ 官方 SQLite 模块全解析:从入门到实战
数据库·sqlite·node.js
DCTANT1 小时前
【原创】国产化适配-全量迁移MySQL数据到OpenGauss数据库
java·数据库·spring boot·mysql·opengauss
程序员岳焱3 小时前
Java 与 MySQL 性能优化:MySQL全文检索查询优化实践
后端·mysql·性能优化
喜欢敲代码的程序员3 小时前
SpringBoot+Mybatis+MySQL+Vue+ElementUI前后端分离版:项目搭建(一)
spring boot·mysql·elementui·vue·mybatis
AI、少年郎3 小时前
Oracle 进阶语法实战:从多维分析到数据清洗的深度应用(第四课)
数据库·oracle
赤橙红的黄4 小时前
自定义线程池-实现任务0丢失的处理策略
数据库·spring
钢铁男儿4 小时前
C# 委托(调用带引用参数的委托)
java·mysql·c#
叁沐4 小时前
MySQL 02 日志系统:一条SQL更新语句是如何执行的?
mysql
DataGear4 小时前
如何在DataGear 5.4.1 中快速制作SQL服务端分页的数据表格看板
javascript·数据库·sql·信息可视化·数据分析·echarts·数据可视化
weixin_438335404 小时前
分布式锁实现方式:基于Redis的分布式锁实现(Spring Boot + Redis)
数据库·redis·分布式