0
假設你有A列,B列,C列。在重複鍵上,假設您在這裏執行A = {some statement,} B = {here here},並且C = New_A + New_B。我能否使用A和B的新值來確定C的新值,還是必須重新輸入新A和B的表達式?謝謝!您可以重複使用更新值以進行重複密鑰更新嗎?
假設你有A列,B列,C列。在重複鍵上,假設您在這裏執行A = {some statement,} B = {here here},並且C = New_A + New_B。我能否使用A和B的新值來確定C的新值,還是必須重新輸入新A和B的表達式?謝謝!您可以重複使用更新值以進行重複密鑰更新嗎?
我認爲你可以做到。如果你這樣做:
ON DUPLICATE KEY UPDATE
A = A + 1, B = B * 2,
C = A + B
我相信更新從左到右執行。所以當它到達C = A + B
時,A
和B
包含新值。
哦,似乎工作。方便合理,謝謝! – zojwek
'C = VALUES(A)+ VALUES(B)'會更確定一些,因爲['VALUES()'函數](http://dev.mysql.com/doc/refman/5.7/en/ miscellaneous-functions.html#function_values)保證提供新的值,而從左到右的行爲更多地是(非)幸運的事故。在標準的SQL中,'UPDATE t1 SET b = a,a = b'轉置a和b的值,但是在MySQL中它將它們都設置爲a,因爲它取值爲「old a」,而「new b」賦值運算符的右側。重新排序查詢和代碼中斷。 –
@ Michael-sqlbot如果沒有重複,'VALUES()'函數會獲取已插入列中的值,但它不會從UPDATE子句中獲取新值。 – Barmar