MYSQL是怎样运行的

第一章  初识 MYSQL

1.1  MySQL 采用客户端/服务器架构,用户通过客户端程序发送增删改查请求,服务器程序收到请求后处理,并且把处理结果返回给客户端
1.2  MySQL 安装目录的 bin 目录下存放了许多可执行文件,其中有一些是服务器程序(比如mysql、mysqld_safe),有一些是客户端程序(比如mysql、mysqladmin)

1.3  在类 UNIX 系统上启动服务器程序的方式有下面这些:

         mysqld;

         mysql_safe;(它会间接调用 mysqld 并持续监控服务器的运行状态

         mysql.server;(它会间接调用 mysql_safe)

         mysqld_multi (可执行文件可以启动或停止多个服务器进程

       在 Windows 系统上启动服务器程序的方式有下面这些:

         mysqld;

         将 mysqld 注册为 Windows 服务

       启动服务器程序:

         mysql.server start

       关闭服务器程序:

         mysql.server stop    

1.4  启动客户端程序时常用的语法如下:

         mysql  -h主机名  -u用户名  -p密码  

       断开客户端与服务器的连接并且关闭客户端:

           quit:

           exit;

           \q

1.5  客户端进程和服务器进程在通信时采用下面几种方式:

         TCP/IP;

         命名管道或共享车内存;

         UNIX 域套接字

1.6  以查询请求为例,服务器程序在处理客户端发送过来的请求时,大致分为以下几个部分:

         连接管理:主要负责连接的建立与信息的认证

         解析与优化:主要进行查询缓存、语法解析、查询优化

         存储引擎:主要负责查读取和写入底层表中的数据

1.7  MYSQL 支持的存储引擎有好多种,它们的功能各有侧重,我们常用的就是 InnoDB 和 MyISAM,其中 InnoDB 是服务器程序的默认存储引擎

1.8  存储引擎的一些常用用法如下所示:

         查看当前服务器程序支持的存储引擎:

           SHOW ENGINES;

         创建表时指定表的存储引擎:

           CREATE  TABLE  表名(

              建表语句;

           )  ENGINE = 存储引擎名称;

         修改表的存储引擎:

           ALTER  TABLE  表名  ENGINE  =  存储引擎名称;

1.9  MYSQL 服务器程序的进程称为 MySQL 数据库实例

第二章  MYSQL 的调控按钮——启动选项和系统变量

2.1  启动服务选项可以调整服务器启动后的一些行为。它们可以在命令行中指定,也可以将它们写入配置文件中
2.2  在命令行中指定启动选项时,可以将各个启动选项写到一行中,每一个启动选项名称前面添加--,并且各个启动选项之间使用空白字符隔开。有一些启动选项不需要指定选项值,有一些选项需要指定选项值。在命令行中指定有值的启动选项时需要注意,选项名、=、选项值之间不可以有空白字符。一些常用的启动选项具有短形式的选项名,使用短形式的选项时在选项名之前只加一个短划线 - 前缀
2.3  服务器程序在启动时将会在一些给定的路径下搜索配置文件,不同操作系统的搜索路径是不同的
2.4  配置文件中的启动选项被划分为若干个组,每个组有一个组名,用中号[]括起来。在配置文件中指定的启动选项不允许添加 -- 前缀,并且每行只指定一个选项,并且等号 = 周围可以有空白字符。我们可以使用 # 来添加注释

2.5  系统变量是服务器程序中维护的一些变量,这些变量影响着服务器的行为。修改系统变量的方式如下:

          在服务器启动时通过添加相应的启动选项进行修改

          在运行时使用 SET 语句修改,下面两种方式都可以:

            SET [GLOBAL|SESSION] 系统变量名 = 值;

            SET [@@(GLOBAL|SESSION).] 系统变量名 = 值;

2.6  查看系统变量的方式如下所示:

         SHOW  [GLOBAL|SESSION]  VARIABLES  [LIKE  匹配的模式];

2.7  状态变量是用来显示服务器程序运行状态的,我们可以使用下面的命令来查看,而且只能查看:

         SHOW  [GLOBAL|SESSION]  STATUS  [LIKE  匹配的模式];

2.8  我们可以在系统启动时修改默认值,对于这种在程序启动时指定的设置项也称之为启动选项

第三章  字符集和比较规则

3.1  字符集指的是某个字符范围的编码规则

3.2  比较规则是对某个字符集中是字段比较大小的一种规则

3.3  在 MySQL 中,一个字符集可以有若干种比较规则,其中有一个默认的比较规则。一个比较规则必须对应一个字符集

3.4  在 MySQL 中查看支持的字符集和比较规则的语句如下:

       show  (character set|charset) [like 匹配的模式];

       show  collation [like 匹配的模式];    

3.5  MySQL 有4个级别的字符集和比较规则,具体如下:

       3.51  服务器级别

                character_set_server 表示服务器级别的字符集,collaction_server 表示服务器级别的比较规则

       3.52  数据库级别

                创建和修改数据库时可以指定字符集和比较规则;

  create  database  数据库名                      

                    [ [default] character  set  字符集名称]

                    [ [default] collate  比较规则名称];

alter  database  数据库名

                    [ [default] character  set  字符集名称]

                    [ [default] collate  比较规则名称];

              character_set_database 表示当前数据库的字符集,collaction_database 表示当前数据库的比较规则。这两个系统变量只用来读取,修改它们并不会改变当前数据库的字符集和比较规则。如果没有指定当前数据库,则这两个系统变量与服务器级别相应的系统变量具有相同的值

     3.53  表级别

              创建和修改表的时侯指定表的字符集和比较规则;

create  table 表名(列的信息)                      

                    [ [default] character  set  字符集名称]

                    [ collate  比较规则名称];

alter  table  表名

                    [ [default] character  set  字符集名称]

                    [ collate  比较规则名称];

     3.54  列表级

             创建和修改表的时侯指定该列的字符集和比较规则;

第四章  从一条记录说起——InnoDB 记录存储结构

4.1  页是 InnoDB 中磁盘和内存交互的基本单位,也是 InnoDB 管理存储空间的基本单位,默认大小为16KB

4.2  指定和修改行格式如下:

       create  table  表名  (列的信息)  row_format=行格式名称;

       alter table  表名  row_format=行格式名称;

4.3  InnoDB 目前定义了4种行格式

       4.31  compact 行格式

                             记录的格外信息                             记录的真实数据
变长字段长度列表 NULL 值列表 记录头信息 列1的值 列2的值 ...... 列n的值

       4.32  redundant 行格式

                       记录的格外信息                         记录的真实数据
字段长度便宜列表 记录头信息 列1的值 列2的值 ...... 列n的值

       4.33  dynamic 和 compressed 行格式

                这两种行格式类似于 compact 行格式,只不过在处理溢出列数据时有几点分歧:它们不会在记录的真实数据处存储列真实的前768字节,而是把所有的数据都存储到所谓的溢出页中,只在记录的真实数据处存储指向这些溢出页的地址。另外,compressed 行格式会采用压缩算法对页面进行压缩

第五章  盛放记录的大盘子——InnoDB 数据页结构

5.1  InnoDB 为了不同的目的而设计了不同类型的页,我们把用于存放记录的页称为数据页

5.2  一个数据页可以被大致划分为7个部分:

       File Header:表示页的一些通用信息,占固定的38字节

       Page Header:表示数据页专有的一些通用信息,占固定的56字节

       Infimum + Supremum:两个虚拟的伪记录,分别表示页中的最小记录和最大记录,占固定的26字节

       User Records:真正存储我们插入的记录,大小不固定

       Frss Space:页中尚未使用的部分,大小不固定

       Page Directory:页中某些记录的相对位置,也就是各个槽对应的记录在页面中的地址偏移量;大小不固定,插入的记录越多,这个部分占用的空间就越多

       File Trailer:用于检验页是否完整,占固定的8字节

       每个记录的头信息中都有一个 next_record 属性,从而可以使页中的所有记录串联成一个单向链表

5.3  InnoDB 会把页中的记录划分为若干个组,每个组的最后一个记录的地址偏移量作为一个槽,存放在 Page Directory 中,一个槽占用2字节。在一个页中根据主键查找记录是非常快的,分为两步:

        1.  通过二分法确定该记录所在分组对应的槽,并找到该槽所在分组中主键值最小的那条记录

        2.  通过记录的 next_record 属性遍历该槽所在的组中的各个记录

5.4  每个数据页的 File Header 部分都有上一个页和下一个页的编号,所以所有的数据页会组成一个双向链表
5.5  在将页从内存刷新到磁盘时,为了保证页的完整性,页首和页尾都会存储页中数据的校验和,以及页面最后修改时对应的 LSN 值(页尾只会存储 LSN 值的后4字节)。如果页首和页尾的校验和以及 LSN 值检验不成功,就说明刷新期间出现了问题

第六章  快速查询的秘籍—— B+ 树索引

6.1  InnoDB 存储引擎的索引是一颗 B+ 树,完整的用户记录都存储在 B+ 树第0层的叶子节点其他层次的节点都属于内节点,内节点中存储的是目录项记录  

6.2  InnoDB 的索引分为两种:

       聚簇索引:以主键值的大小作为页和记录的排序规则,在叶子节点处存储的记录包含了表中所有的列

       二级索引:以索引列的大小作为页和记录的排序规则,在叶子节点处存储的记录内容是索引列+主键

6.3  InnoDB 存储引擎的 B+ 树根节点自创建之日起就不在移动
6.4  在二级索引的 B+ 树内节点中,目录项记录由索引列的值、主键值和页号组成
6.5  一个数据页至少可以容纳2条记录
6.6  MyISAM 存储引擎的数据和索引分开存储,这种存储引擎的索引全部都是二级索引,在叶子节点处存储的是列+行号(对于定长记录格式是记录来说)

第七章  B+ 树索引的使用

7.1  为了方便理解,我们简化了 B+ 树索引的示意图,在其中省略了页面结构,只保留了叶子节点中的记录

第八章  数据的家——MYSQL 的数据目录

第九章  存放页面的大池子——InnoDB 的表空间

第十章  条条大路通罗马——单表访问方法

第十一章  两个表的亲密接触——连接的原理

第十二章  谁便宜就选谁——基于成本的优化

第十三章  兵马未动,粮草先行——InnoDB 统计数据是如何收集的

第十四章  基于规则的优化(内含子查询优化三两事)

第十五章  查询优化的百科全书——EXPLAIN 详解

第十六章  神兵利器——optimizer trace 的神奇功效

第十七章  调节磁盘和 CPU 的矛盾——InnoDB 的 Buffer Pool

第十八章  从猫爷借钱说起——事务简介

第十九章  说过的话就一定要做到——redo 日志

第二十章  后悔了怎么办——undo 日志

第二十一章  一条记录的多副面孔——事务隔离级别和 MVCC

第二十二章  工作面试老大难——锁  

你可能感兴趣的:(mysql,数据库,java)