gpt4 book ai didi

mysql - 在 SQL 的单个更新语句中更新多列时的更新顺序

转载 作者:行者123 更新时间:2023-11-28 23:17:23 26 4
gpt4 key购买 nike

我有一个更新查询:

update  t
set Col6=Col5
, Col5=Col4
, Col4=Col3
, Col3=Col2
, Col2=Col1
from [table] t

sql是按顺序更新的吗?先更新 Col6 再更新 Col5 等等?我不想在 Col3 中看到 Col1 数字/数据,以防 sql 在通过某种优化的查询计划更新 Col3 之前更新 Col2。如果是这样,我将不得不分别写出所有 5 列更新语句。

最佳答案

通常,SQL 更新将 set 的左侧和右侧视为来自两个不同的记录——右侧的“之前”记录和左侧的“之后”记录.在实践中,大多数数据库按顺序评估 set 子句(我不确定是否需要这样做)。

MySQL 不同。它按顺序评估集合子句。 And 在分配后对列的引用是新值,而不是旧值。这在 documentation 中有解释。 :

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.

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

因此,保证按顺序评估您所写的陈述。因为您没有引用已经分配的值,所以它按您预期的方式工作,并且记录在案。

关于mysql - 在 SQL 的单个更新语句中更新多列时的更新顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43285775/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com