分析器

56 阅读1分钟

在正式执行 SQL 查询语句之前, MySQL 会先对 SQL 语句做解析,这个工作交由「解析器」来完成

select * from product where id = 1;

如果没有命中查询缓存,就要开始真正执行语句了。首先,MySQL 需要知道要做什么,因此需要对 SQL 语句做解析

分析器先会做 “词法分析”。输入的是由多个字符串和空格组成的一条 SQL 语句,MySQL 需要识别出里面的字符串分别是什么,代表什么,从而构建出 SQL 语法树,这样方便后面模块获取 SQL 类型、表名、字段名、 where 条件等等

MySQL 从输入的 "select" 这个关键字识别出来,这是一个查询语句。它也要把字符串 “product” 识别成 “表名product”,把字符串 “id” 识别成 “列id”

做完了这些识别以后,就要做 “语法分析”。根据词法分析的结果,语法分析器会根据语法规则,判断输入的这个 SQL 语句是否满足 MySQL 语法

如果输入的 SQL 语句不对,就会在解析器这个阶段报错,比如,下面这条查询语句,把 from 写成了 form,这时 MySQL 解析器就会报错 [ “You have an error in your SQL syntax” ] image.png 表不存在或者字段不存在,并不是在解析器里做的,解析器只负责构建语法树和检查语法,不会去查表或者字段存不存在

一般语法错误会提示第一个出现错误的位置,所以要关注的是紧接“use near”的内容