prisma编写数据表
在prisma中,需要在Prisma Schenma文件中定义数据模型,即model。这些model会反映到数据库中的表。在prisma中,每一个model都对应这数据库里的一个表。 如:
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
值,需要在字段类型后添加问号?
,如用户年龄应当是可选的:
model User {
id Int @id @default(autoincrement())
name String
email String @unique
posts Post[]
age Int?
}