MySQL on duplicate key update

9
如果我有这样的查询,如何引用已经在更新语句中给出的值,以便我不需要再次插入相同的数据到查询中呢?例如,我想将col1的值更新为'xxx',但是现在我需要在重复的语句中再次输入'xxx'。有没有办法在重复语句中引用那些值呢?
INSERT INTO TABLENAME(col1, col2) 
VALUES (’xxx’, ‘yyy’) 
ON DUPLICATE KEY UPDATE col1 = ‘zzz’

我在这里留下一个非常好的解决方案链接:https://dev59.com/U3RB5IYBdhLWcg3w-789#450695 - Yehor
2个回答

33

这个应该可以工作,而且更加优雅一些:

INSERT INTO TABLENAME(col1, col2) 
VALUES ('xxx', 'yyy') 
ON DUPLICATE KEY UPDATE col1 = VALUES(col1)

请注意,您不需要更新行的主键部分。我们知道这一部分与之前的相同,因为发生了冲突。


1
最后一行的关键字VALUES非常重要! - physicalattraction

3

在PHP中,我这样解决这个问题:

$fields = "a = 1, b = 2, c = 3";
$sql = "INSERT INTO some_table SET id = $id, $fields ON DUPLICATE KEY UPDATE $fields";
mysql_query($sql);

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