This topic has been archived. It cannot be replied.
-
工作学习 / IT技术讨论 / 请问懂SQL SERVER大侠,怎样在版本7中锁住一行记录?当一个程序修改该行记录时,不许其他程序修改或读(SELECT)该行,直到修改结束,只看到下面例子,不理解
SELECT * FROM tablename WITH (UPDLOCK ROWLOCK) WHERE condition
-youngerbrother(http:fun.to/hongwei);
2003-2-6
{157}
(#1024209@0)
-
是不是 SQL SERVER 默认的READ COMMITED Isolation Level already guarantee that no other user can read or update one row when someone is updating this same row
-youngerbrother(http:fun.to/hongwei);
2003-2-6
(#1024228@0)
-
你问的问题不是一句话可以说清楚的。进来看看。1。如果你的modification 是insert,sql server 会产生 exclusive lock在被影响的page,extent,table or database上,也就是在你的modification结束之前别的user不能读也不能写。
2。如果你的modification 是带条件的update和delete, sql server会产生update lock, 也就是在搜索阶段可以读不能写,在modify阶段不能读也不能写。
3。相应的lock影响的范围by default由sql server 决定。可能是row,可能是page,可能是整个table或database,如果你想限定只lock住特定的row,你就必须加上locking hint.比如rowlock 或updlock.
-yangn(Raymond);
2003-2-6
{482}
(#1024243@0)
-
很感谢详细解释.我是带条件的UPDATE, 但希望在搜索时就不允许其他用户读.是不是这样写:Update tablename WITH (UPDLOCK ROWLOCK) set colname=value WHERE condition
单句的 Transaction.
-youngerbrother(http:fun.to/hongwei);
2003-2-6
{94}
(#1024255@0)
-
OK. but maybe (xlock rowlock)is more suitable for your circumstance.
-yangn(Raymond);
2003-2-6
(#1024270@0)
-
thank u
-youngerbrother(http:fun.to/hongwei);
2003-2-6
(#1024294@0)
-
u r welcome.
-yangn(Raymond);
2003-2-6
(#1024321@0)