触发器造成死锁问题
表A有以下列:divid, d_xmid, d_ypx, d_xpx,
表B有以下列:divid, projectid d_xmpx1
其中:divid=divid,xmid=projectid
现在有如下业务要求:如果A表的d_xpx发生update,就把更新的数值触发到B表的d_xmpx1。同时又把这个数值也触发到A表的d_ypx。
我现在的实现方式:在A表建一个触发器:
create or replace trigger A_update
after UPDATE OF d_xpx
on A
for each row
begin
update B set d_xmpx1 =:new.d_xpx where divid=:old.divid and :old.d_xmid=projectid;
end;
同时又在B表建一个触发器:
create or replace trigger B_update
after update of d_xmpx1
on B
for each row
declare
pragma autonomous_transaction;
begin
update A set d_ypx=:new.d_xmpx1;
end;
出现的问题:只要执行A表的update,就会提示死锁。有什么解决办法吗
表B有以下列:divid, projectid d_xmpx1
其中:divid=divid,xmid=projectid
现在有如下业务要求:如果A表的d_xpx发生update,就把更新的数值触发到B表的d_xmpx1。同时又把这个数值也触发到A表的d_ypx。
我现在的实现方式:在A表建一个触发器:
create or replace trigger A_update
after UPDATE OF d_xpx
on A
for each row
begin
update B set d_xmpx1 =:new.d_xpx where divid=:old.divid and :old.d_xmid=projectid;
end;
同时又在B表建一个触发器:
create or replace trigger B_update
after update of d_xmpx1
on B
for each row
declare
pragma autonomous_transaction;
begin
update A set d_ypx=:new.d_xmpx1;
end;
出现的问题:只要执行A表的update,就会提示死锁。有什么解决办法吗
...全文
相关推荐
oracle触发器
自己在实际工作中应用触发器,所遇到的问题级触决办法,更新再更新,更新再查询.
SQLServer触发器并发死锁问题分析及解决方案
在SQL Server中,触发器(Triggers)是一种特殊的存储过程,当特定的事件(如 INSERT、UPDATE、DELETE)发生时自动执行。然而,触发器在并发环境下可能会遇到一些问题,特别是与性能和数据一致性相关的问题。以下是一些常见的并发问题及其解决方法。
SQLServler自动杀死死锁进程
SQLServler自动杀死死锁进程SQL,直接在SqlServer中执行即可
MSSQL2008R2 触发器问题代码
MSSQL2008R2 触发器问题代码
有效关闭Oracle死锁进程,和释放状态为killed的session
有效关闭Oracle死锁进程,和释放状态为killed的session


基础和管理
