--查询分析器
--窗口1
BEGIN TRAN
-- 延迟10秒,模拟并发访问.
WAITFOR DELAY '000:00:10'
SELECT [OrderSerial]
,[ProductID]
FROM [TestDB].[dbo].[Orders] WITH(TABLOCK) where OrderSerial = 'EX201001281'
WAITFOR DELAY '000:00:05'
COMMIT
--SELECT @@TRANCOUNT
--窗口2
SELECT [OrderSerial]
,[ProductID]
FROM [TestDB].[dbo].[Orders] where OrderSerial = 'EX201001281'
--结果:先执行1再执行2,表是不会被锁住的,2可以查询(默认是共享锁TABLOCK)
-- 如果1变成WITH(TABLOCKX)排他在其提交之前,表会被锁住,2被阻塞。
-- 注:前10秒2可以正常查询,后5秒会被阻塞
-- 自动提交模式变成显示模式,即要显示提交后解锁

本文通过一个具体的SQL查询示例,详细解析了SQL中不同类型的锁(共享锁与排他锁)如何影响并发访问中的数据读写操作。演示了使用TABLOCK和TABLOCKX提示时,对表锁定及查询阻塞的影响。
1133

被折叠的 条评论
为什么被折叠?



