据我所知,一个SELECT语句将在它将返回的行上放置一个共享锁。 当SELECT正在运行时,如果UPDATE语句出现并需要获取意向排他锁,则该UPDATE语句将需要等待,直到SELECT语句释放其共享锁。
我试图通过执行一个BEGIN TRAN,然后运行一个SELECT,而不是COMMITing,然后在另一个会话上完全相同的行上运行更新来testing此SELECT共享锁的事情。 更新工作正常 – 没有锁,没有等待。 所以这不能成为模拟locking意向排他锁的共享锁吗? 你可以给我一个场景,我可以创build一个强制更新等待一个select的锁吗?
我正在通过链接服务器使用SQL Server 2000和2005:表是2005实例,select在2000年,更新从2005年开始执行。所有这些都在SSMS 2005中进行。
您可以将隔离级别从READ COMMITTED更改为REPEATABLE READ或SERIALIZABLE,以强制阻止。