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。头信息比较复杂,如下所示:
真实数据部分,如果数据太大,会发生"行溢出",会把存储的部分数据放到其他页中。
完。