我有以下表格:
questions_answers
_____________________________________
| id | question_id | answer | user_id |
|____|_____________|________|_________|
| 1 | 1 | yes | 3 |
|____|_____________|________|_________|
我想检查question_id
和user_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
不工作,因为当前确定复制/冲突的KEY
是id
列的主键。
从这个语法的规范
要实现这一点,您需要在插入……ON DUPLICATE KEY UPDATE是MariaDB/MySQL对INSERT语句的扩展,如果它发现一个重复的唯一键或主键,将执行UPDATE。
question_id
和user_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