读书人

明明写的是更新锁如何变成排斥锁了

发布时间: 2012-08-21 13:00:21 作者: rapoo

明明写的是更新锁怎么变成排斥锁了?

SQL code
begin tran select * from a with (updlock, tablock, holdlock)  where t1=3waitfor 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.csdn.net/arrow_gx/archive/2009/03/19/4004938.aspx
[解决办法]
你不是有updlock这个么。。。那么就会有X或IX
[解决办法]
探讨
引用:
tablock锁定整个表
updlock更新锁,本来允许其他共享锁的,但是由于表所存在,实际就不再允许其他的共享锁了
holdlock这是个保持所的概念,就是多有的锁保持到事务结束

这三个组合,系统应该自动升级为拍他的表锁,事务结束前这个表不允许其他任何操作。


对整个表使用更新锁, 应该允许其他线程执行select进行读取的吧.

[解决办法]
"当使用更新锁的时候, 其他线程的事务应该也可以获得共享锁来进行读取操作的"

--> 不是这样的吧大哥,别尽信书(或者理解不当),测试一下就知道了.
[解决办法]
TABLOCKX:指定在表上使用排它锁,这个锁可以阻止其他事务读或更新这个表的数据,直到这个语句或整个事务结束。

楼主你不是已经用了排它了么,另一个select会在18秒后显示。
[解决办法]
额。看错,楼主你这样看看!

SQL code
select * from a with (updlock, tablock, holdlock)  where t1=3exec sp_lockselect @@spidwaitfor delay '00:00:02'
[解决办法]
留名~学习
[解决办法]
探讨
更新就是X或IX锁!

读书人网 >SQL Server

热点推荐