我们平常工作中都会对数据库进行crud的操作,一般都是对某个库中的某个表的某条数据进行操作。那么在我们操作数据的背后其实是对什么进行操作呢?
其实库和表的概念只是物理概念的,其实我们所有的操作都是围绕着mysql创建的表文件进行的操作。
当我们使用
create table a
去创建一个a表的时候,其实是在服务器内创建了一个命名为a的,后缀名为.ibd的表文件。
数据行结构
数据行格式:
变长字段 null字段 头字段 数据1 数据2 数据3
a表中的结构是这样的:
这时我们给a表插入一条数据:
insert into a (name,id_card) values (’11’,’36666…..’);
在文件中展示是这个样子的
11 36666…..
因为name字段的字段类型是varchar类型,所以他的长度是变长的无法像char类型一样直接获取具体的长度,所以在读取数据的时候可能会读成
1 1366666….
也可以被读成
11 366666….
所以在数据行里面需要有一个记录varchar类型字段实际字段长度的值。
比如,我们新增的name字段的值是11,长度是2,那么16进制描述就是0x02,有了这个变长字段的描述,就能准确的获取一个变长字段的实际长度值。
我们数据中还会出现字段null和非null的情况。在数据库中使用了二进制的形式去标记是否为null,0表示非null,1表示为null
比如现在,我们a表中的数据是11,1366666….
那么在磁盘中这条数据实际是这样的:
0x02 00 头字段 11 1366666……
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END