使用连接删除是否锁定了* *被删除的表?

时间:2013-02-13 23:14:33

标签: sql-server tsql sql-server-2008-r2

如果我的查询如下:

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

是否TableB锁定了从TableA删除所有记录所需的时间?如果是,是表级,页级还是行级锁定?

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

1 个答案:

答案 0 :(得分:3)

最有可能的是,共享锁将发布到TableB,这些锁会发出相同类型的锁,就像您运行SELECT一样。但是,锁定的具体类型以及锁定的持续时间将根据您的具体情况而有所不同,因此您应执行以下验证以获得问题的准确答案:

首先,SET TRANSACTION ISOLATION LEVEL REPEATABLE READ。这将导致共享锁被保留直到事务完成,而不是仅在读取期间保持,就像在READ COMMITTED下一样。

我们正在提高隔离级别,以便我们可以检查以后发出的锁...但正因为如此,您可能不希望在生产系统上执行此测试

接下来,BEGIN TRANSACTION

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

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

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

使用SELECT的{​​{1}}的结果将为您提供有关锁定类型以及拍摄对象的详细信息。