《MySQL是怎么运⾏的:从根⼉上理解MySQL》——InnoDB
存储引擎
声明:本博客纯粹为读书笔记,如要详细了解MySQL相关知识请访问《MySQL是怎么运⾏的:从根⼉上理解MySQL》
正⽂:
mysql怎么读英语InnoDB是MySQL的默认存储引擎
1)InnoDB是将数据从内存存储到磁盘上的
2)InoDB将数据从内存中刷新到磁盘中是以页为基本单位,⼀般为16K
3)InoDB⽬前有四种⾏格式:compact(简洁的)、redundant(冗余的)、dynamic(动态的)、compress(压缩的)
⾏格式:
指定、转换⾏格式语法:
create table 表名 (列的信息)ROW_FORMAT=⾏格式名称
alter table 表名 ROW_FORMAT=⾏格式名称
创建表并指定列字段类型:
插⼊2条记录:
compact⾏格式:
⼀条完整的信息分为记录的额外信息和记录的真实数据:
记录的额外信息:服务器为了描述真实数据不得不记录的信息,包括变长字段长度列表、null值列表、记录头信息
变长字段长度列表:MySQL⽀持varchar(M)、varbinary(M)、各种text、BLOB类型,⽤他们修饰的字段都是变长字段,⽽变长字段占⽤的空间分为真正的数据内容和占⽤的字节数
注意在compact⾏格式中,变长字段长度列表中的数据是各个变长字段数据占⽤的字节数按倒序排列形成的列表,值为null的列的长度是不存储的。
⽰例如下:
变长字段长度列表中的数值:
1)假设某个字符集中表⽰⼀个字符最多需要使⽤的字节数为W,也就是使⽤SHOW CHARSET语句的
结果中的Maxlen列,⽐⽅说utf8字符集中的W就是3,gbk字符集中的W就是2,ascii字符集中的W就是1
2)对于变长类型VARCHAR(M)来说,这种类型表⽰能存储最多M个字符(注意是字符不是字节),所以这个类型能表⽰的字符串最多占⽤的字节数就是M×W。
3)假设它实际存储的字符串占⽤的字节数是L。
所以确定使⽤1个字节还是2个字节表⽰真正字符串占⽤的字节数的规则就是:
1)如果M×W <= 255,那么使⽤1个字节来表⽰真正字符串占⽤的字节数。
也就是说InnoDB在读记录的变长字段长度列表时先查看表结构,如果某个变长字段允许存储的最⼤字节数不⼤于255时,可以认为只使⽤1个字节来表⽰真正字符串占⽤的字节数。
2)如果M×W > 255,则分为两种情况:
如果L <= 127,则⽤1个字节来表⽰真正字符串占⽤的字节数。
如果L > 127,则⽤2个字节来表⽰真正字符串占⽤的字节数。
重要总结如果说存储的可变字段允许存储的最⼤字节数(MxW)超过255字节并且真实存储的字节数(L)超过127字节,那么变长字段长度列表中对应的占⽤2个字节来表⽰,否则⽤1个字节。
Null值列表:
usbdeviceconnection1)统计表中允许存储null值的列有哪些
2)将每个允许存储null值的列按逆序的顺序在null值列表中以⼆进制的格式存储,如果字段列为null则记为0,不为null则记为1
3)null值列表中必须以整数个字节来表⽰,若不是整数则在⾼位补0
记录头信息:⽤于描述记录的记录头信息,它是由固定的5个字节组成。也就是40个⼆进制位,不同的位代表不同的意思。pipa怎么读英语
学java有什么要点
除了我们⾃定义的数据信息外系统还会为每条记录添加默认的列,也成为隐藏列
实际上这⼏个列的真正名称其实是:DB_ROW_ID、DB_TRX_ID、DB_ROLL_PTR,我们为了美观才写成了row_id、transaction_id和roll_pointer。
c语言中源程序的含义InoDB引擎对表的主键⽣成策略为:
lobbying
优先使⽤⽤户⾃定义的主键作为主键,如果⽤户没有定义主键,则选取⼀个unique键作为主键,如果连 unique主键都没有的话,则
InoDB会默认添加⼀个名为row_ID的隐藏列作为主键。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。