這兩者之間是否有區別?我正在研究一些似乎可以互換使用的代碼,快速測試表明他們似乎也在做同樣的事情。關於重複密鑰更新a =值(b)與a = b
INSERT INTO...
...
ON DUPLICATE KEY UPDATE a=VALUES(b)
與
INSERT INTO...
...
ON DUPLICATE KEY UPDATE a=b
這兩者之間是否有區別?我正在研究一些似乎可以互換使用的代碼,快速測試表明他們似乎也在做同樣的事情。關於重複密鑰更新a =值(b)與a = b
INSERT INTO...
...
ON DUPLICATE KEY UPDATE a=VALUES(b)
與
INSERT INTO...
...
ON DUPLICATE KEY UPDATE a=b
是。他們是不同的。假設這會更新一行,其中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的值。
a = VALUES(b)
表示如果沒有重複鍵,將獲得插入b
列的新值,並在更新行時將其分配給a
列。
a = b
表示將b
列的舊值複製到包含重複鍵的行中的a
列。
查詢應該是'INSERT',而不是'UPDATE'。 – Barmar
woops。對..謝謝。 –