Prisma ORM新增评论报Comment_postId_key唯一约束失败如何解决?
报错原因
你遇到的Unique constraint failed on the constraint: Comment_postId_key报错,本质是MySQL数据库中Comment表的postId字段被设置了唯一约束:该约束要求同一个postId只能关联一条Comment记录,而你现在要给已经有评论的postId=3新增第二条评论,触发了约束校验所以报错。
你提供的Prisma Schema中Comment模型的postId并没有加@unique修饰,出现这个不一致的问题通常是两个原因:
- 之前迭代Schema时曾经给postId加过
@unique,并且执行了迁移将约束写入了数据库,后续删除了@unique修饰但没有生成、执行新的迁移同步数据库结构 - 手动在数据库操作时给Comment.postId字段添加了唯一约束,和Prisma Schema定义不一致
修复步骤
- 第一步:先确认约束存在。登录你的MySQL数据库,执行SQL语句
SHOW CREATE TABLE Comment;,查看输出中postId字段是否带有UNIQUE标识,确认约束存在后再执行后续操作 - 第二步:自动迁移修复(推荐)。确认当前Prisma Schema中Comment的postId确实没有
@unique修饰后,在项目根目录执行命令:
npx prisma migrate dev --name remove_comment_postid_unique
Prisma会自动比对Schema和数据库的结构差异,生成删除多余唯一约束的迁移脚本并执行,完成后数据库的约束就和Schema定义一致了
- 第三步:手动修复(迁移执行失败时用)。直接在MySQL中执行SQL删除唯一约束即可:
ALTER TABLE Comment DROP INDEX Comment_postId_key;
- 第四步:约束删除完成后,重新运行你的新增评论代码,就可以正常给同一个帖子添加多条评论了
内容的提问来源于stack exchange,提问作者Houcem Eddine
相关产品推荐
相关产品推荐

