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

51 无显式主键时 mysql 增加的 DB_ROW_ID

前言

这里主要是 探讨, 在我们创建了一个 无主键的数据表, 然后 mysql 会为我们增加的这一个 DB_ROW_ID 的相关 

新建一个无主键字段的数据表如下 

CREATE TABLE `implicit_id_table` (`username` varchar(16) DEFAULT NULL,`age` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8

 

 

执行新增处理

执行 sql 如下 “insert into implicit_id_table values ('lucy', 222);”

然后 我们来看一下 这个新增处理的上下文

虽然 我们只有两个字段, username 和 age 

以及数据库本身业务需要 trxId 和 rollPtr

数据库本身还为我们增加了一个 聚簇索引, 这里字段名称为 DB_ROW_ID, 长度为 6

5830e40c74b380f9e3ef0c68a73710e7.png

 

查询 DB_ROW_ID 的这一个字段的信息

可以看到 mtype 为 8, 表示的是 DATA_SYS 为 mysql 生成的 系统字段, 数据类型定义在 data0type.h 中 

13888e0762daa1e748fb509b856c18d6.png

 

本次插入的记录信息, 拆解如下, username 为 lucy, age 为 222

c397cb6bba78bb8ebd75c222249850b8.png

 

 

DB_ROW_ID 字段的处理

row_id 的处理是通过 dict_sys_get_new_row_id 函数来获取的 

然后拷贝到了 node->row_id_buf, 等价于 node->row->fields[DB_ROW_ID]->data

所以 后面 插入记录的时候, 拷贝记录的时候 能够从 node->row->fields[DB_ROW_ID] 中获取数据 

c2980d61fc14361cd65c4addb15c115d.png

 

为 DB_ROW_ID, DB_TRX_ID, DB_POLL_PTR 分配存储空间的地方

bc6a285afdbe38bd19daf4b4b7edb768.png

DB_ROW_ID 的计算方式, 是从 dict_sys->row_id 中获取的, 并自增 

这个 dict_sys 是全局的, 假设现在 dict_sys->row_id 为 555

假设有 implicit_id_table_02, 然后增加了 两条记录, 之后再向 implicit_id_table 中增加记录, 得到的 DB_ROW_ID 为 558

66a87c816ae148d3fd0aa7cd83abd89c.png

 

 

DB_TRX_ID 字段的处理

同理 事务id 字段的处理如下, 通过 node->trx_id_buf 来进行查询 

这个处理是在 DB_ROW_ID 处理之前, 填充了 trxId 字段的数据值 

8ff0b8ee813a70a723751437959f3b9a.png

 

 

如何创建的 DB_ROW_ID 字段 ?

创建表的时候, 创建了该 三个系统字段, DB_ROW_ID, DB_TRX_ID, DB_ROLL_PTR

3ac7566752a29fb65a3c6e62aef8e004.png

 

如果是 普通的存在主键字段的数据表, 在这里 DB_ROW_ID 的处理的地方是 直接 return 了

因为 DB_ROW_ID 是某主键字段, 或者某唯一索引字段, 业务侧有传递, 或者 有自增长配置

b4cf0aeea3dd3d94c9ca249c9951fcce.png

 

 

 

 

 


http://www.mrgr.cn/news/5225.html

相关文章:

  • 分形比特币(Fractal Bitcoin)
  • CentsOS 7 “Could not resolve host: mirrorlist.centos.org; 未知的错误”问题解决
  • day32(学习playbook-roles+脚本创建数据库和表+mycat读写分离))
  • 【论文阅读】A Closer Look at Parameter-Efficient Tuning in Diffusion Models
  • ant design pro 中用户的表单如何控制多个角色
  • ~构造类型~
  • Pytorch添加自定义算子之(12)-开闭原则设计tensorrt和onnxruntime推理语义分割模型
  • 74. 搜索二维矩阵
  • 【Spring Boot进阶】掌握Spring Boot框架核心注解:从入门到精通(实战指南)
  • 网络硬盘录像机NVR程序源码NVR全套运用方案
  • 如何有效应对突发技术故障:以网易云音乐为例
  • 利用GPT撰写游戏剧情:从灵感到成品的详细指南
  • 第二十七节、人物可互动标识
  • mysql InnoDB引擎各种隔离级别的加锁机制
  • 【mysql】大规模企业常用的MySQL性能优化方案分享
  • 三次握手和四次挥手
  • 实验2-1-3 输出三角形
  • Python正则表达式提取车牌号
  • XSS-跨站脚本攻击
  • 力扣(K件物品的最大和)