我对SQL很新。我正在使用SQL Server 2008 R2。我有以下问题;
(1)
事务已启动但未达到其提交点。
UPDATE Student
SET subject = 'Technology'
WHERE subjectCode = 'tech';
执行此操作时,哪种类型的锁具有完整的表/行?
(2)
是否有办法获取交易所持有的锁?
答案 0 :(得分:2)
答案(1):
如果事务未被任何预先存在的锁阻止,那么Student
表中带有subjectCode = 'tech'
的所有行现在都将具有(X)
(独占)锁它们。
在页面和表级别上,将有(IX)
(intent exclusive)锁定 - 表示在“层次结构”(table - > page - > row)中的某个地方有独占锁定的地方。
如果您要更新超过5000行,那么锁定升级将会启动,并且SQL Server已使用单个表级别的独占锁替换了5000多个单独的行级别独占锁。这意味着基本上没有人可以对该表做任何事情。
对于你的问题(2) - see the answers to this other SO question。