@lniwn
2017-10-17T21:46:39.000000Z
字数 777
阅读 682
数据库
SQLite执行有三个大的步骤
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是存放操作符的空间。
在执行阶段,虚拟机执行操作符,执行过程是一个步进的过程,每一步都是由sqlite3_step函数启动,并由sqlite3VdbeExec函数执行由Prepare阶段编译的操作符。在Final阶段,先是执行sqlite3VdbeFinalize函数关闭VDBE,然后执行sqlite_finalize()函数结束SQLite的执行。
上图只是语法的书写顺序,而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再对结果集进行排序,再返回限定行数和限定偏移量的结果集。