学径XUEJING · 个人学习平台通知设置

课程库 技术雷达 数据与存储 › 第 1

SQLite —— 世界上部署最广的数据库,就在你手机里

普通课35 分钟

本课导读

你已经在用一个正经数据库了:本站的用户、进度、笔记都存在 Supabase 的 PostgreSQL 里。那 SQLite 是什么?是 Postgres 的"轻量版"吗?——不是。它们代表数据库的两种截然不同的活法,搞懂这个分野,你就能看懂"为什么手机 App 都用 SQLite""为什么 Cloudflare D1 是个大新闻"这类话题。预计 35 分钟。

数据库的两种活法

活法一:服务器型(client-server)——Postgres、MySQL 都是这种。数据库是一个独立运行的程序,7×24 小时开着,守着一个网络端口;你的应用是它的"客户端",每次读写数据都要通过网络发请求过去。

你的 Next.js 应用 ──网络(连接串/加密/认证)──▶ Supabase 上的 Postgres 进程 ──▶ 磁盘

这就是为什么你的项目里有 SUPABASE_URL 这种环境变量——那是数据库服务器的网络地址。独立进程的好处:成百上千个客户端可以同时连它,它统一调度读写、管理用户权限,天生为"多人同时访问"设计。

活法二:嵌入式(embedded)——SQLite 的活法。它不是一个程序,而是一个库(一个 C 语言函数库),直接编译进你的应用里。没有独立进程、没有端口、没有密码,读写数据就是普通的函数调用,数据全部存在一个普通文件里(比如 app.db)。

你的应用(SQLite 就在进程内部)──函数调用──▶ app.db 这一个文件

提示

类比:Postgres 像银行——独立机构、有营业时间和柜台协议、能同时服务全城的人、安保严密;SQLite 像你口袋里的记账本——随手就写、不用排队不用联网,但它只服务你一个人,也没有保安。不是谁高级谁低级,是场景完全不同。

它到底有多"无处不在"

SQLite 官网的自我介绍是"世界上部署最多的数据库引擎",这不是吹牛,数量级在万亿级实例

  • 你的手机:Android 和 iOS 都内置 SQLite,微信聊天记录、浏览器历史、相册索引……几乎每个 App 的本地数据都是它
  • 你的浏览器:Chrome/Firefox 的历史记录、Cookie 存储
  • 你的电脑:macOS/Windows 的无数系统组件、Photoshop、各种桌面软件
  • 飞机航电系统(空客 A350 机载软件)、汽车车机……

为什么能铺这么广?因为嵌入式的三个特性正中"设备本地存数据"的需求:零配置(不用装数据库服务、不用运维)、单文件(备份 = 复制文件,迁移 = 拷走文件)、极其可靠(SQLite 的测试代码量是产品代码的数百倍,是软件工程界著名的质量标杆,公有领域授权随便用)。

SQL 是通用语:你已经会一半了

关键认知:SQLite、Postgres、MySQL 说的都是同一门语言——SQL。你在 Supabase SQL Editor 里写的东西,几乎原样能在 SQLite 里跑:

Sql
-- 这段 SQL 在 SQLite 和 Postgres 里几乎一模一样
CREATE TABLE notes (
id INTEGER PRIMARY KEY,
title TEXT NOT NULL,
created_at TEXT DEFAULT (datetime('now'))
);

INSERT INTO notes (title) VALUES ('我的第一条笔记');

SELECT id, title, created_at
FROM notes
WHERE title LIKE '%笔记%'
ORDER BY created_at DESC;
本地运行指引
最快的体验方式(不用装任何东西):
1. 打开 https://sqlite.org/fiddle —— 官方在线试验场,粘贴运行即可
本地方式:
1. Windows 下载 sqlite-tools:https://sqlite.org/download.html
2. 命令行运行:sqlite3 test.db
3. 粘贴上面的 SQL,退出后你会发现目录里多了个 test.db 文件——整个数据库就是它

差异在边角:SQLite 的类型系统更松散(它历史上不严格检查你往 TEXT 列塞数字)、没有 Postgres 那些高级类型(JSONB、数组)和扩展。但日常的建表、增删改查、索引、事务、JOIN,两边是同一套思维——你学的 SQL 一分都不浪费。

它的短板:正好是 Postgres 的主场

SQLite 的所有短板都源自"嵌入式 + 单文件"这个设计本身:

  • 并发写入弱:同一时刻整个数据库只允许一个写入者(读可以很多)。个人设备无所谓,网站后端几百人同时提交就是灾难
  • 没有网络访问:文件在哪台机器,应用就得在哪台机器
  • 没有用户/权限系统:拿到文件 = 拿到一切。你在 Supabase 里用的行级安全(RLS)、角色权限,SQLite 一概没有

所以你的网站选 Supabase/Postgres 是完全正确的:多用户、经网络访问、需要权限隔离——三条全踩在服务器型数据库的主场上。

雷达延伸:为什么 SQLite 最近又"翻红"了

近几年 SQLite 在服务器圈意外翻红,你可能撞见过这些名词:

  • 边缘数据库(Cloudflare D1、Turso):把 SQLite 文件复制到全球几百个边缘节点,用户访问离自己最近的副本——单文件、易复制的特性正好适合"把数据摊到全世界"
  • Local-first(本地优先)应用:数据先存在用户设备的 SQLite 里(秒开、离线可用),后台再同步到云端。Figma、Linear 这类"快得不像网页"的应用都是这个思路
  • 测试提速:开发/测试时用内存 SQLite 顶替 Postgres,测试快一个量级(要小心两者的边角差异)

说明

看出雷达规律了吗:老技术翻红,通常不是它变了,而是新场景正好长在它的长处上。SQLite 等了二十年,等来了边缘计算。

够用判断线

一句话总结:SQLite 是嵌入式单文件数据库,说标准 SQL,统治"单机本地存数据"场景;服务器型的 Postgres 统治"多人网络访问"场景。 什么时候你会真正用上它:写桌面/移动应用要存本地数据、写 CLI 工具要记状态、快速做原型不想开 Supabase——到时候拿起来就能用,因为 SQL 你已经会了。

随堂测验

随堂测验0 / 4 题正确

1. SQLite 和 Postgres 最根本的区别是什么?

2. 你的网站用 Supabase(Postgres)而不是 SQLite,最站得住脚的理由是?

3. 「学会了 Supabase 里的 SQL,再碰 SQLite 要重学吗?」

4. 近年 SQLite 在服务器圈翻红(Cloudflare D1、Turso、local-first),吃到红利的是它哪个特性?

划选正文任意文字可高亮、批注或加入复习卡

讨论

载入中…