gpt4 book ai didi

sql-server - sql server事务是原子的

转载 作者:行者123 更新时间:2023-12-03 06:56:50 24 4
gpt4 key购买 nike

所以我有一个像这样的存储过程(sql server 2008 r2)

BEGIN TRAN
BEGIN TRY


//critical section
select value
update value
//end of critical section


COMMIT
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK
END CATCH

我不希望两个存储过程读取相同的值。换句话说,读取和更新应该是原子的。这段代码是这样做的吗?如果不是我该怎么办?

最佳答案

是的,它们是原子的,但这并不意味着您会在这里得到您想要的行为!您需要关注的属性是隔离。

要实现所需的排除,您需要对单个值 mutually exclusive 进行 SELECT 操作。您可以通过请求 Update 锁来做到这一点(确保可以通过索引找到 WHERE 谓词,以避免锁定不必要的额外行)

SELECT * FROM foo WITH(ROWLOCK,UPDLOCK) WHERE bar='baz'

请注意,此锁定将一直保持到您的事务提交为止,但不会在关键部分结束时释放,但如果您无论如何更新了值,情况总是如此。

关于sql-server - sql server事务是原子的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7430525/

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