1 指定行格式的语法
create table recode_format(
c1 varchar(10),
c2 varchar(10) not null
)charset=ascii ROW_FORMAT=COMPACT;
2 compact
行格式
2.1 变长字段列表
由最开始的建表语句可知,表中只有两个列,假设现在插入一些值进入表中
insert into recode_format(c1, c2)
values
("aaa", "bbbbb"), # 第一条记录
("a","bbb") # 第二条记录
2.2 NULL值列表
- 先统计表中允许NULL值的列有哪些
- 若全部不允许NULL,则NULL列表就可以不存在了
- 允许NULL值的列如果是NULL,对应的二进制位的bit就设置为1,存放顺序逆序!
- 1 : NULL
- 0 : 有值
create table recode_format(
c1 varchar(10),
c2 varchar(10) not null,
c3 varchar(10),
c4 varchar(10),
)charset=ascii ROW_FORMAT=COMPACT;
现在插入一条记录:
insert into recode_format(c1, c2, c3, c4)
values
("aaa", "bbbbb", NULL, NULL)
2.3 记录头信息
2.4 真实的记录
2.4.1 主键生成策略
- 无自定义主键:选取不允许存储NULL的UNIQUE列作为主键
- 没有符合要求的UNIQUE列:添加一个row_id隐藏列作为主键
2.4.2 其他
trx_id
roll_pointer
2.5 溢出列
存储一部分数据,其余的数据如果特别多就分散在其他几个页中,然后用20字节存储指向这些页的地址和长度
3 DYNAMIC
行格式
MySQL
5.7 默认
与COMPACT
格式的唯一区别就是:溢出列所有真实数据全部存储在另外的页中,768字节都不存储,只存储一个指针
4 COMPRESSED
行格式
基于DYNAMIC
去做数据压缩,节省空间
5 REDUNDANT
行格式
略