更新查询字段顺序保证

Lev*_*Lev 2 mysql

MySQL 中的 UPDATE 查询是否保证按显示的顺序执行字段更新?

例如

UPDATE `table` SET `first_to_update` = `second_field`,
`second_field` = `third_field`, `third_field` = 5
Run Code Online (Sandbox Code Playgroud)

Mic*_*bot 5

MySQL 在对单个表执行更新时,错误地将更新视为“有序”,并按照它们在查询中写入的顺序更新列。

以下语句中的第二个赋值将 col2 设置为当前(更新后的) col1 值,而不是原始 col1 值。结果是 col1 和 col2 具有相同的值。此行为不同于标准 SQL。

UPDATE t1 SET col1 = col1 + 1, col2 = col1;

单表 UPDATE 分配通常从左到右进行评估。对于多表更新,不能保证按任何特定顺序执行分配。

https://dev.mysql.com/doc/refman/5.6/en/update.html

您的查询似乎是以这种行为不会导致问题的方式编写的。只要您不引用您“已经”更改的列的值(假设从左到右操作而不是原子操作),它就会按照您的预期进行。