MySQL是怎样运行的:(6)B+树索引
Session 6 B+树索引本章的辅助表
123456mysql> CREATE TABLE index_demo( -> c1 INT, -> c2 INT, -> c3 CHAR(1), -> PRIMARY KEY(c1) -> ) ROW_FORMAT = Compact;
比如要往下图的页插入记录(4, 4, 'a')(假设页的最大容量为3,实际上可以容纳几十到上百条记录)
当分配新页时,新分配的数据页编号可能并不是连续的,也就是说我们使用的这些页在存储空间里可能并不挨着。
为了满足下一个数据页中用户记录的主键值必须大于上一个页中用户记录的主键值的要求,所以在插入主键值为4的记录的时候需要伴随着一次记录移动,也就是把主键值为5的记录移动到页28中,然后再把主键值为4的记录插入到页10中,这个过程的示意图如下:
这个过程表明了在对页中的记录进行增删改操作的过程中,我们必须通过一些诸如记录移动的操作来始终保证这个状态一直成立:下一个数据页中用户记录的主键 ...
MySQL是怎样运行的:(5)InnoDB数据页结构
Session 5 InnoDB数据页结构暂时将存放用户真实记录的页称为数据页(真实名称为索引页)。
名称
中文名
占用空间大小
简单描述
File Header
文件头部
38字节
页的一些通用信息
Page Header
页面头部
56字节
数据页专有的一些信息
Infimum + Supremum
最小记录和最大记录
26字节
两个虚拟的行记录
User Records
用户记录
不确定
实际存储的行记录内容
Free Space
空闲空间
不确定
页中尚未使用的空间
Page Directory
页目录
不确定
页中的某些记录的相对位置
File Trailer
文件尾部
8字节
校验页是否完整
我们自己存储的记录会按照我们指定的行格式存储到User Records部分,也就是从Free Space部分申请一个记录大小的空间划分到User Records部分。当Free Space部分的空间全部被User Records部分替代掉之后,也就意味着这个页使用完了。
回顾之前的==记录头信息==
...
MySQL是怎样运行的:(4)InnoDB记录结构
Session 4 InnoDB记录结构InnoDB将数据划分为若干个页,以页作为磁盘和内存之间交互的基本单位,InnoDB中页的大小一般为 16 KB。也就是在一般情况下,一次最少从磁盘中读取16KB的内容到内存中,一次最少把内存中的16KB内容刷新到磁盘中。
记录在磁盘上的存放方式也被称为行格式或者记录格式。常见的行格式有Compact、Redundant、Dynamic和Compressed。我们可以在创建或修改表的语句中指定行格式:
123CREATE TABLE 表名 (列的信息) ROW_FORMAT=行格式名称 ALTER TABLE 表名 ROW_FORMAT=行格式名称
COMPACT行格式(紧凑行格式)
一条完整的记录其实可以被分为==记录的额外信息==和==记录的真实数据==两大部分。
(一)记录的额外信息
这部分信息是服务器为了描述这条记录而不得不额外添加的一些信息,这些额外信息分为3类,分别是变长字段长度列表、NULL值列表和记录头信息
变长字段长度列表
MySQL支 ...
MySQL是怎样运行的:(3)字符集和比较规则
Session 3 字符集和比较规则ASCII字符集——共收录128个字符,包括空格、标点符号、数字、大小写字母和一些不可见字符
ISO 8859-1字符集——共收录256个字符,是在ASCII字符集的基础上又扩充了128个西欧常用字符
GB2312字符集——收录了汉字以及拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母
GBK字符集——GBK字符集只是在收录字符范围上对GB2312字符集作了扩充,编码方式上兼容GB2312
utf8字符集——收录地球上能想到的所有字符,而且还在不断扩充。这种字符集兼容ASCII字符集,采用变长编码方式,编码一个字符需要使用1~4个字节,比方说这样:
12'L' -> 01001100(十六进制:0x4C)'啊' -> 111001011001010110001010(十六进制:0xE5958A)
查看数据库支持的字符集:
1SHOW (CHARACTER SET|CHARSET) [LIKE 匹配的模式];
常见字符集及其最大长度:
字符集名称
Maxlen
ascii ...
MySQL是怎样运行的:(2)启动选项和系统变量
Session 2 启动选项和系统变量对于在程序启动时指定的设置项,称之为启动选项(startup options),这些选项控制着程序启动后的行为。通常,在命令行中指定启动选项时需要在选项名前加上**--前缀**。
指定启动选项的通用格式一般是这样的:(等号左右无空格)
1--启动选项1[=值1] --启动选项2[=值2] ... --启动选项n[=值n]
12mysqld --default-storage-engine = MyISAM # 指定默认引擎mysqld --skip-networking # 禁止tcp/ip网络通信
大多数程序提供了一个--help选项,你可以查看该程序支持的全部启动选项以及它们的默认值。
有时会对一些常用的启动选项提供短形式,例如:
长形式
短形式
含义
--host
-h
主机名
--user
-u
用户名
--password
-p
密码
--port
-P
端口
--version
-V
版本信息
为了使下一次重启程序时保留这些启动选项,需要把启动选项写在配置文件(这里又称选项文件)中,
在类UNIX操作 ...
MySQL是怎样运行的:(1)重新认识MySQL
Session 1 重新认识MySQL通过which mysql查看mysql的安装位置。我在wsl上的安装位置在/usr/bin/下。(不过正常来讲,应该是装在/usr/local/mysql下)
其中,mysqld是启动服务器程序的命令,mysql是启动客户端程序的命令(’d’应该表示守护进程)
输入 mysqld 命令并按下回车键后,终端即被占用且没有任何输出,这意味着 MySQL 服务器已经在后台启动,此时另开一个终端即可连接了。也可以加上&将服务进程挂到后台。
1mysqld &
启动客户端:
123mysql -h主机名 -u用户名 -p密码 # 启动客户端mysql -hlocalhost -u root -p123456 # 例(-p后没有空格,其他选项随意)mysql -h127.0.0.1 -uroot -P3307 -p # 例(-P指定端口号)
各个参数的意义如下:
参数名
含义
h
表示服务器进程所在计算机的域名或者IP地址,如果服务器进程就运行在本机的话,可以省略这个参数,或者填local ...
blover's blog
用于测试