读书人

sql 死锁有关问题求解释

发布时间: 2012-06-01 16:46:36 作者: rapoo

sql 死锁问题求解释
增设table2(D,E)
D E
d1 e1
d2 e2
在第一个连接中执行以下语句
begin tran
update table1
set A= 'aa '
where B= 'b2 '
waitfor delay '00:00:30 '
update table2
set D= 'd5 '
where E= 'e1 '
commit tran

在第二个连接中执行以下语句
begin tran
update table2
set D= 'd5 '
where E= 'e1 '
waitfor delay '00:00:10 '
update table1
set A= 'aa '
where B= 'b2 '
commit tran

同时执行,系统会检测出死锁,并中止进程?
为什么发生死锁,请高手解释,谢谢!

[解决办法]
两个事务中都有update table1
[解决办法]
两个事务都同时请求update同一个表操作,造成相互等待对方释放资源
[解决办法]
update必须等待第一个事务释放共享锁转为排它锁后才能执行.
[解决办法]
连线1,持有table1的锁,申请table2的锁,等待..

连线2,持有table2的锁,申请table1的锁,等待..

俩进程进入互相等待对方资源的状态,所以死锁.
[解决办法]

探讨
引用:
两个事务都同时请求update同一个表操作,造成相互等待对方释放资源


同时update 同一个表的操作这种情况会有吧?
如何改进这种死锁的问题?

读书人网 >SQL Server

热点推荐