From 8238c1ac36d0a61bc0c6e256a5b7bc8172245cc4 Mon Sep 17 00:00:00 2001 From: rentc Date: Fri, 9 Sep 2022 10:33:43 +0000 Subject: [PATCH 1/2] =?UTF-8?q?update=20content/zh/post/rentc/SQL=E5=BC=95?= =?UTF-8?q?=E6=93=8E-=E8=AF=8D=E6=B3=95=E5=88=86=E6=9E=90.md.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: rentc --- ...15\346\263\225\345\210\206\346\236\220.md" | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git "a/content/zh/post/rentc/SQL\345\274\225\346\223\216-\350\257\215\346\263\225\345\210\206\346\236\220.md" "b/content/zh/post/rentc/SQL\345\274\225\346\223\216-\350\257\215\346\263\225\345\210\206\346\236\220.md" index 1f08935d..cc3b290b 100644 --- "a/content/zh/post/rentc/SQL\345\274\225\346\223\216-\350\257\215\346\263\225\345\210\206\346\236\220.md" +++ "b/content/zh/post/rentc/SQL\345\274\225\346\223\216-\350\257\215\346\263\225\345\210\206\346\236\220.md" @@ -16,4 +16,27 @@ img = "/zh/post/Rentc/title/title.jpg" times = "18:40" -+++
前言:是数据库重要的子系统之一。SQL引擎负责对用户输入的SQL语言进行编译,生成可执行的执行计划,然后将执行计划交给执行引擎进行执行。
SQL引擎包括:
1.解析器,根据SQL语句生成一棵语法解析树(parse tree)。
2. 分析器 , 对语法解析树进行语义分析 ,生成一 棵查询树( query tree)。
3.重写器,按照规则系统中存在的规则对查询树进行改写。
4.计划器,基于查询树生成一棵执行效率最高的计划树(plan tree)。
5.执行器,按照计划树中的顺序访问表和索引,执行相应查询。
SQL解析对输入的SQL语句进行词法分析、语法分析、语义分析,获得查询解析树或者逻辑计划。这篇文章主要是介绍词法分析。
词法分析:从查询语句中识别出系统支持的关键字、标识符、操作符、终结符等,每个词确定自己固有的词性。
1.词法结构和语法结构分别由scan.l和gram.y文件定义,并通过lex和yacc分别编译成scan.cpp和gram.cpp文件。
2.raw_parser:Lex ( Lexical Analyzar) 词法分析工具,在文件 scan.l里定义。负责识别标识符,SQL 关键字等,对于发现的每个关键字或者标识符都会生成一个记号并且传递给分析器;Yacc (Yet Another Compiler Compiler) 语法分析器,在文件 gram.y里定义。包含一套语法规则和触发规则时执行的动作.
3.由lex工具进行词法分析。lex工具通过对已经定义好的词法文件进行编译,生成词法分析的代码。 词法文件是scan.l,它根据SQL语言标准对SQL语言中的关键字、标识符、操作符、常量、终结符进行了定义和识别
4.词法分析将一个SQL划分成多个不同的token,每个token会有自己的词性。由三部分组成,分别是名字、Token值、类别。名字是字符串原型,Token值是一个int型的数。kwlist.h中定义了大量的关键字
举例说明:
![image.png](https://cdn.nlark.com/yuque/0/2022/png/29767082/1662717423884-bd4f2443-185d-4b97-a74b-b63f5a62d7b6.png#clientId=u8068a7c7-6502-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=26&id=u264c2ec0&margin=%5Bobject%20Object%5D&name=image.png&originHeight=32&originWidth=537&originalType=binary&ratio=1&rotation=0&showTitle=false&size=6780&status=done&style=none&taskId=u3ab17660-b27d-4d6e-a2cb-c171d350b52&title=&width=429.6)
![image.png](https://cdn.nlark.com/yuque/0/2022/png/29767082/1662717437491-343f2d6a-8734-47d3-b720-553c47dd2c15.png#clientId=u8068a7c7-6502-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=258&id=u3b341ec7&margin=%5Bobject%20Object%5D&name=image.png&originHeight=322&originWidth=353&originalType=binary&ratio=1&rotation=0&showTitle=false&size=14853&status=done&style=none&taskId=u48f58901-1c19-4b4e-8ab4-b721d9b105d&title=&width=282.4) ++++ +前言:是数据库重要的子系统之一。SQL引擎负责对用户输入的SQL语言进行编译,生成可执行的执行计划,然后将执行计划交给执行引擎进行执行。 +SQL引擎包括: + +1.解析器,根据SQL语句生成一棵语法解析树(parse tree)。 + +2. 分析器 , 对语法解析树进行语义分析 ,生成一 棵查询树( query tree)。 + +3.重写器,按照规则系统中存在的规则对查询树进行改写。 + +4.计划器,基于查询树生成一棵执行效率最高的计划树(plan tree)。 + +5.执行器,按照计划树中的顺序访问表和索引,执行相应查询。 + +SQL解析对输入的SQL语句进行词法分析、语法分析、语义分析,获得查询解析树或者逻辑计划。这篇文章主要是介绍词法分析。 +词法分析:从查询语句中识别出系统支持的关键字、标识符、操作符、终结符等,每个词确定自己固有的词性。 + +1.词法结构和语法结构分别由scan.l和gram.y文件定义,并通过lex和yacc分别编译成scan.cpp和gram.cpp文件。 + +2.raw_parser:Lex ( Lexical Analyzar)词法分析工具,在文件 scan.l里定义。负责识别标识符,SQL 关键字等,对于发现的每个关键字或者标识符都会生成一个记号并且传递给分析器;Yacc (Yet Another Compiler Compiler) 语法分析器,在文件 gram.y里定义。包含一套语法规则和触发规则时执行的动作. + +3.由lex工具进行词法分析。lex工具通过对已经定义好的词法文件进行编译,生成词法分析的代码。 词法文件是scan.l,它根据SQL语言标准对SQL语言中的关键字、标识符、操作符、常量、终结符进行了定义和识别 + +4.词法分析将一个SQL划分成多个不同的token,每个token会有自己的词性。由三部分组成,分别是名字、Token值、类别。名字是字符串原型,Token值是一个int型的数。kwlist.h中定义了大量的关键字 \ No newline at end of file -- Gitee From 716cc2fa92c1e2a29d0b6bafcf5edcf7e6ae8f9b Mon Sep 17 00:00:00 2001 From: rentc Date: Wed, 28 Sep 2022 10:21:19 +0000 Subject: [PATCH 2/2] =?UTF-8?q?update=20content/zh/post/rentc/SQL=E5=BC=95?= =?UTF-8?q?=E6=93=8E-=E8=AF=8D=E6=B3=95=E5=88=86=E6=9E=90.md.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: rentc --- ...223\216-\350\257\215\346\263\225\345\210\206\346\236\220.md" | 2 ++ 1 file changed, 2 insertions(+) diff --git "a/content/zh/post/rentc/SQL\345\274\225\346\223\216-\350\257\215\346\263\225\345\210\206\346\236\220.md" "b/content/zh/post/rentc/SQL\345\274\225\346\223\216-\350\257\215\346\263\225\345\210\206\346\236\220.md" index cc3b290b..ef3c7d82 100644 --- "a/content/zh/post/rentc/SQL\345\274\225\346\223\216-\350\257\215\346\263\225\345\210\206\346\236\220.md" +++ "b/content/zh/post/rentc/SQL\345\274\225\346\223\216-\350\257\215\346\263\225\345\210\206\346\236\220.md" @@ -17,7 +17,9 @@ img = "/zh/post/Rentc/title/title.jpg" times = "18:40" +++ + 前言:是数据库重要的子系统之一。SQL引擎负责对用户输入的SQL语言进行编译,生成可执行的执行计划,然后将执行计划交给执行引擎进行执行。 + SQL引擎包括: 1.解析器,根据SQL语句生成一棵语法解析树(parse tree)。 -- Gitee