SQLite 是一个很小的C语言链接库

SQLite是一个很小的C语言链接库。这个链接库本身就完全包含数据库引擎的功能,而且可以嵌入至其它程序中,完全不用额外的设定。其特性如下:

  • 支持ACID (Atomic, Consistent, Isolated, Durable) 交易。

  • 零组态设定(Zero-configuration),无须管理者的设定及管理。

  • 支持大部分SQL92的语法。

  • 数据库存在于一个单一的文件中。

  • 数据库系统所在机器的字节顺序(Byte order)无关。

  • 支援大小至2 TB (2^41 bytes)。

  • 极小的内存需求:小于3万行的C语言程序代码。小于250KB的程序空间。

  • 大部分的数据库操作皆快于一般流行的数据库系统。

  • 简单易用的API。

  • 支援TCL。也有其它语言的支持可用。

  • 注释详细的程序代码,以及超过90%的测试。

  • 链接库自己包含完整的功能,无须其它额外的程序或链接库。

  • 程序代码版权为public domain。任何用途皆可免费使用。

SQLite 的SQL从很大程度上实现了ANSI SQL92标准. 特别的SQLite支持视图, 触发器, 事务, 支持嵌套SQL. 这些都会在下面应用的过程中讲到, 故这边先暂时放下, 而主要说说SQLite所不支持的一些SQL.

1.不支持Exists, 虽然支持in(in是Exists的一种情况)

2.不支持多数据库, 如: create table db1.table1 as select * from db2.table1;

3.不支持存储过程

4.不支持Alter View/Trigger/Table

5.不支持Truncate, 在SQLite中Delete不带Where字句时和Truncate的效果是一样的.

6.不支持Floor和Ceiling函数, 还有其他蛮多的函数

7.没有Auto Increment(自增)字段, 但是SQLite其实是支持Auto Increment的, 即在将该字段设置为” INTEGER PRIMARY KEY”的时候.

8.不支持If Exists

详细的SQL支持可以访问: http://www.sqlite.org/lang.htm

详细的不支持SQL可以访问: http://www.sqlite.org/cvstrac/wiki?p=UnsupportedSql

SQLite的数据类型

首先你会接触到一个让你惊讶的名词: Typelessness(无类型). 对! SQLite是无类型的. 这意味着你可以保存任何类型的数据到你所想要保存的任何表的任何列中, 无论这列声明的数据类型是什么(只有在一种情况下不是, 稍后解释). 对于SQLite来说对字段不指定类型是完全有效的. 如:

Create Table ex1(a, b, c);

诚然SQLite允许忽略数据类型, 但是仍然建议在你的Create Table语句中指定数据类型. 因为数据类型对于你和其他的程序员交流, 或者你准备换掉你的数据库引擎. SQLite支持常见的数据类型, 如:

CREATE TABLE ex2(

a VARCHAR(10),

b NVARCHAR(15),

c TEXT,

d INTEGER,

e FLOAT,

f BOOLEAN,

g CLOB,

h BLOB,

i TIMESTAMP,

j NUMERIC(10,5)

k VARYING CHARACTER (24),

l NATIONAL VARYING CHARACTER(16)

);

前面提到在某种情况下, SQLite的字段并不是无类型的. 即在字段类型为”Integer Primary Key”时.

SQLite 的Wrapper

于SQLite有别于其他数据库引擎的TCP/IP或RPC访问方式, 完全地是本地的操作, 从某种角度来说你可以说SQLite和MS的Access很相似, 但是更小更强大. 所谓Wrapper即使对SQLite提供的接口进行封装, 使其他语言可以访问, 使用SQLite.

SQLite本身是提供C和Tcl的接口的. 所以可以非常轻易的和PHP相结合. 除了PHP的Wrapper以外, 还有许多世界各地的程序员提供了各种语言的SQLite的接口封装, 如Python, C++, Java, .Net…… 所流行的语言基本都有.