1.什么是SQL?
SQL 是一种操作数据库的语言,包括创建数据库、删除数据库、查询记录、修改记录、添加字段等。SQL 虽然是一种被 ANSI 标准化的语言,但是它有很多不同的实现版本。(ANSI 是 American National Standards Institute 的缩写,中文译为“美国国家标准协会”。)SQL 是 Structured Query Language 的缩写,中文译为“结构化查询语言”。
- SQL 是一种计算机语言,用来存储、检索和修改关系型数据库中存储的数据。
- SQL 是关系型数据库的标准语言,所有的关系型数据库管理系统(RDBMS),比如MySQL、Oracle、SQL Server、MS Access、Sybase、Informix、Postgres 等,都将 SQL 作为其标准处理语言。此外,SQL 也有一些变种,就像中文有很多方言,比如:
- 微软的 SQL Server 使用 T-SQL;
- Oracle 使用 PL/SQL;
- 微软 Access 版本的 SQL 被称为 JET SQL(本地格式)。
1.1SQL的用途
- 允许用户访问关系型数据库系统中的数据
- 允许用户描述数据
- 允许用户定义数据库中的数据,并处理该数据
- 允许将 SQL 模块、库或者预处理器嵌入到其它编程语言中
- 允许用户创建和删除数据库、表、数据项(记录)
- 允许用户在数据库中创建视图、存储过程、函数
- 允许用户设置对表、存储过程和视图的权限
2.SQL执行过程与基础命令
当你在任何一款 RDBMS 中执行 SQL 命令时,系统首先确定执行请求的最佳方式,然后 SQL 引擎将会翻译 SQL 语句,并处理请求任务。整个执行过程包含了多种组件,比如:1、查询调度程序 2、优化引擎 3、传统的查询引擎 4、SQL 查询引擎。
传统查询引擎能够处理所有的非 SQL 命令,但是 SQL 引擎并不能处理逻辑文件。
3.SQL解析器的组成
在SQL标准中,确定了SQL的关键字以及语法规则信息,SQL 解析器在做词法分析的过程中会将一个SQL语句根据关键字信息以及间隔信息划分为独立的原子单位,每个单位以一个词的方式展现。例如:SELECT w_name FROM warehouse WHERE w_no = 1;
SQL语句在数据库管理系统中的编译过程符合编译器实现的常规过程,需要进行词法分析、语法分析和语义分析。
- 词法分析:从查询语句中识别出系统支持的关键字、标识符、运算符、终结符等,确定每个词固有的词性。
- 语法分析:根据SQL的标准定义语法规则,使用词法分析中产生的词去匹配语法规则,如果一个 SQL 语句能够匹配一个语法规则,则生成对应的抽象语法树(Abstract Syntax Tree,AST)。
- 语义分析:对语法树进行有效性检查,检查语法树中对应的表、列、函数、表达式是否有对应的元数据,将抽象语法树转换为逻辑执行计划(关系代数表达式)。
3.1SQL解析器—语法分析(AST)
抽象语法树(Abstract Syntax Tree,AST),或简称语法树(Syntax tree),是源代码语法结构的一种抽象表示。它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。语法分析会根据词法分析获得的词来匹配语法规则,最终生成一个抽象语法树,每个词作为语法树的叶子节点出现。
4.TIDB—SQL层架构图
5.OceanBase—SQL层架构图