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 的进程内架构

SQLite 嵌入式架构示意图 SQLite 进程内架构 应用进程 (Android App / C# 程序 / 脚本) SQLite 库(libsqlite3) SQL 解析器 · 虚拟机 · B-树 数据库文件 mydb.sqlite SQL 指令 固定格式写入 页缓存 / 内存分配 预读 · 事务日志 操作系统文件系统 VFS · 锁 缓存同步 持久化 说明 所有 SQL 操作在应用进程内完成,无需跨进程 IPC,性能极高; 数据库文件通过操作系统文件锁实现多进程 / 多线程并发控制。

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 练习题(概念巩固)

  1. 选择题: 以下哪项不是 SQLite 的核心特征?
    A. 嵌入式   B. 文件存储   C. 多线程并行写入   D. 零配置
    答案:C(SQLite 的写操作是串行化的)
  2. 填空题: 一个 SQLite 数据库在磁盘上表现为一个 ______ 文件,应用通过链接 SQLite 的 ______ 库来访问它。
    答案:单个;C 语言
  3. 简答: 为什么说 SQLite 是“零配置”的?请列举两个具体表现。
    参考:① 无需安装和配置守护进程;② 无需设置用户权限或端口号。

1.6 应用边界:什么时候该用 SQLite?

✅ 适用场景

  • 移动 App(Android / iOS)本地存储
  • 桌面软件(如影音播放器、记账工具)
  • 嵌入式设备(路由器、智能家居网关)
  • 测试环境的临时数据库
  • 单用户或低并发读多写少的应用

❌ 不适用场景

  • 高并发写入(如每秒上千次 INSERT)
  • 需要网络访问(必须通过 HTTP 或自定义协议桥接)
  • 需要细粒度权限控制(SQLite 仅有文件级权限)
  • 需要存储过程、自定义函数等高级功能(SQLite 支持有限)