数据库基础
后端核心 数据库 SQL vs NoSQL一、为什么需要数据库
1.1 数据持久化问题
javascript
// ❌ 变量存储 — 服务器重启后数据消失
let posts = [{ title: "Hello", content: "World" }];
// 重启服务器 → posts 回到初始状态!
// ✅ 数据库存储 — 数据永久保存
db.query("SELECT * FROM posts");
// 重启服务器 → 数据依然存在1.2 数据库的本质
数据库 = 永久存储 + 高效查询 + 数据关系管理
1.3 数据在底层如何存储
磁性存储的原理:电磁铁改变磁盘上小磁铁的极性(南/北),计算机通过读取极性来还原比特(0/1)。
同方向磁铁 = 0
反方向磁铁 = 1
→ 整个磁条 = 一串 0 和 1 = 数据💡 Bletchley Park 计算机博物馆里的磁盘:整个巨大磁盘只能存 4MB。
二、SQL 数据库(关系型)
2.1 核心特点
数据以 表格 形式存储,表与表之间通过 关系(Relationships) 连接。
┌─ Users 表 ─────────────┐ ┌─ Posts 表 ─────────────┐
│ id │ name │ email │ │ id │ title │ author_id │
│ 1 │ Angela │ a@mail.com│ ←──→│ 1 │ Hello │ 1 │
│ 2 │ Jack │ j@mail.com│ │ 2 │ World │ 1 │
└────┴────────┴───────────┘ └────┴────────┴───────────┘2.2 表的结构
| 概念 | 说明 |
|---|---|
| 列(Column) | 垂直方向 — 定义字段(name, email, password...) |
| 行(Row/Record) | 水平方向 — 一条完整记录 |
| Schema | 定义表的结构(列名 + 数据类型),创建时确定 |
2.3 关系型数据库的优势
- 🔗 强大的关系管理 — JOIN 查询跨表提取数据
- 📐 结构严格 — 数据一致性高,可预测
- ⚡ 查询效率高 — 索引优化,海量数据毫秒级响应
- 🏢 成熟稳定 — 数十年历史,企业广泛使用
- 🧑💻 一致性可靠 — 不会查询到意外结构的数据
2.4 代表产品
| 数据库 | 特点 | 开源 |
|---|---|---|
| PostgreSQL ⭐ | 功能最强大,专业开发者首选 | ✅ 免费 |
| MySQL | 简单易学,Web 开发经典 | ✅ 免费 |
| SQLite | 轻量级,嵌入式使用 | ✅ 免费 |
| Oracle | 企业级,起价约 $50,000 | ❌ 付费 |
| Microsoft SQL | 微软生态 | ❌ 付费 |
三、NoSQL 数据库(非关系型)
3.1 核心特点
数据以 文档/键值对 形式存储,结构灵活,无需预定义 Schema。
json
// 用户 1
{
"name": "Angela",
"email": "a@mail.com",
"password": "hash123"
}
// 用户 2 — 可以有完全不同的字段!
{
"name": "Jack",
"email": "j@mail.com",
"password": "hash456",
"favorite_food": "noodles" // ← 只有这个用户有此字段
}3.2 NoSQL 的优势
- 🔄 灵活 — 不需要预定义结构,随时可加字段
- 📈 水平扩展 — 适合分布式场景
- 📝 学习曲线低 — 类似 JSON,前端开发者友好
3.3 NoSQL 的问题
随着行业实践深入,NoSQL 暴露出一些问题:
- ⚠️ 可扩展性问题 — 大型项目中反而遇到扩展瓶颈
- ⚠️ 一致性问题 — 缺乏结构导致查询结果不可预测
- ⚠️ 查询效率 — 缺少 JOIN,复杂查询性能不如 SQL
3.4 代表产品
| 数据库 | 特点 | 开源 |
|---|---|---|
| MongoDB | 文档型,最流行的 NoSQL | 部分开源 |
| Redis | 键值型,极快的缓存数据库 | ✅ 免费 |
| DynamoDB | AWS 托管,无服务器 | ❌ 付费 |
四、SQL vs NoSQL 全面对比
| 特征 | SQL(关系型) | NoSQL(非关系型) |
|---|---|---|
| 数据格式 | 表格(行 + 列) | 文档/键值对/图 |
| 结构 | 严格 Schema | 灵活,无需预定义 |
| 关系 | 强(JOIN/外键) | 弱(通常嵌套文档) |
| 查询语言 | SQL(结构化查询语言) | 各产品各异 |
| 一致性 | 高(ACID) | 不同产品不同 |
| 扩展 | 纵向为主 | 横向为主 |
| 学习曲线 | 需要学 SQL 语法 | 类 JSON,相对简单 |
| 适用场景 | 结构化数据、复杂关系 | 灵活数据、快速迭代 |
4.1 趋势变化
2010-2018:NoSQL 大火 → "NoSQL 是未来!SQL 太老了!"
2018-至今:回归理性 → "SQL 其实更可靠、更高效"💡 类比:年轻时喜欢酷炫的 Legolas,长大后发现可靠的 Sam 才是最好的伙伴。
4.2 StackOverflow 2024 调查
专业开发者最常用的数据库:
| 排名 | 数据库 | 类型 |
|---|---|---|
| 🥇 1 | PostgreSQL | SQL |
| 🥈 2 | MySQL | SQL |
| 🥉 3 | SQLite | SQL |
| 4 | MongoDB | NoSQL |
| 5 | Microsoft SQL | SQL |
五、为什么学 PostgreSQL
| 理由 | 说明 |
|---|---|
| 🏆 行业首选 | 专业开发者使用率第一 |
| 💰 免费开源 | 无需付费 |
| 📏 海量扩展 | 从个人项目到企业级无压力 |
| 🔒 超级可靠 | 数据一致性和完整性有保障 |
| 👥 社区强大 | 遇到问题容易找到帮助 |
| 💼 就业优势 | 大量岗位要求 PostgreSQL 经验 |
六、CRUD — 数据库的四大操作
无论哪种数据库,核心操作都是 CRUD:
| 操作 | 含义 | SQL 关键字 |
|---|---|---|
| Create | 创建数据 | INSERT INTO |
| Read | 读取数据 | SELECT |
| Update | 更新数据 | UPDATE |
| Delete | 删除数据 | DELETE |