gpt4 book ai didi

sql-server - delete with join 是否锁定*未*被删除的表?

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

如果我的查询是这样的:

DELETE a
FROM TableA AS a
JOIN TableB as b
ON a.SomeColumn = b.SomeColumn

TableB 是否在从 TableA 中删除所有记录期间被锁定?如果是,是表级、页级还是行级锁定?

我正在使用 SQL Server 2008 R2,我很难找到有关 SQL Server 何时以及如何使用锁定的一般信息,因此非常感谢与此相关的任何资源。

最佳答案

最有可能的是,共享锁将颁发给 TableB,与您运行 SELECT 时颁发的锁类型相同。但是,所采取的具体锁定类型和锁定持续时间会根据您的个人情况而有所不同,因此您应该执行以下验证以获得您问题的准确答案:

首先,SET TRANSACTION ISOLATION LEVEL REPEATABLE READ。这将导致共享锁在事务完成之前一直持有,而不是像在 READ COMMITTED 下那样只在读取期间持有。

我们正在提高隔离级别,以便我们可以在以后检查发出了哪些锁...但是正因为如此,您可能不想在生产系统上进行此测试.

接下来,开始交易

然后,发出有问题的 DELETE 命令。

现在,检查 sys.dm_tran_locks .我强烈建议使用 SELECT statement provided by @Martin Smith in this answer .

最后,COMMITROLLBACK 关闭事务并释放锁。

使用 sys.dm_tran_locksSELECT 的结果将为您提供有关锁定类型以及锁定对象的详细信息。

关于sql-server - delete with join 是否锁定*未*被删除的表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14865083/

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