关于一个锁的概念。

jack15850798154 2010-06-03 09:39:37
表中我操作这行记录,别人不能同时操作这行,但可以操作别的行记录,请老大写出一个模拟的实例看看。谢谢。
我这样写有错误吗?
update a with(rowlock) set fname='kkkkk' where fvalue=2000
set lock_timeout 10000 --设置锁的时间;

a 为表名;

fname,fvalue 为表中字段;

还请各位指点。在此谢过。
...全文
78 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jack15850798154 2010-06-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 fredrickhu 的回复:]
SQL code
SQL code
1 如何锁一个表的某一行

A 连接中执行

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ

begin tran

select * from tablename with (rowlock) where id=3

waitfor delay '00:00:05'

commit……
[/Quote]
Fjj,能帮我到这里看看?http://topic.csdn.net/u/20100603/10/9ae23bcc-df3a-4bed-8365-33cb43b31d5e.html。我测试好像有点问题。还请多多指教。谢谢了。
jwdream2008 2010-06-03
  • 打赏
  • 举报
回复
学习!
--小F-- 2010-06-03
  • 打赏
  • 举报
回复
SQL code 
1 如何锁一个表的某一行

A 连接中执行

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ

begin tran

select * from tablename with (rowlock) where id=3

waitfor delay '00:00:05'

commit tran

B连接中如果执行

update tablename set colname='10' where id=3 --则要等待5秒

update tablename set colname='10' where id<>3 --可立即执行

2 锁定数据库的一个表

SELECT * FROM table WITH (HOLDLOCK)


注意: 锁定数据库的一个表的区别

SELECT * FROM table WITH (HOLDLOCK)
其他事务可以读取表,但不能更新删除

SELECT * FROM table WITH (TABLOCKX)
其他事务不能读取表,更新和删除



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/fredrickhu/archive/2009/09/21/4574867.aspx
jack15850798154 2010-06-03
  • 打赏
  • 举报
回复
谢谢各位。。
hai2003xp 2010-06-03
  • 打赏
  • 举报
回复
那样写没问题
你还可以加事务处理

........
...
begin tran
update a set fname='kkkkk' where fvalue=2000
if @@error<>0 goto err
commit tran
return

err:
rollback tran


xman_78tom 2010-06-03
  • 打赏
  • 举报
回复
不用加 with (rowlock) 锁提示,update 语句一般都使用行锁。SQL SERVER 会自动决定锁的颗粒度,并且在满足一定条件下自动将行锁升级为表锁。

set lock_timeout 10000 语句只会修改当前会话的锁超时时间。如果要让所有的会话都遵循此超时设置,应该在每一个会话中设置 lock_timeout 选项。
永生天地 2010-06-03
  • 打赏
  • 举报
回复
帮顶。

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