mysql学习

blog.csdnimg.cn/img_convert/40ae329cfa2310709ddc3ea508e94427.png)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实际数据在磁盘上是如何存储的

一行数据在磁盘文件里存储的时候,实际上首先会包含自己的变长字段的长度列表,然后是
NULL值列表,接着是数据头,然后接着才是真实数据
比如有一行数据是“jack NULL m NULL xx_school”,那么他真实存储大致如下所示:

0x09 0x04 00000101 0000000000000000000010000000000000011001 jack m xx_school

刚开始先是他的变长字段的长度,用十六进制来存储,然后是NULL值列表,指出了谁是NULL,接着是40个bit位的数据头,
然后是真实的数据值,就放在后面。
在读取这个数据的时候,他会根据变长字段的长度,先读取出来jack这个值,因为他的长度是4,就读取4个长度的数据,jack
就出来了;
然后发现第二个字段是NULL,就不用读取了;
第三个字段是定长字段,直接读取1个字符就可以了,就是m这个值;
第四个字段是NULL,不用读取了;
第五个字段是变长字段长度是9,读取出来xx_school就可以了。
实际上字符串这些东西都是根据我们数据库指定的字符集编码,进行编码之后再存储的,所以大致看起来一行数据是如下所示
的:
0x09 0x04 00000101 0000000000000000000010000000000000011001 616161 636320 6262626262

在实际存储一行
数据的时候,会在他的真实数据部分,加入一些隐藏字段

首先有一个DB_ROW_ID字段,这就是一个行的唯一标识,是他数据库内部给你搞的一个标识,不是你的主键ID字段。如果我们没有指定主键和unique key唯一索引的时候,他就内部自动加一个ROW_ID作为主键
接着是一个DB_TRX_ID字段,这是跟事务相关的,他是说这是哪个事务更新的数据,这是事务ID
时候会跟大家说的。
最后是DB_ROLL_PTR字段,这是回滚指针,是用来进行事务回滚的
所以如果加上这几个隐藏字段之后,实际一行数据可能看起来如下所示:
0x09 0x04 00000101 0000000000000000000010000000000000011001 00000000094C(DB_ROW_ID)
00000000032D(DB_TRX_ID) EA000010078E(DB_ROL_PTR) 616161 636320 6262626262

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值