我有一个更新查询:
update t
set Col6=Col5
, Col5=Col4
, Col4=Col3
, Col3=Col2
, Col2=Col1
from [table] tsql是否按顺序执行更新?首先更新Col6,然后更新Col5,依此类推?我不想看到Col3中的Col1数字/数据,以防sql在通过某种优化的查询计划更新Col2之前更新Col3。如果是这样,我将不得不分别写出所有5个列update语句。
发布于 2017-04-08 03:35:13
通常,SQL update将set的左侧和右侧视为来自两个不同的记录--右侧的“之前”记录和左侧的“之后”记录。在实践中,大多数数据库按顺序计算set子句(我不确定这是否是必需的)。
MySQL是不同的。它按顺序计算set子句。赋值后对列的引用是新值,而不是旧值。在documentation中对此进行了解释
以下语句中的第二个赋值将col2设置为当前(更新后的) col1值,而不是原始的col1值。结果是col1和col2具有相同的值。此行为与标准SQL不同。
更新t1集合col1 = col1 + 1,col2 = col1;
因此,您所写的语句将保证按顺序进行计算。因为您没有引用已经赋值的值,所以它的工作方式与您预期的一样,并且有文档说明可以这样做。
发布于 2017-04-08 03:34:07
赋值列使用存储在db行中的值,赋值不会在运行时发生
例如:如果在数据库行中有
col5 = 1
col4 = 3您更新会产生此结果
col6 = 1
col5= 3发布于 2017-04-08 03:40:41
使用以下格式:
UPDATE table-name
SET column-name = value, column-name = value, ...
WHERE conditionhttps://stackoverflow.com/questions/43285775
复制相似问题