页格式

mysql显示成财务格式 mysql表格式_mysql显示成财务格式


mysql显示成财务格式 mysql表格式_mysql显示成财务格式_02

行格式

innodb总共有4种行格式:Compact、Redundant、Dynamic和Compressed行格式

在创建或修改表的语句中指定行格式:

CREATE TABLE 表名 (列的信息) ROW_FORMAT=行格式名称 
ALTER TABLE 表名 ROW_FORMAT=行格式名称
Compact行格式

mysql显示成财务格式 mysql表格式_主键_03

变长字段长度列表(2个字节)

VARCHAR(M)、VARBINARY(M)、TEXT类型,BLOB类型,这些数据类型修饰的列称为变长字段,变长字段中存储多少字节的数据不是固定的,所以我们在存储真实数据的时候需要顺便把这些数据占用的字节数也存起来,如果表中没有变长字段,则该列表也不存在了(在更新一条sql的时候,若变长字段的长度没有变,则直接修改字段的值,否则,先删除原来的那一条sql,再插入新的sql)

NULL值列表(1个字节)

Compact行格式会把可以为NULL的列统一管理起来,存一个标记为在NULL值列表中,如果表中没有允许存储 NULL 的列,则 NULL值列表也不存在了。(1代表该列的值为null,0不为null)

记录头信息(5个字节)

mysql显示成财务格式 mysql表格式_字段_04

记录的真实数据

记录的真实数据除了我们自己定义的列的数据以外,还会有三个隐藏列:

mysql显示成财务格式 mysql表格式_主键_05

实际上这几个列的真正名称其实是:DB_ROW_ID、DB_TRX_ID、DB_ROLL_PTR

一个表没有手动定义主键,则会选取一个Unique键作为主键,如果连Unique键都没有定义的话,则会为表默认添加一个名为row_id的隐藏列作为主键。所以row_id是在没有自定义主键以及Unique键的情况下才会存在的

页大小与行大小

每一页固定大小为16KB,也就是16384字节。每一行的最大长度为65535B(除BLOB或者TEXT类型的列之外, 其他所有的列(不包括隐藏列和记录头信息)占用的字节长度加起来不能超过65535个字节)

记录中的数据太多,产生溢出

由于一个页和一行的最大容量有差距,所以有可能出现一个页存放不了一条记录的情况。

在Compact和Reduntant行格式中,对于占用存储空间非常大的列,在记录的真实数据处只会存储该列的一部分 数据,把剩余的数据分散存储在几个其他的页中,然后记录的真实数据处用20个字节存储指向这些页的地址(当 然这20个字节中还包括这些分散在其他页面中的数据的占用的字节数),从而可以找到剩余数据所在的页。

Dynamic和Compressed行格式中,不会在记录的真实数据处 存储一部分数据,而是把所有的数据都存储到其他页面中,只在记录的真实数据处存储其他页面的地址。另外, Compressed行格式会采用压缩算法对页面进行压缩。