2016-12-20 101 views

回答

1

我认为你可以做到。如果你这样做:

ON DUPLICATE KEY UPDATE 
    A = A + 1, B = B * 2, 
    C = A + B 

我相信更新从左到右执行。所以当它到达C = A + B时,AB包含新值。

+0

哦,似乎工作。方便合理,谢谢! – zojwek

+0

'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”赋值运算符的右侧。重新排序查询和代码中断。 –

+0

@ Michael-sqlbot如果没有重复,'VALUES()'函数会获取已插入列中的值,但它不会从UPDATE子句中获取新值。 – Barmar