Mysql数据究竟是如何存储的
Mysql行列式
开篇
笔者这几日在学习mysql是这么运行的这本书,感觉书中的内容受益匪浅,想整理成自己的话分享给大家,平时大家工作和生活中可能没有时间去专心投入读取一本书,而mysql是这么运行的这本书需要投入大量的时间的学习,靠碎片化的时间是无法读懂书中的内容的,这本书每一章节的耦合度很高,有兴趣的同学可以去支持一下小孩子老师。下面我会用通俗易懂的白话方式讲述这本书的内容。
Mysql是这么存储数据的?
准备工作
Mysql服务器存储数据其实是交给存储引擎的,而MySQL的存储引擎的又有很多种,例如InnoDB、MyISAM、Memory等等很多种,下面我将以InnoDB存储引擎介绍一下InnoDB存储引擎是如何存储数据的。
InnoDB如何存储数据的
InnoDB是根据数据页(16kb)存储数据的,InnoDB存储引擎会在以数据页的当时将数据在内存种处理,然后在刷入磁盘。那数据页究竟长什么样子。欧克我们下面看一下数据页哪些组成的
| 名称 | 中文名 | 占用空间大小 | 描述 |
|---|---|---|---|
| FileHeader | 文件头部 | 38字节 | 页的一些通用信息 |
| PageHeader | 页面头部 | 56字节 | 数据页占有的一些信息 |
| Infimun+supremun | 最小记录和最大记录 | 26字节 | 两个虚拟的行记录 |
| UserRecordes | 用户记录 | 不确定 | 实际存储的行记录内容 |
| FreeSpace | 空闲空间 | 不确定 | 页中尚未使用的空间 |
| PageDirecttory | 页面目录 | 不确定 | 页中的某些记录的相对位置 |
| FileTailer | 文件尾部 | 8字节 | 检验页是否完整 |
这里不需要我们都记住,混个眼熟就欧克了,我们存储数据发生的空间在UserRecordes(用户记录),看名字不难发现用户记录,肯定是我们自己插入的数据。
首先我们准备一个表名为ROW_FORMAT插入三条数据,
create table ROW_FORMAT(c1 int,c2 varchar(50) NOT NULL,c3 varchar(50),c4 char(50),primary key(c1)
)CHARSET=ascii ROW_FORMAT=COMPACT;
INSERT INTO `ROW_FORMAT`(`c1`,`c2`,`c3`,`c4`)
VALUES(1001,'aaa','ab','aac'),(1002,'bba','bbb','bbc'),(1003,'cca','ccb','ccc');
万事俱备只欠东风,现在我们准备万全,什么你不知道ROW_FORMAT什么意思,这是我们的本章的重点,我们现在已经知道存储操作是InnoDB存储引擎帮我们做的,而InnoDB存储引擎是以数据页存储的,数据页真正存储数据的地方是在UserRecordes中,那么他是如何存储的呢,这就是row_formatd的作用’‘行格式‘’——数据以什么方式存储是行格式说的算的。
行格式有哪几种呢,它们都是这么定义存储的内容的呢,它们之间的区别呢。欧克这些问题我们一个一个的解决。
行格式用哪些?
在InnoDB存储引擎中常见的行格式有四种,分别是 Compact 、 Redundant 、Dynamic 和 Compressed 行格式。
Compact行格式是如何存储内容的?
我们看一张图:

变长列列表、空字符列表、头信息是什么?干什么用的?
好我们思考一个问题,如果InnoDB存储引擎插入多条变长数据它应该如何告诉内存真实内容存放的位置。
这下你理解变长列列表的作用了吧,我们看第一行数据是如何存储在Compact行格式里
INSERT INTO `ROW_FORMAT`(`c1`,`c2`,`c3`,`c4`) VALUES(1001,'aaa','aab','aac')

博主你这画的啥啊什么标注都没有,这都这么来的啊

