首页 新闻 会员 周边

事务真高手进

0
[已解决问题] 解决于 2012-11-21 22:07

第一个用户进程中:

begin tran
update dbo.BankAccount set Balance=Balance+100
where BankAccountId='9555500100071120'
waitfor delay '00:00:10'
rollback tran

 

第二个用户进程中:

begin tran
select * from dbo.BankAccount where BankAccountId='9555500100071120'
rollback tran

为什么第二个用户要等待?第一个用户都没有加锁。。怎么要等待??高手回答

彬彬@科比的主页 彬彬@科比 | 初学一级 | 园豆:43
提问于:2012-11-10 21:29
< >
分享
最佳答案
0

Update不管有没有加显式的事务,他都会有排它锁,更新的时候其它查询是不能访问该被更新的记录

奖励园豆:5
Barton | 菜鸟二级 |园豆:214 | 2012-11-12 11:46

insert delete会吗?

彬彬@科比 | 园豆:43 (初学一级) | 2012-11-12 18:08
其他回答(2)
0

为了保证事务的acid,事务会自动给表加锁

飞来飞去 | 园豆:2057 (老鸟四级) | 2012-11-10 22:49

那如果第一个用户中的更新不用事务处理....假设这个过程时间很长,那么第二个用户需要等待嘛??

支持(0) 反对(0) 彬彬@科比 | 园豆:43 (初学一级) | 2012-11-11 16:51

@彬彬@科比: 

加锁就是让其他操作等待,如果不加所,其他操作就不需要等待了,但是你确定第二个用户得到脏数据没问题吗?

支持(0) 反对(0) 飞来飞去 | 园豆:2057 (老鸟四级) | 2012-11-12 10:06
0

事务默认是加一个锁的

chenping2008 | 园豆:9836 (大侠五级) | 2012-11-11 19:16
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册