prisma编写数据表教程

prisma编写数据表

在prisma中,需要在Prisma Schenma文件中定义数据模型,即model。这些model会反映到数据库中的表。在prisma中,每一个model都对应这数据库里的一个表。 如:

ts 复制代码
model User {
  id        Int      @id @default(autoincrement())
  name      String
  email     String   @unique
  posts     Post[]
}

model的写法和class很类似,在model的内部,每一行分为三部分:

  • 字段名:id
  • 类型:Int
  • 装饰器:@id

字段名

就是User表中的字段,如id、name

类型

在Prisma里提供了其中类型

  • 数值类型:
    • Int 32位整数
    • BigInt 64位整数
    • Float 浮点数
    • Decimal 高精度浮点数
  • 字符串类型:
    • String 文本字符串
  • 布尔类型:
    • Boolean 布尔值
  • 日期类型:
    • DateTime 日期和时间,储存ISO 8601格式的字符串
  • 字节类型:
    • Bytes 存储二进制数据,如文件或图像数据
  • 枚举类型:
    • Enum 自定义类型,可定义一组特殊的字符串值
  • JSON类型:
    • Json 存储JSON格式数据,可以包括数组、对象等

装饰器

prisma有8种常见的字段装饰器:

  • @id:将字段标记为主键,主键必须唯一,通常与@unique一起使用
  • @defalut(value):为字段指定默认值,其中的value可以是静态值,如默认为0@defalut(0)。也可以是特定函数:
    • @defalut(autoincrement()):默认递增,通常与主键一起搭配,写成@id @defalut(autoincrement())
    • @defalut(now()):将当前时间戳作为默认值
  • @updatedAt:每当记录更新时,自动将这个字段的值设置为当前时间戳
  • @unique:字段值在表中唯一,保证数据的唯一性。例如用户账号应当用@unique装饰
  • @relation(fields: [], references: []):用于定义外键
  • @map(name):将model的字段映射到其他数据库的字段
  • @db(name):指定字段在数据库中的名称,起别名
  • @ignore:忽略该字段,该字段不会被包含在任何数据库操作中

看到这里,你可以会疑惑,数据库表常用的非空约束呢?其实这个约束时通过可选操作符?实现的。 在model里定义的字段,默认都是非空的。如果要某个字段可以接收null值,需要在字段类型后添加问号?,如用户年龄应当是可选的:

ts 复制代码
model User {
  id        Int      @id @default(autoincrement())
  name      String
  email     String   @unique
  posts     Post[]
  age       Int?
}
相关推荐
南囝coding18 分钟前
Claude 封禁中国?为啥我觉得是个好消息
前端·后端
六边形工程师26 分钟前
Docker安装神通数据库ShenTong
后端
六边形工程师28 分钟前
快速入门神通数据库
后端
重生成为编程大王33 分钟前
FreeMarker快速入门指南
java·后端
Dear.爬虫39 分钟前
Golang的协程调度器原理
开发语言·后端·golang
元闰子44 分钟前
怎么用CXL加速数据库?· SIGMOD'25
数据库·后端·面试
幂简集成1 小时前
GraphQL API 性能优化实战:在线编程作业平台指南
后端·性能优化·graphql
编码浪子1 小时前
趣味学RUST基础篇(构建命令行程序1)
开发语言·后端·rust
周小码1 小时前
极快文本嵌入推理:Rust构建高性能嵌入推理解决方案
开发语言·后端·rust
蜗牛快跑1232 小时前
拆巨资让 Claude Code 和 Codex 同时住进了我的终端里
前端·后端·ai编程