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

---
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 模型的详细步骤和说明,格式清晰易读。