为了方便管理,人们把MySQL服务器处理请求的过程简单地划分为 server 层和存储引擎层。
所以在 server 层完成了查询优化后,只需按照生成的执行计划调用底层存储引擎提供的接口获取到数据后返回给客户端就好了。
不过需要注意的一点是,server 层和存储引擎层交互时,一般是以记录为单位的。
以SELECT 语句为例,server 层根据执行计划先向存储引擎层取一条记录,然后判断是否符合 WHERE 条件,如果符合,就发送给客户端,否则跳过该记录然后继续向存储引擎索要下一条记录;依此类推。
注:
server 层在判断某条记录符合要求之后,其实是先将其发送到一个缓冲区,待到该缓冲区满了,才向客户端发送真正的记录。该缓冲区大小由系统变量 net_buffer_length 控制。
MySQL 支持多种存储引擎。
我们最常用的就是 InnoDB 和 MyISAM,偶尔还会提一下 MEMORY。其中 InnoDB 是 MySQL 默认的存储引擎。
存储引擎对某些功能的支持情况如下:
InnoDB 从 MySQL 5.5.5 版本开始作为 MySQL 的默认存储引擎,之前版本的默认存储引擎是 MyISAM。
SHOW ENGINES;
存储引擎是负责对表中数据进行读取和写入工作的,我们可以为不同的表设置不同的存储引擎。也就是说:不同的表可以有不同的物理存储结构、不同的读取和写入方式。
如果创建表时没有指定表的存储引擎,就会使用默认的 InnoDB。
显示地指定表的存储引擎:
CREATE TABLE 表名 (
建表语句;
) ENGINE = 存储引擎名称;
eg:
mysql> CREATE TABLE engine_demo_table (
-> i int
-> ) ENGINE = MyISAM;
Query OK, 0 rows affected (0.02 sec)
ALTER TABLE 表名 ENGINE = 存储引擎名称;
eg:
mysql> ALTER TABLE engine_demo_table ENGINE = InnoDB;
mysql> SHOW CREATE TABLE engine_demo_table\G
************************* 1.row *************************
Table: engine_demo_table
Create Table: CREATE TABLE 'engine_demo_table' (
'i' int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.01 sec)
MySQL 采用客户端/服务端架构,用户通过客户端程序发送增删改查请求,服务器程序收到请求后处理,并且把处理结果返回给客户端。
MySQL 安装目录的 bin 目录下存放了需多可执行文件,其中有一些是服务端程序,有一些时客户端程序。
类 UNIX 系统上启动服务器程序的方式:
在 Windows 系统上启动服务器程序的方式:
启动客户端程序常用语法:
mysql -h 主机名 -u 用户名 -p密码
客户端进程和服务器进程通信方式:
以查询请求为例,服务器程序在处理客户端发送过来的请求时,大致分为以下几个部分。
MySQL 支持的存储引擎有好多种,它们的功能各有侧重,我们常用的就是 InnoDB 和 MyISAM,其中 InnoDB 是服务器程序的默认存储引擎。
存储引擎常用用法:
查看当前服务器程序支持的存储引擎:
SHOW ENGINE;
创建表时指定表的存储引擎:
CREATE TABLE 表名 (
建表语句
) EGINE=存储引擎名称;
修改表的存储引擎
ALTER TABLE 表名 ENGINE=存储引擎名称;