Plantre Plantre
首页
后端
技术
硬件
  • 前端文章

    • HTML
    • CSS
    • JavaScript
  • 技术

    • 技术文档
    • GitHub技巧
    • Nodejs
    • 博客搭建
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

plantre

一个后端开发者
首页
后端
技术
硬件
  • 前端文章

    • HTML
    • CSS
    • JavaScript
  • 技术

    • 技术文档
    • GitHub技巧
    • Nodejs
    • 博客搭建
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 计算机组成原理

  • 操作系统

  • 计算机网络

  • 设计模式

  • Java

  • Spring

  • SpringCloud

  • MySQL

    • MySQL的权限控制
    • 精细权限管制示例
    • localhost和127.0.0.1的区别-MySQL
    • mysql数据类型
    • 当前读和快照读
    • MySQL中MVCC的实现原理
    • MySQL中MVCC具体用了多少个隐藏字段
    • 锁和事务的关系
    • FOR UPDATE锁类型
  • Redis

  • 分布式

  • Zookeeper

  • Dubbo

  • Kafka

  • 数据结构

  • 算法

  • OJ

  • 从道家哲学看计算机?
  • 后端
  • MySQL
plantre
2025-05-06

MySQL中MVCC具体用了多少个隐藏字段

在MySQL InnoDB引擎中,MVCC的实现依赖3个系统隐式字段,其中包含一个可选字段。以下是具体说明:


一、核心隐藏字段

  1. DB_TRX_ID(6字节)

    • 作用:记录最后一次修改(插入、更新或删除)该行的事务ID。

    • 可见性判断:通过对比事务ID与Read View中的m_ids、min_trx_id等参数,确定数据版本是否对当前事务可见。

  2. DB_ROLL_PTR(7字节)

    • 作用:回滚指针,指向Undo Log中该行数据的历史版本,形成多版本链。

    • 版本回溯:通过该指针遍历Undo Log中的旧版本,找到满足事务可见性条件的版本。

  3. DB_ROW_ID(6字节,可选)

    • 触发条件:当表未显式定义主键且无唯一索引时,InnoDB自动生成此字段作为隐藏主键。

    • 用途:用于构建聚簇索引,但不直接参与MVCC的可见性判断。


二、删除标记(逻辑删除机制)

• 实现方式:

• InnoDB不单独使用flag字段,而是通过事务ID和Undo Log标记数据失效。

• 例如,删除操作会更新DB_TRX_ID为当前事务ID,并将旧数据写入Undo Log,通过DB_ROLL_PTR形成版本链。

• 清理机制:

• 后台purge线程根据事务提交状态清理失效版本,而非物理删除数据。


三、与其他数据库的对比

• PostgreSQL:通过xmin(插入事务ID)和xmax(删除/更新事务ID)管理版本生命周期,未采用隐藏flag字段。

• MySQL逻辑删除与PostgreSQL的差异:

• MySQL通过事务ID隐式标记删除状态,PostgreSQL直接使用xmax字段记录失效事务ID。


四、总结

• 标准隐藏字段:DB_TRX_ID、DB_ROLL_PTR、DB_ROW_ID(仅无主键时存在)。

• 删除标记:通过事务ID和Undo Log实现逻辑删除,无需单独flag字段。

通过上述机制,MySQL InnoDB在保证事务隔离性的同时,实现了非阻塞读写的高并发性能。

编辑 (opens new window)
上次更新: 2025/06/13, 00:51:28
MySQL中MVCC的实现原理
锁和事务的关系

← MySQL中MVCC的实现原理 锁和事务的关系→

最近更新
01
集成loki
07-04
02
TCP的ESTABLISHED是什么意思
06-24
03
安装1panel
06-24
更多文章>
Theme by Vdoing | Copyright © 2025-2025 plantre | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式