数据库知识篇

什么是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、MySQLMongoDB、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");
数据库类型最适合
PostgreSQLSQL通用场景、正式项目
MySQLSQLWeb 应用
SQLiteSQL移动端、嵌入式
MongoDBNoSQL 文档灵活结构、快速开发
RedisNoSQL 键值缓存、排行榜、会话
SupabaseSQL(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