可能重复:
How do I update if exists, insert if not (aka upsert or merge) in MySQL?
我有一个包含用户,类别和分数列的表格。我想运行一个插入,如果此用户/类别组合已经存在,则只更新分数。用户和类别列可以多次具有相同的值,但每个特定的用户/类别组合可能只存在于一行中。我怎么能这样做?
非常感谢
答案 0 :(得分:3)
对于这个例子,让我们调用你的表分数:
确保您拥有唯一索引
ALTER TABLE scores ADD UNIQUE INDEX user_category_ndx (user,category);
现在运行此替换:
INSERT INTO scores (user,category,score) VALUES ('username','mycat',127)
ON DUPLICATE KEY UPDATE score = VALUES(score);
如果您更新分数意味着加分,那么请执行以下操作:
INSERT INTO scores (user,category,score) VALUES ('username','mycat',127)
ON DUPLICATE KEY UPDATE score = score + VALUES(score);
试一试!
更新2011-08-28 09:00美国东部时间
如果您想保持高分,然后添加唯一索引,则必须执行以下操作:
CREATE TABLE scores_new LIKE scores;
ALTER TABLE scores_new ADD UNIQUE INDEX user_category_ndx (user,category);
INSERT INTO scores_new (user,category,score)
SELECT user,category,MAX(score) FROM scores GROUP BY user,category;
ALTER TABLE scores RENAME scores_old;
ALTER TABLE scores_new RENAME scores;
#
# Drop old table if no longer needed
#
DROP TABLE scores_old;
更新2011-08-28 10:53美国东部时间
运行此选项以保持最高分:
INSERT INTO scores (user,category,score) VALUES ('username','mycat',127)
ON DUPLICATE KEY UPDATE score = GREATEST(VALUES(score),score);
答案 1 :(得分:0)
你想要的是INSERT ... ON DUPLICATE KEY UPDATE
。确保您在用户,类别上定义了唯一索引。见http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html