MYSQL原理学习篇简记(二)

👏作者简介:大家好,我是小周同志,25届双非校招生Java选手,很高兴认识大家

📕学习出处:本文是学自小林coding (xiaolincoding.com) 网站的MYSQL图解篇

🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦

MySQL 的数据存放在哪个文件?

  • 当我们输入下面的命令之后:就可以看到 /var/lib/mysql

    mysql> SHOW VARIABLES LIKE 'datadir';
    +---------------+-----------------+
    | Variable_name | Value           |
    +---------------+-----------------+
    | datadir       | /var/lib/mysql/ |
    +---------------+-----------------+
    1 row in set (0.00 sec)
  • 创建一个数据库时, 都会在 /var/lib/mysql/ 目录里面创建一个以 database 为名的目录

  • 在数据库中创建表时

    [root@root]#ls /var/lib/mysql/test
    db.opt  
    t_test.frm  
    t_test.ibd
    • db.opt:用来存储当前数据库的默认字符集字符校验规则

    • t_test.frm:t_test 的表结构会保存在这个文件。在 MySQL 中建立一张表都会生成一个.frm 文件,用来保存每个表的元数据信息的,主要包含表结构定义。

    • t_test.ibd:t_test 的表数据会保存在这个文件。表数据既可以存在共享表空间文件(文件名:ibdata1)里,也可以存放在独占表空间文件(文件名:表名字.ibd)。这个行为是由参数 innodb_file_per_table 控制的,若设置了参数 innodb_file_per_table 为 1,则会将存储的数据、索引等信息单独存储在一个独占表空间,从 MySQL 5.6.6 版本开始,它的默认值就是 1 了,因此从这个版本之后, MySQL 中每一张表的数据都存放在一个独立的 .ibd 文件。

    总结(回答问题): MySQL 5.6.6之后,mysql的数据默认存放到 .ibd后缀的文件(独占表空间文件) 中。

InnoDB 行格式有哪些?

InnoDB 提供了 4 种行格式:Redundant(冗余)、Compact(紧凑)、Dynamic(动态) 和 Compressed(压缩行)

  • Redundant:很古老的行格式, MySQL 5.0 版本之前用的行格式,现在基本没人用了。

  • Compact: 是一种紧凑的行格式,设计的初衷就是为了让一个数据页中可以存放更多的行记录,从 MySQL 5.1 版本之后,行格式默认设置成 Compact。

  • Dynamic 和 Compressed 两个都是紧凑的行格式,它们的行格式都和 Compact 差不多,因为都是基于 Compact 改进一点东西。从 MySQL5.7 版本之后,默认使用 Dynamic 行格式。

其中 Dynamic 和 Compressed 与 Compact格式特别像

 COMPACT 行格式长什么样?

     (结构如图:来自小林coding)

记录的额外信息

记录的额外信息包含 3 个部分:变长字段长度列表、NULL 值列表、记录头信息。

1. 变长字段长度列表

表的一行数据中,找出类型为 varchar的字段,并将其倒序存储在 变长字段长度列表。

比如:表的一行数据中,varchar字段name为11,varchar字段phone是123。

  • 那么这个行记录的变长字段长度列表存储样式为 03 02

注意:

  • 为什么「变长字段长度列表」的信息要按照逆序存放?

    • 因为这样可以 使得位置靠前的记录的真实数据和数据对应的字段长度信息可以同时在一个 CPU Cache Line 中,这样就可以提高 CPU Cache 的命中率

  • 每个数据库表的行格式都有「变长字段字节数列表」吗?

    • 当数据表没有变长字段的时候,比如全部都是 int 类型的字段,这时候表里的行格式就不会有「变长字段长度列表」了

