MySQL—MySQL的NULL值是怎么存放的

这篇具有很好参考价值的文章主要介绍了MySQL—MySQL的NULL值是怎么存放的。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、引言

 1、MySQL数据存放在哪个文件?

        创建一个数据库会产生三种格式的文件,分别是.opt格式、.frm格式、.ibd格式。

        opt格式:用来存储当前数据库的默认字符集和字符校验规则。

        frm格式:该文件是用来保存每个表的元数据信息的,主要包含表结构定义。

        ibd格式:存放数据库的数据

2、表空间文件的结构是什么样的?

        表空间由段(segment)、区(extent)、页(page)、行(row)组成

        行:数据库表的记录都是按行进行存放的,每行记录根据不同行格式,有不同的存储结构。

        页:InnoDB 的数据是按「页」为单位来读写的,每页大小默认16k

        区:在表中数据量大的时候,为某个索引分配空间的时候就不再按照页为单位分配了,而是按照区为单位分配。每个区的大小为 1MB,对于 16KB 的页来说,连续的 64 个页会被划为一个区,这样就使得链表中相邻的页的物理位置也相邻,就能使用顺序 I/O 了。

        段:表空间是由各个段组成的,段是由多个区组成的。可分为数据段、索引段和回滚段等。

 

二、innodb的compact行格式 

        innodb的compact的行格式,如下所示

MySQL—MySQL的NULL值是怎么存放的,MySQL,mysql,数据库

         可以看到行格式可以分为记录的额外信息和记录的真实数据,记录的真实数据就不再赘述了,就是记录真实的存放的数据,但是还存放三个隐藏列:row_id, trx_id, roll_pointer!

        记录的额外信息分为:记录头信息、NULL值列表、变长字段长度列表

        记录头信息:里面有delete_mask(标记是否被删除)、next_record(标记下一条记录的位置)、record_type(表示当前记录类型)。

        NULL列表:如果存在允许 NULL 值的列,则每个列对应一个二进制位,二进制位按照列的顺序逆序排列。如果NULL值列大于8个,就需要两个字节存储

        变长字段长度列表:在存储数据的时候,也要把数据占用的大小存起来,存到变长字段长度列表里面,读取数据的时候才能根据它去读取对应长度的数据。其他 TEXT、BLOB 等变长字段也是这么实现的。

三、行溢出后,MySQL是怎么处理的

        MySQL 中磁盘和内存交互的基本单位是页,一个页的大小一般是 16KB,也就是 16384字节,而一个 varchar(n) 类型的列最多可以存储 65532字节,一些大对象如 TEXT、BLOB 可能存储更多的数据,这时一个页可能就存不了一条记录。这个时候就会发生行溢出,多的数据就会存到另外的溢出页中。 然后会在行中用20个字节来存储溢出页的地址!

四、一些问题的回答 

MySQL 的 NULL 值是怎么存放的?

MySQL 的 Compact 行格式中会用NULL值列表来标记值为 NULL 的列,NULL 值并不会存储在行格式中的真实数据部分。NULL值列表会占用 1 字节空间,当表中所有字段都定义成 NOT NULL,行格式中就不会有 NULL值列表,这样可节省 1 字节的空间。

MySQL 怎么知道 varchar(n) 实际占用数据的大小?

MySQL的compact格式会有一个变长字段列表进行存储实际占用数据的大小

varchar(n) 中 n 最大取值为多少?

最大取值为65535-NULL值列表占用字节数-变长字段长度列表所占字节数

行溢出后,MySQL 是怎么处理的?

Compact 行格式针对行溢出的处理是这样的:当发生行溢出时,在记录的真实数据处只会保存该列的一部分数据,而把剩余的数据放在溢出页中,然后真实数据处用 20 字节存储指向溢出页的地址,从而可以找到剩余数据所在的页。文章来源地址https://www.toymoban.com/news/detail-684041.html

