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.rhkb.cn/news/404274.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker 部署loki日志 用于微服务

因为每次去查看日志都去登录服务器去查询相关日志文件,还有不同的微服务,不同日期的文件夹,超级麻烦,因为之前用过ELK,原本打算用ELK,在做技术调研的时候发现了一个轻量级的日志系统Loki,果断采…

如何一键删除iPhone相册所有照片

拍照已成为我们记录日常生活的常态。但是,大量照片便会积累在设备上,这不仅占用了大量存储空间,而且随着时间的推移,管理这些照片也变得越来越困难。如果你决定清理旧照片,或者出于隐私考虑需要删除所有照片&#xff0…

【数据结构】链式结构实现:二叉树

二叉树 一.快速创建一颗二叉树二.二叉树的遍历1.前序、中序、后序遍历(深度优先遍历DFS)2.层序遍历(广度优先遍历BFS) 三.二叉树节点的个数四.二叉树叶子节点的个数五.二叉树的高度六.二叉树第k层节点个数七.二叉树查找值为x的节点…

什么是机器人快换盘?

机器人快换盘,行业内也称作工具快换盘、换枪盘、快换工具盘、快速更换器、快换器、 快换夹具、治具快换等。是末端执行器快速更换装置(End-Of-Arm Tooling,简称EOAT),是工业自动化领域中用于机器人手臂上的一种重要设备…

MiniCPM-V: A GPT-4V Level MLLM on Your Phone论文阅读

大模型的趋势:模型性能越来越好,模型参数变小,端边设备计算能力变强。 MiniCPM-V优点 结果好、OCR能力突出、多分辨率、多语言、易于部署 模型结构 图片encoder适用vit。输入整体以及切片。切片使用自适应算法,通过计算分数&am…

人机环境系统智能已经超越了传统的空间智能和物理世界的概念

人机环境系统智能已经超越了传统的空间智能和物理世界的概念,进入了更为复杂的层次。在人机环境系统中,智能不仅涉及对物理世界的感知和理解,还包括对人类语言、情感、意图等的理解和生成。人工智能技术的应用,如自然语言处理、机…

C++静态数组的用法

每日诗词: 疏影横斜水清浅,暗香浮动月黄昏。 ——《山园小梅其一》林逋 目录 数组的基础操作: 数组元素的增加: 演示: 数组元素的删除: 演示: 数组元素的访问和修改: 演示&am…

WLAN射频调优

射频调优的基本原则 信道优化的基本原则 2.4G射频在非高密部署场景中推荐采用1、6、11这种3个不重叠的信道进行规划,同理也可以选用2、7、12或3、8、13的组合方式;在高密部署场景中则推荐采用1、5、9、13共4个信道组合进行规划。5G射频推荐采用36、40、…

HQChart使用教程101-创建内置键盘精灵

HQChart使用教程101-创建内置键盘精灵 键盘精灵步骤1. 创建键盘精灵实例2. 设置事件回调3. 初始化键盘精灵4. 设置码表数据5. 监听"keydown","mousedown" 交流QQ群HQChart代码地址键盘精灵源码 完整实例 键盘精灵 键盘精灵是一种便捷操作软件的功能工具&a…

【人工智能】Python融合机器学习、深度学习和微服务的创新之路

1. 🚀 引言1.1 🚀 人工智能的现状与发展趋势1.2 📜 机器学习、深度学习和神经网络的基本概念1.3 🏆 微服务架构在人工智能中的作用 2. 🔍 机器学习的演变与创新2.1 🌟 机器学习的历史回顾2.2 🧠…

UE----IPA 安装 在手机上后 显示 不受信任的开发者

进入设置 ----》 点击 通用 ----》点击 VPN与设备管理 点击信任 然后 再打开开发者模式即可 在隐私与安全性里 下滑 最底部 即可看到开发者模式

JavaScript学习笔记(十二):JS Web API

1、Web API - 简介 Web API 是开发人员的梦想。 它可以扩展浏览器的功能它可以极大简化复杂的功能它可以为复杂的代码提供简单的语法 1.1 什么是 Web API? API 指的是应用程序编程接口(Application Programming Interface)。 Web API 是 …

机器学习第十四章-概率图模型

目录 14.1 隐马尔可夫模型 14.2马尔科夫随机场 14.3条件随机场 14.4学习与推断 14.4.1变量消去 14.4.2信念传播 14.5近似推断 14.5.1 MCMC采样 14.5.2 变分推断 14.6 话题模型 14.1 隐马尔可夫模型 概率围棋型是一类用图来表达变量相关关系的概率模型.它以图为表示工具…

Python入门级[ 基础语法 函数... ] 笔记 例题较多

本文是刚学习Python的笔记,当时使用的编辑器是交互式编程,所以很多代码可能在你们的编译器上面不能运行,我用快引用引起来了,还需要大家自己动手试一试。 内容涉及的比较简单,主要还是Python的语法部分:三…

短链接系统设计方案

背景 需要设计一个短链接系统,主要功能主要有如下几点: ToB: 输入一个长链接,转换成短链接。这个短链接有时效性,可以设定指定过期时间。这个系统的每天会生成千万级别的短链接。数据具备可分析功能。 ToC&#xf…

借助Vercel 十分钟搭建属于自己的AI应用站点

轻松依托 Vercel,快速构建 Nexior AI 平台 Nexior 是一个令人惊叹的开源项目,托管于 GitHub。通过它,您能够一键便捷地部署专属的 AI 应用站点,包括 AI 问答、Midjourney 绘画、知识库问答、艺术二维码等,完全不需要自己去开发 A…

springBoot+ druid配置多数据源

springBoot druid配置多数据源 1.在yml加: spring:#1.JDBC数据源datasource:druid:first:username: PYpassword: ral2024url: jdbc:mysql://localhost:3306/mysql?serverTimezoneUTC&characterEncodingutf8&useUnicodetrue&useSSLfalsedriver-class-n…

前端进行分页Vue3+Setup写法

当后端不方便提供数据分页查询接口时&#xff0c;就需要前端来自己分割进行分页操作 在有可能的情况下还是建议用分页查询接口&#xff0c;减少网络数据传输 首先el-table绑定数组 分页组件&#xff0c;变量自己定义防止报错 <el-paginationlayout"->, total, siz…

HTML中的<fieldset>标签元素框的使用

HTML 提供的 <fieldset> 标签用于在表单中分组相关元素。 <fieldset> 标签会在相关元素周围绘制一个框。 <legend> 标签为 fieldset 元素定义标题。 语法如下&#xff1a; <fieldset><legend>标题</legend><!-- 元素内容... -->…

qt-17不规则窗体

不规则窗体 知识点shape.hshape.cppmain.cpp运行图 知识点 感觉这个就是在图片背景 贴了白色 shape.h #ifndef SHAPE_H #define SHAPE_H#include <QWidget>class Shape : public QWidget {Q_OBJECTpublic:Shape(QWidget *parent nullptr);~Shape(); protected:void m…