这两者之间有区别吗?我正在研究一些似乎可以互换使用它们的代码,快速测试表明他们似乎做了同样的事情。
INSERT INTO...
...
ON DUPLICATE KEY UPDATE a=VALUES(b)
VS
INSERT INTO...
...
ON DUPLICATE KEY UPDATE a=b
答案 0 :(得分:2)
是。它们是不同的。假设这会更新b=100
行。
1. INSERT INTO foo SET a='42', b='69' ON DUP ... SET a=b
2. INSERT INTO foo SET a='42', b='69' ON DUP ... SET a=VALUES(b)
(1)将更新该行,a
将成为100
,因为这是该记录的b
字段中当前的值。
(2)将更新行,a
将变为69
,因为这是更新查询本身的字段/值列表中提供的值,无论{{1}中的值如何已经在记录中。
b
本身就是已保存记录中的字段,b
是如果未发生重复错误,字段将更新为TO的值。
答案 1 :(得分:1)
a = VALUES(b)
表示如果没有重复键,则会获取已插入b
列的新值,并将其分配给a
列更新行时。
a = b
表示将b
列的旧值复制到包含重复键的行中的a
列。