ON DUPLICATE KEY UPDATE a = VALUES(b)vs a = b

时间:2016-07-19 19:28:50

标签: mysql sql

这两者之间有区别吗?我正在研究一些似乎可以互换使用它们的代码,快速测试表明他们似乎做了同样的事情。

INSERT INTO...
...
ON DUPLICATE KEY UPDATE a=VALUES(b)

VS

INSERT INTO...
...
ON DUPLICATE KEY UPDATE a=b

2 个答案:

答案 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列。

相关问题