Mysql 递归更新触发器工作不正常

Mysql 递归更新触发器工作不正常,mysql,sql,triggers,Mysql,Sql,Triggers,我已经创建了两个表abc和xyz。两个表的数据如下所示 表abc: +------+-------+--------+ | roll | name | status | +------+-------+--------+ | 1 | john | I | | 1 | ken | I | | 1 | abel | I | | 2 | aston | I | | 2 | ron | I | +------+

我已经创建了两个表
abc
xyz
。两个表的数据如下所示

表abc:

+------+-------+--------+
| roll | name  | status |
+------+-------+--------+
| 1    | john  | I      |
| 1    | ken   | I      |
| 1    | abel  | I      |
| 2    | aston | I      |
| 2    | ron   | I      |
+------+-------+--------+
+-------+-------+---------+
| roll1 | name1 | status1 |
+-------+-------+---------+
| 1     | john  | I       |
| 1     | ken   | I       |
| 1     | abel  | I       |
| 2     | aston | I       |
| 2     | ron   | I       |
+-------+-------+---------+
表xyz:

+------+-------+--------+
| roll | name  | status |
+------+-------+--------+
| 1    | john  | I      |
| 1    | ken   | I      |
| 1    | abel  | I      |
| 2    | aston | I      |
| 2    | ron   | I      |
+------+-------+--------+
+-------+-------+---------+
| roll1 | name1 | status1 |
+-------+-------+---------+
| 1     | john  | I       |
| 1     | ken   | I       |
| 1     | abel  | I       |
| 2     | aston | I       |
| 2     | ron   | I       |
+-------+-------+---------+
两个表中的状态都可以更新为
'D'
'E'
。假设在表
abc
中,如果
John
的状态变为
'D'
,那么我需要取
John的
roll(即
1
),并将
xyz
中的所有状态更新为
'D'
,其中
roll1=1

类似地,假设
xyz
表中
ron
的状态更改为
'E'
,则
aston
ron
的状态应为
'E'

这需要使用更新触发器来实现。我为这两个表创建了2个更新触发器。使用的触发器是

DELIMITER $$

DROP TRIGGER /*!50032 IF EXISTS */ `test2`.`abc_trigg`$$

create trigger `test2`.`abc_trigg` BEFORE UPDATE on `test2`.`abc`   
for each row BEGIN  
  IF @__disable_trigger is null THEN  
    SET @__disable_trigger = 1;  
    if new.status = 'D' then  
      update xyz set status1='D' where roll1 = new.roll;      
    elseif new.status = 'E' then   
      update xyz set status1='E' where roll1 = new.roll;  
    end if;  
  end if;  
end;  
$$  

DELIMITER ;


但是这些触发器不正确,我没有得到预期的输出。请指导我解决问题并帮助我获得相关输出?

您没有说明什么不正确,什么错误,但您似乎有很多逻辑代码-为什么不更新xyz set status1=new.status,其中roll 1=new.roll
?更新后执行
。您好,谢谢您的回复。我无法使用更新xyz set status1=new.status,其中roll1=new.roll。我使用if条件的原因是,每当我更新status='D',然后将第二个表中对应ID的状态更新为'D';“E”也一样。对于任何其他字母表,无需执行任何操作。根据触发器,这不会发生。另外,当我更新第二个表时,它的更新触发器触发并导致无限循环条件,为了避免这种情况,我最初使用了变量。但是这也没什么帮助。你能建议我现在更了解这个问题吗。也许可以尝试在更新后将这两个触发器更改为
,并添加
和status!='D'
到每个更新(在需要时将
D
更改为
E
)。同时删除
禁用\u触发器
,因为它没有帮助。此外,请参阅此帖子:此外,此链接可能会有所帮助。请注意,带有全局变量标志(disable_trigger)的技术需要在嵌入式更新的任一侧打开和关闭。