Abh*_*hek 3 mysql sql sql-update
我有一个更新查询:
update t
set Col6=Col5
, Col5=Col4
, Col4=Col3
, Col3=Col2
, Col2=Col1
from [table] t
Run Code Online (Sandbox Code Playgroud)
sql 是否按顺序进行更新?先更新Col6,然后更新Col5,以此类推?我不想在 Col3 中看到 Col1 数字/数据,以防 sql 在通过某种优化查询计划更新 Col3 之前更新 Col2。如果是这样,我将不得不分别写出所有 5 列更新语句。
一般来说,SQL 更新将左侧和右侧视为set来自两个不同的记录——右侧的“之前”记录和左侧的“之后”记录。在实践中,大多数数据库按顺序评估集合子句(我不确定这是否是必需的)。
MySQL 则不同。它按顺序评估集合子句。 分配后对列的引用是新值,而不是旧值。文档中对此进行了解释:
以下语句中的第二个赋值将 col2 设置为当前(更新后的)col1 值,而不是原始 col1 值。结果是 col1 和 col2 具有相同的值。此行为与标准 SQL 不同。
Run Code Online (Sandbox Code Playgroud)UPDATE t1 SET col1 = col1 + 1, col2 = col1;
因此,您所写的陈述保证会按顺序进行评估。因为您没有引用已分配的值,所以它会按您的预期工作,并且有记录这样做。
| 归档时间: |
|
| 查看次数: |
2117 次 |
| 最近记录: |