到了这里,关于MySQL—MySQL的NULL值是怎么存放的的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • mysql数据库忘记密码了怎么办

    mysql数据库忘记密码了怎么办

    本人用的mysql8版本 看到网上很多教程,什么修改配置文件my.ini。在8版本根本没用。以下是8版本解决办法。亲测可用。 1、用管理员身份打开命令行工具。(强调:管理员身份) 2、停止mysql服务: 3、输入以下命令无密码启动mysql 4、 另开一个命令行窗口,输入mysql -u root无密

    2024年02月11日
    浏览(11)
  • mysql怎么将已有的数据库拷贝为另一个数据库

    您可以使用MySQL的 CREATE DATABASE 和 CREATE TABLE 语句将已有的数据库和其表拷贝到另一个数据库中。下面是具体的步骤: 在MySQL客户端中,使用 CREATE DATABASE 语句创建一个新的空数据库。例如,如果您想将现有的数据库 source_db 拷贝到新数据库 target_db 中,可以执行以下命令: 在

    2024年02月08日
    浏览(11)
  • MySQL 数据库 group by 语句怎么优化?

    MySQL 数据库 group by 语句怎么优化?

    我这里创建一张订单表 复制代码 同时也在表里插了一些数据 现在我们这里执行 group by 语句 复制代码 很明显,这里就可以统计出来 每件商品一共有多少订单数据! 2.1、explain 分析 不同的数据库版本,用 explain 执行的结果并不一致,同样是上面 sql 语句 「MySQL 5.7 版本」 Extr

    2024年02月06日
    浏览(7)
  • MySQL数据库忘记密码怎么办?教你一招

    MySQL数据库忘记密码怎么办?教你一招

    文章目录 1.以管理员身份打开cmd,关闭Mysql服务 2. 跳过密码授权登录  3.再继续以管理员身份打开一个cmd窗口,进行重置密码  4.使用新密码重新登录mysql验证  5.使用Navicat可视化工具连接Mysql Mysql数据库之前安装好了,但是突然忘记当初自己设置的登录密码了,导致使用Navi

    2024年02月04日
    浏览(206)
  • 数据库MySQL中出现乱码和表格不对齐怎么解决

    数据库MySQL中出现乱码和表格不对齐怎么解决

    MySQL中出现乱码问题及解决办法: 情况类似: 首先进入到数据库中,命令:mysql -h localhost -uroot -p或者mysql -uroot -p;进入数据库后选择一个你的数据库查看表中的中文是否乱码 以上是数据库中表格出现乱码情况,原因可能有以下几种: 字符集是utf-8,不能显示所有的汉字 创建

    2024年02月19日
    浏览(14)
  • python在Django中,如何使用MySQL数据库进行分页怎么实现

    在Django中,使用MySQL数据库进行分页是一个相对简单的任务。Django的ORM提供了内置的分页功能,你只需要使用Paginator类即可。以下是一个基本的示例,展示了如何在Django中使用MySQL进行分页: 首先,确保你已经安装了Django和MySQL,并且已经配置了Django项目以使用MySQL数据库。

    2024年04月29日
    浏览(10)
  • 【MySQL 】MySQL 创建数据库, MySQL 删除数据库,MySQL 选择数据库

    【MySQL 】MySQL 创建数据库, MySQL 删除数据库,MySQL 选择数据库

    作者简介: 辭七七,目前大一,正在学习C/C++,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: 七七的闲谈 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 我们可以在登陆 MySQL 服务后,使用 create 命令创建数据库,语法如下: 以下命令简单的演示了创建数据库的过程,

    2024年02月13日
    浏览(63)
  • 【MySQL数据库】初识MySQL数据库、安装MySQL

    【MySQL数据库】初识MySQL数据库、安装MySQL

    在今天的数字化世界中,数据是企业和个人的重要资产。管理和存储数据变得至关重要,而 MySQL 数据库是一种备受欢迎的开源关系型数据库管理系统,它提供了稳定、可靠、高性能的数据存储解决方案。本文将介绍 MySQL 数据库的基本概念和安装过程,以便初学者能够轻松上

    2024年02月08日
    浏览(11)
  • 【MySQL数据库】MySQL数据库管理

    【MySQL数据库】MySQL数据库管理

    Structure Query Language(结构化查询语言)简称SQL,它被美国国家标准局(ANSI)确定为关系型数据库语言的美国标准,后被国际化标准组织(ISO)采纳为关系数据库语言的国际标准。数据库管理系统可以通过SQL管理数据库;定义和操作数据,维护数据的完整性和安全性。 数据:(data)

    2024年02月08日
    浏览(12)
  • 初识MySQL数据库——“MySQL数据库”

    初识MySQL数据库——“MySQL数据库”

    各位CSDN的uu们你们好呀,小雅兰好久没有更文啦,确实是心有余而力不足,最近学习的内容太难了,这篇博客又是小雅兰的新专栏啦,主要介绍的是一些MySQL数据库的知识点,下面,让我们进入初识MySQL数据库的世界吧 为什么要使用数据库 数据库与数据库管理系统 MySQL介绍

    2024年02月06日
    浏览(9)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包