在我看来,如果你在更新语句中有相互依赖的字段,我不确定是否可以保证订购(或者需要!)。
例如,假设您有以下更新:
UPDATE Table
SET NewValue = OldValue, OldValue = NULL
NewValue会先更新,然后OldValue会无效吗?或者,在处理过程中行(或集合或表等)的状态是不可变的,以便在计算更改之前不会提交所有更改?
答案 0 :(得分:6)
创建一个新的虚拟行,然后以原子方式替换现有的行。您可以访问所有现有值,直到提交数据。
编辑顺便说一下,这不是一种不寻常的情况。
答案 1 :(得分:4)
是的,系统会在执行查询之前将NewValue更新为OldValue中存在的值,然后将OldValue设置为null。实际上,您可以像这样交换值:
UPDATE Table
SET NewValue = OldValue, OldValue = NewValue
答案 2 :(得分:0)
为什么不将它作为两个单独的查询运行?
begin transaction
UPDATE Table
SET NewValue = OldValue
UPDATE Table
SET OldValue = NULL
commit
或者这是家庭作业吗?