2. NULL 值列表

  • 如果存在允许 NULL 值的列,则每个列对应一个二进制位(bit),二进制位按照列的顺序逆序排列。

    • 二进制位的值为1时,代表该列的值为NULL。

    • 二进制位的值为0时,代表该列的值不为NULL。

    • 另外,NULL 值列表必须用整数个字节的位表示(1字节8位),如果使用的二进制位个数不足整数个字节,则在字节的高位补 0

  • 注意:

    • 每个数据库表的行格式都有 NULL 值列表 吗?

      • NULL 值列表 不是必须的。

      • 当数据表的字段都定义成 NOT NULL 的时候,这时候表里的行格式就不会有 NULL 值列表了

      • 所以在设计数据库表的时候,通常都是建议将字段设置为 NOT NULL,这样可以至少节省 1 字节的空间(NULL 值列表至少占用 1 字节空间)。

    • NULL 值列表 是固定 1 字节空间吗?如果这样的话,一条记录有 9 个字段值都是 NULL,这时候怎么表示?

      • NULL 值列表 的空间不是固定 1 字节的。

      • 当一条记录有 9 个字段值都是 NULL,那么就会创建 2 字节空间的 NULL 值列表,以此类推。

记录的真实数据

 1. row_id

如果我们建表的时候指定了主键或者唯一约束列,那么就没有 row_id 隐藏字段了。如果既没有指定主键,又没有唯一约束,那么 InnoDB 就会为记录添加 row_id 隐藏字段。row_id不是必需的,占用 6 个字节。

 2. trx_id

事务id,表示这个数据是由哪个事务生成的。 trx_id是必需的,占用 6 个字节。

 3. roll_pointer

这条记录上一个版本的指针。roll_pointer 是必需的,占用 7 个字节。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/540898.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在IIS中启用动态压缩

在iis管理中 对网站启用压缩可以节省带宽 提高网站的响应速度,默认情况下IIS启用多了“静态内容”的压缩。 下面就如何启用“动态内容压缩”说说方法: 1.打开iis中的网站,右侧管理项中显示有压缩 2、双击打开“压缩”,“静态内容…

cocos creator 实现spine局部换装

1 使用3.7.4版本 2 js代码 3 c Native层修改源码

太阳光光照试验耐久性老化试验使用太阳光模拟器系统

上海科迎法电气科技有限公司生产的太阳光模拟器系统主要应用于太阳能研究、材料研究、光伏组件测试、空间环境模拟器、植物生长研究、光热模拟等领域,主要表现特征为: 1. 太阳能研究:可用于模拟不同光照条件下太阳能电池的性能测试和研究&am…

学习python你必须弄懂的 Python、Pycharm、Anaconda 三者之间的关系

省流版 Python作为深度学习和人工智能学习的热门语言,学习一门语言,除了学会其简单的语法之外还需要对其进行运行和实现,才能实现和发挥其功能和作用。下面来介绍运行Python代码常用到的工具总结。 文中部分内容来自GPT,他已经是…

Quantum Temple借助Sui通过NFT推动再生旅游

从金融到艺术,从游戏到无线网络,各行各业都涌现出大量初创公司,利用区块链技术颠覆现状。说到旅游业,让人联想到拥挤的机场、快节奏的旅游和豪华游轮,可能看起来对区块链创新持守旧态度。一家初创公司认为现在是时候改…

ELK 日志分析系统(一)

一、概念 二、详解 2.1 Elasticsearch 核心概念 2.1.1 接近实时(NRT) 2.1.2 cluster集群 2.1.3 Node节点 2.1.4 index索引 2.1.5 类型(type) 2.1.6 文档(document) 2.1.7 分片和副本(shards & replicas) 2.2 Logstash主要组件 …

Navicat Premium 16 for Mac/Win:数据库管理的全能之选

在数字化时代,数据库管理已成为各行各业不可或缺的一环。而Navicat Premium 16作为一款功能强大的数据库管理软件,无疑为数据库管理员和开发者提供了高效、便捷的解决方案。 Navicat Premium 16支持多种主流数据库系统,无论是MySQL、Postgre…

【蓝桥杯】2024年第15届真题题目

