[关闭]
@lniwn 2017-10-17T21:46:39.000000Z 字数 777 阅读 682

SQLite学习笔记

数据库


SQLite执行过程

SQLite执行有三个大的步骤
image.png-196kB
SQLite首先创建或者打开一个数据库,然后执行相应的SQL语句,最后关闭数据库,这也是数据库操作的一般步骤。在执行SQL命令过程中,又分为了三个阶段,在Prepare阶段,输入的SQL语句通过分析器(parser),分词器(tokenizer)和代码生成器(code generator)编译成VDBE字节码。传入sqlite3VdbeExec函数的Vdbe类型指针变量p中,已经包含了所有需要执行的操作码(如图3-2)。p中的aOp的官方解释为:Space to hold the virtual machine‘s program,根据图3-3可以看出,aOp是存放操作符的空间。
image.png-151.5kB
image.png-200.4kB
在执行阶段,虚拟机执行操作符,执行过程是一个步进的过程,每一步都是由sqlite3_step函数启动,并由sqlite3VdbeExec函数执行由Prepare阶段编译的操作符。在Final阶段,先是执行sqlite3VdbeFinalize函数关闭VDBE,然后执行sqlite_finalize()函数结束SQLite的执行。
image.png-54.5kB

SELECT的语法图

image.png-19.4kB
上图只是语法的书写顺序,而select的执行顺序:
1. FROM
2. ON
3. JOIN
4. WHERE
5. GROUP BY
6. WITH CUBE or WITH ROLLUP
7. HAVING
8. SELECT
9. DISTINCT
10. ORDER BY
11. TOP 先进行From,将表进行连接,查询出的是个“笛卡尔积”集,然后交给on子句连接过滤,再交给where进行条件过滤,再进行Group分组,再进行having过滤分组,再进行select输出,如果有order,limit,offset再对结果集进行排序,再返回限定行数和限定偏移量的结果集。

参考页面

SQlite源码分析

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注