文档介绍:嵌入式数据库简介
----SQLite
dongqiang@
纲要
SQLite介绍
SQLite的发展
SQLite的优势
SQLite的缺憾
SQLite的内部结构
SQLite数据库的使用
SQLite的命令行接口
SQLite命令行使用
SQLite数据库的编程接口
C/C++接口
简单应用
自定义简单函数
自定义聚合函数
自定义排序函数
PERL接口
SQLite数据库在ASTRAL中的应用
SQLite在多级关联中的应用
SQLite在IPIS中的应用
SQLite在web中的应用
SQLite介绍
SQLite的发展
Hipp开始开发
(采用了不同的数据文件格式以及编程接口)
目标
易于管理、操作、维护、自定义以及提供易用的编程接口
SQLite介绍
SQLite的优势
内存占用量小
比MySQL(2倍), PostgreSQL(20倍)快
ACID兼容(原子性,一致性,独立性,可持久性),支持视图,子查询,触发器
单个库文件中包含数据库引擎与接口,且其运行不依赖其它库
可以将数据放进单个文件
为C/C++, Perl,PHP等应用提供了接口
免费
允许为SQL命令集动态添加自定义函数(简单函数及聚集函数),而无需重编SQLite库
SQLite介绍
SQLite的缺点
事务处理并发性
SQLite通过数据库级上的独占性和共享锁来实现独立事务处理,这意味着当多个进程或线程在同一时间可以从数据库读取数据,但是只能有一个可以同时写入,在写入之前,必须获得独占锁,其它的读操作不允许发生。
性能
在创建索引( CREATE INDEX)和删除表( DELTE TABLE)时明显比其它数据库慢
用户管理/安全
数据库的访问是基于操作系统对文件的控制来控制的,不能通过用户来区分数据库中的不同数据库.
举例,将数据库文件去写权限,然后向其中插入或删除数据条目,将提示写失败。但是不能通过数据库本身的来对权限进行设置。
在网上已经有一些SQLite的安全问题的解决方案,但大多数是商业化的,有些提供在整个数据库上的加密,有些提供在数据级别的加密。比如secure SQLite之类。
SQLite的内部结构
在内部,SQLite 由以下几个组件组成:SQL 编译器、内核、后端以及附件。SQLite 通过利用虚拟机和虚拟数据库引擎(VDBE),使调试、修改和扩展 SQLite 的内核变得更加方便。所有 SQL 语句都被编译成易读的、可以在 SQLite 虚拟机中执行的程序集。
1、接口将SQL语句传给SQL编译器
2、SQL编译器选将SQL分解成为Token
3、将Token传递给解析器进行解析
4、由代码生成器生成虚拟机代码
5、由虚拟机执行生成的程序
6、SQLite库在磁盘上以B树形式组织(每个表和索引都有自己单独的B树,所有的B树都保存的同一个文件里面)
7、OS层的操作
, 。用户自定义函数编写可以参考这里面的实现。无论内内建函数还是用户自定义函数都是用C的回调方式实现(稍后再做介绍)
SQLite数据库的使用
SQLite命令行接口
SQLite除库本身外,还包含命令行接口,可以在$SQLITE_HOME/bin下发现sqlite/sqlite3,
命令行功能介绍
运行方式:sqlite DBFile
得到提示符sqlite>
(注意sqlite命令行提供的命令都以”.”开头,可以看到sqlite命令行接口提供下面的功能.
SQLite命令行功能简介
SQLite命令行功能简介
DML/DDL语句的使用和以前一致,不做介绍
.databases 列出数据库文件名
.tables ?PATTERN? 列出?PATTERN?匹配的表名
.import FILE TABLE 将文件中的数据导入的文件中
.dump ?TABLE? 生成形成数据库表的SQL脚本
.output FILENAME 将输出导入到指定的文件中
.output stdout 将输出打印到屏幕
.mode MODE ?TABLE? 设置数据输出模式(csv,html,tcl…
.nullvalue STRING 用指定的串代替输出的NULL串
.read FILENAME 执行指定文件中的SQL语句
.schema ?TABLE? 打印创建数据库表的SQL语句
.separator STRING 用指定的字符串代替字段分隔符
.show 打印所有SQLite环境变量的设置
.quit 退出命令行接口
SQLite命令行功能使用
下面举例说明SQL