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生成一条记录版本链表,链表的头部是最新的旧记录,链表尾部是最早的旧记录。

相关推荐
上位机妹子43 分钟前
EF Core 两种继承映射:每层次一张表(TPH)与每类型一张表(TPT)
数据库·c#·.netcore·ef core
小马同学-1 小时前
Redis消息队列与客户端编程
数据库·redis
for_ever_love__1 小时前
MySQL 高频面试题 30 问:索引、事务、锁、日志、主从与分库分表(MySQL 8.0 版)
java·数据库·spring boot·mysql·spring cloud·面试·总结
染指11101 小时前
140.Agent-多Agent框架-Agent执行Skills流程
数据库·人工智能·设计模式·langchain·agents
fengkai45451 小时前
十二、Redis -2
运维·数据库·redis·容器
余槐i2 小时前
200万行表加索引锁死写入:PostgreSQL CONCURRENTLY 的三类等待与重建路径
数据库·postgresql·性能优化·索引·explain
北龙云海2 小时前
AI驱动数据库运维变革:北龙云海智能巡检平台实践与展望
运维·数据库·人工智能
带金箍的至尊宝3 小时前
系统架构设计师笔记 05:第2章硬件与软件基础,冯诺依曼结构怎么考
数据库·笔记·系统架构