SQLite 是 D.Richard Hipp 用 C 语言编写的开源嵌入式数据库引擎。SQLite 是一种轻量级的小型数据库,虽然比较小,但是功能相对比较完善,一些常见的数据库基本功能也具有,它支持大多数的 SQL92 标准,并且可以在所有主要的操作系统上运行。因为它占用系统资源很少,Android 系统中也主要采用 SQLite 数据库引擎。
SQLite 实现自包容、零配置、支持事务的SQL数据库引擎。 其特点是高度便携、使用方便、结构紧凑、高效、可靠。 与其他数据库管理系统不同,SQLite 的安装和运行非常简单,在大多数情况下,只要确保 SQLite 的二进制文件存在即可开始创建、连接和使用数据库。
在操作之前,我们要先下载SQLite数据库,官方的下载页面是 http://www.sqlite.org/download.html,由于是在Windows下测试,所以我选择了 Precompiled Binaries For Windows 下面的 sqlite-shell-win32-x86-3081101.zip 和 sqlite-analyzer-win32-x86-3081101.zip 的zip包,前者是SQLite数据库引擎,后者是SQLite数据库分析器,主要用于分析数据库的状态等信息,大家也可以根据自己的情况去下载。解压后的文件:
语法:
sqlite3.exe [数据库名字.后缀名]
示例:
D:\Program Files\SQLite>sqlite3.exe mydb.db
SQLite version 3.8.11.1 2015-07-29 20:00:57
Enter ".help" for usage hints.
sqlite>
创建的数据库后缀名可以是任意的,不过注意一点就是:在命令框下执行创建数据库的时候,如果没有为数据库创建表格,则看不见数据库文件,所以必须创建表格后才能看见数据库文件。
我们可以使用 .databases 命令查看数据库文件信息:
sqlite> .databases
seq name file
--- --------------- -------------------------------------------
0 main D:\Program Files\SQLite\mydb.db
注意,SQLite中的命令是以 .(小圆点) 开头的。
语法:
CREATE TABLE 表名(
列名 [类型] [说明],
列名 [类型] [说明] [, ...]
);
示例:
sqlite> CREATE TABLE test(
...> id INTEGER PRIMARY KEY AUTOINCREMENT,
...> name VARCHAR(20),
...> age date);
sqlite>
建表语句以;(分号)结束。在 SQLite 数据库中创建表格字段的时候,允许不为字段申明数据类型。
我们创建表后,可以使用 .tables 命令去查看已有的表,可以使用 .schema 命令去查看表的结构。
sqlite> .tables
test
sqlite> .schema
CREATE TABLE test(
id INTEGER PRIMARY KEY AUTOINCREMENT,
name VARCHAR(20),
age date);
sqlite>
在 .schema 命令后没有表名,则列出所有表的建表语句。
SQLite 的 ALTER 功能只是 ALTER TABLE 的一个子集,只有部分功能,比如重命名表名,新增列到现有表中。SQLite 不支持现有列的重命名,删除和修改。
修改表名语法:
ALTER TABLE 旧表名 RENAME TO 新表名;
添加列语法:
ALTER TABLE 表名 ADD COLUMN 列名 [数据类型] [说明];
示例:
sqlite> ALTER TABLE test RENAME TO users;
sqlite> .tables
users
sqlite> ALTER TABLE users
...> ADD COLUMN address VARCHAR(100);
sqlite> .schema
CREATE TABLE "users"(
id INTEGER PRIMARY KEY AUTOINCREMENT,
name VARCHAR(20),
age date, address VARCHAR(100));
sqlite>
语法:
DROP TABLE 表名;
示例:
sqlite> DROP TABLE users;
sqlite> .tables
sqlite>
语法:
INSERT INTO 表名 (列名, 列名, ...) VALUES (列值, 列值, ...);
示例:
sqlite> INSERT INTO users (id, name, age, address) VALUES (1, '小明', 25, '四川成都');
我们也可以从已有的 .sql 文件中导入 SQL 语句执行来插入数据:
sqlite> .read mydb.sql
查看已插入数据:
sqlite> SELECT * FROM users;
1|小明|25|四川成都
2|小刚|28|四川绵阳
3|小红|18|四川绵阳
4|小美|23|北京
5|小丽|22|广东深圳
语法:
UPDATE 表名
SET 列名=列值 [, 列名=列值...]
[WHERE 条件];
示例:
sqlite> UPDATE users SET age=15 WHERE id=1;
sqlite> UPDATE users SET age=18, address='广东广州' WHERE id=5;
注意,不跟 WHERE 子句的 UPDATE 语句会将表中所有记录做修改操作。
语法:
DELETE FROM 表名 [WHERE 条件];
示例:
sqlite> DELETE FROM users WHERE id=2;
注意,不跟 WHERE 子句的 DELETE 语句会将表中所有记录清空。
语法:
SELECT 列名[,列名...]
FROM 表名
[WHERE 条件];
示例1:
sqlite> SELECT id, name FROM users;
1|小明
3|小红
4|小美
5|小丽
也可以将列名换为 * 号,代替表中的所有列:
sqlite> SELECT * FROM users;
1|小明|15|四川成都
3|小红|18|四川绵阳
4|小美|23|北京
5|小丽|18|广东广州
可以使用 .mode column 将显示设置为列显示模式,.headers on 显示列名。
sqlite> .mode column
sqlite> .headers on
sqlite> SELECT * FROM users;
id name age address
---------- ---------- ---------- ----------
1 小明 15 四川成都
3 小红 18 四川绵阳
4 小美 23 北京
5 小丽 18 广东广州
sqlite>
示例2,根据条件查询:
sqlite> SELECT * FROM users WHERE age>20;
id name age address
---------- ---------- ---------- ----------
4 小美 23 北京
sqlite>
由于资源占用少、性能良好和零管理成本,嵌入式数据库有了它的用武之地,像Android、iPhone都有内置的 SQLite 数据库供开发人员使用,它的易用性可以加快应用程序的开发,并使得复杂的数据存储变得轻松了许多。