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

SQL如何实现指定question_id和user_id存在时更新、不存在时插入

解决方案

你的ON DUPLICATE KEY UPDATE未生效的核心原因是:该语法仅在插入操作触发主键或唯一索引冲突时才会执行更新逻辑。当前你仅将id设为主键,没有为question_id + user_id的组合设置唯一约束,因此只有id重复时才会触发更新,不符合业务预期。

  • 第一步:给question_id和user_id创建联合唯一索引
    执行以下SQL添加约束:
ALTER TABLE questions_answers ADD UNIQUE KEY `uq_question_user` (`question_id`, `user_id`);
  • 第二步:使用原有插入更新逻辑即可(可做可选优化)
    添加唯一约束后,你原来的SQL已经可以正常触发更新,也可以优化为更通用的写法,不用硬编码answer的值:
INSERT INTO questions_answers (question_id, answer, user_id) 
VALUES (1, 'no',3) 
ON DUPLICATE KEY UPDATE answer = VALUES(answer);
  • 相关说明
    这个需求完全可以纯SQL实现,不需要先用PHP查询判断是否存在。先查再写的方案存在并发安全问题,高并发场景下可能出现多个请求同时判定数据不存在、重复插入的脏数据。数据库原生的唯一索引+ON DUPLICATE KEY UPDATE是原子操作,没有并发风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 21:45:09