gpt4 book ai didi

mysql - 如何创建互连的mysql触发器

转载 作者:行者123 更新时间:2023-11-28 23:09:40 29 4
gpt4 key购买 nike

这里我有两个不同的表,分别命名为 usermasteruserdetails。我想要做的是,在插入后在表 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

这种机制是否正确,或者是否存在其他更好的解决方案。

最佳答案

您不能在触发器中修改同一个表,这就是 documentation 的内容说:

A stored function or trigger cannot modify a table that is already being used (for reading or writing) by the statement that invoked the function or trigger.

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

关于mysql - 如何创建互连的mysql触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46316717/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com