在SQL更新中,字段的顺序是否重要?

4

我觉得如果在更新语句中有相互依赖的字段,我不确定是否能保证顺序(或者是否需要保证顺序)。

举个例子,假设你有以下更新语句:

UPDATE Table
SET NewValue = OldValue, OldValue = NULL
<结果> NewValue总是先更新,然后OldValue被置空吗?或者在处理过程中,行(或集合、表等)的状态是不可变的,以便所有更改直到计算完成后才提交?
3个回答

6

创建一个新的虚拟行,然后原子性地替换现有的行。在提交数据之前,您可以访问所有现有的值。

编辑:顺便说一句,这并不是一个不寻常的情况。


不,我不认为这很不寻常,只是不确定在哪里寻找关于如何工作的答案。这似乎是你要么在学习SQL时(低级细节)学到的东西,要么就根本不会了解。感谢你和Thomas纠正我的错误。 - CodexArcanum

4

是的,系统将把NewValue更新为在查询执行之前存在于OldValue中的值,然后将OldValue设置为null。事实上,你可以这样交换值:

UPDATE Table
SET NewValue = OldValue, OldValue = NewValue

0

为什么不将其作为两个单独的查询运行呢?

begin transaction
UPDATE Table
SET NewValue = OldValue

UPDATE Table
SET OldValue = NULL
commit

还是这是作业?


我认为Codex问错了问题,但我认为egrunin和Thomas回答了它。 - Marcus Adams
是的,我的问题可能表达得不太清楚。我现在正在做这件事,但我想知道是否可以将这些查询合并在一起并一次性完成。正如Egrunin和Thomas所详细阐述的那样,我认为你可以,但我不确定该如何检查。而且,这不是一个作业任务,这是在写工作查询时遇到的问题,当时我没有答案。 - CodexArcanum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接