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