原文链接:https://hackernoon.com/how-sql-database-engine-work-483e32o7
SQL是编程语言还是查询语言?
使用SQL时候,我们可以互换编程语言和查询语言,许多人将SQL视为特殊的编程语言,是因为SQL 引擎包含编译器和垂直计算机:编译器将query编译为过程,虚拟机则运行该过程。SQL引擎编译和执行SQL查询的概念使其成为一种编程语言。 因此,如果有人说SQL是一种编程语言,那么在某种程度上他将被认为是正确的。
如果我们任何一种编程语言都可以创建CRUD操作程序,为什么还要使用SQL?
的确,使用任何一种编程语言,我们都可以创建一个可以执行简单的CRUD(Create Read Update and Delete,创建读取更新和删除)操作的程序,但是当涉及到复杂的查询时,我们必须用几行等价的代码编写数百行 SQL。
SQL概述
SQL代表结构化查询语言,它可以被称为编程语言或查询语言,是SQL与关系数据库进行交互的主要目的,其中关系数据库以表格形式存储数据。 SQL可以管理大量数据,特别是如果数据是同时写入的,并且我们在数据上可以有许多形式上的变化。
当用户使用SQL进行数据管理时,用户可以在数据库之间执行创建,检索,更新和删除数据的功能。 有各种关系数据库管理系统(DBMS),例如MySQL,SQLite,Postgres SQL等,它们都提供相同的功能。
数据库中有一些术语,例如数据库服务器,数据库引擎或数据库管理系统(database management system)。 在数据库中,我们可以互换使用这三个术语,因此当我们说SQL引擎或SQL Server时,不要混淆,它们都是相同的。
什么是数据库引擎?
SQL引擎是一种收集和解释SQL命令的软件,因此可以在关系数据库上执行适当的操作。 SQL引擎的目的是从数据库中创建,读取,更新和删除(CRUD)数据。
SQL引擎或SQL Server数据库引擎包括两个主要组件:存储引擎和查询处理器,如今,一些现代SQL DBMS包含多个存储引擎。 我们有许多类型的SQL引擎,它们都有不同的体系结构,但是用于执行相同的目标,包括对数据库的CRUD操作和许多其他功能。
SQL已覆盖在线市场的很大一部分,许多企业将其SQL系统用于在线事务处理和在线分析处理。
数据库引擎怎么工作?
表面上我们都知道,SQL的编译器编译查询,而虚拟机执行编译的查询。 现在让我们谈谈数据库引擎如何工作。
SQL具有查询编译和执行过程的许多阶段。 每个SQL数据库引擎都包含两个主要组件:编译器和虚拟机,以执行查询。 编译器读取查询并将该查询转换为适当的字节码,然后由虚拟机评估该字节码并向客户端返回适当的响应。
查询的完全执行将类别分为几个主要阶段
编译(解析,检查和语义) Compiling (Parsing, Checks, and Semantics)
捆绑 Binding
优化 Optimising
执行中 Executing
编译-解析
这是编译过程的一部分,在编译过程中,查询语句被标记为带有适当的词法和从句的单个单词。
编译-检查语义
The compiling semitics检查语句的有效性,并将其与系统目录匹配。 此编译阶段验证查询是否有效,还验证用户执行该语句的权限。
编译-捆绑
binding为输入的查询语句创建相应的二进制表示形式。 所有SQL Server引擎都具有此编译状态,在该状态下将生成byte code。
到此编译阶段,该语句已被编译,现在将其发送到数据库服务器以进行优化和执行。
优化
它为byte code优化了最佳算法。 此功能也称为查询优化器或关系引擎。
执行
虚拟机得到了优化后的code然后执行
SQL STATEMENT –> Parsing –>Binding –> Query Optimization –> Query Execution –> Result
注意:解析编译过程不需要数据库的任何许可,这使其成为最快的编译处理阶段。
SQL将数据转换为表
SQL用C语言编写,它使用Binary-Tree原理,使传入的数据存储在Rows和Columns中。 在二叉树结构中,我们有几个分支一直指向新的数据元素,SQL数据库遵循相同的结构,在该结构中,数据被转换成表,其中每一列和每一行数据彼此指向。
SQL引擎将查询处理为多阶段。 查询的处理可以从一个关系DBMS到另一个关系DBMS。 在第一阶段,查询将被解析并转换为兼容格式,例如JASON文件,然后进行另一个编译过程,以检查已解析文件的语义,在编译的最后阶段,已解析文件将转换为相应的字节码 。
第二步是优化,其中将适当的算法(例如排序,搜索等)应用于字节码。 最后,虚拟机执行代码并为客户端提供适当的结果。
什么是SQL Sever 存储引擎
它是用于在磁盘和内存之间执行CRUD(创建,读取,更新和删除)操作的软件。
结论
要创建数据库环境,我们需要SQL数据库引擎,并且为了构建数据库引擎,我们经常使用低级编程语言(例如C ++或C),因为它们使用户可以控制内存管理,在高级编程语言中,内存管理由操作系统自动完成。 SQL引擎是跨平台的,开发人员可以使用不同的平台来构建某些程序,但是所有平台都可以与SQL引擎链接以获取数据库功能。