数据库知识篇
什么是SQL与NoSQL
数据库的两大阵营
数据库世界有两大阵营:SQL(关系型) 和 NoSQL(非关系型)。它们用不同的方式组织和存储数据,各有优势。
💡 类比:SQL 像整齐的 Excel 表格,每列固定、每行一致;NoSQL 像灵活的文件夹,每个文件里放什么都行。
加载图表中...
SQL 数据库
SQL(Structured Query Language) 数据库用表格存数据,用 SQL 语言查询。
数据结构:表格
users 表
┌────┬──────┬────────────────┬─────┐
│ id │ name │ email │ age │
├────┼──────┼────────────────┼─────┤
│ 1 │ 张三 │ zhang@mail.com │ 25 │
│ 2 │ 李四 │ li@mail.com │ 30 │
└────┴──────┴────────────────┴─────┘
SQL 查询语言
-- 查询25岁以上的用户,按年龄排序
SELECT name, age
FROM users
WHERE age > 25
ORDER BY age DESC;
特点
| 特点 | 说明 |
|---|---|
| 结构固定 | 建表时定义好列,每行格式一致 |
| 关系关联 | 多张表可以通过外键关联 |
| 事务安全 | 支持 ACID 事务(要么全成功,要么全失败) |
| SQL 标准 | 通用查询语言,学一次到处用 |
NoSQL 数据库
NoSQL(Not Only SQL) 不要求固定的表结构,数据存储更灵活。
数据结构:JSON 文档(以 MongoDB 为例)
{
"_id": "abc123",
"name": "张三",
"email": "zhang@mail.com",
"age": 25,
"skills": ["JavaScript", "Python"],
"address": {
"city": "北京",
"district": "朝阳区"
}
}
特点
| 特点 | 说明 |
|---|---|
| 结构灵活 | 每条数据可以有不同的字段 |
| 水平扩展 | 容易分布到多台服务器 |
| 高性能 | 简单查询速度非常快 |
| 适合大数据 | 处理海量非结构化数据 |
SQL vs NoSQL 对比
| 特性 | SQL(关系型) | NoSQL(非关系型) |
|---|---|---|
| 数据结构 | 固定表格(行和列) | 灵活(JSON文档/键值对) |
| 查询语言 | SQL | 各有各的API |
| 关联查询 | ✅ JOIN 多表关联 | ❌ 通常不支持 |
| 事务 | ✅ ACID 事务 | 部分支持 |
| 扩展方式 | 垂直扩展(升级服务器) | 水平扩展(加服务器) |
| 适合场景 | 结构化数据、复杂查询 | 大数据、灵活结构 |
| 代表 | PostgreSQL、MySQL | MongoDB、Redis |
加载图表中...
常见数据库详解
PostgreSQL — "全能选手"
加载图表中...
PostgreSQL 既支持传统的表格数据,也支持 JSON,是目前最推荐的通用数据库。
MongoDB — "灵活文档"
// MongoDB 操作示例
// 插入文档
db.users.insertOne({
name: "张三",
skills: ["JS", "Python"],
address: { city: "北京" },
});
// 查询文档
db.users.find({ age: { $gt: 25 } });
// 更新文档
db.users.updateOne(
{ name: "张三" },
{ $set: { age: 26 } }
);
Redis — "闪电缓存"
// Redis 操作示例
// 存值(带过期时间)
await redis.set("session:abc123", userData, "EX", 3600);
// 取值
const session = await redis.get("session:abc123");
// 计数器
await redis.incr("page:views");
| 数据库 | 类型 | 最适合 |
|---|---|---|
| PostgreSQL | SQL | 通用场景、正式项目 |
| MySQL | SQL | Web 应用 |
| SQLite | SQL | 移动端、嵌入式 |
| MongoDB | NoSQL 文档 | 灵活结构、快速开发 |
| Redis | NoSQL 键值 | 缓存、排行榜、会话 |
| Supabase | SQL(PostgreSQL) | 全栈快速开发 |
现代趋势:SQL + NoSQL 融合
现代数据库越来越"全能"——PostgreSQL 也支持 JSON,MongoDB 也支持类似 SQL 的查询:
-- PostgreSQL 中存储和查询 JSON
CREATE TABLE products (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
metadata JSONB -- JSON 字段
);
-- 查询 JSON 字段
SELECT name, metadata->>'color' as color
FROM products
WHERE metadata->>'brand' = 'Apple';
🎯 AI编程小贴士:纠结用 SQL 还是 NoSQL?大多数情况下选 PostgreSQL 不会错。它既有SQL的严谨,又支持JSON的灵活。告诉 AI 你的项目需求,它会帮你选择最合适的数据库方案。
小结
- SQL 数据库用固定表格存数据,适合结构化数据和复杂查询
- NoSQL 数据库结构灵活,适合大数据和快速变化的需求
- PostgreSQL 是最推荐的通用数据库,SQL + JSON 都支持
- MongoDB 适合数据结构多变的场景
- Redis 适合缓存和需要极速读写的场景
- 不确定选什么?先用 PostgreSQL