我对SQL很陌生。我正在使用SQL Server 2008 R2。我有以下问题;有没有办法检查事务授予的锁
(1)
事务已启动,但尚未达到其提交点。
UPDATE Student
SET subject = 'Technology'
WHERE subjectCode = 'tech';
当该正在执行什么类型的锁定的由具有全表/行?
(2)
是否有一种方式来获得由事务持有的锁?
我对SQL很陌生。我正在使用SQL Server 2008 R2。我有以下问题;有没有办法检查事务授予的锁
(1)
事务已启动,但尚未达到其提交点。
UPDATE Student
SET subject = 'Technology'
WHERE subjectCode = 'tech';
当该正在执行什么类型的锁定的由具有全表/行?
(2)
是否有一种方式来获得由事务持有的锁?
答案(1):
如果交易没有被阻止任何预先存在的锁,然后在Student
表中的所有行与subjectCode = 'tech'
现在对他们有(X)
(独家)锁。
在页面和表级别上,将会有(IX)
(intent exclusive)锁定 - 表明在“层次结构”(表格 - >页面 - >行)的更下方的某处存在排它锁。
如果您要更新超过5000行,然后锁升级将被踢入,并且SQL Server已使用单个表级别排他锁来取代5000多个单独的行级排他锁。这意味着基本上没有人能够对这张桌子做任何事情。
对于你的问题(2) - see the answers to this other SO question。
问题1的好解释。谢谢。 – 2013-04-24 05:56:22
参见http://dba.stackexchange.com/q/12810/5203。 – GSerg 2013-04-23 20:20:04