首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SQL中更新单个Update语句中的多个列时的更新顺序

在SQL中更新单个Update语句中的多个列时的更新顺序
EN

Stack Overflow用户
提问于 2017-04-08 03:29:16
回答 4查看 1.3K关注 0票数 2

我有一个更新查询:

代码语言:javascript
复制
update  t
set     Col6=Col5
    ,   Col5=Col4
    ,   Col4=Col3
    ,   Col3=Col2
    ,   Col2=Col1
from    [table] t

sql是否按顺序执行更新?首先更新Col6,然后更新Col5,依此类推?我不想看到Col3中的Col1数字/数据,以防sql在通过某种优化的查询计划更新Col2之前更新Col3。如果是这样,我将不得不分别写出所有5个列update语句。

EN

回答 4

Stack Overflow用户

发布于 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;

因此,您所写的语句将保证按顺序进行计算。因为您没有引用已经赋值的值,所以它的工作方式与您预期的一样,并且有文档说明可以这样做。

票数 4
EN

Stack Overflow用户

发布于 2017-04-08 03:34:07

赋值列使用存储在db行中的值,赋值不会在运行时发生

例如:如果在数据库行中有

代码语言:javascript
复制
 col5 = 1
 col4 = 3

您更新会产生此结果

代码语言:javascript
复制
 col6 = 1
 col5=  3
票数 0
EN

Stack Overflow用户

发布于 2017-04-08 03:40:41

使用以下格式:

代码语言:javascript
复制
UPDATE table-name 
   SET column-name = value, column-name = value, ...
 WHERE condition
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43285775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档