数据库基础:让自己的应用记住数据
从“刷新后内容没了”开始理解数据库。面向零基础开发者和小微团队,以 SQLite、MySQL、PostgreSQL 为主,用一个书签应用学会建表、增删改查、连接 API、保护自己的记录以及备份。
目录不大搬家,主线和选修分开
| 部分 | 定位 | 本阶段成果 |
|---|---|---|
| 1. 关系型数据库 | 必修,先做 SQLite,再认识 MySQL 的 SQL 差异 | 新增、查询、修改和删除书签 |
| 2. 非关系型数据库 | 选修,先了解 MongoDB/Redis 用途 | 能解释为什么首个项目暂时不加第二个数据库 |
| 3. CMS 与 API | 做内容站时选修 | 用 Strapi 管理并展示文章 |
| 4. 前后端联调 | 必修,先选一种驱动,ORM 二选一 | 页面刷新后仍有数据 |
| 5. Supabase 与 PostgreSQL | 托管数据库主线 | 一个带用户隔离的云端数据表 |
| 6. Cognito 与 DynamoDB | 已使用 AWS 的读者选修 | 复用托管身份,不额外自建账号系统 |
| 7. 托管数据库选择与连接 | 替换复杂自托管认证内容 | 选定 Vercel、Netlify、Cloudflare、AWS 或 Supabase 的适用方案 |
| 8. 小项目数据设计 | 替换数据工程内容 | 两张表、一次加字段、一次 CSV 导入 |
| 9. 数据安全与备份 | 只保留必要底线 | 参数化查询、数据隔离、可恢复备份 |
| 10. 书签项目实战 | 一个项目只选一种主数据库 | 用户保存书签,管理员处理违规内容 |
前六部分维持原有目录,MongoDB、Redis、CMS、Cognito 是解决特定问题的备选,不要求通关所有技术。后四部分沿用原位置但重写为小项目练习,不再要求自托管认证适配器、多租户组织、ETL、CDC、Outbox、分库分表、主从复制和多数据库同步。
推荐学习顺序
第一次学习:第1部分的 SQLite → 基础 SQL → 第4部分 API 联调 → 第5部分 PostgreSQL/Supabase → 第7至10部分。MySQL 用来理解另一种常用关系库,能在本地重复同样的 CRUD 即可;不用同时购买两套云数据库。
Prisma 和 Drizzle 先选一种,不用为了 ORM 迁移已经能正常运行的项目。遇到前端页面、后端路由、后台权限问题,到工程册边做边学。
三种数据库如何选
| 数据库 | 适合的第一步 | 边界 |
|---|---|---|
| SQLite | 本地练习、单机小工具、低并发业务 | 数据文件需要持久磁盘和备份;不能丢进临时函数磁盘当长期数据库 |
| MySQL | 已有服务器或已有 MySQL 的小企业 | 负责账号权限、连接与备份;无需一开始购买托管实例 |
| PostgreSQL | Supabase 或其他托管 PostgreSQL | 使用服务提供的安全连接串,核对连接数、休眠和费用 |
| Cloudflare D1 | Workers 上的小型关系数据 | 基于 SQLite,但不是上传一个文件后就能复用所有 Node 驱动 |
Vercel 和 Netlify 是应用部署入口,不等于一种 SQL 方言;它们的数据库集成、合作服务与产品名称可能变化。跟随控制台提供的连接方式,确认最终数据库类型和账单归属。AWS 的托管关系库可能有持续费用,不默认开通 RDS。
第一张表
安装 SQLite 命令行后打开独立实验库:
sqlite3 bookmarks.db
在 SQLite 提示符中逐条执行:
CREATE TABLE bookmarks (
id INTEGER PRIMARY KEY,
title TEXT NOT NULL,
url TEXT NOT NULL
);
INSERT INTO bookmarks(title, url) VALUES ('学习记录', 'https://example.com');
SELECT id, title, url FROM bookmarks;
退出再打开,同一条记录还在,这就是本轮最重要的结果。先用虚构数据,不导入公司的用户信息。
AI 帮忙,但由你验收
给 Codex 的需求写清数据库类型、表结构、执行环境和期望结果,要求参数化查询,禁止把连接串写进前端。修改数据前先预览受影响的行;删除表、清空库或覆盖备份必须先确认目标。
每章留下实际查询结果、失败案例和恢复办法。最终验收不是能背术语,而是:页面能保存数据;账号 A 不能看到 B 的私有记录;备份能恢复到新库;知道免费额度用完时怎么处理。