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的锁,等待..
俩进程进入互相等待对方资源的状态,所以死锁.
------解决方案--------------------