◆问题描述
想在检索一批数据的同时,加上更新锁,以禁止其他端末的更新。不是表级,页级加锁,自然而然想到了行级加锁。
但是,发现检索出来的记录以外的数据也被加上锁了。
想在检索一批数据的同时,加上更新锁,以禁止其他端末的更新。不是表级,页级加锁,自然而然想到了行级加锁。
但是,发现检索出来的记录以外的数据也被加上锁了。
◆问题分析
tabale
----------------------------------------------------
tabale
----------------------------------------------------
字段 C1(key1) C2( key2) C3 ............
c1001 c2003 c3001
c1002 c2002 c3001
c1003 c2001 c3001
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)
set lock_timeout 0
begin transaction
select * from TEST with (index=IX_TEST,rowlock,updlock)
CASE①
用户A
where C1 ='c1003'
结果-- c1003 c2001 c3001 (Locked)
用户A
where C1 ='c1003'
结果-- c1003 c2001 c3001 (Locked)
用户B
where C1 ='c1003'
结果-- 已超过了锁请求超时时段。 和预想的一样
where C1 ='c1003'
结果-- 已超过了锁请求超时时段。 和预想的一样
where C1 ='c100