2016-07-19 54 views
1

這兩者之間是否有區別?我正在研究一些似乎可以互換使用的代碼,快速測試表明他們似乎也在做同樣的事情。關於重複密鑰更新a =值(b)與a = b

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

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

回答

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,因爲在b中記錄的更新查詢本身的字段/值列表中提供的值,無論這個值的了。

b本身就是已保存記錄中的字段,VALUES(b)是如果未發生重複錯誤,字段將更新爲TO的值。

+0

查詢應該是'INSERT',而不是'UPDATE'。 – Barmar

+0

woops。對..謝謝。 –

1

a = VALUES(b)表示如果沒有重複鍵,將獲得插入b列的新值,並在更新行時將其分配給a列。

a = b表示將b列的舊值複製到包含重複鍵的行中的a列。

相關問題