

新闻资讯
技术学院SQL解析分三阶段:词法分析切分token并标注类型;语法分析依BNF规则构建AST验证结构合法性;语义分析结合元数据校验对象存在性、权限及类型兼容性。
SQL解析不是一步到位的操作,而是分阶段层层推进的过程。核心环节就三个:把语句切分成“词”,检查这些“词”是否按规则排列,再确认它们在数据库里有没有实际意义。后面优化和执行属于后续动作,解析本身止步于语义校验完成。
这一步像查字典——把一整段SQL文本从左到右扫描,识别出关键字、标识符、运算符、数字、字符串、标点等基本单元,统称token。空格、换行、注释全被跳过。
SELECT(关键字)、*(通配符)、FROM(关键字)、users(标识符)、WHERE(关键字)、age(标识符)、>(运算符)、25(数字)、;(结束符)age不是普通字符串,而是“列名类标识符”;SELECT被标记为保留关键字,不能用作表名或字段名词法输出的token序列交给语法分析器,它依据SQL的BNF文法(如)判断组合是否合法,并生成抽象语法树(AST)。
SELECT name FROM users 能顺利构造出根节点为SELECT、子节点含列列表和表名的树;而 SELECT FROM users 因缺少目标列,会在语法层直接报错WHERE age > 25 在树中表现为一个条件节点,下挂字段节点、运算符节点和常量节点语法正确的SQL未必能运行。语义分析负责对接数据库元数据,确认所有引用对象真实存在且逻辑自洽。
users表是否存在、age列是否属于该表、其数据类型是否支持>比较(比如text类型就不行)
users表的SELECT权限?有没有访问age列的细粒度授权?WHERE age = '25'中字符串与整数比较,可能触发全表扫描,部分数据库会在此阶段给出警告这三个阶段环环相扣,任一环节失败都会中止解析并返回错误。理解它们,就能快速定位是拼写错了关键字(词法)、漏写了FROM(语法),还是查了不存在的列(语义)。