SQLite学习笔记(3)

SQLite的体系结构介绍:

             SQLite是由接口(Interface)、编译器(Compiler)、虚拟机(Virtual  Machine )和后端程序(Back  End)组成。

           

 

还有另两种对体系结构的图示比较简单:

 

接口(Interface) :

                   由SQLite c  API组成,程序、脚本、库文件等等都是通过它与数据库进行交互的,转化为对API的调用(ODBC和JDBC也一样)。数据库的使用者,通过API与数据库通信。 

编译器(Compiler):

                   包含分词器(Tokenizer)、分析器(Parser)、代码生成器(Code  Generator)。其中,Tokenizer  和Parser 负责检查SQL语言的语法,转化为分层处理的数据结构语法树,送给Code  Genetator 处理成汇编代码,送给VM(虚拟机)执行。 

虚拟机(Virtual  Machine):

                   也叫做虚拟数据库引擎(Virtual  Database  Enegine ),是内核中最重要的一部分。基于寄存器,128个操作指令(opcodes),与系统的OS、CPU、系统体系相互独立,专门处理数据。它的指令集中所有的指令或者用来完成具体的数据库操作(比如打开一个表的游标、做记录、提取一列或者开始一个事务等),或者以某种方式控制栈为完成这些操作做准备。SQLite中的所有SQL语句----从选择和更新记录到创建表、视图以及索引----都是首先编译成虚拟机语言,形成一个独立的定义了如何完成给定的命令的指令集。VDBE是SQLite的核心,它之前的所有模块都是用于创建VDBE程序的,它之后的所有模块都是用于执行VDBE程序的,每次执行一条指令。

后端(Back End):

                   包含B-tree、页缓存(page cache,pager)、操作系统接口(系统调用)。 B-tree和page cache共同对数据进行管理。B-tree的主要功能就是索引,它维护着各个页面之间的复杂的关系,便于快速找到所需数据。而pager的主要作用就是通过OS接口在B-tree和Disk之间传递页面。B-tree的职责就是排序。它维护着多个页之间错综复杂的关系,这些关系能保证快速定位并找到一切有联系的数据。B-tree将页面组织成树状结构(这也是它叫做B-tree的原因),这种组织结构很适合搜索,页面就是树的叶子。

                 详细点说就是: pager(SQLite的一种数据结构)帮助B-tree管理页面,它负责传输。pager根据B-tree的请求从磁盘读取页面或者向磁盘写入页面。磁盘操作是目前计算机必须做的工作中最慢的事情之一。因此pager试图通过将频繁使用的页面缓存在内存中来加速这一操作,从而最小化与硬盘直接交互所花费的时间。pager的功能描述页包含事务管理、数据库锁以及崩溃恢复,其中许多功能是通过OS接口(OS Interface)实现的。像文件锁一样的很多事情在不同的操作系统上实现是不同的。OS接口(OS Interface)为SQLite其他模块提供了屏蔽这些差异的抽象层。最终的结果就是其他模块看到的是一个一致的对外的系统接口。所以,pager不用担心在Windows上以一种方式锁文件,而在其他不同操作系统上(例如UNIX)上使用另一种方式。这就使得SQLite很容易移植到不同的操作系统上。

 注意最后一个图可以这样解释:

                   前端预处理应用程序传递过来的SQL语句和SQLite命令。对获取的编码分析,优化,并转换为后端能够执行的SQLite内部字节编码。后端是用来解释字节编码程序的引擎。该引擎做的才是真正的数据库处理工作。

工具和测试代码:

               工具模块中包含各种各样的实用功能,还有一些如内存分配、字符串比较、Unicode转换之类的公共服务也在工具模块中。这个模块就是一个包罗万象的工具箱,很多其它模块都需要调用和共享它。测试模块中包含了无数的回归测试语句,用来检查数据库代码的每个细微角落。这个模块是SQLite性能如此可靠的原因之一。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
SQLite中,要创建表,可以使用CREATE TABLE语句。这个语句的基本形式是: CREATE TABLE 表名 (列1 数据类型1, 列2 数据类型2, ...) 其中,表名是你要创建的表的名称,列1、列2等是表中的列名称,数据类型1、数据类型2等是列的数据类型。你可以根据需要指定多个列。 举个例子,如果我们要创建一个名为students的表,包含id、name和age三列,其中id是整数类型,name是文本类型,age是整数类型,可以使用以下语句: CREATE TABLE students (id INTEGER, name TEXT, age INTEGER) 这样就创建了一个名为students的表,它有三个列:id、name和age。id和age都是整数类型,name是文本类型。 除了手动创建表,还可以使用CREATE TABLE ... AS SELECT语句根据查询语句的结果创建和填充表内容。例如,如果已经存在一个名为default_table的表,可以使用以下语句创建一个名为new_table的表,并将default_table中的数据复制到new_table中: CREATE TABLE new_table AS SELECT * FROM default_table 这样就创建了一个名为new_table的表,并将default_table中的所有数据复制到new_table中。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [【SQLite学习笔记】创建表](https://blog.csdn.net/AuspiciousChan/article/details/125075753)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值