MySQL 可以分为 Server 层和存储引擎层两部分。
连接器负责跟客户端建立连接、获取权限、维持和管理连接。
MySQL 优先从内存缓存中查询是否已经执行语句。之前执行过的语句及其结果可能会以 key-value 对的形式,被直接缓存在内存中。
如果语句不在查询缓存中,就会继续后面的执行阶段。执行完成后,执行结果会被存入查询缓存中。
不建议使用查询缓存:
分析器对SQL语句进行词法分析和语法分析。将字符串识别成表名、列名、操作名。 解析器处理语法和解析查询, 生成一课对应的解析树。
优化器会在执行SQL语句时,选择更优的执行方案。
执行器开始执行语句,首先判断执行查询的权限,然后根据引擎定义,使用引擎提供的接口。
Q:查询不存在的列,是在哪个阶段报出的错误的呢?
A:分析器。