MySQL - 克隆然后更改字段 - 这是竞争条件吗?

时间:2015-08-13 21:28:03

标签: mysql

在我们的软件系统中调试问题时,我遇到了一个准备好的语句,如下所示:

"UPDATE Command SET expiredWhen=status, status='expired' WHERE id=?;"

expiredWhen字段应设置为status字段中的任何值,然后status字段应设置为"已过期" 。它在我们的MySQL 5.1环境中按预期工作,但在MySQL 5.5 expiredWhen被设置为"已过期"。

此声明的预期结果是什么?这是一个竞争条件,我们很幸运它曾经有效吗?或者此语句的定义行为是否已从版本5.1更改为5.5?

1 个答案:

答案 0 :(得分:1)

版本5.1和5.5之间的documentation是一致的:

  

单表UPDATE分配通常从左到右进行评估   对。对于多表更新,无法保证   作业以任何特定顺序进行

这表明不应该成为竞争条件。也就是说,“一般”这个词有点令人担忧 - 假设可能成为竞争条件可能是最安全的。