我正在使用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
操作会被阻塞(正如预期的那样)。 - marc_s