我有下表:
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 是否存在行,然后更新?
uj5u.com熱心網友回復:
您INSERT INTO .. ON DUPLICATE KEY UPDATE無法正常作業,因為KEY確定重復/違規的當前是id列主鍵。
從這個語法的規范
INSERT ... ON DUPLICATE KEY UPDATE 是對 INSERT 陳述句的 MariaDB/MySQL 擴展,如果它找到重復的唯一鍵或主鍵,將改為執行 UPDATE。
為此,您需要UNIQUE CONSTRAINT在兩列question_id和user_id. 此唯一約束將在question_id-user_id對重復時引發,UPDATE并按您的意圖觸發陳述句。
ALTER TABLE questions_answers ADD CONSTRAINT uq_user_question UNIQUE KEY(question_id ,user_id);
參考:
MySQL 在重復的MariaDB 上插入 - 在重復的
密鑰更新上插入
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/339058.html
