欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SQLite数据库管理系统-我所认识的数据库引擎

程序员文章站 2022-03-02 18:23:43
sqlite 是一款轻量级的、被设计用于嵌入式系统的关联式数据库管理系统。sqlite 是一个实现自我依赖、纯客户端、零配置且支持事务的数据库引擎。它由d. richard...

sqlite 是一款轻量级的、被设计用于嵌入式系统的关联式数据库管理系统。sqlite 是一个实现自我依赖、纯客户端、零配置且支持事务的数据库引擎。它由d. richard hipp首次开发,目前已是世界上最广泛部署的开源数据库引擎。

本文中,我们将介绍如下内容:

创建一个sqlite 数据库

sqlite 数据插入


sqlite 的事务处理方式

begin transaction:

SQLite数据库管理系统-我所认识的数据库引擎

commit transaction:

SQLite数据库管理系统-我所认识的数据库引擎

rollback transaction:

SQLite数据库管理系统-我所认识的数据库引擎


sqlite 的索引

索引是一种用来优化查询的特性,在数据中分为聚簇索引和非聚簇索引;前者是由数据库中数据组织方式决定的,比如我们在往数据库中一条一条插入数据时,聚簇索引能够保证按顺序插入,插入后数据的位置和结构不变。非聚簇索引是指我们手动、显式创建的索引,可以为数据库中的每个列创建索引,和字典中的索引类似,遵循的原则是对有分散性和组合型的列建立索引,以利于大数据和复杂查询情况下提高查询效率。

SQLite数据库管理系统-我所认识的数据库引擎


简单查询无关数据库大小情况下对查询效率的测试结果如下(700,000条数据):

SQLite数据库管理系统-我所认识的数据库引擎

复杂查询情况下对查询效率的测试结果如下(~40,000条数据):

SQLite数据库管理系统-我所认识的数据库引擎

sqlite 的触发器(trigger)

触发器是指当一个特定的数据库事件(delete, insert, or update)发生以后自动执行的数据库操作,  我们可以把触发器理解为高级语言中的事件(event)。

假设我有两个表

folder(guid vchar(255) not null, deleted boolean default 0)

file(parentguid vchar(255) not null, deleted boolean default 0)

在folder 表中创建一个触发器update_folder_deleted:

创建完触发器以后在执行以下语句:

以上语句将会导致下面的语句自动执行:

sqlite 的视图(view)

视图可以是一个虚拟表,里面可以存储按照一定条件过滤出来的数据集合,这样我们再下次想得到这些特定数据集合的时候就不用通过复杂查询来获得,简单的查询指定视图就可以得到想要的数据。

在下个例子中,我们创建一个简单的视图:

SQLite数据库管理系统-我所认识的数据库引擎

基于上面的查询结果我们创建一个视图:

SQLite数据库管理系统-我所认识的数据库引擎

sqlite 命令行工具

sqlite 库中包含了一个sqlite3.exe 的命令行工具,它可以实现sqlite 各项基本操作。这里只介绍一下如何使用它来分析我们的查询结果:

1. cmd->sqlite3.exe mysqlitedbwithoutindex.s3db

SQLite数据库管理系统-我所认识的数据库引擎

2. 开启explain 功能并分析指定查询结果

SQLite数据库管理系统-我所认识的数据库引擎

3. 重新使用命令行打开一个有索引的数据库并执行前两步

SQLite数据库管理系统-我所认识的数据库引擎

4. 通过比较两个不同查询语句的分析结果,我们可以发现如果查询过程中使用了索引,sqlite 会在detail 列中提示我们。

5. 要注意的是每条语句后面都要加分号“;”

sqlite一些常见的使用限制

1. sqlite 不支持unicode 字符的大小写比较,请看以下测试结果:

SQLite数据库管理系统-我所认识的数据库引擎

2. 如何处理sqlite 转义字符:

3. 一条复合select语句的条数限制:
一条复合查询语句是指多条select语句由 union, union all, except, or intersect 连接起来. sqlite进程的代码生成器使用递归算法来组合select语句。为了降低堆栈的大小,sqlite 的设计者们限制了一条复合select语句的条目数量。 sqlite_max_compound_select的默认值是500. 这个值没有严格限制,在实践中,几乎很难看到一条复合查询语句的条目数大于500的。

这里提到复合查询的原因是我们可以使用它来帮助我们快速插入大量数据: