用途:在 Prisma Client 中原子地执行多个操作,实现要么全部成功、要么全部回滚的事务语义。
主要能力:1) 顺序事务,用数组传入多个操作,按顺序执行,任一失败则整体回滚;2) 交互式事务,传入 async 函数,适合依赖前一步结果、带条件判断的复杂逻辑;3) 事务选项,支持 maxWait(获取锁最长等待毫秒)、timeout(事务最长持续时间毫秒)和 isolationLevel;4) 隔离级别,可选 ReadUncommitted、ReadCommitted、RepeatableRead、Serializable;5) 嵌套写入自动事务,嵌套 create 等操作由 Prisma 自动放入事务;6) 事务客户端,回调中的 tx 是限定在该事务内的 Prisma Client;7) 可在交互式事务中使用 findUniqueOrThrow 等 OrThrow 方法,找不到即抛错并回滚整个事务。
使用方式:顺序事务使用 prisma.$transaction([...]);交互式事务使用 prisma.$transaction(async (tx) => {...}) 并在其中改用 tx 调用方法;需要时传入选项对象。
适用场景:简单批量写用顺序事务,性能更好;存在依赖操作、条件逻辑时用交互式事务,更灵活。
限制与建议:事务应尽量短,仅在事务内做数据库操作,把数据准备放在事务外;注意捕获并处理错误,例如唯一约束冲突 P2002;默认隔离级别适用于多数情况,仅在需要严格一致性时改用 Serializable。资料未涉及收费、价格与平台信息。