前言
工作中是否经常经常在sql查询中遇到类似Unknown column ‘xxx’ in ‘where clause
这种报错,本文将带你简单了解sql语句在系统是的执行流程,找到问题的根本原因。
一、MySQL的组成部分
MYSQL内部可大致分为
server层
和存储引擎层
两部分。
1. server层
Server层包括连接器、查询缓存、分析器、优化器、执行器、内置函数(如日期、时间、数学和加密函数等)、存储过程、触发器、视图等相关服务组件。
2. 存储引擎层
存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持InnoDB、MyISAM、Memory等多种存储引擎。
二、SQL语句的执行流程
1. 执行流程
- 客户端通过
连接器
连接mysql服务,验证身份信息和权限信息;分析器
对sql语句进行词法、语法检查(包括字段-表-库是否存在);优化器
根据成本计算得出采用哪些索引,连表顺序;执行器
判断是否有表权限,之后访问引擎
接口,读出数据;
2.定位错误的出现位置
由此可见当前错误一般出现在分析器中,原因是字段或表名称不存在,无法通过分析器返回错误。
总结
本文主要简单总结了MYSQL的查询执行流程,MYSQL组成部分在查询中的作用。如有错误或疑问,请各位大佬前辈们指正。
[参考文档]:MySql45讲