gpt4 book ai didi

sql - 什么保证 SQL 规范为 UPDATE 提供读取和写入某些列的内容

转载 作者:行者123 更新时间:2023-12-04 01:51:54 24 4
gpt4 key购买 nike

SQL 规范为 UPDATE 语句提供什么保证,其中某些列同时被更新和读取?

从我的实验中我可以看到,当列在“=”符号的右侧使用时,SQL 使用旧值,即使我们在同一语句中更新了这一列。

考虑以下 T-SQL 代码。

create table test
(
a int primary key,
b int
)

insert into test
values (1,2)

update test
set a = b,
b = 3

select *
from test

update test
set b = 4,
a = b

select *
from test

上面的示例产生:

(2, 3)
(3, 4)

即使在第二次更新中它似乎在“a”之前更新了“b”列。是否保证如果我引用某些列,我将得到不受此 UPDATE 影响的结果,而与 SET 子句中的赋值顺序无关?

最佳答案

SQL 试图成为一种基于集合的语言。对于 update,这意味着数据库系统试图表现得“好像”所有更新都是并行应用的,既适用于一行中的所有列,也适用于集合中的所有行。 (事实上​​ ,未能正确实现可能会导致 Halloween Problem )。

由于所有操作都是“并行发生”的,因此没有赋值可以看到任何其他赋值操作的结果,因此它们都基于任何列的原始值。

关于sql - 什么保证 SQL 规范为 UPDATE 提供读取和写入某些列的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39268735/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com