试题 A: 握手问题 本题总分: 5 分 【问题描述】 小蓝组织了一场算法交流会议,总共有 50 人参加了本次会议。在会议上, 大家进行了握手交流。按照惯例他们每个人都要与除自己以外的其他所有人进 行一次握手(且仅有一次&a…

初识SpringMVC(SpringMVC学习笔记一)

1 、还是熟悉的配方&#xff0c;先创建一个父Maven项目&#xff08;忘记怎么创建项目了就去前面翻笔记&#xff09;&#xff0c;导入通用的配置依赖 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instan…

基于Java社团管理系统设计与实现(源码+部署文档)

博主介绍&#xff1a; ✌至今服务客户已经1000、专注于Java技术领域、项目定制、技术答疑、开发工具、毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅 &#x1f447;&#x1f3fb; 不然下次找不到 Java项目精品实…

【pycharm】运行完程序之后如何查看变量情况

【pycharm】运行完程序之后如何查看变量情况 Matlab运行完代码可以在工作区查看变量以及变量值&#xff0c;对于python也是可以的 pycharm运行完程序之后如何查看变量情况方法&#xff1a;选择edit configurations 把run with python console勾上 然后运行完代码就可以在下面查…

水离子雾化壁炉与酒店会客厅的氛围搭配

水离子雾化壁炉与酒店会客厅的氛围搭配可以营造出舒适、温馨和现代化的氛围&#xff0c;以下是一些建议&#xff1a; 焦点装饰&#xff1a;将水离子雾化壁炉设计成会客厅的焦点装饰物&#xff0c;使其成为客人进入会客厅后第一眼的吸引点。选择设计独特、现代化的壁炉造型&…

微信公众号迁移申请函怎么填写?

公众号迁移的好处有哪些&#xff1f;迁移后原公众号还能用吗&#xff1f;公众号迁移的好处有很多哦&#xff01;比如可以获得更多权限功能、公司变更或注销时可以保证账号的正常使用、收购账号后可以改变归属权或使用权等等。不过要注意的是&#xff0c;迁移后原公众号就不能再…

量化过程信息损耗分析(MATLAB)

MATLAB代码 clear_all; Mrand(5,5)*100;% 假设M是待转换的矩阵 a min(M(:)); b max(M(:));% 将M映射到[0, 255] M_mapped functionA(M, a, b); M_mapped_floorfloor(M_mapped); % 将M_mapped恢复到原始范围 M_original functionB(M_mapped_floor, a, b);disp(M); disp(M_m…

DNF手游攻略:2024新手攻略大全

在《DNF手游》的世界中&#xff0c;前期阶段对于新手玩家来说至关重要。以下是一份综合整理的新手攻略&#xff0c;帮助玩家快速适应游戏并取得进展。 1. 角色建立策略&#xff1a; 在前期&#xff0c;建议玩家建立3个角色&#xff0c;包括1个大号和2个小号。大号可以根据个人喜…

Hystrix应用:如何在Spring Boot中使用Hystrix?

Hystrix应用&#xff1a;如何在Spring Boot中使用Hystrix&#xff1f; 引言 在微服务架构的发展过程中&#xff0c;面对复杂的服务依赖和不可预见的系统故障&#xff0c;如何提升系统的容错能力成为了一个非常急迫且重要的能力。 由 Netflix&#xff08;网飞&#xff09;公司…

佛山分公司迎来重要指导蒋书记一行及杭州区域分公司领导共襄盛举

近日&#xff0c;佛山分公司迎来了一场重要的指导活动。蒋书记携夫人&#xff0c;以及助理黄显文和公司工作人员施晓燕等一行领导莅临佛山分公司&#xff0c;为公司的未来发展提供了宝贵的指导意见。同时&#xff0c;江浙福地区的杭州区域分公司负责人白棋元总和朱建江总也亲临…

Java 基于微信小程序的智能停车场管理小程序

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

软件杯 深度学习卫星遥感图像检测与识别 -opencv python 目标检测

文章目录 0 前言1 课题背景2 实现效果3 Yolov5算法4 数据处理和训练5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **深度学习卫星遥感图像检测与识别 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐…

Mysql主从复制原理

mysql主从复制原理 0、为什么需要主从复制&#xff1f; 1、在业务复杂的系统中&#xff0c;有这么一个情景&#xff0c;有一句sql语句需要锁表&#xff0c;导致暂时不能使用读的服务&#xff0c;那么就很影响运行中的业务&#xff0c;使用主从复制&#xff0c;让主库负责写&a…