关于sqlserver存储过程事务锁的问题

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

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式