第1章 SQLite是什么:轻量级嵌入式关系数据库
1.1 概念解释
SQLite 是目前全球部署最广泛的关系数据库引擎——它不是一个独立的服务器进程,而是直接嵌入到应用程序内部,通过函数调用完成所有数据操作。其核心特征可概括为:
- 轻量级嵌入式:库体积约为 600 KB(编译后),无外部依赖,可直接链接到应用中。
- 零配置:创建数据库只需指定一个文件路径,无需安装、配置用户名/密码或管理服务。
- 服务端无需独立进程:数据库引擎在应用进程内运行,不产生额外的守护进程。
- 以文件形式存储:整个数据库(表、索引、视图等)保存在一个单一的磁盘文件(
.db或.sqlite)中。 - 支持标准SQL子集:实现大部分 SQL-92 标准,包括事务(ACID)、子查询、触发器和视图,但部分高级特性(如 RIGHT JOIN、FULL OUTER JOIN)不支持。
一句话定义:SQLite 是一个 进程内、零配置、单文件 的 C 语言关系数据库库。
典型命令行体验:
典型命令行体验:
# 创建/打开数据库并查看版本
sqlite3 example.db
sqlite> SELECT sqlite_version();
执行后无需启动守护进程,数据库文件立即就绪。
1.2 原理图解:SQLite 体系结构
1.3 对比分析:SQLite vs 传统 C/S 数据库
| 对比维度 | SQLite | MySQL / PostgreSQL |
|---|---|---|
| 部署方式 | 嵌入式,链接到应用 | 独立服务器进程,需单独安装 |
| 配置量 | 零配置,无需管理 | 需配置端口、用户、权限、缓冲池等 |
| 进程模型 | 在应用进程内运行 | 独立守护进程,多个连接对应多个线程/进程 |
| 存储方式 | 单一文件 | 数据目录(多个文件) |
| 并发写入 | 一次仅允许一个写入事务 | 可同时处理多个写入连接 |
| SQL支持度 | 核心 SQL-92 子集 | 更完整,支持存储过程、窗口函数等 |
| 适用规模 | MB 级 ~ 几百 GB(单机) | TB 级,可横向扩展 |
1.4 常见误区
- 误区1:SQLite是内存数据库 ─ 虽然支持
:memory:模式,但默认是持久化到磁盘文件的,重启后数据仍在。 - 误区2:不支持事务 ─ 实际上 SQLite 完全支持 ACID 事务,但部分模式下并发粒度较粗。
- 误区3:只能单用户访问 ─ 允许多个进程同时读取同一个数据库文件;写入时确实互斥,但读并发无限制。
- 误区4:不能用于生产环境 ─ 许多嵌入式设备、移动应用、浏览器甚至航空电子设备都使用 SQLite。
1.5 应用边界
适合场景:
- 移动端应用(Android/iOS 本地存储)
- 桌面软件(浏览器、IDE、游戏存档)
- 物联网/嵌入式设备(低资源环境)
- 小型 Web 站点的后台(低并发、单机)
- 测试与原型开发(无需安装数据库服务)
不适合场景:
- 高并发写入(每秒数千次写入请求)
- 多用户分布式访问
- 需要细粒度权限控制(如按表、行级授权)
- 超大数据集(TB 级)且需要在线扩展
1.6 练习题与实用清单
练习题(选择/判断)
- SQLite 是否必须安装独立的数据库服务进程?
A. 是 B. 否 - 下面哪个不是 SQLite 的特性?
A. 零配置 B. 支持存储过程 C. 单文件存储 D. 嵌入式 - 判断题:SQLite 在写操作时只能有一个写入者。(对 / 错)
实用检查清单(部署前自检)
- □ 确认数据库文件路径具有读写权限
- □ 编译时链接
libsqlite3或动态加载 - □ 检查 WAL 模式是否开启(提升并发读性能)
- □ 确认磁盘空间足够(数据库最终大小约为数据量的 1.1~1.2 倍)
- □ 避免通过 NFS/Samba 等网络文件系统直接跨机器共享 .db 文件