mysql innodb记录存储格式

这篇文章是自己学习mysql随手写的杂记,编辑混乱且不够严谨,请勿参考,谢谢!

mysql innodb引擎将数据存储在磁盘中,不同的引擎存储形式不同,有的则不需要存储,比如memory引擎。

innodb引擎底层数据的存储格式形式如下:

变长字段长度列表 NULL值列表 头信息 列1值 列2值 列n值.......

前面三个单元格是记录的附加信息,为了标识和管理记录而添加的。头信息后面的是记录的真实数据部分,不过有三个隐藏的属性,db_row_id,db_transaction_id,db_roll_pointer分别是记录唯一标识,事务id,回滚指针等等。

如果建表时有主键或unique键,则采用其作为db_row_id,否则系统会生成一个来唯一标识一条记录。

db_transaction_id和db_roll_pointer在事务中会使用到。

变长字段如varchar,text等都属于此类字段,如果有col1,col2,col3变长字段,则会在变长字段长度列表栏位逆序存放真实数据所占字节数。NULL值列表只存储允许为NULL的列的NULL值情况。1为NULL,0为非NULL。头信息比较复杂,如下所示:

mysql innodb记录存储格式

真实数据部分,如果数据太大,会发生"行溢出",会把存储的部分数据放到其他页中。

完。