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