MySQL, 不删除情况下的REPLACE INTO?

3
我有这个表结构:
ID RATE1 RATE2 RATE3

"它是空的。让我们给一个新的费率:"
REPLACE INTO rates (ID, RATE2) VALUES (99, 4);

这张表格将会是:
99, 0, 4, 0

到目前为止还不错。又进行了一次评分:
REPLACE INTO rates (ID, RATE3) VALUES (99, 2);

这是错误发生的地方。我收到了。
99, 0, 0, 2

代替:
99, 0, 4, 2

我也想保留RATE2。有没有解决方法?
1个回答

6

使用INSERT...ON DUPLICATE KEY UPDATE代替REPLACE

INSERT INTO ThisTable (id, rate3) VALUES (99, 2) 
  ON DUPLICATE KEY UPDATE rate3=VALUES(rate3);

这将保留现有行的其他列不变。
演示:http://sqlfiddle.com/#!9/0ae4a

如果我想要将其泛化,根据我更新的列,始终需要复制“rate3=VALUES(rate3)”表达式,紧随“ON DUPLICATE KEY UPDATE”之后吗? - John Smith
1
是的,这将使用您尝试插入的值更新指定的列。您可能想阅读http://dev.mysql.com/doc/refman/5.7/en/insert-on-duplicate.html 了解更多信息。 - Bill Karwin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接