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

标签 mysql

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

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

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

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

最佳答案

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

Single-table UPDATE assignments are generally evaluated from left to right. For multiple-table updates, there is no guarantee that assignments are carried out in any particular order

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

关于MySQL - 克隆然后更改字段 - 这是竞争条件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31998735/

相关文章:

php - 如何在laravel中获取所有月份的记录数

python - 如何在Treeview Tkinter中刷新MySQL数据?

java - SQL 错误 : 1064, SQLState:创建新实体时为 42000

mysql - 谷歌云 : MySQL queries very slow

mysql - 优化查询以计算一张表的两个不同列和不同行的总计

mysql - 可以通过自动增量 pk 获取插入的值吗?

mysql - fatal error : attempting to read the result set

java - 计算机重新启动后 Spring 无法连接到 mysql 数据库我该如何诊断问题所在

mysql - 使用 mysqli 和 php 创建表

MySQL Insert Select 不强制执行 NOT NULL 约束