插入或更新具有特定值的列

  • 本文关键字:更新 插入 mysql sql upsert
  • 更新时间 :
  • 英文 :


我有以下表格:

questions_answers
_____________________________________
| id | question_id | answer | user_id |
|____|_____________|________|_________|
|  1 |      1      |   yes  |    3    |
|____|_____________|________|_________|

我想检查question_iduser_id是否存在,然后更新现有行。

我试过这个命令INSERT INTO questions_answers (question_id, answer, user_id) VALUES (1, 'no',3) ON DUPLICATE KEY UPDATE answer = 'no'

所以在这种情况下,有一个question_id= 1和user_id= 3,因此它应该更新这一行,而不是插入一个新的行。

但是我认为它检查id列是否有重复。

是否有一种方法来完成这个与SQL或我需要检查行是否存在与PHP,然后更新?

你的INSERT INTO .. ON DUPLICATE KEY UPDATE不工作,因为当前确定复制/冲突的KEYid列的主键。

从这个语法的规范

插入……ON DUPLICATE KEY UPDATE是MariaDB/MySQL对INSERT语句的扩展,如果它发现一个重复的唯一键或主键,将执行UPDATE。

要实现这一点,您需要在question_iduser_id两个列上创建一个UNIQUE CONSTRAINT。这个独特的约束将在question_id-user_id对重复时触发,并按您的意愿触发UPDATE语句。
ALTER TABLE questions_answers ADD CONSTRAINT uq_user_question UNIQUE KEY(question_id ,user_id);

Reference:
MySQL Insert On Duplicate
MariaDB - Insert On Duplicate KEY UPDATE

最新更新