关于sqlserver存储过程事务锁的问题
sqlserver在一个事务的执行过程中,锁是不是一直存在,比如一个过程中begintrybegintranselect....fromtable1updatetable...
sql server在一个事务的执行过程中,锁是不是一直存在,比如一个过程中
begin try
begin tran
select ....from table1
update table1 set ...
commit tran
end try
中间有两个操作,锁是不是一直存在的 ,如果是多线程并发调用这个过程,会不会有影响 展开
begin try
begin tran
select ....from table1
update table1 set ...
commit tran
end try
中间有两个操作,锁是不是一直存在的 ,如果是多线程并发调用这个过程,会不会有影响 展开
3个回答
展开全部
就你上面的事例而言,select的共享锁性质是得到结果即释放,不会在事务中保留
而update所用到的U锁及其进一步的X锁则需要持续到事务的结束
如果是多线程的程序的话,在select与update处都可能会出现锁等待,这要根据实际操作中数据是否冲突来看
而update所用到的U锁及其进一步的X锁则需要持续到事务的结束
如果是多线程的程序的话,在select与update处都可能会出现锁等待,这要根据实际操作中数据是否冲突来看
追问
就是说在select的操作结束后,锁就会释放,然后UPDATE的时候会重新加锁是吧。那如果正好select执行结束释放锁,另一个线程也开始调用这个过程,那这张表是否还是处于被锁状态
追答
select是共享锁,顾名思义,通常情况下,任何查询任何事务中的select是都不会冲突的
与共享锁冲突的是更新时的X锁,X锁与其他全部锁都冲突
展开全部
commit tran 一执行锁就释放了,但如果你是把这段程序放到循环中做,锁释放的时间会很短,别的进程可能竞争不进去。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
根据情况在select的时候可以使用nolock或者readpast参数
例如:select * from tabname(nolock)
例如:select * from tabname(nolock)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询