【发布时间】:2016-03-13 19:43:47
【问题描述】:
我正在使用我的 SQL Server 2012 试图获得锁。根据我看到的教程,我尝试测试获取表上的排他锁,以便没有其他查询能够从中读取信息,直到事务没有结束,但它只是不工作。即使它在视频中工作,这是我在第一个窗口中的查询:
use TSQL2012
BEGIN transaction
update tele with (TABLOCKX, holdlock)
set cor = '12'
waitfor delay '00:05'
go
然后在第二个查询窗口中我只是尝试了:
select * from tele
它工作得很好,尽管理论上应该有“排他”锁来防止这种情况。为什么会这样?我也试过了
set transaction isolation level serializable on
也没有延迟,但选择总是成功的。有什么想法吗?
【问题讨论】:
-
无法重现 - 在我的情况下,在
UPDATE之后和提交/回滚该事务之前,SELECT在该表上被 阻塞(如预计) -
你打开Snapshot Isolation了吗?
-
@VladimirBaranov 没关系,他正在使用 SERIALIZABLE。
-
关闭为无法重现(目前),因为重现行为的条件未知。
标签: sql-server sql-server-2012 table-lock