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.

99 lines
3.3 KiB

3 weeks ago
  1. ---
  2. title: 数据库prisma
  3. description:
  4. icon: "road"
  5. ---
  6. Prisma 是一个开源的数据库工具链项目,不仅仅是一个简单的 ORM 工具。
  7. 它支持的数据库有 PostgreSQL、MySQL、MongoDB、SQL Server和SQLite
  8. https://juejin.cn/post/7231152303583100988
  9. ```bash
  10. npx prisma --help
  11. # 生成了一个 schema 模板 prisma/schema.prisma
  12. npx prisma init
  13. npx prisma migrate dev --name init
  14. npx prisma migrate dev --name add_foo_column
  15. ```
  16. # Prisma 提供的 7 个命令
  17. 1. **init**
  18. - 在应用中初始化 Prisma
  19. 2. **generate**
  20. - 主要用来生成 Prisma Client
  21. 3. **db**
  22. - 管理数据库的模式和生命周期
  23. 4. **migrate**
  24. - 迁移数据库
  25. 5. **studio**
  26. - 启动一个 Web 端的工作台来管理数据
  27. 6. **validate**
  28. - 检查 Prisma 的模式文件的语法是否正确
  29. 7. **format**
  30. - 格式化 Prisma 的模式文件,默认是 `prisma/schema.prisma`
  31. 以下是关于 Prisma 中定义 User 模型及其相关信息的 Markdown 说明:
  32. ```markdown
  33. # 定义 User 模型
  34. 作为 ORM 工具,Prisma 的模型主要有以下作用:
  35. - 构成了应用领域的 **实体**
  36. - 映射到数据库的 **表**(关系型数据库,例如 PostgreSQL)或 **集合**(MongoDB)
  37. - 构成 Prisma Client API 中 **查询** 的基础
  38. - 在使用 TypeScript 时,Prisma Client 为模型及其 **变体** 提供 **类型定义**,保证数据库访问的类型安全
  39. 定义模型时会用到形如 `@id()` 、`@default()` 这些 Prisma 内置的工具函数。比如 `@id()` 用来声明主键,`@default()` 用来设置默认值,命名都非常语义化,基本就是 SQL 中的一些关键字,非常容易理解。
  40. 下面是一个 User 模型的定义:
  41. ```prisma
  42. model User {
  43. id Int @id @default(autoincrement())
  44. name String
  45. email String @unique
  46. password String
  47. createdTime DateTime @default(now()) @map("created_time")
  48. updatedTime DateTime @updatedAt @map("updated_time")
  49. @@map("user")
  50. }
  51. ```
  52. ## 需要说明的几点信息:
  53. 1. **模型的名字**默认就是创建的数据表的名字,这里是大写的 `User`,那么数据表名也就是大写的 `User`,可以使用 `@@map()` 来设置映射的表名,改为小写的 `user`。
  54. 2. **主键**:每个模型的记录都是唯一可识别的,也就是要有主键,可以使用 `@id` 去声明。
  55. 3. **字段的类型**:比如 `Int`,`String`,会经过 Prisma 转为数据库对应的类型,也就是 `int` 和 `varchar`。
  56. 4. **唯一值约束**:`@unique` 是唯一值约束,所以生成的 `user` 表的 `email` 字段的值不能重复。
  57. 5. **创建时间和更新时间**:为了符合 JS、TS 中的命名规范,使用了小驼峰命名,为了符合数据库命名规范,在后面使用 `@map()` 重新映射为了下划线命名。
  58. ## 同步数据库
  59. 将 Prisma 模型同步到数据库,对于我们这样一个新项目,可以使用下面的命令:
  60. ```sh
  61. $ npx prisma db push
  62. ```
  63. 如果是一个已经有数据的项目,就不能使用这个命令了,转而使用 `prisma migrate` 迁移。本文先不涉及。
  64. 它会创建数据库的 schema,并且使用 Prisma schema 同步数据库,还会“偷偷”执行 `prisma generate` 命令来生成 Prisma Client。
  65. ```
  66. 这段 Markdown 文档包含了定义 Prisma User 模型的详细步骤和说明,格式清晰易读。