如果存在或插入如何更新

时间:2017-03-05 03:21:05

标签: php mysql

我正在尝试更新一行,或者如果它不存在则插入它。但由于我没有使用唯一的专栏,因此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?

1 个答案:

答案 0 :(得分: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)获取列的新值。