用途 Prisma ORM 面向 TypeScript/JavaScript,用于数据库访问、Schema 设计、迁移与查询。资料开头给出的触发场景是:当用户提到 "prisma"、"prisma schema" 等关键词时使用。
安装与初始化 npx prisma init # creates prisma/schema.prisma and .env npm install @prisma/client 在 prisma/schema.prisma 中配置 datasource(provider 可为 postgresql、mysql、sqlite、sqlserver、mongodb、cockroachdb,url 取自 env("DATABASE_URL"))以及 generator client(provider = "prisma-client-js")。在 .env 中设置 DATABASE_URL,例如 postgresql://user:password@localhost:5432/mydb?schema=public。
Schema 语言 使用 model 定义模型,常见属性包括 @id(主键)、@unique、@default(value)、@map("col")(列重命名)、@updatedAt、@relation、@@id([a, b])(复合主键)、@@unique([a, b]),以及 @@map 与 @@index。资料给出 User 与 Role 枚举的示例,含 id、email、name、role、posts、createdAt、updatedAt 字段及 @@map("users")、@@index([email, name])。
关系 涵盖一对一、一对多、隐式多对多(由 Prisma 管理连接表)、显式多对多(自定义连接表并可携带额外字段,如 CategoriesOnPosts 中的 assignedAt)以及自关联(如 Employee 的 manager/reports,使用命名关系 "Mgmt")。
迁移 npx prisma migrate dev --name add_user_table # create + apply migration (dev) npx prisma migrate deploy # apply pending migrations (prod) npx prisma migrate reset # drop DB, re-apply all migrations npx prisma migrate resolve --applied "20240101000000_name" # mark as resolved npx prisma generate # regenerate client without migrating npx prisma db push # push schema without migration file (prototyping)
Prisma Client 查询 导入 PrismaClient 后实例化使用。资料列出创建(create、createMany 含 skipDuplicates)、读取(findUnique、findUniqueOrThrow、findFirst、findMany)、更新(update)、upsert、删除(delete、deleteMany)。
过滤 where 支持 contains、startsWith、in、not,以及 AND、OR;关系过滤支持 some、none、every(如 posts: { some: { published: true } });并可配合 orderBy。
关联查询与嵌套写入 使用 include 获取完整关联对象,使用 select 选取特定字段。支持嵌套写入(一次调用创建父记录与子记录,如 posts.create、profile.create)以及 connect 连接既有记录(如 categories: { connect: [...] })。
聚合与原生查询 支持 count、aggregate(_sum、_avg、_min、_max、_count)、groupBy(by、_count、_avg、having)。原生查询使用 $queryRaw 与 $executeRaw 的标签模板;资料强调标签模板会自动参数化,切勿使用字符串拼接。
种子数据与 Prisma Studio 在 package.json 中配置 prisma.seed(示例为 ts-node prisma/seed.ts),seed 脚本使用 upsert 并在 finally 中 prisma.$disconnect();执行 npx prisma db seed,该命令也会在 prisma migrate reset 后自动运行。npx prisma studio 可在 http://localhost:5555 打开可视化数据编辑器。
多数据库 可使用独立 schema 文件与自定义客户端输出路径(如 prisma/schema-analytics.prisma 中 output = "../generated/analytics-client"),通过 npx prisma generate --schema=... 生成,并以别名导入使用。
常见模式 分页支持 offset 式(skip/take/orderBy)与游标式(take、skip、cursor、orderBy);软删除通过添加 deletedAt DateTime? 并以 where: { deletedAt: null } 过滤,可借助 Prisma 客户端扩展全局应用;时间戳使用 createdAt @default(now()) 与 updatedAt @updatedAt。事务支持批量式 $transaction([...])(全有或全无、查询间无依赖)与交互式 $transaction(async (tx) => {...})(可访问前一查询结果)。
性能 使用单例客户端避免热重载时产生多实例;连接池可通过 URL 参数设置(?connection_limit=10&pool_timeout=30),无服务器场景可使用 Prisma Accelerate 或 PgBouncer 等外部池化器;通过 include 与 where: { id: { in: ids } } 避免 N+1;使用 log: ['query', 'info', 'warn', 'error'] 记录查询日志;为 where、orderBy 和连接条件所用列添加 @@index。
限制 资料未说明授权许可、收费标准、版本兼容范围与具体性能基准,这些信息暂未提供。