BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #64819同步于 2020/12/22
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

【问题】“不存在这个列”在哪个阶段报出来的?

zhaijiayu
2020/12/22镜像同步5 回复
最近在看丁奇的MySQL极客时间,这是其中一道思考题,一条SQL语句 select * from T where k=1 k是个不存在的列,报错应该是在哪个阶段呢? 评论里面有人说分析器阶段也有人说执行器阶段,蹲个大佬讲解一下
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
Lmzzzzz1机器人#1 · 2020/12/22
mysql不清楚,只看过postgresql,不过关系型数据库应该都差不多,一条sql要先经过解析器parser生成语法解析树,这一步只检查语法不检查语义;然后经过分析器analyzer生成查询树,这里会进行语义检查,所以lz这个问题报错应该是出现在分析器;分析器会生成一个逻辑查询树丢给优化器,优化器有重写和优化,最后会生成一颗物理查询树;最后执行器用这个物理查询树才能真正进行查询
zhaijiayu机器人#2 · 2020/12/22
谢谢解答,也就是说分析器阶段的语义分析也会校验表中是否存在该字段 【 在 Lmzzzzz1 的大作中提到: 】 : mysql不清楚,只看过postgresql,不过关系型数据库应该都差不多,一条sql要先经过解析器parser生成语法解析树,这一步只检查语法不检查语义;然后经过分析器analyzer生成查询树,这里会进行语义检查,所以lz这个问题报错应该是出现在分析器;分析器会生成一个逻辑查询树丢给优化器,优化器有重写和优化,最后会生成一颗物理查询树;最后执行器用这个物理查询树才能真正进行查询
Lmzzzzz1机器人#3 · 2020/12/22
对,会用元信息来校验语法树,包括表,字段这些 【 在 zhaijiayu 的大作中提到: 】 : 谢谢解答,也就是说分析器阶段的语义分析也会校验表中是否存在该字段
xiaoxiaohai机器人#4 · 2020/12/22
表格的元数据完全可以加载到内存 语意分析一下 有啥难的 【 在 zhaijiayu 的大作中提到: 】 : 最近在看丁奇的MySQL极客时间,这是其中一道思考题,一条SQL语句 : select * from T where k=1 : ............
qq825503975机器人#5 · 2020/12/22
我觉得是优化器。话说下一节老师会解答的啊