数据库知识篇
什么是数据库
数据需要一个"家"
你的应用产生了用户信息、文章内容、订单记录……这些数据放在哪里?总不能存在变量里,程序一关就丢了吧?数据库就是专门用来持久化存储和管理数据的系统。
💡 类比:数据库就像一个超级Excel。能存海量数据,支持快速查找,多人同时读写也不会乱。
加载图表中...
为什么需要数据库?
| 存储方式 | 持久性 | 查询能力 | 并发安全 | 适合场景 |
|---|---|---|---|---|
| 变量(内存) | ❌ 程序关了就没 | 手动遍历 | ❌ | 临时计算 |
| 文件(JSON/CSV) | ✅ | 很慢 | ❌ | 小型配置 |
| 数据库 | ✅ | ⚡ 极快 | ✅ | 正式项目 |
加载图表中...
数据库的基本概念
关系型数据库的结构
加载图表中...
| 概念 | 类比 | 说明 |
|---|---|---|
| 数据库(Database) | 一个Excel文件 | 存放所有数据的容器 |
| 表(Table) | Excel的一个Sheet | 存放某一类数据 |
| 行(Row) | Excel的一行 | 一条具体的数据记录 |
| 列(Column) | Excel的一列 | 数据的一个属性/字段 |
数据表示例
users 表:
| id | name | age | |
|---|---|---|---|
| 1 | 张三 | zhang@mail.com | 25 |
| 2 | 李四 | li@mail.com | 30 |
| 3 | 王五 | wang@mail.com | 28 |
常见的数据库
关系型数据库(SQL)
| 数据库 | 特点 | 适用场景 |
|---|---|---|
| PostgreSQL | 功能最强大、开源 | 生产环境首选 |
| MySQL | 最流行、生态丰富 | Web应用 |
| SQLite | 轻量级、无需服务器 | 移动端、小项目 |
非关系型数据库(NoSQL)
| 数据库 | 数据格式 | 适用场景 |
|---|---|---|
| MongoDB | JSON 文档 | 灵活结构的数据 |
| Redis | 键值对 | 缓存、会话管理 |
| Supabase | 基于 PostgreSQL | 全栈快速开发 |
加载图表中...
数据库在项目中的位置
加载图表中...
注意:前端永远不能直接访问数据库,必须通过后端 API 中转。这是安全的基本原则。
用代码连接数据库
Node.js + PostgreSQL
import { Pool } from "pg";
const pool = new Pool({
host: "localhost",
port: 5432,
database: "my_blog",
user: "postgres",
password: "password",
});
// 查询所有用户
const result = await pool.query("SELECT * FROM users");
console.log(result.rows);
// [{ id: 1, name: "张三" }, { id: 2, name: "李四" }]
Next.js API 路由中使用
// app/api/users/route.ts
import { pool } from "@/lib/db";
export async function GET() {
const result = await pool.query("SELECT * FROM users");
return Response.json(result.rows);
}
export async function POST(request: Request) {
const { name, email } = await request.json();
const result = await pool.query(
"INSERT INTO users (name, email) VALUES ($1, $2) RETURNING *",
[name, email]
);
return Response.json(result.rows[0]);
}
数据库连接配置
数据库密码等敏感信息应该放在环境变量中:
# .env.local
DATABASE_URL=postgresql://postgres:password@localhost:5432/my_blog
// lib/db.ts
import { Pool } from "pg";
export const pool = new Pool({
connectionString: process.env.DATABASE_URL,
});
🎯 AI编程小贴士:第一次搭数据库不知道从何下手?告诉 AI"帮我在 Next.js 项目中接入 PostgreSQL 数据库,实现用户注册和登录",它会帮你从安装依赖、创建表、写 API 路由到前端表单一步步搞定。
小结
- 数据库是专门存储和管理数据的系统,程序关闭数据也不会丢
- 关系型数据库(PostgreSQL、MySQL)用表格存数据,用 SQL 查询
- 非关系型数据库(MongoDB、Redis)更灵活,适合特定场景
- 前端不能直接访问数据库,必须通过 API 中转
- 数据库密码等敏感信息放在环境变量中
- PostgreSQL 是现代项目的首选数据库