mysql - 在一个查询中更新多个 MySQL 表时,是否始终保证分配顺序?

标签 mysql join sql-update

考虑在一个查询中更新表 A 和 B 的示例,这样一来,A.Column1 被设置为 B.Column2(值“DEF”),然后 B.Column2 被设置为值“XYZ”。是否始终保证分配顺序,以便 A.Column1 的值为“DEF”而不是“XYZ”?

SQL 示例:

UPDATE TableA a
JOIN TableB b ON b.Column0 = a.Column0
SET
    a.Column1 = b.Column2, -- Original value: "DEF"
    b.Column2 = 'XYZ'
WHERE a.Column0 = 123;

SELECT Column1 FROM TableA WHERE Column0 = 123; -- DEF or XYZ?

最佳答案

值得注意的是the documentation on UPDATE对此很清楚:

The second assignment in the following statement sets col2 to the current (updated) col1 value, not the original col1 value. The result is that col1 and col2 have the same value. This behavior differs from standard SQL.

令人惊讶的是,是的,秩序确实很重要并且受到尊重。不过,这似乎是一个古怪的 MySQL 事情,所以我不会过分依赖它,因为切换到另一个 RDBMS 会在它停止工作时造成相当大的困惑。

关于mysql - 在一个查询中更新多个 MySQL 表时,是否始终保证分配顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33000875/

相关文章:

mysql - 将数据填充到具有 m :m Relationships 的表中

mysql - 如何创建一个触发器,在更新表中的列之前将整个旧行保存到新表中?

mysql - 如何更改mysql中特定字段的所有记录

mysql - 编写查询以查找名字和姓氏相同的学生?

MySQL AVG() 如果为 NULL 则返回 0

sql - MySQL:按 LIKE 连接两个表

mysql - 使用许多连接优化 sql select

c# - 使用C#更新多个sql表中的相同列

mysql - 如何在Sequelize中设置查询超时?

mysql - 在MYSQL中添加带字符串的别名