50 MySQL 内部核心模块与作用
| 核心模块 | 主要作用 |
|---|---|
| 1. 连接器(Connection Manager) | 管理客户端连接,权限认证,维持连接状态、线程管理等 |
| 2. 查询缓存 (Query Cache) | 已放弃(MySQL 8.0) |
| 3.分析器(Parser) | 词法解析SQL,识别关键字、表名、字段名,生成语法树 |
| 4. 优化器(Optimizer) | 选择最优的执行计划(如索引选择,连接顺序等) |
| 5.执行器(Executor) | 调用存储引擎,按执行计划真正执行SQL语句 |
| 6..存储引擎(Storage Engine) | 数据的实际存储与访问,如 InnoDB,MyISAM、Memory 等 |
| 7. 日志与事务管理(Log & TXN) | 管理 redo/undo日志、事务提交回滚、崩溃恢复 |
客户端
↓
连接器 → 分析器 → 优化器 → 执行器 → 存储引擎
↓
日志系统、事务系统
Parser:解析器:
51 MySQL 查询语句执行过程(执行流程)
SELECT name FROM users WHERE id = 1001;
客户端 SQL
↓
[连接器] ———→ 连接验证、线程管理
↓
[分析器] ———→ SQL语法/词法检查,生成语法树
↓
[优化器] ———→ 生成并选择最优执行计划(如:走哪个索引)
↓
[执行器] ———→ 解析执行计划,调用引擎接口
↓
[InnoDB 引擎] —→ 读取数据页/索引页(Buffer Pool)
↓
[结果缓存 & 返回]
52 MySQL 提示“不存在此列”是执行到哪个节点报出的?
分析器(Parser)阶段
当MySQL接收到SQL语句时,会经过词法分析和语法分析,在此过程中,分析器验证SQL中引用的字段名(列)、表名、函数名等是否存在。
客户端 → 连接器 → ✅ 分析器(出错) → 优化器 ❌(未执行) → 执行器 ❌
数据字典(**Data Dictionary,**基于InnoDB存储)
表的信息会存储在,数据字典。
通过 inforamation_schema.columns 查看
SELECT
*
FROM
information_schema.columns
WHERE
table_schema = 'exp' -- 数据库名
AND table_name = 'users'; -- 表名
其他查看方式
use exp -- 切换数据库到 exp 库
SHOW CREATE TABLE table_name; -- 查看建表语句,包含字段定义和约束
/*
| users | CREATE TABLE `users` (
`id` int NOT NULL,
`name` varchar(100) COLLATE utf8mb4_general_ci DEFAULT NULL,
`email` varchar(100) COLLATE utf8mb4_general_ci DEFAULT NULL,
`age` int DEFAULT NULL,
`city` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,
`created_at` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_name` (`name`),
KEY `idx_age` (`age`),
KEY `idx_city_age_email` (`city`,`age`,`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci |
*/
SHOW tables
+---------------+
| Tables_in_exp |
+---------------+
| customer |
| employees |
| products |
| users |
+---------------+
SHOW columns from users;
+------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+-------+
| id | int | NO | PRI | NULL | |
| name | varchar(100) | YES | MUL | NULL | |
| email | varchar(100) | YES | | NULL | |
| age | int | YES | MUL | NULL | |
| city | varchar(50) | YES | MUL | NULL | |
| created_at | datetime | YES | | NULL | |
+------------+--------------+------+-----+---------+-------+