编译原理实战课
宫文学
北京原点代码 CEO
26066 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 55 讲
真实编译器解析篇 (19讲)
编译原理实战课
15
15
1.0x
00:00/00:00
登录|注册

25 | MySQL编译器(一):解析一条SQL语句的执行过程

文档数据库的查询语言
数据操作类DSL
DSL技术理解
编译技术理解
解析树的节点
解析树的根节点
LALR算法
bison工具
字符集
特定领域的模型、术语
声明式
特定领域语言
声明式
打印调用栈
查询姓和名
my_message_sql
dispatch_command
调试工具附加到mysqld进程
连接数据库服务器
运行MySQL服务器
初始化数据库
DSL技术
数据库领域
数据修改
数据查询
LR算法的运行原理
MySQL的语法分析器
SQL语言特点
GDB跟踪MySQL执行
DFA
移进和规约
解析树和AST
语法分析器
词法分析器
MySQL源代码
DSL特点
特点
GDB调试工具
查询命令
程序入口
Debug模式编译MySQL
编译技术
SQL语句
参考资料
一课一思
课程小结
LR算法
词法和语法分析
SQL语言
MySQL执行SQL语句
跟踪MySQL的运行
MySQL编译器
数据库系统
MySQL编译器

该思维导图由 AI 生成,仅供参考

你好,我是宫文学。现在,就到了我们编译之旅的最后一站了,我们一起来探索一下 MySQL 编译器。
数据库系统能够接受 SQL 语句,并返回数据查询的结果,或者对数据库中的数据进行修改,可以说几乎每个程序员都使用过它。
而 MySQL 又是目前使用最广泛的数据库。所以,解析一下 MySQL 编译并执行 SQL 语句的过程,一方面能帮助你加深对数据库领域的编译技术的理解;另一方面,由于 SQL 是一种最成功的 DSL(特定领域语言),所以理解了 MySQL 编译器的内部运作机制,也能加深你对所有使用数据操作类 DSL 的理解,比如文档数据库的查询语言。另外,解读 SQL 与它的运行时的关系,也有助于你在自己的领域成功地使用 DSL 技术。
那么,数据库系统是如何使用编译技术的呢?接下来,我就会花两讲的时间,带你进入到 MySQL 的内部,做一次全面的探秘。
今天这一讲,我先带你了解一下如何跟踪 MySQL 的运行,了解它处理一个 SQL 语句的过程,以及 MySQL 在词法分析和语法分析方面的实现机制。
好,让我们开始吧!

编译并调试 MySQL

按照惯例,你要下载MySQL 的源代码。我下载的是 8.0 版本的分支。
源代码里的主要目录及其作用如下,我们需要分析的代码基本都在 sql 目录下,它包含了编译器和服务端的核心组件。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了MySQL编译器的执行过程及其对SQL语句的处理。首先介绍了MySQL的源代码结构和编译调试的步骤,然后详细讲解了MySQL执行SQL语句的过程,包括词法分析和语法分析的实现机制。强调了SQL作为一种特定领域语言(DSL)的声明式特性和与高级语言的区别。文章还详细阐述了词法分析器和语法分析器的实现细节,展示了MySQL编译器的内部实现机制。此外,介绍了MySQL编译器生成的解析树和AST的结构,以及MySQL采用的LALR算法。通过本文的阅读,读者可以加深对数据库领域的编译技术的理解,以及对DSL技术的应用有所启发。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《编译原理实战课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(4)

  • 最新
  • 精选
  • Fan
    宫老师,按照这篇文章https://www.codeleading.com/article/90351944418/ 用xcode build mysqld这个项目时,报下面的错误。请问老师知道是哪里出现了问题。 dyld: Symbol not found: __ZN20wireless_diagnostics6google8protobuf2io16CodedInputStream24default_recursion_limit_E Referenced from: /System/Library/PrivateFrameworks/WirelessDiagnostics.framework/Versions/A/Libraries/libAWDSupport.dylib。 Expected in: /Users/xxx/Documents/mysql-server/bld_debug/library_output_directory/Debug/libprotobuf-lite.dylib in /System/Library/PrivateFrameworks/WirelessDiagnostics.framework/Versions/A/Libraries/libAWDSupport.dylib

    作者回复: 我没用过xcode编译,而是用cmake编译的,在macos和linux上都编译过。也建议你不要太依赖IDE,直接拿debug工具调试挺好的:-) 参考:https://dev.mysql.com/doc/internals/en/cmake.html

    2020-08-20
    2
    2
  • myrfy
    没有自己开发过dsl,但是经常会用json作为配置文件,通过json格式的结构来描述一个类似于AST的结构,然后写一个解释器按照自己定义的规则去执行操作。 相当于人肉做了前端工作吧,等有时间了,可以自己去试着写一个前端部分,自己编写一套语法规则

    作者回复: 多谢分享!

    2020-07-31
    2
    2
  • 日就月将
    老师 mysql root用户缺省的密码 在哪里查看

    作者回复: 在网上搜一下:-)

    2021-07-28
  • 吃饭
    老师,尝试可很久去debug mysql,还是不知道怎么搞,c++/c之类的的确不怎么熟,能详细描述一下吗?
    2021-07-25
收起评论
显示
设置
留言
4
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部