明明写的是更新锁如何变成排斥锁了
明明写的是更新锁怎么变成排斥锁了?
在查询分析器执行后, 再打开一个新连接, 发现select 查询语句也卡住了.
用企业管理器查看当前锁状态, 发现是 X模式的 排斥锁.
我写的有什么问题吗
sql server 2000的数据库
------解决方案--------------------
更新当然要排他
------解决方案--------------------
- SQL code
begin tran select * from a with (updlock, tablock, holdlock) where t1=3 waitfor delay '00:00:18' commit tran
在查询分析器执行后, 再打开一个新连接, 发现select 查询语句也卡住了.
用企业管理器查看当前锁状态, 发现是 X模式的 排斥锁.
我写的有什么问题吗
sql server 2000的数据库
------解决方案--------------------
更新当然要排他
------解决方案--------------------
- SQL code
友情帮顶.蹭分
------解决方案--------------------
更新就是X或IX锁!
------解决方案--------------------
tablock锁定整个表
updlock更新锁,本来允许其他共享锁的,但是由于表所存在,实际就不再允许其他的共享锁了
holdlock这是个保持所的概念,就是多有的锁保持到事务结束
这三个组合,系统应该自动升级为拍他的表锁,事务结束前这个表不允许其他任何操作。
------解决方案--------------------
要先申请到排他(IX锁和X锁)才能进行更新(U锁)的呀.
------解决方案--------------------
再打开一个新连接, 发现select 查询语句也卡住了.
另一个连接用with(nolock)查询试试
------解决方案--------------------
看看这个 :
http://blog.****.net/arrow_gx/archive/2009/03/19/4004938.aspx
------解决方案--------------------
你不是有updlock这个么。。。那么就会有X或IX
------解决方案--------------------
------解决方案--------------------
"当使用更新锁的时候, 其他线程的事务应该也可以获得共享锁来进行读取操作的"
--> 不是这样的吧大哥,别尽信书(或者理解不当),测试一下就知道了.
------解决方案--------------------
TABLOCKX:指定在表上使用排它锁,这个锁可以阻止其他事务读或更新这个表的数据,直到这个语句或整个事务结束。
楼主你不是已经用了排它了么,另一个select会在18秒后显示。
------解决方案--------------------
额。看错,楼主你这样看看!
- SQL code
select * from a with (updlock, tablock, holdlock) where t1=3 exec sp_lock select @@spid waitfor delay '00:00:02'
------解决方案--------------------
留名~学习
------解决方案--------------------