SQLite是嵌入式关系型数据库引擎。它是一个独立的、无服务器、零配置、事务型SQL数据库引擎。它流行世界各地,被用于Solaris 十、Mac OS、Android、iPhone中。Qt四、Python、PHP都有内置的SQLite。许多流行的应用也都使用SQLite,如Firefox、Google Chrome、Amarok。适合桌面程序和小型网站的数据库服务器。SQLite直接读写在硬盘上的数据库文件。
优点:sql
易于管理,甚至能够认为是无需管理。数据库
操做方便,SQLite生成的数据库文件可在各个平台无缝移植。缓存
能够多种形式嵌入到的其它应用程序中,如静态库、动态库等。bash
易于维护和配置,为零配置。完整配置的少于 250KB,忽略一些可选特性的少于 150KB。服务器
没有独立的服务器,其运行环境与主程序位于同一进程空间,所以它们之间的通讯彻底是进程内通讯,而相比于进程间通讯,其效率更高。网络
单一磁盘文件,只要有权限即可随意访问和拷贝,便于携带和共享。并发
劣势:工具
因为SQLite的数据管理机制更多的依赖于OS的文件系统,所以在多用户访问数据库数据时,特别是数据操做经过网络传输完成时,其效率较低。性能
受限于操做系统的文件系统,处理大数据时,效率较低,对于超大数据量,甚至不能支持。支持最大可达 2T 的数据库。大数据
SQLite仅仅提供了粒度很粗的数据锁,如读写锁,所以在每次加锁操做中都会有大量的数据被锁住,即仅有极小部分的数据会被访问。在这种同步机制下,并发性能很难高效。
在gentoo下安装SQLite3:
$ sudo emerge -avt dev-db/sqlite
$ sqlite3 test.db SQLite version 3.8.11.1 2015-07-29 20:00:57 Enter ".help" for usage hints. sqlite>
sqlite3 test.db .dump > test.sql //数据库备份
或者
sqlite> .output test.sql sqlite> .dump sqlite> .exit
sqlite3 test.db < test.sql
sqlite> DETACH DATABASE mydb;
添加另一个数据库文件到当前的链接中,":memory:"为内存数据库。
sqlite> ATTACH DATABASE '~/tmp/mydb.db' AS mydb;
sqlite> CREATE TABLE testtable (first_var integer);
注意:testtable不要以sqlite_开头,由于该前缀定义的表名都用于sqlite内部.
sqlite> CREATE TABLE testtable (first_col integer DEFAULT 0, second_col varchar DEFAULT 'hello');
sqlite> ATTACH DATABASE '~/tmp/mydb.db' AS mydb;//mydb.db不必定存在 sqlite> CREATE TABLE mydb.testtable (first_col integer);
若是你要建立的数据表已存在,则使用以前的建立表语句会发生错误,这就须要加上IF NOT EXISTS从句.
sqlite> CREATE TABLE IF NOT EXISTS testtable (first_col integer);
新建立的表将会包含SELECT查询返回的结果集的全部数据,可是不包含缺省值和主键等约束信息。
sqlite> CREATE TABLE testtable2 AS SELECT * FROM testtable; sqlite> .schema testtable2 CREATE TABLE testtable2(first_col INT);
sqlite> CREATE TABLE testtable (first_col integer PRIMARY KEY ASC);//ASC
联合主键
sqlite> CREATE TABLE testtable2 (first integer, second integer, PRIMARY KEY (first_col,second_col));
sqlite> CREATE TABLE testtable (first_col integer UNIQUE);
两个列的惟一性约束
sqlite> CREATE TABLE testtable2 (first integer, second integer, UNIQUE (first_col,second_col));
sqlite> CREATE TABLE testtable(first_col integer NOT NULL);
sqlite> CREATE TABLE testtable (first_col integer CHECK (first_col < 5));
SQLite中表名的修改只能在同一个数据库,表名被修改后,该表已存在的索引将不会受到影响,然而依赖该表的视图和触发器将不得不从新修改其定义。
sqlite> ALTER TABLE testtable RENAME TO testtable2;
sqlite> ALTER TABLE testtable ADD COLUMN second_col integer;
sqlite> DROP TABLE testtable; sqlite> DROP TABLE IF EXISTS testtable;
sqlite> INSERT INTO testtable VALUES(2);
为了增减输出的易读性
sqlite> .echo on sqlite> .mode on sqlite> .headers on sqlite> .nullvalue NULL
显示语法
sqlite> SELECT * FROM testtablel; sqlite> SELECT fisrt FROM testtablel;
sqlite> UPDATE testtable SET first=2 WHERE ID = 1;
sqlite> DROP FROM testtable;
sqlite> DROP FROM testtable WHERE ID = 1 AND NAME = yxg;
若是没有为当前的SQL命令(SELECT除外)显示的指定事务,那么SQLite会自动为该操做添加一个隐式的事务,以保证该操做的原子性和一致性。
sqlite> BEGIN TRANSACTION; sqlite> INSERT INTO testtable VALUES(1); sqlite> INSERT INTO testtable VALUES(2); sqlite> COMMIT TRANSACTION;--显示事务被提交,数据表中的数据也发生了变化。 sqlite> SELECT COUNT(*) FROM testtable; COUNT(*) 2 sqlite> BEGIN TRANSACTION; sqlite> INSERT INTO testtable VALUES(1); sqlite> ROLLBACK TRANSACTION; --显示事务被回滚,数据表中的数据没有发生变化。 sqlite> SELECT COUNT(*) FROM testtable; COUNT(*) 2
SQLite将数据值的存储划分为如下几种存储类型:
NULL: 表示该值为NULL值。
INTEGER: 无符号整型值。
REAL: 浮点值。
TEXT: 文本字符串,存储使用的编码方式为UTF-八、UTF-16BE、UTF-16LE。
BLOB: 存储Blob数据,该类型数据和输入数据彻底相同。
"=", "==", "<", "<=", ">", ">=", "!=", "<>", "IN", "NOT IN", "BETWEEN", "IS" and "IS NOT"。
.help //列出全部内置命令
.tables TABLENAME //显示当前链接的数据库中的全部数据表,若指定表名,仅显示匹配的数据表,TABLENAME支持LIKE表达式。
.backup ~/tmp/test.db //将当前链接中的缓存数据导出到本地文件。
.schema //是sqlite3命令行工具的内置命令,用于显示当前数据表的CREATE TABLE语句。
.exit //退出当前链接。
.databases //列出当前连接中全部attached数据库名和文件名。
.echo ON|OFF //打开或关闭显示输出。
.header(s) ON|OFF //在显示SELECT结果时,是否显示列的标题。
.import FILE TABLE //导入指定文件到指定表。
.mode MODE TABLENAME //设置输出模式,经常使用为column,是SELECT输出列左对齐显示。
.read FILENAME//执行指定文件内的SQL语句。