首页 / SQLite 入门教程 / 为什么选 SQLite

SQLite 入门教程

为什么选 SQLite

本教程共 50 篇 · 第 2 篇 · 更新于 2026-07-31

sqlite适用场景嵌入式边界

02. 为什么选 SQLite

本节目标:学完本章你能列出 SQLite 最擅长干的 5 类活儿,也能一口气说出它不适合的 3 种情况,做到“选型不踩坑”。

上一章我们说 SQLite 是“随身的笔记本”。但笔记本再好,也不是所有场合都该用它。这一章就来解决一个最实际的问题:到底什么时候该选 SQLite,什么时候不该?

它最擅长的事:适用场景

1. 嵌入式与本地应用

手机 App、桌面软件(Windows/macOS/Linux 原生程序)、浏览器扩展,几乎都需要“在本地存点东西”——用户的偏好设置、草稿、缓存、离线数据。这种场景 SQLite 是默认答案:它直接以文件形式躺在应用沙盒里,随开随用,不占额外进程。

Note

注意“嵌入式”不只指硬件嵌入式。凡是“数据库引擎内置于应用自身”的,都算嵌入式。所以桌面端的笔记软件、音乐播放器,本质上和单片机里的 SQLite 是同一种用法。

2. 边缘设备与 IoT

路由器、智能家电、车载设备、传感器网关,这些“边缘(edge)”设备往往 CPU 弱、内存小、还经常断电。SQLite 不到 400KiB、自包含、断电安全(ACID),简直是为这类环境量身定做。

3. 单机程序与本地存储

很多小工具就是一个人用、一台机器跑,比如个人记账本、本地通讯录、单机小游戏存档。给这种程序去搭一套 MySQL 服务器,属于“杀鸡用牛刀”。SQLite 一个文件搞定,迁移还只要复制文件。

4. 原型开发与测试

写新功能做原型时,你最不想把时间花在“装数据库、建用户、配权限”上。SQLite 零配置,启动时连文件名一指就能建库,跑完测试删掉文件即可,干净利落。CI(持续集成)流水线里也常用它做单元测试的临时数据库。

5. 跨平台与数据文件交换

因为库文件跨平台、格式稳定,SQLite 经常被当作应用文件格式来用——你存的不是一个“数据库”,而是一个“文档”。比如很多笔记软件、财务软件,它的 .db 文件其实就是“这个软件的一本账本”,你可以像传一个 Word 文档那样把它发给别人。

6. 缓存与中间结果

把网络请求的结果、计算的中间产物缓存在本地 SQLite 里,下次启动直接读,体验更顺滑、也更省流量。它比自己手写一堆散文件要规整,又比上服务器轻得多。

它的边界:什么时候不该用

选型的关键,往往是知道它适合什么。下面这几条是 SQLite 的明确边界,踩到就要换方案。

边界一:高并发写入

SQLite 采用库级写锁:同一时刻只能有一个写者在写,其他写操作得排队。对于“一天几十条数据的本地应用”无所谓;但如果是“几千个用户同时下单、每秒几百次写”的网站后端,SQLite 会立刻成为瓶颈。这种高并发、多写者的场景,应当用 MySQL、PostgreSQL 这类客户端/服务器数据库。

Warning

不要因为“SQLite 简单”就把它直接顶到高并发写的生产后台。读多写少、并发量小没问题;一旦写并发上量,库级锁会让请求大量阻塞甚至超时。选型时先估一下“同时写”的压力,而不是“总共多少用户”。

边界二:需要被很多人通过网络同时访问

SQLite 是为“一个应用、一个进程、本地访问一个文件”设计的。虽然它支持多个进程同时读,但“让成百上千台远程机器通过网络连同一个 SQLite 文件”并不是它的设计目标(网络文件系统上跑 SQLite 还会带来锁与一致性问题)。多客户端远程访问,请上服务器型数据库。

边界三:超大规模数据量

单个 SQLite 数据库文件理论上限约 281TB,听起来很大,但实践中当数据量和并发都上来后,单一文件 + 库级锁的模型会遇到性能和运维天花板。海量数据、需要分库分表、需要在线水平扩展的场景,不是 SQLite 的菜。

边界四:需要精细的访问权限控制

SQLite 的“权限”就是底层操作系统对那个文件的读写权限——谁能读这个文件、谁能写这个文件。它没有像 MySQL 那样的 GRANT/REVOKE 多用户、多角色、列级权限体系。如果你的需求是“给用户 A 只让看某几张表、给用户 B 能改某列”,SQLite 给不了,得上服务器型数据库。

边界五:某些高级 SQL 特性不支持

为了轻量,SQLite 有意不支持一部分 SQL 标准特性,例如:

  • 只实现了 LEFT OUTER JOIN,没有 RIGHT OUTER JOIN 和 FULL OUTER JOIN;
  • 视图(VIEW)是只读的,不能在视图上直接 INSERT/UPDATE/DELETE;
  • ALTER TABLE 的“改列类型、直接加约束”仍不支持(注:3.25.0 起已支持重命名列、3.35.0 起已支持删除列,能力在逐步增强)。

这些对大多数入门和嵌入式场景影响不大,但写复杂分析SQL时要心里有数。

一张选型速查表

你的场景选 SQLite?理由
手机/桌面 App 本地存储✅ 强烈推荐嵌入式、零配置、文件即库
个人小工具、单机程序✅ 推荐太轻量,搭服务器不划算
原型 / 单元测试 / 临时库✅ 推荐秒级建库、删文件即清
缓存、配置、离线数据✅ 推荐一个文件搞定,易迁移
高并发写(如电商下单)❌ 别用库级写锁扛不住
大量远程客户端同时访问❌ 别用非 serverless 设计
多用户精细权限管理❌ 别用无 GRANT/REVOKE
海量数据 + 水平扩展❌ 谨慎单文件模型有上限

为什么很多人“用错了”又“离不开”

有意思的是,SQLite 的官方文档自己就写了一篇《Appropriate Uses For SQLite》(合适的用途),专门劝大家“别把它当服务器数据库”。但现实里它却是部署量最大的数据库引擎——因为绝大多数软件的“数据库需求”其实是本地的、单机的、低并发的,正好落在 SQLite 的甜蜜区。

记住一句话:SQLite 不是“小号 MySQL”,它是一种不同的东西。 它解决的是“应用内、本地、轻量、可靠地存数据”的问题;MySQL/PostgreSQL 解决的是“多客户端、高并发、集中管理”的问题。两者不是替代关系,而是各管一片。

类比小结

还是用“笔记本 vs 图书馆”:

  • 自己记日记、列清单、写草稿 → 笔记本(SQLite)最舒服。
  • 全校师生同时来借书还书、还要分权限 → 必须图书馆(MySQL/PostgreSQL)。

选型的艺术,就是先想清楚“谁来用、怎么用、并发多大”,再决定掏笔记本还是去图书馆。下一章我们把这两类数据库的架构差异摊开来对比,让你看得更透。

Tip

拿不准该不该用 SQLite 时,先问自己三个问题:①数据是不是主要在一个程序/一台机器本地用?②写操作并发高不高?③需不需要多用户权限体系?三个都是“是/不高/不需要”,基本就可以放心上 SQLite。