1. SQLite 核心概念:嵌入式关系型数据库、文件存储、零配置
SQLite 是当前部署最广泛的数据库引擎——它不是一个独立的服务器进程,而是一个直接被应用代码调用的嵌入式关系型数据库。其核心特征可以用三个关键词概括:嵌入式(In-Process)、文件存储(Single-File Storage)和零配置(Zero Configuration)。这三者共同决定了 SQLite 在移动端、桌面应用、IoT 设备等场景中的统治地位。
1.1 概念拆解
| 特征 | 含义 | 与传统数据库的对比 |
|---|---|---|
| 嵌入式关系型数据库 | SQLite 以 C 语言库的形式嵌入到应用中,应用进程直接调用 SQLite API,不需要独立的数据库服务进程。 | MySQL/PostgreSQL 需要独立守护进程,通过 TCP/IP 通信;SQLite 在进程内执行 SQL,零网络开销。 |
| 文件存储 | 整个数据库(包括表、索引、视图、触发器)存储在一个单一的磁盘文件中(通常后缀为 .db 或 .sqlite)。 |
传统数据库通常将数据分散在多个表空间文件或系统目录中;SQLite 的“单文件”特性让备份和迁移变得异常简单。 |
| 零配置 | 无需安装、无需管理用户权限、无需配置端口或缓冲区大小。创建一个空文件,连接后即可使用。 | MySQL 需要初始化数据目录、创建用户、设置权限;SQLite 开箱即用。 |
1.2 原理图解:SQLite 的进程内架构
1.3 类比理解:一本“永不共享的活页笔记本”
想象你有一本硬皮笔记本(数据库文件),你随身携带它(嵌入式)。想记录什么就翻开写(零配置),不需要申请图书证(无管理员)。笔记本只属于你一个人——其他人在你使用期间不能同时在上面写字(写锁),但可以同时翻看(读锁)。这就是 SQLite 的简单而强大的模型。
1.4 常见误区
- 误区 1:SQLite 是一个“轻量版 MySQL”。 事实上,SQLite 是嵌入式库,MySQL 是客户端-服务器架构,两者设计哲学根本不同。
- 误区 2:SQLite 只能存储少量数据。 单文件最大可达 281 TB,实际限制来自文件系统和内存。
- 误区 3:SQLite 不需要写代码就能用。 虽然零配置,但应用仍需通过 API 调用(如
sqlite3_open)来连接。 - 误区 4:.db 文件就是数据库。 正确:.db 文件是完整数据库的物理表示,但 SQLite 引擎在运行时会在内存中维护缓存和事务日志。
1.5 练习题(概念巩固)
- 选择题: 以下哪项不是 SQLite 的核心特征?
A. 嵌入式 B. 文件存储 C. 多线程并行写入 D. 零配置
答案:C(SQLite 的写操作是串行化的) - 填空题: 一个 SQLite 数据库在磁盘上表现为一个 ______ 文件,应用通过链接 SQLite 的 ______ 库来访问它。
答案:单个;C 语言 - 简答: 为什么说 SQLite 是“零配置”的?请列举两个具体表现。
参考:① 无需安装和配置守护进程;② 无需设置用户权限或端口号。
1.6 应用边界:什么时候该用 SQLite?
✅ 适用场景
- 移动 App(Android / iOS)本地存储
- 桌面软件(如影音播放器、记账工具)
- 嵌入式设备(路由器、智能家居网关)
- 测试环境的临时数据库
- 单用户或低并发读多写少的应用
❌ 不适用场景
- 高并发写入(如每秒上千次 INSERT)
- 需要网络访问(必须通过 HTTP 或自定义协议桥接)
- 需要细粒度权限控制(SQLite 仅有文件级权限)
- 需要存储过程、自定义函数等高级功能(SQLite 支持有限)