2026年SQLite完全入门指南:你每天都在用的数据库,99%的人却说不清它是什么
摘要: 地球上部署量最大的数据库引擎不是 MySQL,也不是 PostgreSQL,而是一个你可能从来没用过「安装」命令的轻量级数据库——SQLite。本文从零开始,用生活化比喻讲清 SQLite 是什么、为什么这么设计、怎么上手、以及什么时候该选它。读完你会明白:数据库不一定是庞然大物,它可以安静地藏在你的手机里、浏览器里,甚至一个文件里。
一、你可能每天都在用 SQLite,只是不知道而已
打开你的手机相册——每一张照片的元数据、每一个相册的分类信息,都存在 SQLite 里。
打开你的微信——聊天记录、好友列表、收藏夹,底层全是 SQLite 在干活。
打开 Chrome 浏览器——书签、历史记录、自动填充密码,也是 SQLite。
SQLite 是全球部署量最大的数据库引擎。 根据 SQLite 官方估计,全球活跃的 SQLite 数据库数量超过 1 万亿(1 trillion)个。地球上几乎每一部智能手机里都有几十甚至上百个 SQLite 数据库文件在默默运行。
但讽刺的是,绝大多数人——包括很多写了多年代码的程序员——从来没真正了解过它。
这篇文章就是为你写的。读完它,你会搞清楚三件事:
- SQLite 到底是什么,和 MySQL 有什么区别?
- 怎么在 5 分钟内上手 SQLite?
- 什么场景用它最合适,什么场景千万别碰它?
二、SQLite 是什么?一个文件就是一个数据库
一个震撼新手的概念
想象一下:MySQL 或 PostgreSQL 就像一家餐厅——有一个专门的厨房(服务器),服务员(数据库进程)在门口等着,你(客户端)走进来点菜(发 SQL 查询),服务员去厨房做好,再端给你。厨房和服务员必须一直在线。
SQLite 不是这种模式。 SQLite 就像一个随身携带的瑞士军刀——你不需要厨房,不需要服务员,打开就能切东西。数据库就是一个文件,你用程序直接读写这个文件,没有中间人。
来对比一下:
| 特性 | SQLite | MySQL / PostgreSQL |
|---|---|---|
| 架构模式 | 嵌入式(库文件) | 客户端-服务器(独立进程) |
| 数据库形态 | 单个 .db 文件 | 一个数据库服务实例 |
| 部署方式 | 零配置,无需安装 | 需要安装配置服务端 |
| 启动耗时 | 即时(毫秒级) | 需要启动服务(秒级) |
| 并发写入 | 单写者(串行写入) | 多写者并发 |
| 网络访问 | ❌ 不支持 | ✅ 支持 |
| 数据量级 | MB ~ GB 级别(理论上限 281TB) | TB 级别 |
| 是否需要运维 | 不需要 | 需要 DBA 管理 |
一句话理解:SQLite 就是把你熟悉的 Word 文档和 Excel 表格的功能,用一个二进制文件高效地实现了。 你打开一个 .db 文件,里面可以有几十张「表」,每张表里可以存几百万行数据——所有这些,都在一个文件里。
三、SQLite 为什么这么设计?嵌入式、零配置、无服务器的哲学
SQLite 的作者 D. Richard Hipp 在 2000 年开发它的时候,动机很简单:他当时在用 HP 的 Informix 数据库做项目,但 Informix 每次宕机都要等管理员重启。他就想:数据库能不能不要管理员?能不能像一个函数库一样,程序调用它就能直接读写数据?
于是 SQLite 诞生了。它的核心设计哲学可以用三个词概括:
🔧 嵌入式(Embedded)
SQLite 不是独立程序,它是一个 C 语言写的库文件(不到 1MB)。你的程序把这个库编译进去,就能直接操作数据库。这就像把计算器功能做成了一个函数 add(a, b),而不是开一个计算器 App——轻、快、无感。
⚡ 零配置(Zero-Configuration)
不用 apt install mysql-server,不用配 my.cnf,不用创用户密码。你创建一个 .db 文件的那一秒,数据库就已经就绪了。 这就是为什么它能在嵌入式设备、手机 App、浏览器里遍地开花——这些东西没法安装一个数据库服务。
🪶 无服务器(Serverless)
这里「Serverless」不是云函数那个时髦概念,而是字面意思:没有服务器进程。 你的程序和数据库文件直接对话。这带来了最大的好处(简单)和最大的限制(不能并发写),后面会讲。
可引用金句 ①:SQLite 的设计不是「能跑就行」,而是「把复杂度藏在库文件里,让使用者感受不到数据库的存在」。
四、核心概念:用生活化比喻理解数据库
如果你是数据库小白,先别被术语吓到。我们用 3 个生活化比喻 搞定所有核心概念:
📦 比喻 1:数据库文件 = 一个 Excel 文件
一个 SQLite 数据库文件(.db),就是你电脑上一个 Excel 文件(.xlsx)。
- Excel 文件里可以有多个 Sheet(工作表) → 对应 SQLite 里的 表(Table)
- 每个 Sheet 有 列头(姓名、年龄、工资)→ 对应 字段/列(Column)
- 每一行填的数据 → 对应 记录/行(Row)
- 筛选、排序、汇总 → 对应 SQL 查询
唯一的区别:Excel 适合几百行数据,SQLite 轻松处理 几百万行,而且查询速度秒杀 Excel。
🗄️ 比喻 2:SQL 语句 = 给管家下指令
SQL 就是你和数据库「说话」的语言。你可以把数据库想象成一个超级管家:
-- 管家!把我备忘录里名字叫「张三」的所有记录找出来
SELECT * FROM 备忘录 WHERE 名字 = '张三';
-- 管家!帮我记一条新东西
INSERT INTO 备忘录 (名字, 事项) VALUES ('李四', '明早9点开会');
-- 管家!把那条记录改一下
UPDATE 备忘录 SET 事项 = '明早10点开会' WHERE 名字 = '李四';
-- 管家!删了它
DELETE FROM 备忘录 WHERE 名字 = '李四';
增删改查(CRUD)就是你作为「老板」对数据库这个「管家」的四条基本命令。 SQL 翻译成人话就是这个意思。
📱 比喻 3:SQLite vs MySQL = 记事本 vs 银行柜台
- SQLite = 你口袋里的记事本: 随时掏出来写、改、查,只有你一个人能同时写(别人想写?排队!)。不需要电力、网络、管理员。丢了?恢复难。
- MySQL = 银行柜台: 有一个专门的办事大厅(服务器),多个柜员(连接线程)可以同时为不同客户服务。有监控(日志)、有复核(事务)、有灾备方案。但需要装修、需要雇人(运维)。
这也就是选择 SQLite 还是 MySQL 的底层逻辑:你的需求是「一个记事本」还是「一个银行大厅」?
五、实战动手:5 分钟上手 SQLite
不需要「安装」
大多数操作系统自带 sqlite3 命令。打开终端试试:
# 检查是否已安装(macOS/Linux 通常已自带)
sqlite3 --version
# 输出类似:3.43.0 2023-08-24 ...
# Windows 用户:去 https://sqlite.org/download.html 下载 sqlite-tools,
# 解压后把 sqlite3.exe 放到 PATH 里即可。
第一步:创建你的第一个数据库
# 创建一个数据库文件 my_first.db,并进入交互模式
sqlite3 my_first.db
就这一行命令!你刚刚创建了一个全新的数据库文件。你会看到一个 sqlite> 提示符,现在已经「进入」数据库了。
第二步:建一张表
-- 创建一个「学生信息」表
-- 表里有学号、姓名、年龄、分数四个字段
CREATE TABLE students (
id INTEGER PRIMARY KEY, -- 学号,主键(唯一标识)
name TEXT NOT NULL, -- 姓名,不能为空
age INTEGER, -- 年龄
score REAL -- 分数(浮点数)
);
第三步:插入数据(增)
-- 插入几条学生记录
INSERT INTO students (id, name, age, score) VALUES (1, '张三', 20, 88.5);
INSERT INTO students (id, name, age, score) VALUES (2, '李四', 22, 92.0);
INSERT INTO students (id, name, age, score) VALUES (3, '王五', 21, 76.5);
INSERT INTO students (id, name, age, score) VALUES (4, '赵六', 23, 95.0);
INSERT INTO students (id, name, age, score) VALUES (5, '孙七', 19, 81.0);
第四步:查询数据(查)
-- 查询所有学生
SELECT * FROM students;
-- 查询分数大于 85 的学生
SELECT name, score FROM students WHERE score > 85;
-- 按分数从高到低排序
SELECT name, score FROM students ORDER BY score DESC;
-- 统计有多少学生,平均分是多少
SELECT COUNT(*) AS 学生总数, AVG(score) AS 平均分 FROM students;
第五步:修改和删除(改、删)
-- 把张三的分数改为 90
UPDATE students SET score = 90.0 WHERE name = '张三';
-- 删除分数低于 80 的学生
DELETE FROM students WHERE score < 80;
-- 确认结果
SELECT * FROM students;
退出
-- 退出 sqlite3
.quit
就这么简单!你现在已经完成了数据库的 CRUD(增删改查)全流程。没有安装服务、没有配置端口、没有创建用户密码。
可引用金句 ②:SQLite 让学习数据库的门槛从「先花半天配置环境」降到了「打开终端敲 3 个字母」。
六、SQLite 的「超能力」
🗂️ 文件即数据库
整个数据库就是一个跨平台的二进制文件。你可以把这个 .db 文件复制到 U 盘,插到 Windows/Mac/Linux 上都能用。字节序、对齐方式全都自己处理好了。这意味着你可以把数据库当作文件交换格式来用——比 JSON 更结构化,比 CSV 更强大。
🌍 跨平台,无处不在
SQLite 几乎运行在你能想到的任何平台上:iOS(Core Data 底层)、Android(内置 SQLiteOpenHelper)、Windows、macOS、Linux、嵌入式 Linux、VxWorks、QNX……甚至连 国际空间站上也在用 SQLite。
🏆 万亿级可靠性
SQLite 的测试代码量是产品代码量的 600 倍。它的测试套件包含超过 5 万个独立测试用例、1100 万行测试代码。官方有一个著名的声明:「SQLite 不会在你面前崩溃。它可能在硬件故障时丢失数据,但不会因为软件 bug 而丢失数据。」
🧩 全功能 SQL
别以为「轻量」意味着功能阉割。SQLite 支持:
- 完整的 SQL 标准(包括 CTE、窗口函数、JSON 函数)
- 事务(ACID)
- 触发器(Trigger)
- 全文搜索(FTS5)
- 地理空间扩展(R*Tree)
你学到的高级 SQL 技巧,在 SQLite 里几乎都能用。
🧠 内存数据库模式
-- 创建一个只在内存中运行的数据库,速度极快,程序关闭后消失
sqlite3 :memory:
适合做单元测试、临时计算、数据缓存。零磁盘 IO,快到飞起。
七、SQLite 的适用场景
✅ 这些场景 SQLite 是「天选之子」
| 场景 | 代表产品/案例 | 为什么 SQLite 合适 |
|---|---|---|
| 手机 App | 微信、抖音、几乎所有 iOS/Android App | 嵌入式运行,无需后台服务,省电省资源 |
| 桌面软件 | Adobe Photoshop Lightroom、AutoCAD | 单用户本地数据,启动即用,无需配置 |
| 浏览器 | Chrome、Firefox、Safari | 存储书签、历史、Cookie,每个用户一个文件 |
| 嵌入式设备 | 智能家居、POS 机、无人机 | 资源受限设备上唯一可行的 SQL 方案 |
| 小型网站 | 个人博客、内部工具、低流量 API | 日 PV < 10 万且写入不频繁时完全够用 |
| 数据交换格式 | .db 文件替代 JSON/CSV | 自带 schema + 索引 + 查询能力 |
| 本地缓存 | 任何需要离线的 App | 网络断开时数据依然可查可改 |
| 学习 & 原型开发 | 个人学习 SQL、快速原型 | 零配置,5 秒起步 |
知名产品中的 SQLite
- 微信/WeChat:聊天记录存储在 SQLite 中
- WhatsApp:历史消息存储(早期版本)
- Skype:联系人、聊天历史
- Dropbox:本地文件元数据索引
- Airbus A350:机上娱乐系统数据库
- Tesla:部分车载数据存储
- Python 标准库:
import sqlite3直接可用
八、SQLite 不适合什么场景?(坦诚说明)
不夸大,SQLite 确实有自己的硬伤:
❌ 高并发写入
SQLite 的写入是串行的——同一时间只能有一个人写。如果你的应用有 100 个用户同时疯狂提交表单,SQLite 会变成严重瓶颈。这时候该上 MySQL/PostgreSQL。
❌ 超大规模数据
虽然理论上限是 281TB,但实际场景中,当单个数据库超过 几百 GB 时,SQLite 的性能和维护性都会明显下降。TB 级别数据请找专门的数据库方案。
❌ 网络共享 / 多机访问
SQLite 数据库文件不支持通过网络共享文件夹访问(会损坏数据)。你需要的是支持网络连接的数据库:MySQL、PostgreSQL、或者如果你喜欢轻量,试试 rqlite(基于 Raft 的分布式 SQLite)。
❌ 需要精细权限管理
SQLite 没有用户系统、没有角色、没有行级安全策略。数据库文件对操作系统来说就是一个普通文件——有文件读权限的人就能看到全部数据。
一个简单的判断公式:
如果你的应用是「一个用户 + 一个设备 + 本地数据」→ 选 SQLite。
如果是「多用户 + 服务器 + 网络访问」→ 选 MySQL/PostgreSQL。
九、常见问题 & 避坑指南
🪤 坑 1:SQLite 的类型是「亲和性」不是「强类型」
创建表时你写了 INTEGER、TEXT,但 SQLite 可以往整数列里插字符串,不会报错!这是设计选择,不是 bug。实际开发中建议加上约束:
-- 严格模式(推荐!)
CREATE TABLE users (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL CHECK(typeof(name) = 'text')
);
🪤 坑 2:并发写锁
SQLite 是整个数据库级别的写锁(不是表级或行级),写操作期间整个数据库被锁定。应对策略:
- 用 WAL 模式(Write-Ahead Logging)提升并发读性能
- 把写操作集中、快速完成
- 高并发写入场景直接换数据库
-- 开启 WAL 模式(推荐)
PRAGMA journal_mode=WAL;
🪤 坑 3:不要用网络文件系统
SQLite 依赖文件锁来保证并发安全。NFS、SMB 等网络文件系统的锁实现不可靠,会导致数据损坏。数据库文件必须在本地磁盘上。
🪤 坑 4:不同版本兼容性
从 SQLite 3 开始,文件格式保持向后兼容。理论上 2026 年的 SQLite 能读取 2004 年创建的数据库文件。这个承诺从 2004 年守到了现在,非常靠谱。
十、总结 & 下一步学习路线
📝 一句话总结
SQLite 是世界上部署量最大的嵌入式数据库——它把一整个关系型数据库塞进一个不到 1MB 的库文件里,让每个程序都能「自带数据库」地运行,无需安装、无需配置、无需运维。
🎯 SQLite 应用场景速查表
| 你的情况 | 结论 |
|---|---|
| 做手机 App 本地存储 | ✅ 几乎是唯一选择 |
| 做桌面软件数据存储 | ✅ 最佳选择 |
| 个人博客/小网站(日 PV < 10 万) | ✅ 完全够用 |
| 公司级 Web 应用(多用户并发) | ❌ 选 MySQL/PostgreSQL |
| 数据分析(TB 级) | ❌ 选 ClickHouse/Snowflake |
| 学 SQL 入门 | ✅ 最佳工具 |
| 原型/MVP 快速验证 | ✅ 完美 |
🛤️ 下一步学习路线
- 今天:按本文第五节的代码敲一遍,体验 CRUD
- 本周:学习 SQL 核心语法——JOIN、GROUP BY、子查询
- 两周内:用 Python + SQLite 写一个小项目(比如记账本、书单管理)
- 一个月后:了解 WAL 模式、事务隔离级别、性能优化
- 之后:当你发现 SQLite 不够用了,自然就准备好学 MySQL/PostgreSQL 了
SQLite 不是 MySQL 的「简化版」,而是另一种设计哲学——简单到极致,反而无处不在。
💬 你是从什么时候开始接触 SQLite 的?是 Android 开发还是浏览器 debug?留言聊聊你的 SQLite 故事。如果你觉得这篇文章对你有帮助,收藏+点赞是对我最大的支持!

4万+

被折叠的 条评论
为什么被折叠?



