防止死锁

来源:互联网 发布:手机支持什么网络 编辑:程序博客网 时间:2024/04/30 11:07

1.按同一顺序访问对象
如下例中所示两个事务处理如果同时执行会导致死锁发生。
第一个事务:


 1Use Test
 2Go
 3
 4    --第一个会话
 5
 6    Begin Tran
 7
 8    Update DealLockTest_1
 9        Set Name=N'test1'
10        Where ID >0
11
12    /*这里的Waitfor等待,是为了容易获取死锁的发生*/       
13    Waitfor Delay '00:00:05'
14
15    Update DealLockTest_2
16        Set Name=N'test2'
17        Where ID >0       
18
19    Commit Tran
20
21Go

第二个事务

 1Use Test
 2Go
 3    --第二个会话
 4
 5    Begin Tran
 6
 7    Update DealLockTest_2
 8        Set Name=N'test1'
 9        Where ID >0
10
11    /*这里的Waitfor等待,是为了容易获取死锁的发生*/               
12    Waitfor Delay '00:00:05'           
13
14    Update DealLockTest_1
15        Set Name=N'test2'
16        Where ID >0       
17
18    Commit Tran

2.避免事务中的用户交互
3.保持事务简短并处于一个批处理中
4.使用较低的隔离级别
5.使用基于行版本控制的隔离级别
6.使用绑定连接