SQL解析分三阶段:词法分析切分token并标注类型;语法分析依BNF规则构建AST验证结构合法性;语义分析结合元数据校验对象存在性、权限及类型兼容性。

SQL解析不是一步到位的操作,而是分阶段层层推进的过程。核心环节就三个:把语句切分成“词”,检查这些“词”是否按规则排列,再确认它们在数据库里有没有实际意义。后面优化和执行属于后续动作,解析本身止步于语义校验完成。
词法分析:把SQL字符串切成有意义的“词”
这一步像查字典——把一整段SQL文本从左到右扫描,识别出关键字、标识符、运算符、数字、字符串、标点等基本单元,统称token。空格、换行、注释全被跳过。
-
SELECT * FROM users WHERE age > 25; 会被拆成:
SELECT(关键字)、*(通配符)、FROM(关键字)、users(标识符)、WHERE(关键字)、age(标识符)、>(运算符)、25(数字)、;(结束符) - 每个token带类型标签,比如
age不是普通字符串,而是“列名类标识符”;SELECT被标记为保留关键字,不能用作表名或字段名 - 底层常用确定有限自动机(DFA)实现,靠预定义状态转移规则精准识别边界,比如遇到单引号就进入字符串模式,直到下一个匹配的单引号才退出
语法分析:用语法规则组装成树形结构
词法输出的token序列交给语法分析器,它依据SQL的BNF文法(如)判断组合是否合法,并生成抽象语法树(AST)。
eSiteGroup站群管理系统是基于eFramework低代码开发平台构建,是一款高度灵活、可扩展的智能化站群管理解决方案,全面支持SQL Server、SQLite、MySQL、Oracle等主流数据库,适配企业级高并发、轻量级本地化、云端分布式等多种部署场景。通过可视化建模与模块化设计,系统可实现多站点的快速搭建、跨平台协同管理及数据智能分析,满足政府、企业、教育机构等组织对多站点统一管控的
- 合法语句如
SELECT name FROM users能顺利构造出根节点为SELECT、子节点含列列表和表名的树;而SELECT FROM users因缺少目标列,会在语法层直接报错 - AST不包含具体值或执行逻辑,只反映结构关系。例如
WHERE age > 25在树中表现为一个条件节点,下挂字段节点、运算符节点和常量节点 - 不同数据库的AST细节有差异,但主干一致:查询类型、涉及表、筛选条件、排序字段、分组字段等都对应明确的子树
语义分析:验证“说得对不对”,而非“说得顺不顺”
语法正确的SQL未必能运行。语义分析负责对接数据库元数据,确认所有引用对象真实存在且逻辑自洽。
- 查系统表,确认
users表是否存在、age列是否属于该表、其数据类型是否支持>比较(比如text类型就不行) - 检查用户权限:当前账号是否有读取
users表的SELECT权限?有没有访问age列的细粒度授权? - 识别隐式类型转换风险,比如
WHERE age = '25'中字符串与整数比较,可能触发全表扫描,部分数据库会在此阶段给出警告
这三个阶段环环相扣,任一环节失败都会中止解析并返回错误。理解它们,就能快速定位是拼写错了关键字(词法)、漏写了FROM(语法),还是查了不存在的列(语义)。









