gpt4 book ai didi

sql-server - 默认情况下,SQL Server中的事务是否锁定语句中的所有表?

转载 作者:行者123 更新时间:2023-12-03 16:42:01 26 4
gpt4 key购买 nike

假设我有一个如下的T-SQL语句:

BEGIN TRAN

UPDATE dbo.TableA
...
...
...

DELETE FROM dbo.TableB

COMMIT TRAN


假设TableA上的更新将花费一些时间。

默认情况下,SQL Server会锁定TableB直到事务完成吗?这是否意味着在更新进行期间您无法对其进行读写?

最佳答案

简短的回答:不可以。

长答案:
实际上,这是一个很大的问题,因为它深入到了交易概念和引擎如何工作中,但是我想完整的答案可能会占用一本好书上的一章,而超出了本网站的范围。

首先,请记住,引擎可以在几种隔离模式下工作:快照,已提交读等。我可以建议对此主题进行深入研究(这可能需要几天时间)。

其次,引擎具有粒度级别,并且将尝试使用“最小”级别,但是可以根据许多因素按需升级,例如:“此操作是否需要分页?”

第三,BEGINCOMMITROLLBACK以“信号量”方式工作,标明从“内存”到“磁盘”的变更过程。它比它复杂得多,这就是为什么要使用引号。

也就是说,“默认事务”将在读取提交隔离模式下使用行粒度。没有人说过如何将锁以一种或另一种方式发出。
它取决于外键,触发器,要更改的表数量等内容。

TLDR:这取决于您的方案的许多次要细节。找出答案的最佳方法是通过测试。

关于sql-server - 默认情况下,SQL Server中的事务是否锁定语句中的所有表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58662312/

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