gpt4 book ai didi

SQL (Microsoft) - 同时进行 2 个更新

转载 作者:行者123 更新时间:2023-12-02 09:13:51 24 4
gpt4 key购买 nike

我有一张 table

create table lastnum
(
id int,
num int
)

它有一行

Id    num

1 101

2个用户同时执行相同的存储过程 - 该存储过程是

declare @num int

set @num = (select num + 1 from lastnum where id = 1)

update lastnum
set num = @num
where Id = 1

return @num

命令以精确微秒运行的可能性是多少,因此即使在两次调用之后,num 的值也仅为 102

最佳答案

该代码绝对有可能“失败”并向两个用户提供相同的号码。

这是否真的可能在您的环境中发生取决于您的负载(如果此代码很少运行,您可能会逃脱它)以及您的服务器的配置方式。 Sql Server有不同的Isolation Levels您可以使用它来确定允许的潜在冲突程度。在最高隔离度下,该代码是完全安全的(假设您的用户正在获得隐式事务)...但性能损失可能很严重。

Sql Server 有内置机制,您应该使用它来避免这些潜在的冲突:即 identity 列和 scope_identity() 函数。较新版本的 Sql Server 还具有 Sequences .

Locking hints或者显式交易也可能对您有帮助...但我会尽量避免这些,而倾向于本答案中的其他选项。

关于SQL (Microsoft) - 同时进行 2 个更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49132998/

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