I have a table with with essentially three columns: user_id, setting, and value. I’m trying to use the following code:
INSERT INTO 'user_settings'(user_id, setting, value)
VALUES (1234, setting_1, 500)
ON DUPLICATE KEY UPDATE user_id = 1234, setting = setting_1'
This works great when creating a new setting, and it doen’t generate duplicate records. The problem comes when I want to change the value- this won’t work after the previous query has run:
INSERT INTO 'user_settings'(user_id, setting, value)
VALUES (1234, setting_1, 999)
ON DUPLICATE KEY UPDATE user_id = 1234, setting = setting_1'
No rows are affected. Clearly I’m missing something…
IMPORTANT: I am not able to alter the database (new primary keys or something).
UPDATE: It seems my understanding of ON DUPLICATE KEY is wrong. But the question remains- what is the most efficient way way to accomplish this?
Answered in a comment below: “If the Primary (or Unique) key is (user_id, setting), then use: … ON DUPLICATE KEY UPDATE value=999”.
Assuming you actually have a unique key on
user_id, you are getting “no rows affected” because you aren’t changing anything in the second query. I think what you want to do is update thevaluefield as well:Without
valuein there, you’re just setting theuser_idand thesettingfield to the same values they were before, and MySQL doesn’t need to update the record.If you don’t have a unique key on
user_id, you’ll have to find a different approach, as theON DUPLICATE KEY UPDATEwon’t trigger.