当前位置:   article > 正文

Mysql底层原理六:InnoDB 数据页结构

Mysql底层原理六:InnoDB 数据页结构

1.行格式

1.1 Compact行格式

1.1.1 示意图

1.1.2 准备一下

1)建表
mysql>	CREATE	TABLE	record_format_demo	(
   	->    	c1	VARCHAR(10),
   	->    	c2	VARCHAR(10)	NOT	NULL,
   	->    	c3	CHAR(10),
   	->    	c4	VARCHAR(10)
   	->	)	CHARSET=ascii	ROW_FORMAT=COMPACT;
Query	OK,	0	rows	affected	(0.03	sec)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

2)插入数据
mysql>	INSERT	INTO	record_format_demo(c1,	c2,	c3,	c4)	VALUES('aaaa',	'bbb',	'cc',	'd'),	('eeee',	'fff',	NULL,
NULL);
Query	OK,	2	rows	affected	(0.02	sec)
Records:	2 	Duplicates:	0 	Warnings:	0
  • 1
  • 2
  • 3
  • 4

4)查看一下
mysql>	SELECT	*	FROM	record_format_demo;
+------+-----+------+------+
|	c1  	|	c2 	|	c3  	|	c4  	|
+------+-----+------+------+
|	aaaa	|	bbb	|	cc  	|	d   	|
|	eeee	|	fff	|	NULL	|	NULL	|
+------+-----+------+------+
2	rows	inset	(0.00	sec)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

1.1.3 变长字段长度列表

我们知道Mysql支持一些变长的数据类型,比如VARCHAR(M)、各种TEXT类型,各种BLOG类型,我们也可以把拥有这些数据类型的列称为 变长字段变长字段中存储多少字节的数据是不固定的,所以我们在存储真实数据的时候需要顺便把这些数据占用的字节也存起来。

1)INSERT INTO record_format_demo(c1, c2, c3, c4) VALUES  (‘aaaa’, ‘bbb’, ‘cc’, ‘d’)

由于是ascii字符集,所以每个字符占一个字节,所以变长列(这里不包含cc,因为是char)每个长度为 04 03 01,另外非常重要的一点是:变长字段长度列表是逆序排列的,所以最终的的列表为 01 03 04。

用图来表示就是:

提出问题:当列中出现NULL时怎么存储那?往下看

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/385439
推荐阅读
相关标签