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