我觉得如果在更新语句中有相互依赖的字段,我不确定是否能保证顺序(或者是否需要保证顺序)。
举个例子,假设你有以下更新语句:
UPDATE Table
SET NewValue = OldValue, OldValue = NULL
<结果>
NewValue总是先更新,然后OldValue被置空吗?或者在处理过程中,行(或集合、表等)的状态是不可变的,以便所有更改直到计算完成后才提交?
我觉得如果在更新语句中有相互依赖的字段,我不确定是否能保证顺序(或者是否需要保证顺序)。
举个例子,假设你有以下更新语句:
UPDATE Table
SET NewValue = OldValue, OldValue = NULL
<结果>
NewValue总是先更新,然后OldValue被置空吗?或者在处理过程中,行(或集合、表等)的状态是不可变的,以便所有更改直到计算完成后才提交?
创建一个新的虚拟行,然后原子性地替换现有的行。在提交数据之前,您可以访问所有现有的值。
编辑:顺便说一句,这并不是一个不寻常的情况。
是的,系统将把NewValue更新为在查询执行之前存在于OldValue中的值,然后将OldValue设置为null。事实上,你可以这样交换值:
UPDATE Table
SET NewValue = OldValue, OldValue = NewValue
为什么不将其作为两个单独的查询运行呢?
begin transaction
UPDATE Table
SET NewValue = OldValue
UPDATE Table
SET OldValue = NULL
commit
还是这是作业?