2017-03-05 63 views
0

我想更新一行或插入它,如果它不存在。但INSERT ON DUPLICATE KEY UPDATE將不起作用,因爲我沒有使用獨特的列。如何更新如果存在或插入

INSERT INTO table (id, user, date, points) VALUES 
(1, 1, '2017-03-03', 25) 
(2, 1, '2017-03-04', 25) 
(3, 2, '2017-03-03', 100) 
(4, 2, '2017-03-04', 150) 

每個用戶每天都會有一行他們得到積分。

有沒有辦法更新如果存在或插入,使用一次調用MySQL?

回答

0

是的。你似乎知道答案insert on duplicate key update。你只需要正確的唯一索引:

CREATE UNIQUE INDEX unq_table_user_date ON table(user, date); 

然後,你可以這樣做:

INSERT INTO table (id, user, date, points) 
    VALUES (1, 1, '2017-03-03', 25), 
      (2, 1, '2017-03-04', 25), 
      (3, 2, '2017-03-03', 100), 
      (4, 2, '2017-03-04', 150) 
    ON DUPLICATE KEY UPDATE points = VALUES(points) + points; 

ON DUPLICATE KEY UPDATE作品與任何及所有唯一索引。語法VALUES(points)獲取該列的新值。

+0

由於某些原因,我得到了一個語法錯誤的單詞SET。刪除它,它就像一個魅力。 – greg

+0

@greg。 。 。我的手指只是在'UPDATE'之後寫下'SET'。我不確定會有什麼進入他們。 –

相關問題