变长列列表里面存放的是边长列表的长度的逆序列表,注意是逆序。
空字符列表是一字节八位00000000:注意得是因为空列表只存储除主键和NOTNULL修饰的列
头信息如上图所示一共占40位
除此之外我们InnoDB引擎还为我们DB_ROW_ID、DB_TRX_ID、DB_ROLL_PTR这些默认字段
头信息
预留位1和预留位2没有任何使用,我们跳过。
delete_mask是我们InnoDB引擎在删除数据的时候吧这行数据标记为1就表示它需要被垃圾链路回收。
min_rec_mask是数据页索引的非叶子节点页也就是存储目录记录的页区分在那个开始的。(博主你在讲什么啊,讲到索引的时候你就明白了)
heap_no是数据页为了优化查询设计出每个区最后一个行格式存储这一个区域有多少条数据。
record_type就不再赘述了上图都有。
我们Compact行格式是通过next_record 头信息的指定下一个行格式的位置,形成一个单链表。
总结
compact行格式是里面有四部分组成分别是边长列列表、空字符列表、头信息、真实内容。
其他行列式不同
COMPACT行格式
具体组成如图:

Redundant行格式
具体组成如图:

Dynamic和Compressed行格式
这两种行格式类似于 COMPACT行格式 ,只不过在处理行溢出数据时有点儿分歧,它们不会在记录的真实
数据处存储字符串的前768个字节,而是把所有的字节都存储到其他页面中,只在记录的真实数据处存
储其他页面的地址。
另外, Compressed 行格式会采用压缩算法对页面进行压缩。
相关文章:
Mysql数据究竟是如何存储的
Mysql行列式 开篇 笔者这几日在学习mysql是这么运行的这本书,感觉书中的内容受益匪浅,想整理成自己的话分享给大家,平时大家工作和生活中可能没有时间去专心投入读取一本书,而mysql是这么运行的这本书需要投入大量的时间的学…...
STM32单片机使用CAN协议进行通信
CAN总线(控制器局域网总线) 理论知识 CAN总线是由BOSCH公司开发的一种简洁易用、传输速度快、易扩展、可靠性高的串行通信总线 CAN总线特征 两根通信线(CAN_H、CAN_L),线路少,无需共地差分信号通信&…...
Docker 入门:如何使用 Docker 容器化 AI 项目(二)
四、将 AI 项目容器化:示例实践 - 完整的图像分类与 API 服务 让我们通过一个更完整的 AI 项目示例,展示如何将 AI 项目容器化。我们以一个基于 TensorFlow 的图像分类模型为例,演示如何将训练、推理、以及 API 服务过程容器化。 4.1 创建 …...
MVVM、MVC、MVP 的区别
MVVM(Model-View-ViewModel)、MVC(Model-View-Controller)和MVP(Model-View-Presenter)是三种常见的软件架构模式,它们在客户端应用开发中被广泛使用。每种模式都有其特定的设计理念和应用场景&…...
【Verilog】期末复习
数字逻辑电路分为哪两类?它们各自的特点是什么? 组合逻辑电路:任意时刻的输出仅仅取决于该时刻的输入,而与电路原来的状态无关 没有记忆功能,只有从输入到输出的通路,没有从输出到输入的回路 时序逻辑电路&…...
C#都可以找哪些工作?
在国内学习C#,可以找的工作主要是以下4个: 1、游戏开发 需要学习C#编程、Unity引擎操作、游戏设计和3D图形处理等。 2、PC桌面应用开发 需要学习C#编程、WinForm框架/WPF框架、MVVM设计模式和UI/UX设计等。 3、Web开发 需要学习C#编程、ASP.NET框架…...
机器学习Python使用scikit-learn工具包详细介绍
一、简介 Scikit-learn是一个开源的机器学习库,用于Python编程语言。它建立在NumPy、SciPy和matplotlib这些科学计算库之上,提供了简单有效的数据挖掘和数据分析工具。Scikit-learn库包含了许多用于分类、回归、聚类和降维的算法,包括支持向量…...
蓝桥杯真题 - 扫雷 - 题解
题目链接:https://www.lanqiao.cn/problems/549/learning/ 个人评价:难度 1 星(满星:5) 前置知识:无 整体思路 按题意模拟;为了减少不必要的“数组越界”判断,让数组下标从 1 1 1…...
vue3项目结合Echarts实现甘特图(可拖拽、选中等操作)
效果图: 图一:选中操作 图二:上下左右拖拽操作 本案例在echarts示例机场航班甘特图的基础上修改 封装ganttEcharts组件,测试数据 airport-schedule.jsonganttEcharts代码: 直接复制粘贴可测…...
Log4j2 插件的简单使用
代码: TestPlugin.java package com.chenjiacheng.webapp.plugins;import org.apache.logging.log4j.core.LogEvent; import org.apache.logging.log4j.core.config.plugins.Plugin; import org.apache.logging.log4j.core.lookup.StrLookup;/*** Created by chenjiacheng on …...
Linux之RPM和YUM命令
一、RPM命令 1、介绍 RPM(RedHat Package Manager).,RedHat软件包管理工具,类似windows里面的setup,exe是Liux这系列操作系统里而的打包安装工具。 RPMI包的名称格式: Apache-1.3.23-11.i386.rpm “apache’” 软件名称“1.3.23-11” 软件的版本号&am…...
读取硬件板子上的数据
SSCOM工具,先要安装一个插件 这样就可以读到设备数据...
Cesium 实例化潜入潜出
Cesium 实例化潜入潜出 1、WebGL Instance 的原理 狭义的的WebGL 中说使用 Instance, 一般指使用 glDrawArraysInstanced 用于实例化渲染的函数。它允许在一次绘制调用中渲染多个相同的几何体实例,而无需为每个实例发起单独的绘制调用。 Three.js 就是使用这种方…...
java引入jedis并且关于开放redis端口问题
博主主页: 码农派大星. 数据结构专栏:Java数据结构 数据库专栏:数据库 JavaEE专栏:JavaEE 软件测试专栏:软件测试 关注博主带你了解更多知识 目录 1. 引入jedis 编辑 2. 关于java客户端开放redis端口问题 3. 连接redis服务器 redis服务器在官网公开了使用的协议: resp…...
【人工智能】用Python实现情感分析:从简单词典到深度学习方法的演进
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 情感分析是自然语言处理(NLP)中的一个重要任务,其目的是通过分析文本内容,识别出其中的情感极性,如正面、负面或中性。随着技术的不断…...
关系型数据库的完整性和一致性
完整性 1.实体完整性 - 每一个实体都是独一无二的,没有冗余 --主键/唯一索引 2.参照完整性 - 外键 3.域完整性 - 存储的数据都是有效的数据 --数据类型/数据长度/非空约束/检查约束/ 检查约束: alter table tb_score add constraint ck_score_scmar…...
设计模式の命令访问者迭代器模式
文章目录 前言一、命令模式二、访问者模式三、迭代器模式 前言 本篇是关于设计模式中命令模式、访问者模式、以及迭代器模式的学习笔记。 一、命令模式 命令模式是一种行为型设计模式,其核心目的在于将命令的发送者和接受者解耦,提供一个中间层对命令进行…...
信息系统项目管理 -冲突管理
信息系统项目管理题 冲突管理: 项目管理信息系统包括()软件,用于监督资源的使用情况,协助确保合适的资源适时、适地的用于合适活动。 A资源管理或进度计划 BCRM系统 C采购系统或智能分析 DBOM系统 答案:A …...
Gmsh有限元网格剖分(Python)---点、直线、平面的移动
Gmsh有限元网格剖分(Python)—点、直线、平面的移动和旋转 最近在学习有限元的网格剖分算法,主要还是要参考老外的开源Gmsh库进行,写一些博客记录下学习过程,方便以后回忆嘞。 Gmsh的官方英文文档可以参考:gmsh.pdf 但咋就说&a…...
山景BP1048增加AT指令,实现单片机串口控制播放音乐(一)
1、设计目的 山景提供的SDK是蓝牙音箱demo,用户使用ADC按键或者IR遥控器,进行人机交互。然而现实很多场景,需要和单片机通信,不管是ADC按键或者IR接口都不适合和单片机通信。这里设计个AT指令用来和BP1048通信。AT指令如下图所示…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...
基于Springboot+Vue的办公管理系统
角色: 管理员、员工 技术: 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能: 该办公管理系统是一个综合性的企业内部管理平台,旨在提升企业运营效率和员工管理水…...
人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型
在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重,适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解,并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...
若依登录用户名和密码加密
/*** 获取公钥:前端用来密码加密* return*/GetMapping("/getPublicKey")public RSAUtil.RSAKeyPair getPublicKey() {return RSAUtil.rsaKeyPair();}新建RSAUti.Java package com.ruoyi.common.utils;import org.apache.commons.codec.binary.Base64; im…...
