数据库的使用
发表于:2026-05-03 | 分类: Next.js16教程
字数统计: 894 | 阅读时长: 3分钟 | 阅读量: 0
枚举:
  • enum 是 Prisma Schema 里用来固定一组可选值的字段类型
  • 枚举选项不能以数字开头,也不能包含特殊字符(除了下划线),枚举修改后必须执行 npx prisma migrate dev
  • 如果你修改了枚举(比如新增/删除选项),必须重新执行迁移,否则数据库不会同步更新:

定义 Enum:

1
2
3
4
5
6
7
8
9
10
11
12
13
enum 枚举名 {
选项1
选项2
选项3
}

// 用户角色枚举
enum Role {
USER
ADMIN
MODERATOR
}

在 Model 中使用 Enum:

把定义好的 Enum 当作字段类型直接用:

1
2
3
4
5
6
7
model User {
id Int @id @default(autoincrement())
name String
// 使用 Role 枚举,默认值设为 USER
role Role @default(USER)
}

什么是 Prisma model:
  • model = 数据库一张表
  • 你在 schema.prisma 里写一个 model
    执行迁移后,数据库自动生成一张对应数据表
1
2
3
model 表名 {
字段名 字段类型 修饰符
}
1
2
3
4
5
6
model User {
id Int @id @default(autoincrement())
name String
age Int?
}

  • @id 主键:
    唯一标识一条数据,每个 model 必须有一个
  • @default: 默认值
    新增数据不填这个字段,就自动用默认值
  • @unique: 唯一约束
    字段不能重复,不能出现一模一样的值,手机号、邮箱、账号 必用
  • @updatedAt: 自动更新时间
    每次修改这条数据,自动刷新为最新当前时间
  • @map 映射数据库字段名:
    代码里用小写简洁名,数据库里自定义名字
1
userName String @map("user_name")
  • @@map 整表映射表名:
1
2
3
model User {
id Int @id
} @@map("user_table")
  • 模型的关系:
1
2
3
4
5
6
7
1. 一对多、多对一 是同一个关系

2. 少的一方 加 数组 []

3. 多的一方 加 外键ID + @relation

4. 外键永远写在 多 的那张表里
表之间的关系:
1
2
3
4
5
6
7
8
9
10
11
model Post {
id Int @id @default(autoincrement())
title String
// 外键:绑定用户id
userId Int
// 关联关系:多篇文章 对应 一个用户
user User @relation(fields: [userId], references: [id]),
onDelete:Cascade
onUpdate: Cascade
}

详细分析如下:

userId Int:

  • 外键字段
  • 用来记录:这篇文章是哪个用户写的
  • 存的就是 User 表里的用户 id

user User:

  • 前面 user:你自己取的关联字段名(随便起名)
  • 后面 User:关联的另一张表模型名(User 用户表)
  • 意思:这条数据,对应 一个 User 用户

fields: [userId]

  • fields = 当前 Post 表里的 userId
  • 用我自己这个表里的 userId 去做关联匹配

references: [id]

  • references = 对面 User 表里的 id 主键

onDelete: Cascade:

  • 级联删除,如果你把 User 用户删掉了
  • 👉 这个用户下面所有关联的 Post 文章,自动全部跟着一起删掉

用文章表里的 userId,去匹配用户表里的 id
把两张表建立绑定关系, 代表:这篇文章属于这个用户。
fields 自己的外键
references 对方的主键

onDelete: Restrict(默认)

  • 有文章存在 → 用户不让删,直接报错

onDelete: SetNull

  • 删用户 → 文章保留,userId 变成 null

onUpdate: Cascade:

  • 级联更新(表示更新主表的时候,从表也更新,非常的方便啊)
1
2
3
4
model User{
roles Role[] @relation("UserRoles")
//这是多对多的关系,会自动创建关联的表UserRoles
}
数据库操作:
npx prisma generate:
1
npx prisma generate
  • 执行 Prisma 命令,根据你的数据表结构,自动生成客户端代码,
  • 修改过 schema.prisma 文件,都要执行这个命令
  • 只生成代码,不动数据库
npx prisma migrate dev:
1
npx prisma migrate dev
  • 把你 schema 改动,同步真正更新到数据库表里
  • 顺序永远是:
    改schema → 先  generate  生成代码 → 再  migrate dev  更新数据库
上一篇:
Radar组件
下一篇:
1项目初始化