You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按指定版本更新用户记录?Prisma更新操作类型错误排查

解决Prisma乐观锁更新的类型错误

你遇到的问题核心是:Prisma的update方法对where参数有严格要求——它必须是能唯一定位单条记录的条件(UserWhereUniqueInput),而你的version字段不属于唯一标识(只有uid这种加了@id、email这种加了@unique的字段才符合),所以不能直接把version和uid平级放在where对象里。

直接修改代码即可,用updateMany替代update,它支持组合普通字段作为查询条件,同时你可以通过返回的更新行数判断乐观锁是否校验通过:

const updateResult = await prisma.user.updateMany({
  where: {
    uid,
    version
  },
  data: {
    ...newData,
    version: { increment: 1 }
  }
})

// 如果更新行数为0,说明版本不匹配,记录已被修改
if (updateResult.count === 0) {
  throw new Error("用户数据已被其他操作修改,请重新尝试")
}

原因很简单:updateMany的where参数是UserWhereInput类型,允许组合多个普通字段条件;而update的where只能用唯一标识,没法直接带version做乐观锁校验。

内容的提问来源于stack exchange,提问作者Ilja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 03:16:25