有关数据库加锁的问题
请问下HOLDLOCK和UPDLOCK使用上具体有什么差别,看资料上是不是说:假如我用了HOLDLOCK锁定了一个表,则此时该select事务要是还没结束时,其它事务是不能修改该表任何行的数据?
ms-sql加锁时一定要调用select语句吗,就是说我update或insert或delete语句能不能加锁?
还有就是行锁、表锁、页锁跟HOLDLOCK或UPDLOCK一起使用的时候好像达不到效果,比如:
第一个程序执行了一下sql语句:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
begin tran
SELECT * from [table1] with (ROWLOCK,UPDLOCK) where id=1
waitfor delay '00:00:30'
commit tran
第二个程序执行了一下sql语句:
begin tran
update [table1] set A='aa' where id=2
commit tran
但是此时当第一个执行且在等待的30秒内又执行了第二个,但是第二个并不会马上执行,需要等到第一个执行完才执行,
请教下,按找到的资料来看,不是说(ROWLOCK,UPDLOCK)表示行级的更新锁吗,为啥实际上用起来还是变成了表级的更新锁了?直接(ROWLOCK)倒是可以,我就是想问下那几个锁可以搭配使用?