SQLite数据库简介

1. 介绍

SQLite 是 D.Richard Hipp 用 C 语言编写的开源嵌入式数据库引擎。SQLite 是一种轻量级的小型数据库,虽然比较小,但是功能相对比较完善,一些常见的数据库基本功能也具有,它支持大多数的 SQL92 标准,并且可以在所有主要的操作系统上运行。因为它占用系统资源很少,Android 系统中也主要采用 SQLite 数据库引擎。

SQLite 实现自包容、零配置、支持事务的SQL数据库引擎。 其特点是高度便携、使用方便、结构紧凑、高效、可靠。 与其他数据库管理系统不同,SQLite 的安装和运行非常简单,在大多数情况下,只要确保 SQLite 的二进制文件存在即可开始创建、连接和使用数据库。

2. 准备

在操作之前,我们要先下载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数据库分析器,主要用于分析数据库的状态等信息,大家也可以根据自己的情况去下载。解压后的文件:

解压

3. 创建数据库

语法:

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中的命令是以 .(小圆点) 开头的。

4. 创建表

语法:

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 命令后没有表名,则列出所有表的建表语句。

5. 修改表

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>

6. 删除表

语法:

DROP TABLE 表名;

示例:

sqlite> DROP TABLE users;
sqlite> .tables
sqlite>

7. 插入数据

语法:

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|广东深圳

8. 修改数据

语法:

UPDATE 表名 
SET 列名=列值 [, 列名=列值...] 
[WHERE 条件];

示例:

sqlite> UPDATE users SET age=15 WHERE id=1;
sqlite> UPDATE users SET age=18, address='广东广州' WHERE id=5;

注意,不跟 WHERE 子句的 UPDATE 语句会将表中所有记录做修改操作。

9. 删除数据

语法:

DELETE FROM 表名 [WHERE 条件];

示例:

sqlite> DELETE FROM users WHERE id=2;

注意,不跟 WHERE 子句的 DELETE 语句会将表中所有记录清空。

10. 查询

语法:

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>

11. 小结

由于资源占用少、性能良好和零管理成本,嵌入式数据库有了它的用武之地,像Android、iPhone都有内置的 SQLite 数据库供开发人员使用,它的易用性可以加快应用程序的开发,并使得复杂的数据存储变得轻松了许多。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