Prisma Schema 参考
datasource
在 Prisma Schema 中定义一个数据源。
字段
一个 datasource
块接受以下字段
名称 | 必填 | 类型 | 描述 |
---|---|---|---|
provider | 是 | 字符串 (postgresql , mysql , sqlite , sqlserver , mongodb , cockroachdb ) | 描述要使用哪个数据源连接器。 |
url | 是 | 字符串 (URL) | 连接 URL,包括身份验证信息。大多数连接器使用数据库提供的语法。 |
shadowDatabaseUrl | 否 | 字符串 (URL) | Prisma Migrate 使用的影子数据库的连接 URL。允许您使用云托管数据库作为影子数据库。 |
directUrl | 否 | 字符串 (URL) | 直接连接到数据库的连接 URL。 如果您在 url 参数中使用连接池 URL(例如,如果您使用Prisma Accelerate 或 pgBouncer),则需要直接连接到数据库的 Prisma CLI 命令将使用 directUrl 参数中的 URL。从 5.1.0 版开始,Prisma Studio 支持 directUrl 属性。使用Prisma Postgres 数据库时,不需要 directUrl 属性。 |
relationMode | 否 | 字符串 (foreignKeys , prisma ) | 设置数据库中是否通过外键或在 Prisma Client 中模拟来强制执行引用完整性。 在 3.1.1 及更高版本中预览。在 4.5.0 及更高版本中,该字段名为 relationMode ,以前名为 referentialIntegrity 。 |
extensions | 否 | 字符串列表(PostgreSQL 扩展名称) | 允许您在您的 Schema 中表示 PostgreSQL 扩展。仅在 Prisma ORM 4.5.0 及更高版本中,PostgreSQL 的预览功能可用。 |
以下提供程序可用
备注
- Schema 中只能有一个
datasource
块。 datasource db
是约定 - 但是,您可以为您的数据源指定任何名称 - 例如,datasource mysql
或datasource data
。
示例
指定 PostgreSQL 数据源
在此示例中,目标数据库可以通过以下凭据访问
- 用户:
johndoe
- 密码:
mypassword
- 主机:
localhost
- 端口:
5432
- 数据库名称:
mydb
- 模式名称:
public
datasource db {
provider = "postgresql"
url = "postgresql://johndoe:mypassword@localhost:5432/mydb?schema=public"
}
在此处了解有关 PostgreSQL 连接字符串的更多信息。
通过环境变量指定 PostgreSQL 数据源
在此示例中,目标数据库可以通过以下凭据访问
- 用户:
johndoe
- 密码:
mypassword
- 主机:
localhost
- 端口:
5432
- 数据库名称:
mydb
- 模式名称:
public
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
在运行需要数据库连接 URL 的 Prisma CLI 命令(例如 prisma generate
)时,您需要确保已设置 DATABASE_URL
环境变量。
一种方法是创建一个带有以下内容的.env
文件。请注意,该文件必须与您的 schema.prisma
文件位于同一目录中,以便 Prisma CLI 自动获取。
DATABASE_URL=postgresql://johndoe:mypassword@localhost:5432/mydb?schema=public
指定 MySQL 数据源
在此示例中,目标数据库可以通过以下凭据访问
- 用户:
johndoe
- 密码:
mypassword
- 主机:
localhost
- 端口:
3306
- 数据库名称:
mydb
datasource db {
provider = "mysql"
url = "mysql://johndoe:mypassword@localhost:3306/mydb"
}
在此处了解有关 MySQL 连接字符串的更多信息。
指定 MongoDB 数据源
- 用户:
root
- 密码:
password
- 主机:
cluster1.test1.mongodb.net
- 端口:N/A
- 数据库名称:
testing
datasource db {
provider = "mongodb"
url = "mongodb+srv://root:[email protected]/testing?retryWrites=true&w=majority"
}
在此处了解有关 MongoDB 连接字符串的更多信息。
指定 SQLite 数据源
在此示例中,目标数据库位于名为 dev.db
的文件中。
datasource db {
provider = "sqlite"
url = "file:./dev.db"
}
在此处了解有关 SQLite 连接字符串的更多信息。
指定 CockroachDB 数据源
在此示例中,目标数据库可以通过以下凭据访问
- 用户:
johndoe
- 密码:
mypassword
- 主机:
localhost
- 端口:
26257
- 数据库名称:
mydb
- 模式名称:
public
datasource db {
provider = "cockroachdb"
url = "postgresql://johndoe:mypassword@localhost:26257/mydb?schema=public"
}
连接字符串的格式与 PostgreSQL 相同。在此处了解有关 PostgreSQL 连接字符串的更多信息。
generator
在 Prisma Schema 中定义一个生成器。
字段
一个 generator
块接受以下字段
| 名称 | 必填 | 类型 | 描述 | | ----------------- | -------- | ----------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --- | | provider
| 是 | 字符串(文件路径)或枚举 (prisma-client-js
) | 描述要使用哪个生成器。这可以指向实现生成器或直接指定内置生成器的文件。 | | output
| 否 | 字符串(文件路径) | 确定生成客户端的位置,了解更多。默认值:node_modules/.prisma/client
| | previewFeatures
| 否 | 枚举列表 | 使用智能感知查看当前可用的预览功能列表 (在 Visual Studio Code 中使用 Ctrl+Space
) 默认值:无 | | | engineType
| 否 | 枚举 (library
或 binary
) | 定义要下载和使用的查询引擎类型。默认值:library
| | binaryTargets
| 否 | 枚举列表(见下文) | 指定 Prisma Client 将在其上运行的操作系统,以确保查询引擎的兼容性。默认值:native
|
binaryTargets
选项
下表列出了所有支持的操作系统以及在binaryTargets
中指定的平台名称。
除非另有说明,否则默认支持的 CPU 架构为 x86_64。
macOS
构建操作系统 | Prisma 引擎构建名称 |
---|---|
macOS Intel x86_64 | darwin |
macOS ARM64 | darwin-arm64 |
Windows
构建操作系统 | Prisma 引擎构建名称 |
---|---|
Windows | windows |
Linux(x86_64 架构上的 Alpine)
构建操作系统 | Prisma 引擎构建名称 | OpenSSL |
---|---|---|
Alpine(3.17 及更高版本) | linux-musl-openssl-3.0.x * | 3.0.x |
Alpine(3.16 及更早版本) | linux-musl | 1.1.x |
* 在 Prisma ORM 4.8.0 及更高版本中可用。
Linux(ARM64 架构上的 Alpine)
构建操作系统 | Prisma 引擎构建名称 | OpenSSL |
---|---|---|
Alpine(3.17 及更高版本) | linux-musl-arm64-openssl-3.0.x * | 3.0.x |
Alpine(3.16 及更早版本) | linux-musl-arm64-openssl-1.1.x * | 1.1.x |
* 在 Prisma ORM 4.10.0 及更高版本中可用。
Linux(Debian),x86_64
构建操作系统 | Prisma 引擎构建名称 | OpenSSL |
---|---|---|
Debian 8(Jessie) | debian-openssl-1.0.x | 1.0.x |
Debian 9(Stretch) | debian-openssl-1.1.x | 1.1.x |
Debian 10(Buster) | debian-openssl-1.1.x | 1.1.x |
Debian 11(Bullseye) | debian-openssl-1.1.x | 1.1.x |
Debian 12(Bookworm) | debian-openssl-3.0.x | 3.0.x |
Linux(Ubuntu),x86_64
构建操作系统 | Prisma 引擎构建名称 | OpenSSL |
---|---|---|
Ubuntu 14.04(trusty) | debian-openssl-1.0.x | 1.0.x |
Ubuntu 16.04(xenial) | debian-openssl-1.0.x | 1.0.x |
Ubuntu 18.04(bionic) | debian-openssl-1.1.x | 1.1.x |
Ubuntu 19.04(disco) | debian-openssl-1.1.x | 1.1.x |
Ubuntu 20.04(focal) | debian-openssl-1.1.x | 1.1.x |
Ubuntu 21.04(hirsute) | debian-openssl-1.1.x | 1.1.x |
Ubuntu 22.04(jammy) | debian-openssl-3.0.x | 3.0.x |
Ubuntu 23.04(lunar) | debian-openssl-3.0.x | 3.0.x |
Linux(CentOS),x86_64
构建操作系统 | Prisma 引擎构建名称 | OpenSSL |
---|---|---|
CentOS 7 | rhel-openssl-1.0.x | 1.0.x |
CentOS 8 | rhel-openssl-1.1.x | 1.1.x |
Linux(Fedora),x86_64
构建操作系统 | Prisma 引擎构建名称 | OpenSSL |
---|---|---|
Fedora 28 | rhel-openssl-1.1.x | 1.1.x |
Fedora 29 | rhel-openssl-1.1.x | 1.1.x |
Fedora 30 | rhel-openssl-1.1.x | 1.1.x |
Fedora 36 | rhel-openssl-3.0.x | 3.0.x |
Fedora 37 | rhel-openssl-3.0.x | 3.0.x |
Fedora 38 | rhel-openssl-3.0.x | 3.0.x |
Linux (Linux Mint),x86_64
构建操作系统 | Prisma 引擎构建名称 | OpenSSL |
---|---|---|
Linux Mint 18 | debian-openssl-1.0.x | 1.0.x |
Linux Mint 19 | debian-openssl-1.1.x | 1.1.x |
Linux Mint 20 | debian-openssl-1.1.x | 1.1.x |
Linux Mint 21 | debian-openssl-3.0.x | 3.0.x |
Linux (Arch Linux),x86_64
构建操作系统 | Prisma 引擎构建名称 | OpenSSL |
---|---|---|
Arch Linux 2019.09.01 | debian-openssl-1.1.x | 1.1.x |
Arch Linux 2023.04.23 | debian-openssl-3.0.x | 3.0.x |
Linux ARM64(所有主要发行版,但 Alpine 除外)
构建操作系统 | Prisma 引擎构建名称 | OpenSSL |
---|---|---|
基于 Linux ARM64 glibc 的发行版 | linux-arm64-openssl-1.0.x | 1.0.x |
基于 Linux ARM64 glibc 的发行版 | linux-arm64-openssl-1.1.x | 1.1.x |
基于 Linux ARM64 glibc 的发行版 | linux-arm64-openssl-3.0.x | 3.0.x |
示例
使用默认的 output
、previewFeatures
、engineType
和 binaryTargets
指定 prisma-client-js
生成器
generator client {
provider = "prisma-client-js"
}
请注意,由于以上 generator
定义使用了 output
、engineType
和 binaryTargets
的默认值(以及隐式 previewFeatures
),因此它等效于以下内容。
generator client {
provider = "prisma-client-js"
output = "node_modules/.prisma/client"
engineType = "library"
binaryTargets = ["native"]
}
为 Prisma Client 指定自定义 output
位置
此示例演示如何定义生成的资产的自定义 output
位置以覆盖默认位置。
generator client {
provider = "prisma-client-js"
output = "../src/generated/client"
}
指定自定义 binaryTargets
以确保与操作系统的兼容性
此示例演示如何根据上表 中的内容 配置 Prisma Client 以在 Ubuntu 19.04 (disco)
上运行。
generator client {
provider = "prisma-client-js"
binaryTargets = ["debian-openssl-1.1.x"]
}
指定指向某些自定义生成器实现的 provider
此示例演示如何使用位于名为 my-generator
的目录中的自定义生成器。
generator client {
provider = "./my-generator"
}
model
定义 Prisma 模型。
备注
命名约定
- 模型名称必须符合以下正则表达式:
[A-Za-z][A-Za-z0-9_]*
- 模型名称必须以字母开头,并且通常以 PascalCase 形式编写
- 模型名称应使用单数形式(例如,
User
而不是user
、users
或Users
) - Prisma ORM 有许多保留字,这些字在 Prisma ORM 内部使用,因此不能用作模型名称。您可以在 此处 和 此处 找到保留字。
注意:您可以使用
@@map
属性 将模型(例如,User
)映射到名称不同的表,该名称与模型命名约定不匹配(例如,users
)。
字段顺序
- 在 2.3.0 及更高版本中,内省按与数据库中相应列相同的顺序列出模型字段。关系字段列在标量字段之后。
示例
名为 User
且具有两个标量字段的模型
- 关系数据库
- MongoDB
model User {
email String @unique // `email` can not be optional because it's the only unique field on the model
name String?
}
model User {
id String @default(auto()) @map("_id") @db.ObjectId
email String @unique
name String?
}
model
字段
字段 是模型的属性。
备注
命名约定
- 必须以字母开头
- 通常以 camelCase 形式编写
- 必须符合以下正则表达式:
[A-Za-z][A-Za-z0-9_]*
注意:您可以使用
@map
属性 将 字段名称映射到列,该列具有不同的名称,与字段命名约定不匹配:例如myField @map("my_field")
。
model
字段标量类型
数据源连接器确定每个 Prisma ORM 标量类型映射到的原生数据库类型。类似地,生成器确定这些类型中的每一个映射到的目标编程语言中的类型。
Prisma 模型还具有 模型字段类型,用于定义模型之间的关系。
String
可变长度文本。
默认类型映射
连接器 | 默认映射 |
---|---|
PostgreSQL | text |
SQL Server | nvarchar(1000) |
MySQL | varchar(191) |
MongoDB | String |
SQLite | TEXT |
CockroachDB | STRING |
PostgreSQL
原生数据库类型 | 原生数据库类型属性 | 备注 |
---|---|---|
text | @db.Text | |
char(x) | @db.Char(x) | |
varchar(x) | @db.VarChar(x) | |
bit(x) | @db.Bit(x) | |
varbit | @db.VarBit | |
uuid | @db.Uuid | |
xml | @db.Xml | |
inet | @db.Inet | |
citext | @db.Citext | 仅在 启用 Citext 扩展 时可用。 |
MySQL
原生数据库类型 | 原生数据库类型属性 |
---|---|
VARCHAR(x) | @db.VarChar(x) |
TEXT | @db.Text |
CHAR(x) | @db.Char(x) |
TINYTEXT | @db.TinyText |
MEDIUMTEXT | @db.MediumText |
LONGTEXT | @db.LongText |
您可以使用 Prisma Migrate 将 @db.Bit(1)
映射到 String
model Model {
/* ... */
myField String @db.Bit(1)
}
MongoDB
String
原生数据库类型属性 | 备注 |
---|---|
@db.String | |
@db.ObjectId | 如果底层 BSON 类型为 OBJECT_ID (ID 字段、关系标量),则需要。 |
Microsoft SQL Server
原生数据库类型 | 原生数据库类型属性 |
---|---|
char(x) | @db.Char(x) |
nchar(x) | @db.NChar(x) |
varchar(x) | @db.VarChar(x) |
nvarchar(x) | @db.NVarChar(x) |
text | @db.Text |
ntext | @db.NText |
xml | @db.Xml |
uniqueidentifier | @db.UniqueIdentifier |
SQLite
TEXT
CockroachDB
原生数据库类型 | 原生数据库类型属性 | 备注 |
---|---|---|
STRING(x) | TEXT(x) | VARCHAR(x) | @db.String(x) | |
CHAR(x) | @db.Char(x) | |
"char" | @db.CatalogSingleChar | |
BIT(x) | @db.Bit(x) | |
VARBIT | @db.VarBit | |
UUID | @db.Uuid | |
INET | @db.Inet |
请注意,PostgreSQL 中支持的 xml
和 citext
类型目前在 CockroachDB 中不受支持。
客户端
Prisma Client JS |
---|
string |
Boolean
真或假值。
默认类型映射
连接器 | 默认映射 |
---|---|
PostgreSQL | boolean |
SQL Server | bit |
MySQL | TINYINT(1) |
MongoDB | Bool |
SQLite | INTEGER |
CockroachDB | BOOL |
PostgreSQL
原生数据库类型 | 原生数据库类型属性 | 备注 |
---|---|---|
boolean | @db.Boolean |
MySQL
原生数据库类型 | 原生数据库类型属性 | 备注 |
---|---|---|
TINYINT(1) | @db.TinyInt(1) | 如果最大长度大于 1(例如,TINYINT(2) )或默认值为除 1 、0 或 NULL 之外的任何值,则 TINYINT 映射到 Int |
BIT(1) | @db.Bit |
MongoDB
Bool
Microsoft SQL Server
原生数据库类型 | 原生数据库类型属性 | 备注 |
---|---|---|
bit | @db.Bit |
SQLite
INTEGER
CockroachDB
原生数据库类型 | 原生数据库类型属性 | 备注 |
---|---|---|
BOOL | @db.Bool |
客户端
Prisma Client JS |
---|
boolean |
Int
默认类型映射
连接器 | 默认映射 |
---|---|
PostgreSQL | integer |
SQL Server | int |
MySQL | INT |
MongoDB | Int |
SQLite | INTEGER |
CockroachDB | INT |
PostgreSQL
原生数据库类型 | 原生数据库类型属性 | 备注 |
---|---|---|
integer | int 、int4 | @db.Integer | |
smallint | int2 | @db.SmallInt | |
smallserial | serial2 | @db.SmallInt @default(autoincrement()) | |
serial | serial4 | @db.Int @default(autoincrement()) | |
oid | @db.Oid |
MySQL
原生数据库类型 | 原生数据库类型属性 | 备注 |
---|---|---|
INT | @db.Int | |
INT UNSIGNED | @db.UnsignedInt | |
SMALLINT | @db.SmallInt | |
SMALLINT UNSIGNED | @db.UnsignedSmallInt | |
MEDIUMINT | @db.MediumInt | |
MEDIUMINT UNSIGNED | @db.UnsignedMediumInt | |
TINYINT | @db.TinyInt | 如果最大长度大于 1(例如,TINYINT(2) )或默认值不是 1 、0 或 NULL ,则 TINYINT 映射到 Int 。TINYINT(1) 映射到 Boolean 。 |
TINYINT UNSIGNED | @db.UnsignedTinyInt | TINYINT(1) UNSIGNED 映射到 Int ,而不是 Boolean |
YEAR | @db.Year |
MongoDB
Int
原生数据库类型属性 | 备注 |
---|---|
@db.Int | |
@db.Long |
Microsoft SQL Server
原生数据库类型 | 原生数据库类型属性 | 备注 |
---|---|---|
int | @db.Int | |
smallint | @db.SmallInt | |
tinyint | @db.TinyInt | |
bit | @db.Bit |
SQLite
INTEGER
CockroachDB
原生数据库类型 | 原生数据库类型属性 | 备注 |
---|---|---|
INTEGER | INT | INT8 | @db.Int8 | 请注意,这与 PostgreSQL 不同,在 PostgreSQL 中,integer 和 int 是 int4 的别名,并映射到 @db.Integer |
INT4 | @db.Int4 | |
INT2 | SMALLINT | @db.Int2 | |
SMALLSERIAL | SERIAL2 | @db.Int2 @default(autoincrement()) | |
SERIAL | SERIAL4 | @db.Int4 @default(autoincrement()) | |
SERIAL8 | BIGSERIAL | @db.Int8 @default(autoincrement()) |
客户端
Prisma Client JS |
---|
number |
BigInt
BigInt
在版本 2.17.0 及更高版本中可用。
默认类型映射
连接器 | 默认映射 |
---|---|
PostgreSQL | bigint |
SQL Server | int |
MySQL | BIGINT |
MongoDB | Long |
SQLite | INTEGER |
CockroachDB | INTEGER |
PostgreSQL
原生数据库类型 | 原生数据库类型属性 | 备注 |
---|---|---|
bigint | int8 | @db.BigInt | |
bigserial | serial8 | @db.BigInt @default(autoincrement()) |
MySQL
原生数据库类型 | 原生数据库类型属性 | 备注 |
---|---|---|
BIGINT | @db.BigInt | |
SERIAL | @db.UnsignedBigInt @default(autoincrement()) |
MongoDB
Long
Microsoft SQL Server
原生数据库类型 | 原生数据库类型属性 | 备注 |
---|---|---|
bigint | @db.BigInt |
SQLite
INTEGER
CockroachDB
原生数据库类型 | 原生数据库类型属性 | 备注 |
---|---|---|
BIGINT | INT | INT8 | @db.Int8 | 请注意,这与 PostgreSQL 不同,在 PostgreSQL 中,int 是 int4 的别名 |
bigserial | serial8 | @db.Int8 @default(autoincrement()) |
客户端
客户端 | 类型 | 描述 |
---|---|---|
Prisma Client JS | BigInt | 请参阅 使用 BigInt 的示例 |
Float
浮点数。
Float
在 2.17.0 及更高版本中映射到Double
- 请参阅 发行说明 和 视频:Prisma ORM 2.17.0 中 Float 的默认映射更改,以获取有关此更改的更多信息。
默认类型映射
连接器 | 默认映射 |
---|---|
PostgreSQL | double precision |
SQL Server | float(53) |
MySQL | DOUBLE |
MongoDB | Double |
SQLite | REAL |
CockroachDB | DOUBLE PRECISION |
PostgreSQL
原生数据库类型 | 原生数据库类型属性 | 备注 |
---|---|---|
double precision | @db.DoublePrecision | |
real | @db.Real |
MySQL
原生数据库类型 | 原生数据库类型属性 | 备注 |
---|---|---|
FLOAT | @db.Float | |
DOUBLE | @db.Double |
MongoDB
Double
Microsoft SQL Server
原生数据库类型 | 原生数据库类型属性 |
---|---|
float | @db.Float |
money | @db.Money |
smallmoney | @db.SmallMoney |
real | @db.Real |
SQLite 连接器
REAL
CockroachDB
原生数据库类型 | 原生数据库类型属性 | 备注 |
---|---|---|
DOUBLE PRECISION | FLOAT8 | @db.Float8 | |
REAL | FLOAT4 | FLOAT | @db.Float4 |
客户端
Prisma Client JS |
---|
number |
Decimal
默认类型映射
连接器 | 默认映射 |
---|---|
PostgreSQL | decimal(65,30) |
SQL Server | decimal(32,16) |
MySQL | DECIMAL(65,30) |
MongoDB | 不支持 |
SQLite | DECIMAL |
CockroachDB | DECIMAL |
PostgreSQL
原生数据库类型 | 原生数据库类型属性 | 备注 |
---|---|---|
decimal | numeric | @db.Decimal(p, s) † | |
money | @db.Money |
- †
p
(精度),要存储的十进制数字的最大总数。s
(小数位数),存储在小数点右侧的十进制数字的数量。
MySQL
原生数据库类型 | 原生数据库类型属性 | 备注 |
---|---|---|
DECIMAL | NUMERIC | @db.Decimal(p, s) † |
- †
p
(精度),要存储的十进制数字的最大总数。s
(小数位数),存储在小数点右侧的十进制数字的数量。
MongoDB
不支持.
Microsoft SQL Server
原生数据库类型 | 原生数据库类型属性 | 备注 |
---|---|---|
decimal | numeric | @db.Decimal(p, s) † |
- †
p
(精度),要存储的十进制数字的最大总数。s
(小数位数),存储在小数点右侧的十进制数字的数量。
SQLite
DECIMAL
(在 2.17.0 中从 REAL
更改)
CockroachDB
原生数据库类型 | 原生数据库类型属性 | 备注 |
---|---|---|
DECIMAL | DEC | NUMERIC | @db.Decimal(p, s) † | |
money | 尚未 | CockroachDB 尚未支持 PostgreSQL 的 money 类型 |
- †
p
(精度),要存储的十进制数字的最大总数。s
(小数位数),存储在小数点右侧的十进制数字的数量。
客户端
客户端 | 类型 | 描述 |
---|---|---|
Prisma Client JS | Decimal | 请参阅 使用 Decimal 的示例 |
DateTime
备注
- Prisma Client 将所有
DateTime
返回为本机Date
对象。 - 目前,Prisma ORM 不支持 MySQL 中的零日期(
0000-00-00 00:00:00
、0000-00-00
、00:00:00
)。 - 目前存在一个 错误,它不允许您将
DateTime
值作为字符串传入,并在您这样做时产生运行时错误。DateTime
值需要作为Date
对象传入(例如,new Date('2024-12-04')
而不是'2024-12-04'
)。
您可以在此部分找到更多信息和示例:使用 DateTime
。
默认类型映射
连接器 | 默认映射 |
---|---|
PostgreSQL | timestamp(3) |
SQL Server | datetime2 |
MySQL | DATETIME(3) |
MongoDB | Timestamp |
SQLite | NUMERIC |
CockroachDB | TIMESTAMP |
PostgreSQL
原生数据库类型 | 原生数据库类型属性 | 备注 |
---|---|---|
timestamp(x) | @db.Timestamp(x) | |
timestamptz(x) | @db.Timestamptz(x) | |
date | @db.Date | |
time(x) | @db.Time(x) | |
timetz(x) | @db.Timetz(x) |
MySQL
原生数据库类型 | 原生数据库类型属性 | 备注 |
---|---|---|
DATETIME(x) | @db.DateTime(x) | |
DATE(x) | @db.Date(x) | |
TIME(x) | @db.Time(x) | |
TIMESTAMP(x) | @db.Timestamp(x) |
您还可以将 MySQL 的 YEAR
类型与 Int
一起使用
yearField Int @db.Year
MongoDB
Timestamp
Microsoft SQL Server
原生数据库类型 | 原生数据库类型属性 | 备注 |
---|---|---|
date | @db.Date | |
time | @db.Time | |
datetime | @db.DateTime | |
datetime2 | @db.DateTime2 | |
smalldatetime | @db.SmallDateTime | |
datetimeoffset | @db.DateTimeOffset |
SQLite
NUMERIC
或 STRING
。如果底层数据类型为 STRING
,则必须使用以下格式之一
CockroachDB
原生数据库类型 | 原生数据库类型属性 | 备注 |
---|---|---|
TIMESTAMP(x) | @db.Timestamp(x) | |
TIMESTAMPTZ(x) | @db.Timestamptz(x) | |
DATE | @db.Date | |
TIME(x) | @db.Time(x) | |
TIMETZ(x) | @db.Timetz(x) |
客户端
Prisma Client JS |
---|
日期 |
Json
一个 JSON 对象。
默认类型映射
连接器 | 默认映射 |
---|---|
PostgreSQL | jsonb |
SQL Server | 不支持 |
MySQL | JSON |
MongoDB | 一个有效的 BSON 对象(宽松模式) |
SQLite | 不支持 |
CockroachDB | JSONB |
PostgreSQL
原生数据库类型 | 原生数据库类型属性 | 备注 |
---|---|---|
json | @db.Json | |
jsonb | @db.JsonB |
MySQL
原生数据库类型 | 原生数据库类型属性 | 备注 |
---|---|---|
JSON | @db.Json |
MongoDB
Microsoft SQL Server
Microsoft SQL Server 没有专门用于 JSON 的数据类型。但是,有一些用于读取和修改 JSON 的内置函数。
SQLite
不支持
CockroachDB
原生数据库类型 | 原生数据库类型属性 | 备注 |
---|---|---|
JSON | JSONB | @db.JsonB |
客户端
Prisma Client JS |
---|
对象 |
Bytes
Bytes
在版本 2.17.0 及更高版本中可用。
默认类型映射
连接器 | 默认映射 |
---|---|
PostgreSQL | bytea |
SQL Server | varbinary |
MySQL | LONGBLOB |
MongoDB | BinData |
SQLite | BLOB |
CockroachDB | BYTES |
PostgreSQL
原生数据库类型 | 原生数据库类型属性 |
---|---|
bytea | @db.ByteA |
MySQL
原生数据库类型 | 原生数据库类型属性 | 备注 |
---|---|---|
LONGBLOB | @db.LongBlob | |
BINARY | @db.Binary | |
VARBINARY | @db.VarBinary | |
TINYBLOB | @db.TinyBlob | |
BLOB | @db.Blob | |
MEDIUMBLOB | @db.MediumBlob | |
BIT | @db.Bit |
MongoDB
BinData
原生数据库类型属性 | 备注 |
---|---|
@db.ObjectId | 如果底层 BSON 类型为 OBJECT_ID (ID 字段、关系标量),则需要。 |
@db.BinData |
Microsoft SQL Server
原生数据库类型 | 原生数据库类型属性 | 备注 |
---|---|---|
binary | @db.Binary | |
varbinary | @db.VarBinary | |
image | @db.Image |
SQLite
BLOB
CockroachDB
原生数据库类型 | 原生数据库类型属性 |
---|---|
BYTES | BYTEA | BLOB | @db.Bytes |
客户端
客户端 | 类型 | 描述 |
---|---|---|
Prisma Client JS | Uint8Array | 参见 使用 Bytes 的示例 |
Prisma Client JS(v6 之前的版本) | Buffer | 参见 使用 Bytes 的示例 |
不支持
MongoDB 不支持
MongoDB 连接器不支持 Unsupported
类型。
Unsupported
类型在 2.17.0 中引入,允许你在 Prisma 模式中表示 Prisma Client 不支持的数据类型。类型为 Unsupported
的字段可以在使用 prisma db pull
进行内省时创建,或手动编写,并使用 Prisma Migrate 或 db push
在数据库中创建。
备注
-
生成的客户端中不提供具有
Unsupported
类型的字段。 -
如果模型包含一个 **必需的**
Unsupported
类型,则 Prisma Client 中不提供prisma.model.create(..)
、prisma.model.update(...)
和prisma.model.upsert(...)
。 -
当你内省包含不受支持类型的数据库时,Prisma ORM 将提供以下警告
*** WARNING ***
These fields are not supported by Prisma Client, because Prisma does not currently support their types.
* Model "Post", field: "circle", original data type: "circle"
示例
model Star {
id Int @id @default(autoincrement())
position Unsupported("circle")?
example1 Unsupported("circle")
circle Unsupported("circle")? @default(dbgenerated("'<(10,4),11>'::circle"))
}
model
字段类型修饰符
[]
修饰符
将字段设为列表。
备注
- 不能是可选的(例如
Post[]?
)。
关系型数据库
- 如果你的数据库原生支持标量列表(数组),则它们仅在数据模型中受支持。因此,当前仅在使用 PostgreSQL 或 CockroachDB 时支持标量列表(因为 MySQL 和 SQLite 本身不支持标量列表)。
MongoDB
- 支持标量列表
示例
定义标量列表
- 关系数据库
- MongoDB
model User {
id Int @id @default(autoincrement())
favoriteColors String[]
}
model User {
id String @id @default(auto()) @map("_id") @db.ObjectId
favoriteColors String[]
}
定义具有默认值的标量列表
在 4.0.0 及更高版本中可用。
- 关系数据库
- MongoDB
model User {
id Int @id @default(autoincrement())
favoriteColors String[] @default(["red", "blue", "green"])
}
model User {
id String @id @default(auto()) @map("_id") @db.ObjectId
favoriteColors String[] @default(["red", "blue", "green"])
}
?
修饰符
使字段可选。
备注
- 不能与列表字段一起使用(例如,
Posts[]
)
示例
可选的 name
字段
model User {
id Int @id @default(autoincrement())
name String?
}
属性
属性修改 字段 或块(例如 模型)的行为。有两种方法可以向数据模型添加属性
- 字段 属性以
@
为前缀 - 块 属性以
@@
为前缀
某些属性带参数。属性中的参数始终命名,但在大多数情况下,可以省略参数的名称。
注意:签名中的前导下划线表示可以省略参数名称。
@id
在模型上定义一个单字段 ID。
备注
常规
- 不能在关系字段上定义
- 不能是可选的
关系型数据库
-
对应的数据库结构:
PRIMARY KEY
-
可以在任何标量字段(
String
、Int
、enum
)上定义
MongoDB
-
对应的数据库结构:除了数组之外的任何有效的 BSON 类型
-
每个模型都必须定义一个
@id
字段 -
底层 ID 字段名称始终为
_id
,并且必须使用@map("_id")
进行映射 -
可以在任何标量字段(
String
、Int
、enum
)上定义,除非你希望在数据库中使用ObjectId
-
要使用
ObjectId
作为你的 ID,你必须 -
不支持
autoincrement()
参数
名称 | 必填 | 类型 | 描述 |
---|---|---|---|
map | 否 | String | 数据库中底层主键约束的名称。 MySQL 或 MongoDB 不支持。 |
length | 否 | number | 允许你指定要索引的值子部分的最大长度。 仅限 MySQL。在 3.5.0 及更高版本中处于预览状态,在 4.0.0 及更高版本中处于正式发布状态。 |
sort | 否 | String | 允许您指定 ID 的条目在数据库中存储的顺序。可用的选项是 Asc 和 Desc 。仅限 SQL Server。在 3.5.0 及更高版本中预览,在 4.0.0 及更高版本中正式发布。 |
聚集 | 否 | 布尔值 | 定义 ID 是聚集索引还是非聚集索引。默认为 true 。仅限 SQL Server。在 3.13.0 及更高版本中预览,在 4.0.0 及更高版本中正式发布。 |
签名
@id(map: String?, length: number?, sort: String?, clustered: Boolean?)
注意:在 4.0.0 版本之前,或在启用
extendedIndexes
预览功能的 3.5.0 版本之前,签名为@id(map: String?)
注意:在 3.0.0 版本之前,签名为
@id
示例
在大多数情况下,您希望数据库创建 ID。为此,使用 @default
属性注释 ID 字段,并使用函数初始化该字段。
生成自动递增整数作为 ID(仅限关系数据库)
model User {
id Int @id @default(autoincrement())
name String
}
生成 ObjectId
作为 ID(仅限 MongoDB)
model User {
id String @id @default(auto()) @map("_id") @db.ObjectId
name String
}
生成 cuid()
值作为 ID
- 关系数据库
- MongoDB
model User {
id String @id @default(cuid())
name String
}
model User {
id String @id @default(cuid()) @map("_id")
name String
}
如果您的 id
字段类型为 ObjectId
,则无法使用 cuid()
生成默认值。使用以下语法生成有效的 ObjectId
id String @id @default(auto()) @db.ObjectId @map("_id")
生成 uuid()
值作为 ID
- 关系数据库
- MongoDB
model User {
id String @id @default(uuid())
name String
}
model User {
id String @id @default(uuid()) @map("_id")
name String
}
如果您的 id
字段类型为 ObjectId
,则无法使用 uuid()
生成默认值。使用以下语法生成有效的 ObjectId
id String @id @default(auto()) @db.ObjectId @map("_id")
没有默认值的单字段 ID
在以下示例中,id
没有默认值
- 关系数据库
- MongoDB
model User {
id String @id
name String
}
model User {
id String @id @map("_id") @db.ObjectId
name String
}
model User {
id String @id @map("_id")
name String
}
请注意,在上述情况下,必须在使用 Prisma Client 创建 User
模型的新记录时提供您自己的 ID 值,例如
const newUser = await prisma.user.create({
data: {
id: 1,
name: "Alice",
},
});
在没有默认值的关联标量字段上指定 ID
在以下示例中,authorId
既是关联标量,又是 Profile
的 ID
- 关系数据库
- MongoDB
model Profile {
authorId Int @id
author User @relation(fields: [authorId], references: [id])
bio String
}
model User {
id Int @id
email String @unique
name String?
profile Profile?
}
model Profile {
authorId String @id @map("_id") @db.ObjectId
author User @relation(fields: [authorId], references: [id])
bio String
}
model User {
id String @id @map("_id") @db.ObjectId
email String @unique
name String?
profile Profile?
}
在这种情况下,您无法仅创建 Profile
- 您必须使用 Prisma Client 的嵌套写入创建 User
或将配置文件连接到现有用户。
以下示例创建了一个用户和一个配置文件
const userWithProfile = await prisma.user.create({
data: {
id: 3,
email: "[email protected]",
name: "Bob Prismo",
profile: {
create: {
bio: "Hello, I'm Bob Prismo and I love apples, blue nail varnish, and the sound of buzzing mosquitoes.",
},
},
},
});
以下示例将新配置文件连接到用户
const profileWithUser = await prisma.profile.create({
data: {
bio: "Hello, I'm Bob and I like nothing at all. Just nothing.",
author: {
connect: {
id: 22,
},
},
},
});
@@id
MongoDB 不支持
MongoDB 连接器 不支持复合 ID。
在模型上定义多字段 ID(复合 ID)。
备注
- 对应的数据库类型:
PRIMARY KEY
- 可以使用
@default
属性进行注释,该属性使用 函数 自动生成 ID - 不能是可选的
- 可以在任何标量字段(
String
、Int
、enum
)上定义 - 不能在关系字段上定义
- Prisma Client 中复合 ID 字段的名称具有以下模式:
field1_field2_field3
参数
名称 | 必填 | 类型 | 描述 |
---|---|---|---|
字段 | 是 | FieldReference[] | 字段名称列表 - 例如,["firstname", "lastname"] |
名称 | 否 | String | Prisma Client 将公开的用于覆盖所有字段的参数的名称,例如 fullName 在 fullName: { firstName: "First", lastName: "Last"} 中 |
map | 否 | String | 数据库中底层主键约束的名称。 MySQL 不支持。 |
length | 否 | number | 允许你指定要索引的值子部分的最大长度。 仅限 MySQL。在 3.5.0 及更高版本中处于预览状态,在 4.0.0 及更高版本中处于正式发布状态。 |
sort | 否 | String | 允许您指定 ID 的条目在数据库中存储的顺序。可用的选项是 Asc 和 Desc 。仅限 SQL Server。在 3.5.0 及更高版本中预览,在 4.0.0 及更高版本中正式发布。 |
聚集 | 否 | 布尔值 | 定义 ID 是聚集索引还是非聚集索引。默认为 true 。仅限 SQL Server。在 3.13.0 及更高版本中预览,在 4.0.0 及更高版本中正式发布。 |
@@id
属性上的 fields
参数的名称可以省略
@@id(fields: [title, author])
@@id([title, author])
签名
@@id(_ fields: FieldReference[], name: String?, map: String?)
注意:在 3.0.0 版本之前,签名为
@@id(_ fields: FieldReference[])
示例
在两个 String
字段上指定多字段 ID(仅限关系数据库)
model User {
firstName String
lastName String
email String @unique
isAdmin Boolean @default(false)
@@id([firstName, lastName])
}
创建用户时,必须提供 firstName
和 lastName
的唯一组合
const user = await prisma.user.create({
data: {
firstName: "Alice",
lastName: "Smith",
},
});
要检索用户,请使用生成的复合 ID 字段 (firstName_lastName
)
const user = await prisma.user.findUnique({
where: {
firstName_lastName: {
firstName: "Alice",
lastName: "Smith",
},
},
});
在两个 String
字段和一个 Boolean
字段上指定多字段 ID(仅限关系数据库)
model User {
firstName String
lastName String
email String @unique
isAdmin Boolean @default(false)
@@id([firstName, lastName, isAdmin])
}
创建新的 User
记录时,现在必须为 firstName
、lastName
和 isAdmin
提供唯一的组合值
const user = await prisma.user.create({
data: {
firstName: "Alice",
lastName: "Smith",
isAdmin: true,
},
});
指定包含关联字段的多字段 ID(仅限关系数据库)
model Post {
title String
published Boolean @default(false)
author User @relation(fields: [authorId], references: [id])
authorId Int
@@id([authorId, title])
}
model User {
id Int @default(autoincrement())
email String @unique
name String?
posts Post[]
}
创建新的 Post
记录时,现在必须为 authorId
(外键)和 title
提供唯一的组合值
const post = await prisma.post.create({
data: {
title: "Hello World",
author: {
connect: {
email: "[email protected]",
},
},
},
});
@default
定义字段的默认值。
备注
- 当您使用内省时,尚无法在 Prisma 模式中表示的默认值将由
dbgenerated()
函数表示。 - Prisma 模式中不允许在关联字段上使用默认值。但是请注意,您仍然可以在支持关联的字段(
@relation
属性的fields
参数中列出的字段)上定义默认值。关联字段上的默认值意味着关联将自动为您填充。 - 默认值可以与本机支持它们的数据库中的标量列表一起使用。
关系数据库
- 对应的数据库结构:
DEFAULT
- 默认值可以是静态值 (
4
、"hello"
) 或以下函数之一autoincrement()
sequence()
(仅限 CockroachDB)dbgenerated(...)
cuid()
cuid(2)
uuid()
uuid(4)
uuid(7)
nanoid()
now()
- 当您使用内省时,尚无法在 Prisma 模式中表示的默认值将由
dbgenerated(...)
函数表示。 - Prisma 模式中不允许在关联字段上使用默认值。但是请注意,您仍然可以在支持关联的字段(
@relation
属性的fields
参数中列出的字段)上定义默认值。关联字段上的默认值意味着关联将自动为您填充。 - 默认值可以与本机支持它们的数据库中的标量列表一起使用。
- JSON 数据。请注意,JSON 需要在
@default
属性内用双引号括起来,例如:@default("[]")
。如果要提供 JSON 对象,则需要用双引号括起来,然后使用反斜杠转义任何内部双引号,例如:@default("{ \"hello\": \"world\" }")
。
MongoDB
- 默认值可以是静态值 (
4
、"hello"
) 或以下函数之一
参数
名称 | 必填 | 类型 | 描述 |
---|---|---|---|
值 | 是 | 表达式(例如 5 、true 、now() ) | |
map | 否 | String | 仅限 SQL Server。 |
@default
属性上的 value
参数的名称可以省略
id Int @id @default(value: autoincrement())
id Int @id @default(autoincrement())
签名
@default(_ value: Expression, map: String?)
注意:在 3.0.0 版本之前,签名为
@default(_ value: Expression)
示例
Int
的默认值
- 关系数据库
- MongoDB
model User {
email String @unique
profileViews Int @default(0)
}
model User {
id String @default(auto()) @map("_id") @db.ObjectId
profileViews Int @default(0)
}
Float
的默认值
- 关系数据库
- MongoDB
model User {
email String @unique
number Float @default(1.1)
}
model User {
id String @default(auto()) @map("_id") @db.ObjectId
number Float @default(1.1)
}
Decimal
的默认值
- 关系数据库
- MongoDB
model User {
email String @unique
number Decimal @default(22.99)
}
不支持.
BigInt
的默认值
- 关系数据库
- MongoDB
model User {
email String @unique
number BigInt @default(34534535435353)
}
model User {
id String @default(auto()) @map("_id") @db.ObjectId
number BigInt @default(34534535435353)
}
String
的默认值
- 关系数据库
- MongoDB
model User {
email String @unique
name String @default("")
}
model User {
id String @default(auto()) @map("_id") @db.ObjectId
name String @default("")
}
Boolean
的默认值
- 关系数据库
- MongoDB
model User {
email String @unique
isAdmin Boolean @default(false)
}
model User {
id String @default(auto()) @map("_id") @db.ObjectId
isAdmin Boolean @default(false)
}
DateTime
的默认值
请注意,DateTime
的静态默认值基于ISO 8601标准。
- 关系数据库
- MongoDB
model User {
email String @unique
data DateTime @default("2020-03-19T14:21:00+02:00")
}
model User {
id String @default(auto()) @map("_id") @db.ObjectId
data DateTime @default("2020-03-19T14:21:00+02:00")
}
Bytes
的默认值
- 关系数据库
- MongoDB
model User {
email String @unique
secret Bytes @default("SGVsbG8gd29ybGQ=")
}
model User {
id String @default(auto()) @map("_id") @db.ObjectId
secret Bytes @default("SGVsbG8gd29ybGQ=")
}
枚举的默认值
- 关系数据库
- MongoDB
enum Role {
USER
ADMIN
}
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
role Role @default(USER)
posts Post[]
profile Profile?
}
enum Role {
USER
ADMIN
}
model User {
id String @id @default(auto()) @map("_id") @db.ObjectId
email String @unique
name String?
role Role @default(USER)
posts Post[]
profile Profile?
}
标量列表的默认值
- 关系数据库
- MongoDB
model User {
id Int @id @default(autoincrement())
posts Post[]
favoriteColors String[] @default(["red", "yellow", "purple"])
roles Role[] @default([USER, DEVELOPER])
}
enum Role {
USER
DEVELOPER
ADMIN
}
model User {
id String @id @default(auto()) @map("_id") @db.ObjectId
posts Post[]
favoriteColors String[] @default(["red", "yellow", "purple"])
roles Role[] @default([USER, DEVELOPER])
}
enum Role {
USER
DEVELOPER
ADMIN
}
@unique
为该字段定义唯一约束。
备注
常规
- 使用
@unique
注解的字段可以是可选的或必需的。 - 如果使用
@unique
注解的字段代表没有@id
/@@id
的模型上的唯一约束,则该字段必须是必需的。 - 一个模型可以有多个唯一约束。
- 可以在任何标量字段上定义。
- 不能在关系字段上定义。
关系数据库
- 对应的数据库结构:
UNIQUE
NULL
值被认为是不同的(同一列中允许多行具有NULL
值)。- 添加唯一约束会自动向指定的列添加相应的唯一索引。
MongoDB
- 由 MongoDB 中的唯一索引强制执行。
参数
名称 | 必填 | 类型 | 描述 |
---|---|---|---|
map | 否 | String | |
length | 否 | number | 允许你指定要索引的值子部分的最大长度。 仅限 MySQL。在 3.5.0 及更高版本中处于预览状态,在 4.0.0 及更高版本中处于正式发布状态。 |
sort | 否 | String | 允许您指定约束的条目在数据库中存储的顺序。可用的选项是 Asc 和 Desc 。在 3.5.0 及更高版本中预览,在 4.0.0 及更高版本中正式发布。 |
聚集 | 否 | 布尔值 | 定义约束是聚簇的还是非聚簇的。默认为 false 。仅限 SQL Server。在 3.13.0 及更高版本中预览,在 4.0.0 及更高版本中正式发布。 |
- ¹ 某些索引和字段类型可能需要。
签名
@unique(map: String?, length: number?, sort: String?)
注意:在 4.0.0 版本之前,或在启用
extendedIndexes
预览功能的 3.5.0 版本之前,签名为@unique(map: String?)
注意:在 3.0.0 版本之前,签名为
@unique
示例
在必需的 String
字段上指定唯一属性
- 关系数据库
- MongoDB
model User {
email String @unique
name String
}
model User {
id String @default(auto()) @map("_id") @db.ObjectId
name String
}
在可选的 String
字段上指定唯一属性
- 关系数据库
- MongoDB
model User {
id Int @id @default(autoincrement())
email String? @unique
name String
}
model User {
id String @id @default(auto()) @map("_id") @db.ObjectId
email String? @unique
name String
}
在关系标量字段 authorId
上指定唯一属性
- 关系数据库
- MongoDB
model Post {
author User @relation(fields: [authorId], references: [id])
authorId Int @unique
title String
published Boolean @default(false)
}
model User {
id Int @id @default(autoincrement())
email String? @unique
name String
Post Post[]
}
model Post {
author User @relation(fields: [authorId], references: [id])
authorId String @unique @db.ObjectId
title String
published Boolean @default(false)
}
model User {
id String @id @default(auto()) @map("_id") @db.ObjectId
email String? @unique
name String
Post Post[]
}
使用 cuid()
值作为默认值指定唯一属性
- 关系数据库
- MongoDB
model User {
token String @unique @default(cuid())
name String
}
model User {
id String @id @default(auto()) @map("_id") @db.ObjectId
token String @unique @default(cuid())
name String
}
@@unique
为指定的字段定义复合唯一约束。
备注
常规
-
构成唯一约束的所有字段必须是必填字段。以下模型无效,因为
id
可能为null
model User {
firstname Int
lastname Int
id Int?
@@unique([firstname, lastname, id])
}这种行为的原因是所有连接器都认为
null
值是不同的,这意味着两行看起来相同也被认为是唯一的。firstname | lastname | id
-----------+----------+------
John | Smith | null
John | Smith | null -
一个模型可以有多个
@@unique
块。
关系数据库
- 对应的数据库结构:
UNIQUE
- 如果
@@unique
块代表没有@id
/@@id
的模型上的唯一约束,则需要该块。 - 添加唯一约束会自动向指定的列添加相应的唯一索引。
MongoDB
- 由 MongoDB 中的复合索引强制执行。
@@unique
块不能用作模型的唯一标识符 - MongoDB 需要@id
字段。
参数
| 名称 | 必需 | 类型 | 描述 | | ----------- | -------- | ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --- | | fields
| 是 | FieldReference[]
| 字段名称列表 - 例如,["firstname", "lastname"]
。字段必须是必填的 - 请参阅备注。 | | name
| 否 | String
| 字段组合的名称 - 默认为 fieldName1_fieldName2_fieldName3
| | map
| 否 | String
| | length
| 否 | number
| 允许您指定要索引的值子部分的最大长度。
仅限 MySQL。在 3.5.0 及更高版本中预览,在 4.0.0 及更高版本中正式发布。| | sort
| 否 | String
| 允许您指定约束的条目在数据库中存储的顺序。可用的选项是 Asc
和 Desc
。
在 3.5.0 及更高版本中预览,在 4.0.0 及更高版本中正式发布。| | | clustered
| 否 | Boolean
| 定义约束是聚簇的还是非聚簇的。默认为 false
。
仅限 SQL Server。在 3.13.0 及更高版本中预览,在 4.0.0 及更高版本中正式发布。|
@@unique
属性上的 fields
参数的名称可以省略。
@@unique(fields: [title, author])
@@unique([title, author])
@@unique(fields: [title, author], name: "titleAuthor")
length
和 sort
参数将添加到相关字段名称中。
@@unique(fields: [title(length:10), author])
@@unique([title(sort: Desc), author(sort: Asc)])
签名
@@unique(_ fields: FieldReference[], name: String?, map: String?)
注意:在 4.0.0 版本之前,或在启用
extendedIndexes
预览功能的 3.5.0 版本之前,签名为@@unique(_ fields: FieldReference[], name: String?, map: String?)
注意:在 3.0.0 版本之前,签名为
@@unique(_ fields: FieldReference[], name: String?)
示例
在两个 String
字段上指定多字段唯一属性
- 关系数据库
- MongoDB
model User {
id Int @default(autoincrement())
firstName String
lastName String
isAdmin Boolean @default(false)
@@unique([firstName, lastName])
}
model User {
id String @id @default(auto()) @map("_id") @db.ObjectId
firstName String
lastName String
isAdmin Boolean @default(false)
@@unique([firstName, lastName])
}
要检索用户,请使用生成的字段名称 (firstname_lastname
)。
const user = await prisma.user.findUnique({
where: {
firstName_lastName: {
firstName: "Alice",
lastName: "Smith",
isAdmin: true,
},
},
});
在两个 String
字段和一个 Boolean
字段上指定多字段唯一属性
- 关系数据库
- MongoDB
model User {
id Int @default(autoincrement())
firstName String
lastName String
isAdmin Boolean @default(false)
@@unique([firstName, lastName, isAdmin])
}
model User {
id String @id @default(auto()) @map("_id") @db.ObjectId
firstName String
lastName String
isAdmin Boolean @default(false)
@@unique([firstName, lastName, isAdmin])
}
指定包含关系字段的多字段唯一属性
- 关系数据库
- MongoDB
model Post {
id Int @default(autoincrement())
author User @relation(fields: [authorId], references: [id])
authorId Int
title String
published Boolean @default(false)
@@unique([authorId, title])
}
model User {
id Int @id @default(autoincrement())
email String @unique
posts Post[]
}
model Post {
id String @id @default(auto()) @map("_id") @db.ObjectId
author User @relation(fields: [authorId], references: [id])
authorId String @db.ObjectId
title String
published Boolean @default(false)
@@unique([authorId, title])
}
model User {
id String @id @default(auto()) @map("_id") @db.ObjectId
email String @unique
posts Post[]
}
为多字段唯一属性指定自定义 name
- 关系数据库
- MongoDB
model User {
id Int @default(autoincrement())
firstName String
lastName String
isAdmin Boolean @default(false)
@@unique(fields: [firstName, lastName, isAdmin], name: "admin_identifier")
}
model User {
id String @id @default(auto()) @map("_id") @db.ObjectId
firstName String
lastName String
isAdmin Boolean @default(false)
@@unique(fields: [firstName, lastName, isAdmin], name: "admin_identifier")
}
要检索用户,请使用自定义字段名称 (admin_identifier
)。
const user = await prisma.user.findUnique({
where: {
admin_identifier: {
firstName: "Alice",
lastName: "Smith",
isAdmin: true,
},
},
});
@@index
在数据库中定义索引。
备注
关系数据库
- 对应的数据库结构:
INDEX
- 还有一些其他索引配置选项尚无法通过 Prisma 模式提供。这些包括
- PostgreSQL 和 CockroachDB
- 将索引字段定义为表达式(例如
CREATE INDEX title ON public."Post"((lower(title)) text_ops);
)。 - 使用
WHERE
定义部分索引。 - 使用
CONCURRENTLY
并发创建索引。
- 将索引字段定义为表达式(例如
- PostgreSQL 和 CockroachDB
虽然您无法在 Prisma 模式中配置这些选项,但您仍然可以直接在数据库级别配置它们。
MongoDB
参数
名称 | 必填 | 类型 | 描述 |
---|---|---|---|
字段 | 是 | FieldReference[] | 字段名称列表 - 例如,["firstname", "lastname"] |
名称 | 否 | String | Prisma Client 将公开的用于覆盖所有字段的参数的名称,例如 fullName 在 fullName: { firstName: "First", lastName: "Last"} 中 |
map | 否 | map | 基础数据库中索引的名称(如果您未指定名称,Prisma 会生成一个符合标识符长度限制的索引名称。Prisma 使用以下命名约定:tablename.field1_field2_field3_unique )。 |
length | 否 | number | 允许你指定要索引的值子部分的最大长度。 仅限 MySQL。在 3.5.0 及更高版本中处于预览状态,在 4.0.0 及更高版本中处于正式发布状态。 |
sort | 否 | String | 允许您指定索引或约束的条目在数据库中存储的顺序。可用的选项是 asc 和 desc 。在 3.5.0 及更高版本中预览,在 4.0.0 及更高版本中正式发布。 |
聚集 | 否 | 布尔值 | 定义索引是聚簇的还是非聚簇的。默认为 false 。仅限 SQL Server。在 3.5.0 及更高版本中预览,在 4.0.0 及更高版本中正式发布。 |
类型 | 否 | 标识符 | 允许您指定索引访问方法。默认为 BTree 。仅限 PostgreSQL 和 CockroachDB。在 3.6.0 及更高版本中使用 Hash 索引访问方法进行预览,并在 3.14.0 中添加了 Gist 、Gin 、SpGist 和 Brin 方法。在 4.0.0 及更高版本中正式发布。 |
操作 | 否 | identifier 或 function | 允许您为某些索引类型定义索引运算符。 仅限 PostgreSQL。在 3.14.0 及更高版本中预览,在 4.0.0 及更高版本中正式发布。 |
@@index
属性上的 fields
参数的名称可以省略。
@@index(fields: [title, author])
@@index([title, author])
length
和 sort
参数将添加到相关字段名称中。
@@index(fields: [title(length:10), author])
@@index([title(sort: Asc), author(sort: Desc)])
签名
@@index(_ fields: FieldReference[], map: String?)
注意:在 3.0.0 版本之前,签名为
@@index(_ fields: FieldReference[], name: String?)
为了避免破坏性更改,旧的
name
参数仍将被接受。
示例
假设您想为 Post
模型的 title
字段添加索引
定义单列索引(仅限关系数据库)
model Post {
id Int @id @default(autoincrement())
title String
content String?
@@index([title])
}
定义多列索引(仅限关系数据库)
model Post {
id Int @id @default(autoincrement())
title String
content String?
@@index([title, content])
}
定义带名称的索引(仅限关系数据库)
model Post {
id Int @id @default(autoincrement())
title String
content String?
@@index(fields: [title, content], name: "main_index")
}
定义复合类型字段上的索引(仅限关系数据库)
type Address {
street String
number Int
}
model User {
id Int @id
email String
address Address
@@index([address.number])
}
@relation
定义有关关系的元信息。 了解更多。
备注
关系数据库
- 对应的数据库结构:
FOREIGN KEY
/REFERENCES
MongoDB
- 如果模型的主键在底层数据库中为
ObjectId
类型,则主键和外键都必须具有@db.ObjectId
属性
参数
名称 | 类型 | 必填 | 描述 | 示例 |
---|---|---|---|---|
名称 | String | 有时(例如,为了消除关系的歧义) | 定义关系的名称。在 m-n 关系中,它还确定底层关系表的名称。 | "CategoryOnPost" 、"MyRelation" |
字段 | FieldReference[] | 在已注释的关系字段上 | 当前模型的字段列表 | ["authorId"] 、["authorFirstName, authorLastName"] |
引用 | FieldReference[] | 在已注释的关系字段上 | 关系另一端模型的字段列表 | ["id"] 、["firstName, lastName"] |
map | String | 否 | 为数据库中的外键定义自定义名称。 | ["id"] 、["firstName, lastName"] |
onUpdate | 枚举。请参阅引用操作类型以获取值。 | 否 | 定义在引用模型中被更新的被引用条目时要执行的引用操作。 | Cascade 、NoAction |
onDelete | 枚举。请参阅引用操作类型以获取值。 | 否 | 定义在引用模型中被删除的被引用条目时要执行的引用操作。 | Cascade 、NoAction |
@relation
属性上的 name
参数名称可以省略(references
是必需的)
@relation(name: "UserOnPost", references: [id])
@relation("UserOnPost", references: [id])
// or
@relation(name: "UserOnPost")
@relation("UserOnPost")
签名
@relation(_ name: String?, fields: FieldReference[]?, references: FieldReference[]?, onDelete: ReferentialAction?, onUpdate: ReferentialAction?, map: String?)
使用 SQLite 时,签名将更改为
@relation(_ name: String?, fields: FieldReference[]?, references: FieldReference[]?, onDelete: ReferentialAction?, onUpdate: ReferentialAction?)
注意:在 3.0.0 版本之前,签名为
@relation(_ name: String?, fields: FieldReference[]?, references: FieldReference[]?)
示例
请参阅:@relation
属性。
@map
将 Prisma 模式中的字段名称或枚举值映射到数据库中名称不同的列或文档字段。如果您不使用 @map
,则 Prisma 字段名称将完全匹配列名或文档字段名。
请参阅使用自定义模型和字段名称以了解
@map
和@@map
如何更改生成的 Prisma Client。
备注
常规
@map
**不会**重命名数据库中的列/字段@map
**确实**更改生成的客户端中的字段名称
MongoDB
您的 @id
字段必须包含 @map("_id")
。例如
model User {
id String @default(auto()) @map("_id") @db.ObjectId
}
参数
名称 | 类型 | 必填 | 描述 | 示例 |
---|---|---|---|---|
名称 | String | 是 | 数据库列(关系数据库)或文档字段(MongoDB)名称。 | "comments" 、"someFieldName" |
@map
属性上的 name
参数名称可以省略
@map(name: "is_admin")
@map("users")
签名
@map(_ name: String)
示例
将 firstName
字段映射到名为 first_name
的列
- 关系数据库
- MongoDB
model User {
id Int @id @default(autoincrement())
firstName String @map("first_name")
}
model User {
id String @id @default(auto()) @map("_id") @db.ObjectId
firstName String @map("first_name")
}
生成的客户端
await prisma.user.create({
data: {
firstName: "Yewande", // first_name --> firstName
},
});
将名为 ADMIN
的枚举映射到名为 admin
的数据库枚举
enum Role {
ADMIN @map("admin")
CUSTOMER
}
@@map
将 Prisma 模式模型名称映射到名称不同的表(关系数据库)或集合(MongoDB),或将枚举名称映射到数据库中不同的底层枚举。如果您不使用 @@map
,则模型名称将完全匹配表(关系数据库)或集合(MongoDB)名称。
请参阅使用自定义模型和字段名称以了解
@map
和@@map
如何更改生成的 Prisma Client。
参数
名称 | 类型 | 必填 | 描述 | 示例 |
---|---|---|---|---|
名称 | String | 是 | 数据库表(关系数据库)或集合(MongoDB)名称。 | "comments" 、"someTableOrCollectionName" |
@@map
属性上的 name
参数名称可以省略
@@map(name: "users")
@@map("users")
签名
@@map(_ name: String)
示例
将 User
模型映射到名为 users
的数据库表/集合
- 关系数据库
- MongoDB
model User {
id Int @id @default(autoincrement())
name String
@@map("users")
}
model User {
id String @id @default(auto()) @map("_id") @db.ObjectId
name String
@@map("users")
}
生成的客户端
await prisma.user.create({
// users --> user
data: {
name: "Yewande",
},
});
将 Role
枚举映射到数据库中名为 _Role
的原生枚举,并将它的值映射到数据库中的小写值
enum Role {
ADMIN @map("admin")
CUSTOMER @map("customer")
@@map("_Role")
}
@updatedAt
自动存储记录上次更新的时间。如果您没有自己提供时间,Prisma Client 将自动为具有此属性的字段设置值。
备注
- 与
DateTime
字段兼容 - 在 Prisma ORM 级别实现
如果您也使用now()
,如果您的数据库和应用程序具有不同的时区,则时间可能与 @updatedAt
值不同。发生这种情况是因为 @updatedAt
在 Prisma ORM 级别运行,而 now()
在数据库级别运行。
如果您传递一个空的更新子句,则 @updatedAt
值将保持不变。例如
await prisma.user.update({
where: {
id: 1,
},
data: {}, //<- Empty update clause
});
参数
N/A
签名
@updatedAt
示例
- 关系数据库
- MongoDB
model Post {
id String @id
updatedAt DateTime @updatedAt
}
model Post {
id String @id @map("_id") @db.ObjectId
updatedAt DateTime @updatedAt
}
@ignore
将 @ignore
添加到要从 Prisma Client 中排除的字段(例如,您不希望 Prisma Client 用户更新的字段)。忽略的字段将从生成的 Prisma Client 中排除。当对必需字段(且没有 @default
)执行此操作时,模型的 create
方法将被禁用(因为数据库无法在没有该数据的情况下创建条目)。
备注
- 在2.17.0及更高版本中,当您进行内省时,Prisma ORM 会自动将
@ignore
添加到引用无效模型的字段。
示例
以下示例演示了手动添加 @ignore
以从 Prisma Client 中排除 email
字段
model User {
id Int @id
name String
email String @ignore // this field will be excluded
}
@@ignore
将 @@ignore
添加到要从 Prisma Client 中排除的模型(例如,您不希望 Prisma 用户更新的模型)。忽略的模型将从生成的 Prisma Client 中排除。
备注
示例
在以下示例中,Post
模型无效,因为它没有唯一的标识符。使用 @@ignore
将其从生成的 Prisma Client API 中排除
/// The underlying table does not contain a valid unique identifier and can therefore currently not be handled by Prisma Client.
model Post {
id Int @default(autoincrement()) // no unique identifier
author User @relation(fields: [authorId], references: [id])
authorId Int
@@ignore
}
在以下示例中,Post
模型无效,因为它没有唯一的标识符,并且 User
上的 posts
关系字段无效,因为它引用了无效的 Post
模型。在 Post
模型上使用 @@ignore
,在 User
中的 posts
关系字段上使用 @ignore
,以将模型和关系字段都从生成的 Prisma Client API 中排除。
/// The underlying table does not contain a valid unique identifier and can therefore currently not be handled by Prisma Client.
model Post {
id Int @default(autoincrement()) // no unique identifier
author User @relation(fields: [authorId], references: [id])
authorId Int
@@ignore
}
model User {
id Int @id @default(autoincrement())
name String?
posts Post[] @ignore
}
@@schema
要使用此属性,您必须启用 multiSchema
预览功能。多个数据库模式支持目前可用于 PostgreSQL、CockroachDB 和 SQL Server 连接器。
将 @@schema
添加到模型以指定数据库中应包含与该模型关联的表的模式。
参数
名称 | 类型 | 必填 | 描述 | 示例 |
---|---|---|---|---|
名称 | String | 是 | 数据库模式的名称。 | "base" 、"auth" |
可以在 @@schema
属性上省略 name
参数的名称。
@@schema(name: "auth")
@@schema("auth")
签名
@@schema(_ name: String)
示例
将 User
模型映射到名为 auth
的数据库模式
generator client {
provider = "prisma-client-js"
previewFeatures = ["multiSchema"]
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
schemas = ["auth"]
}
model User {
id Int @id @default(autoincrement())
name String
@@schema("auth")
}
有关使用 multiSchema
功能的更多信息,请参阅 本指南。
属性函数
auto()
表示由数据库自动生成的**默认值**。
备注
MongoDB
用于为 @id
字段生成 ObjectId
id String @map("_id") @db.ObjectId @default(auto())
关系数据库
关系数据库上不可用 auto()
函数。
示例
生成 ObjectId
(仅限 MongoDB)
model User {
id String @id @default(auto()) @map("_id") @db.ObjectId
name String?
}
autoincrement()
MongoDB 不支持
MongoDB 连接器 不支持 autoincrement()
函数。
在底层数据库中创建一个整数序列,并根据序列将递增的值分配给创建的记录的 ID 值。
备注
-
与大多数数据库上的
Int
兼容(CockroachDB 上的BigInt
) -
在数据库级别实现,这意味着它体现在数据库模式中,并且可以通过内省识别。数据库实现
数据库 实现 PostgreSQL SERIAL
类型MySQL AUTO_INCREMENT
属性SQLite AUTOINCREMENT
关键字CockroachDB SERIAL
类型
示例
生成自动递增的整数作为 ID(仅限关系数据库)
model User {
id Int @id @default(autoincrement())
name String
}
sequence()
仅 CockroachDB 支持
序列函数仅受 CockroachDB 连接器 支持。
在底层数据库中创建一个整数序列,并根据序列将递增的值分配给创建的记录的值。
可选参数
参数 | 示例 |
---|---|
virtual | @default(sequence(virtual)) 虚拟序列是不生成单调递增值的序列,而是生成类似于内置函数 unique_rowid() 生成的值。 |
cache | @default(sequence(cache: 20)) 要在内存中缓存以供会话重复使用的序列值的数目。缓存大小为 1 表示没有缓存,缓存大小小于 1 是无效的。 |
increment | @default(sequence(increment: 4)) 序列递增的新值。负数创建降序序列。正数创建升序序列。 |
minValue | @default(sequence(minValue: 10)) 序列的新最小值。 |
maxValue | @default(sequence(maxValue: 3030303)) 序列的新最大值。 |
start | @default(sequence(start: 2)) 序列开始的值,如果它重新启动或序列达到 maxValue 。 |
示例
生成排序整数作为 ID
model User {
id Int @id @default(sequence(maxValue: 4294967295))
name String
}
cuid()
根据 cuid
规范生成全局唯一标识符。
如果您想使用 cuid2
值,您可以将 2
作为参数传递给 cuid
函数:cuid(2)
。
备注
- 与
String
兼容。 - 由 Prisma ORM 实现,因此在底层数据库模式中“不可见”。您仍然可以在使用 内省 时使用
cuid()
,方法是 手动更改您的 Prisma 模式 和 生成 Prisma Client,在这种情况下,值将由 Prisma 的 查询引擎 生成。 - 由于
cuid()
输出的长度根据 cuid 创建者未定义,因此安全字段大小为 30 个字符,以便为非常大的值提供足够的字符。如果您将字段大小设置为小于 30,然后cuid()
生成了更大的值,您可能会看到 Prisma Client 错误,例如Error: The provided value for the column is too long for the column's type.
。 - 对于**MongoDB**:
cuid()
不会生成有效的ObjectId
。如果您想在底层数据库中使用ObjectId
,可以使用@db.ObjectId
语法。但是,如果您的_id
字段不是ObjectId
类型,您仍然可以使用cuid()
。
示例
生成 cuid()
值作为 ID
- 关系数据库
- MongoDB
model User {
id String @id @default(cuid())
name String
}
model User {
id String @id @default(cuid()) @map("_id")
name String
}
根据 cuid2
规范生成 cuid(2)
值作为 ID
- 关系数据库
- MongoDB
model User {
id String @id @default(cuid(2))
name String
}
model User {
id String @id @default(cuid(2)) @map("_id")
name String
}
uuid()
根据 UUID 规范生成全局唯一标识符。Prisma ORM 支持版本 4(默认)和 7。
备注
- 与
String
兼容。 - 由 Prisma ORM 实现,因此在底层数据库模式中“不可见”。您仍然可以在使用 内省 时使用
uuid()
,方法是 手动更改您的 Prisma 模式 和 生成 Prisma Client,在这种情况下,值将由 Prisma ORM 的 查询引擎 生成。 - 对于**关系数据库**:如果您不想使用 Prisma ORM 的
uuid()
函数,可以使用 带有dbgenerated
的原生数据库函数。 - 对于**MongoDB**:
uuid()
不会生成有效的ObjectId
。如果您想在底层数据库中使用ObjectId
,可以使用@db.ObjectId
语法。但是,如果您的_id
字段不是ObjectId
类型,您仍然可以使用uuid()
。
示例
使用 UUID v4 生成 uuid()
值作为 ID
- 关系数据库
- MongoDB
model User {
id String @id @default(uuid())
name String
}
model User {
id String @id @default(uuid()) @map("_id")
name String
}
使用 UUID v7 生成 uuid(7)
值作为 ID
- 关系数据库
- MongoDB
model User {
id String @id @default(uuid(7))
name String
}
model User {
id String @id @default(uuid(7)) @map("_id")
name String
}
nanoid()
基于 Nano ID 规范生成的值。
Nano ID 与 UUID v4(基于随机数)非常相似。它在 ID 中具有类似数量的随机位(Nano ID 为 126,UUID 为 122),因此具有类似的碰撞概率。
为了使重复的概率为十亿分之一,必须生成 103 万亿个版本 4 ID。
Nano ID 和 UUID v4 之间有两个主要区别。
- Nano ID 使用更大的字母表,因此类似数量的随机位被压缩到 21 个符号中,而不是 36 个。
- Nano ID 代码比 uuid/v4 包小 4 倍:130 字节而不是 423 字节。
备注
- 与
String
兼容。 - 由 Prisma ORM 实现,因此在底层数据库模式中“不可见”。您仍然可以在使用 内省 时使用
uuid()
,方法是 手动更改您的 Prisma 模式 和 生成 Prisma Client,在这种情况下,值将由 Prisma ORM 的 查询引擎 生成。 - 对于 MongoDB:
nanoid()
不会生成有效的ObjectId
。如果希望在底层数据库中使用ObjectId
,可以使用@db.ObjectId
语法。但是,如果您的_id
字段不是ObjectId
类型,您仍然可以使用nanoid()
。
示例
生成 nanoid()
值作为 ID
- 关系数据库
- MongoDB
model User {
id String @id @default(nanoid())
name String
}
model User {
id String @id @default(nanoid()) @map("_id")
name String
}
now()
设置记录创建时间的时间戳。
备注
常规
- 与
DateTime
兼容。
如果您也使用 @updatedAt
,如果您的数据库和应用程序具有不同的时区,则时间可能与 now()
值不同。发生这种情况是因为 @updatedAt
在 Prisma ORM 级别运行,而 now()
在数据库级别运行。
关系型数据库
-
在数据库级别实现,这意味着它体现在数据库模式中,并且可以通过内省识别。数据库实现
数据库 实现 PostgreSQL CURRENT_TIMESTAMP
和now()
等别名。MySQL CURRENT_TIMESTAMP
和now()
等别名。SQLite CURRENT_TIMESTAMP
和date('now')
等别名。CockroachDB CURRENT_TIMESTAMP
和now()
等别名。
MongoDB
- 在 Prisma ORM 级别实现
示例
创建记录时设置当前时间戳值
- 关系数据库
- MongoDB
model User {
id String @id
createdAt DateTime @default(now())
}
model User {
id String @id @default(auto()) @map("_id") @db.ObjectId
createdAt DateTime @default(now())
}
dbgenerated(...)
表示无法在 Prisma 模式中表达的 默认值(例如 random()
)。
备注
关系型数据库
-
与任何标量类型兼容。
-
在 2.21.0 及更高版本中不能是空字符串
dbgenerated("")
。 -
在 2.17.0 及更高版本中接受
String
值,这允许您 -
dbgenerated(...)
中的字符串值可能与数据库返回的默认值不匹配,因为字符串等值可能会被显式转换(例如'hello'::STRING
)。当存在不匹配时,Prisma Migrate 会指示仍然需要迁移。您可以使用prisma db pull
推断正确的值以解决差异。(相关问题)
示例
为 Unsupported
类型设置默认值
circle Unsupported("circle")? @default(dbgenerated("'<(10,4),11>'::circle"))
覆盖受支持类型的默认值行为
您还可以使用 dbgenerated(...)
为受支持类型设置默认值。例如,在 PostgreSQL 中,您可以生成数据库级别的 UUID,而不是依赖 Prisma ORM 的 uuid()
。
model User {
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
id String @id @default(uuid()) @db.Uuid
test String?
}
注意:gen_random_uuid()
是 PostgreSQL 函数。要在 PostgreSQL 12.13 及更早版本中使用它,必须启用 pgcrypto
扩展。
在 Prisma ORM 4.5.0 及更高版本中,您可以使用 postgresqlExtensions
预览功能 在 Prisma 模式中声明 pgcrypto
扩展。
属性参数类型
FieldReference[]
字段名称的数组:[id]
、[firstName, lastName]
。
String
双引号内的可变长度文本:""
、"Hello World"
、"Alice"
。
Expression
可以由 Prisma ORM 评估的表达式:42.0
、""
、Bob
、now()
、cuid()
。
enum
SQLite 和 Microsoft SQL Server 不支持。
SQLite 连接器 和 Microsoft SQL Server 连接器 不支持 enum
类型。
定义一个 枚举。
备注
- 枚举在 PostgreSQL 和 MySQL 中得到原生支持。
- 枚举在 MongoDB 中在 Prisma ORM 级别实现和执行。
命名约定
- 枚举名称必须以字母开头(它们通常以 帕斯卡命名法 拼写)。
- 枚举必须使用单数形式(例如
Role
而不是role
、roles
或Roles
)。 - 必须符合以下正则表达式:
[A-Za-z][A-Za-z0-9_]*
示例
指定具有两个可能值的 enum
- 关系数据库
- MongoDB
enum Role {
USER
ADMIN
}
model User {
id Int @id @default(autoincrement())
role Role
}
enum Role {
USER
ADMIN
}
model User {
id String @id @default(auto()) @map("_id") @db.ObjectId
role Role
}
指定具有两个可能值并设置默认值的 enum
- 关系数据库
- MongoDB
enum Role {
USER
ADMIN
}
model User {
id Int @id @default(autoincrement())
role Role @default(USER)
}
enum Role {
USER
ADMIN
}
model User {
id String @id @default(auto()) @map("_id") @db.ObjectId
role Role @default(USER)
}
type
复合类型仅适用于 MongoDB。
复合类型在 3.12.0 及更高版本中可用,如果您启用了 mongodb
预览功能标志,则在 3.10.0 及更高版本中可用。
定义一个 复合类型。
命名约定
类型名称必须
- 以字母开头(通常使用PascalCase命名)
- 遵循以下正则表达式:
[A-Za-z][A-Za-z0-9_]*
示例
定义一个包含 Photo
复合类型的列表的 Product
模型
model Product {
id String @id @default(auto()) @map("_id") @db.ObjectId
name String
photos Photo[]
}
type Photo {
height Int
width Int
url String
}