如何创建互连的mysql触发器

时间:2017-09-20 08:13:20

标签: mysql triggers

这里有两个名为 usermaster userdetails 的不同表格。我想要做的是,在插入后在表usermaster上创建一个触发器,在这个触发器中,我想更新同一个表而不是另一行。

 BEGIN
    Declare UserCode varchar(50);
    Declare BasePlan,CurrentPlan decimal(10,4);
    Declare BaseDate,CurrentDate datetime;

    Set UserCode=Trim(new.us_usercode);
    Select ap.ap_planCost,us.us_edtm into BasePlan,BaseDate
from us_uxusermaster us inner join cm_clientmaster cm inner join pl_planlist pl inner join ap_affiliateplan ap 
on us.us_usercode=cm.cm_affiliatecode and pl.pl_id=us.us_planListId and pl.pl_ap_id=ap.ap_id where cm.cm_usercode=UserCode;

    Select ap.ap_planCost,us.us_edtm into CurrentPlan,CurrentDate 
from us_uxusermaster us  inner join pl_planlist pl inner join ap_affiliateplan ap on pl.pl_id=us.us_planListId and pl.pl_ap_id=ap.ap_id where us.us_usercode=UserCode;



    if(CurrentPlan>=BasePlan)
    Then
    If(DateDiff(BaseDate,CurrentDate)<=30)
    Then
    Update us_uxusermaster set us_eby='update' where us_usercode=(Select cm.cm_affiliatecode from cm_clientmaster cm where cm.cm_usercode=UserCode);
    End If;
    End If;

    END

但每次我这样做都会给我一个错误,我无法使用同一个表进行更新。

所以我在插入 usermaster 后首先创建了两个触发器,在此触发器中,它更新表 userdetails 以及另外一个更新表格 userdetails 后触发更新表 usermaster

这种机制是正确的还是存在更好的任何其他解决方案。

1 个答案:

答案 0 :(得分:1)

您无法在触发器中修改同一个表格,这是documentation所说的内容:

  

存储的函数或触发器无法修改已经存在的表   被调用的语句用于(读或写)   功能或触发器。

此外,您似乎在usermasteruserdetails表之间存在循环依赖(通过触发器),我强烈建议您远离这些表。另一种方法是在事务中执行这些更新(来自应用程序)。