一、mysql体系结构
MySQL 体系结构是指 MySQL 数据库系统的内部组成和运行机制,它包括三个主要层次:应用层、服务层和存储引擎层。
应用层是 MySQL 体系结构的最上层,它提供了应用程序接入 MySQL 服务的接口,主要包括以下内容:
- 连接处理:负责建立、维护和断开客户端和服务器之间的连接。
- 用户鉴权:负责验证客户端的身份和权限,以及加密通信。
- 安全管理:负责防止 SQL 注入等攻击,以及备份和恢复数据。
服务层是 MySQL 体系结构的核心层,它完成了大多数的核心服务功能,主要包括以下内容:
- SQL 接口:负责接收客户端的 SQL 命令,并返回执行结果。
- 查询解析器:负责对 SQL 命令进行语法分析和语义检查,生成解析树。
- 查询优化器:负责对解析树进行优化,选择最佳的执行计划。
- 查询缓存:负责缓存常用的查询结果,提高查询效率。
- 存储引擎 API:负责与不同的存储引擎进行通信,屏蔽底层差异。
存储引擎层是 MySQL 体系结构的最下层,它负责数据的存储和读取,主要包括以下内容:
- 存储引擎:负责实现不同的数据存储方式,如 InnoDB、MyISAM、Memory 等。
- 数据文件:负责将数据存储在文件系统中,如 .frm、.ibd、.myd、.myi 等。
二、存储引擎概述
存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可被称为表类型。
2.1查询建表语句
2.2指定存储引擎
MySQL 在创建表时,可以通过 ENGINE 来指定存储引擎,在 create 语句最后加上 engine=存储引擎; 即可
create table user ( id int not null, name varchar(30) default null, pwd varchar(30) default null, primary key(id) ) engine=InnoDB;
MySQL 支持多种不同的存储引擎,每种存储引擎都有自己的特点和适用场景。一些常见的存储引擎有:
- InnoDB:一个支持事务、行级锁、外键约束和自动恢复的存储引擎,适合处理更新密集和事务型的表。
- MyISAM:一个不支持事务、表级锁、全文索引和压缩的存储引擎,适合处理选择密集和插入密集的表。
- Memory:一个将数据存储在内存中的存储引擎,提供了很高的性能,但数据不持久化,适合处理临时和小型的表。
- CSV:一个将数据存储在 CSV 格式文件中的存储引擎,方便数据的导入和导出,但不支持索引和分区,适合处理简单和可移植的表。
- Archive:一个用于归档数据的存储引擎,只支持插入和查询操作,不支持索引和更新操作,适合处理大量且不常变化的表。
2.3查询支持引擎
三、 存储引擎InnoDB
介绍
InnoDB是一种兼顾高可靠性和高性能的通用存储引擎,在 MySQL 5.5 之后,InnoDB是默认的 MySQL 存储引擎。
特点
- DML操作遵循ACID模型,支持事务;
- 行级锁,提高并发访问性能;
- 支持外键 FOREIGN KEY约束,保证数据的完整性和正确性;
文件
xxx.ibd:xxx代表的是表名,innoDB引擎的每张表都会对应这样一个表空间文件,存储该表的表结构(frm、sdi)、数据和索引。
参数:innodb_file_per_table
四、MyISAM
介绍
MyISAM是MySQL早期的默认存储引擎。
特点
- 不支持事务,不支持外键
- 支持表锁,不支持行锁
- 访问速度快
文件
xxx.sdi:存储表结构信息
xxx.MYD: 存储数据
xxx.MYI: 存储索引
五、存储引擎Memory
介绍
Memory引擎的表数据时存储在内存中的,由于受到硬件问题、或断电问题的影响,只能将这些表作为临时表或缓存使用。
特点
- 内存存放
- hash索引(默认)
文件
xxx.sdi:存储表结构信息