4.2 数据库使用指南
数据库基础概念
数据库 = 有组织的数据存储系统
类比:
- 数据库 = 图书馆
- 表(Table)= 书架
- 行(Row)= 一本书
- 列(Column)= 书的属性(书名、作者、出版日期)
常见数据库:
| 数据库 | 类型 | 特点 | 推荐场景 |
|---|---|---|---|
| PostgreSQL | SQL(关系型) | 功能强大,开源 | 复杂应用,需要事务 |
| MySQL | SQL(关系型) | 流行,易用 | Web 应用,博客 |
| SQLite | SQL(关系型) | 轻量,单文件 | 小项目,学习 |
| MongoDB | NoSQL(文档型) | 灵活,JSON 格式 | 快速迭代,数据结构多变 |
| Supabase | SQL(PostgreSQL) | 后端即服务 | 快速开发,全栈应用 |
Drizzle ORM 入门
ORM = Object-Relational Mapping(对象关系映射)
作用:用 JavaScript/TypeScript 操作数据库,不用写 SQL
为什么选择 Drizzle:
- ✅ TypeScript 优先(类型安全)
- ✅ 轻量高效
- ✅ SQL-like 语法(易学)
- ✅ AI 友好(AI 容易生成正确代码)
安装配置
用 AI 安装:
Command + L
输入:
帮我在 Next.js 项目中安装和配置 Drizzle ORM,
使用 PostgreSQL 数据库,
包括:
- 安装依赖
- 创建配置文件
- 配置数据库连接
- 创建示例表结构完成后记得检查 .env 里的数据库连接字符串是否正确,别把密码直接提交到 GitHub。
定义数据表
示例:博客文章表
// lib/db/schema.ts
import { pgTable, serial, text, timestamp } from 'drizzle-orm/pg-core';
export const posts = pgTable('posts', {
id: serial('id').primaryKey(),
title: text('title').notNull(),
content: text('content').notNull(),
author: text('author').notNull(),
createdAt: timestamp('created_at').defaultNow(),
});基本操作(CRUD)
1. 创建(Create):
import { db } from '@/lib/db';
import { posts } from '@/lib/db/schema';
// 插入新文章
const newPost = await db.insert(posts).values({
title: "我的第一篇文章",
content: "这是文章内容",
author: "Ben"
});2. 读取(Read):
// 获取所有文章
const allPosts = await db.select().from(posts);
// 获取特定文章
const post = await db.select()
.from(posts)
.where(eq(posts.id, 1));
// 获取最新 10 篇文章
const latestPosts = await db.select()
.from(posts)
.orderBy(desc(posts.createdAt))
.limit(10);3. 更新(Update):
await db.update(posts)
.set({ title: "更新后的标题" })
.where(eq(posts.id, 1));4. 删除(Delete):
await db.delete(posts)
.where(eq(posts.id, 1));每次操作数据库都要考虑”如果失败怎么办”:让 AI 帮你包上一层 try/catch,并记录日志或返回友好的错误信息。
用 AI 操作数据库
Prompt 模板:
我的数据库中有一个 posts 表,包含字段:
- id (主键)
- title (文章标题)
- content (文章内容)
- author (作者)
- createdAt (创建时间)
请帮我创建一个 API:
- 路径:/api/posts
- GET:返回所有文章,按创建时间倒序
- POST:创建新文章,需要验证必填字段
使用 Drizzle ORM,包含完整的错误处理。拿到 API 后,最好同时让 AI 写一个简单的种子脚本(seed script)往表里插入几条测试数据,方便联调前端页面。
Last updated on