34,589
社区成员
发帖
与我相关
我的任务
分享
里面的逻辑确实挺复杂。
1.对一张表有一个先查询后更新(update)部分记录的事务,该事务可能被并行调用,但是要求该事务是互斥的,即一旦外部有一个进程调用该事务,则紧接着另一进程调用该事务时,必须等待前面进程调用的该事务执行完毕后才能继续。
=======
第一点,要实现资源独享,当你update时做需要锁表处理。
2.有另外的进程会在上述事务运行时查询或插入数据,该操作不必与上述事务操作互斥
=====
查询肯定肯定没问题,锁定过程中insert能不能操作呢?....
3.第1个问题中提及的事务操作需要返回一个记录集,也就是说期望它返回一组记录。
======
返回结果集应该没问题的,可以用临时表来处理。
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)
其他事务不能读取表,更新和删除