SQL SERVER 行加锁问题

本文探讨了在SQL Server中使用行级锁定时遇到的问题。通过两个CASE分析,揭示了行级锁定与索引顺序的紧密联系。当WHERE条件不包含索引字段时,可能导致意外的锁定行为。总结指出,在使用行级锁时,WHERE条件应明确指定索引中的位置以避免不必要的锁冲突。
摘要由CSDN通过智能技术生成
◆问题描述
想在检索一批数据的同时,加上更新锁,以禁止其他端末的更新。不是表级,页级加锁,自然而然想到了行级加锁。
但是,发现检索出来的记录以外的数据也被加上锁了。
◆问题分析
tabale
----------------------------------------------------
字段 C1(key1)  C2( key2)   C3  ............
       c1001          c2003         c3001  
       c1002          c2002         c3001
       c1003          c2001         c3001
索引 IX_TEST  (C2,C1)
----------------------------------------------------
用户A,用户B,公用部分SQL
set lock_timeout 0
begin transaction
select * from TEST with (index=IX_TEST,rowlock,updlock)
CASE①
用户A
where  C1 ='c1003'
结果-- c1003          c2001         c3001 (Locked)
用户B
where  C1 ='c1003'
结果-- 已超过了锁请求超时时段。 和预想的一样
where  C1 ='c100
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值