You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
100 lines
3.3 KiB
100 lines
3.3 KiB
---
|
|
title: 数据库prisma
|
|
description:
|
|
icon: "road"
|
|
---
|
|
|
|
Prisma 是一个开源的数据库工具链项目,不仅仅是一个简单的 ORM 工具。
|
|
它支持的数据库有 PostgreSQL、MySQL、MongoDB、SQL Server和SQLite
|
|
|
|
|
|
https://juejin.cn/post/7231152303583100988
|
|
|
|
```bash
|
|
npx prisma --help
|
|
|
|
# 生成了一个 schema 模板 prisma/schema.prisma
|
|
npx prisma init
|
|
|
|
npx prisma migrate dev --name init
|
|
|
|
npx prisma migrate dev --name add_foo_column
|
|
|
|
```
|
|
|
|
# Prisma 提供的 7 个命令
|
|
|
|
1. **init**
|
|
- 在应用中初始化 Prisma
|
|
|
|
2. **generate**
|
|
- 主要用来生成 Prisma Client
|
|
|
|
3. **db**
|
|
- 管理数据库的模式和生命周期
|
|
|
|
4. **migrate**
|
|
- 迁移数据库
|
|
|
|
5. **studio**
|
|
- 启动一个 Web 端的工作台来管理数据
|
|
|
|
6. **validate**
|
|
- 检查 Prisma 的模式文件的语法是否正确
|
|
|
|
7. **format**
|
|
- 格式化 Prisma 的模式文件,默认是 `prisma/schema.prisma`
|
|
|
|
|
|
|
|
以下是关于 Prisma 中定义 User 模型及其相关信息的 Markdown 说明:
|
|
|
|
```markdown
|
|
# 定义 User 模型
|
|
|
|
作为 ORM 工具,Prisma 的模型主要有以下作用:
|
|
|
|
- 构成了应用领域的 **实体**
|
|
- 映射到数据库的 **表**(关系型数据库,例如 PostgreSQL)或 **集合**(MongoDB)
|
|
- 构成 Prisma Client API 中 **查询** 的基础
|
|
- 在使用 TypeScript 时,Prisma Client 为模型及其 **变体** 提供 **类型定义**,保证数据库访问的类型安全
|
|
|
|
定义模型时会用到形如 `@id()` 、`@default()` 这些 Prisma 内置的工具函数。比如 `@id()` 用来声明主键,`@default()` 用来设置默认值,命名都非常语义化,基本就是 SQL 中的一些关键字,非常容易理解。
|
|
|
|
下面是一个 User 模型的定义:
|
|
|
|
```prisma
|
|
model User {
|
|
id Int @id @default(autoincrement())
|
|
name String
|
|
email String @unique
|
|
password String
|
|
createdTime DateTime @default(now()) @map("created_time")
|
|
updatedTime DateTime @updatedAt @map("updated_time")
|
|
|
|
@@map("user")
|
|
}
|
|
```
|
|
|
|
## 需要说明的几点信息:
|
|
|
|
1. **模型的名字**默认就是创建的数据表的名字,这里是大写的 `User`,那么数据表名也就是大写的 `User`,可以使用 `@@map()` 来设置映射的表名,改为小写的 `user`。
|
|
2. **主键**:每个模型的记录都是唯一可识别的,也就是要有主键,可以使用 `@id` 去声明。
|
|
3. **字段的类型**:比如 `Int`,`String`,会经过 Prisma 转为数据库对应的类型,也就是 `int` 和 `varchar`。
|
|
4. **唯一值约束**:`@unique` 是唯一值约束,所以生成的 `user` 表的 `email` 字段的值不能重复。
|
|
5. **创建时间和更新时间**:为了符合 JS、TS 中的命名规范,使用了小驼峰命名,为了符合数据库命名规范,在后面使用 `@map()` 重新映射为了下划线命名。
|
|
|
|
## 同步数据库
|
|
|
|
将 Prisma 模型同步到数据库,对于我们这样一个新项目,可以使用下面的命令:
|
|
|
|
```sh
|
|
$ npx prisma db push
|
|
```
|
|
|
|
如果是一个已经有数据的项目,就不能使用这个命令了,转而使用 `prisma migrate` 迁移。本文先不涉及。
|
|
|
|
它会创建数据库的 schema,并且使用 Prisma schema 同步数据库,还会“偷偷”执行 `prisma generate` 命令来生成 Prisma Client。
|
|
```
|
|
|
|
这段 Markdown 文档包含了定义 Prisma User 模型的详细步骤和说明,格式清晰易读。
|