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