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

NextJs + Prisma更新记录时出现Record to update not found问题排查

解答

是的,核心问题和你猜测的方向一致,但更准确的原因是重复请求触发的冲突:

Prisma的update操作本身是原子性的,不会出现“查询到记录后,更新前被其他请求修改”的中间状态。但如果同一个验证链接被多次快速访问(比如用户误点两次、浏览器重复发起请求),第一次请求会成功找到记录并将verifyId设为null,第二次请求到达时,数据库中已经没有对应verifyId的记录,就会触发P2025错误。

解决方案

  1. 前端限制重复触发:给验证按钮添加点击状态锁,点击后立即禁用,避免用户重复提交。
  2. 后端缓存已使用的verifyId:将已处理过的verifyId存入缓存(如Redis),设置合理的过期时间,请求过来先检查缓存,已存在则直接返回错误页。
  3. 改用主键定位更新:如果表中有主键(如id),可以先通过verifyId查询出记录的主键,再用主键执行更新操作。虽然这不会解决重复请求的问题,但能避免“定位字段被修改”的潜在风险:
    // 示例代码
    const letter = await prisma.letter.findUnique({
      where: { verifyId: verifyId }
    });
    if (!letter) {
      return { redirect: { destination: "/letter/verifyError", permanent: false } };
    }
    const updatedLetter = await prisma.letter.update({
      where: { id: letter.id },
      data: { verified: true, verifyId: null }
    });
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 07:46:23