sql事务

lawbc 2008-12-23 11:23:55
select name from tableA where name='aa'
我在读取后能不能锁住,不让别人再读取的,因为我读取后要执行update语句

或者我在update的时候发现已经被别人修改了,我就不能再修改了,update失败,

...全文
145 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
fcuandy 2008-12-23
  • 打赏
  • 举报
回复
猜你是要读取后在前台程序中操作,然后再update?

如果这种情况,不适用用锁,而是自己设置标志列。
中国风 2008-12-23
  • 打赏
  • 举报
回复
是鎖記錄還是鎖表
nalnait 2008-12-23
  • 打赏
  • 举报
回复
可以
dawugui 2008-12-23
  • 打赏
  • 举报
回复
[Quote=引用楼主 liubiaocai 的帖子:]
select name from tableA where name='aa'
我在读取后能不能锁住,不让别人再读取的,因为我读取后要执行update语句

或者我在update的时候发现已经被别人修改了,我就不能再修改了,update失败,
[/Quote]
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)
其他事务不能读取表,更新和删除
水族杰纶 2008-12-23
  • 打赏
  • 举报
回复
declare @err int 
set @err=0
begin tran
update tb set id=10 where id=2
set @err=@err+abs(@@error)
if @err=0
commit
else
rollback

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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