0

我正在尝试创建一个trigger以使用相同的数据同时更新与我更新的不同table的一个。

我有两个具有相同表的不同数据库,我正在尝试同步它们,当我从一个表插入、更新或删除数据时,我想用触发器自动对另一个表执行相同的操作。

这是触发代码:

CREATE DEFINER=`Ivan_test`@`%` TRIGGER `Prueba_Ivan`.`mag_articulos_PI_AFTER_UPDATE` AFTER UPDATE ON `mag_articulos_PI` FOR EACH ROW
BEGIN
    IF OLD.Prueba_Ivan.mag_articulos_PI NOT IN (SELECT * FROM ivan_test.mag_articulos_IT) THEN
    INSERT INTO ivan_test.mag_articulos_IT 
            VALUES (new.xempresa_id, new.xarticulo_id, new.xcategoria_id, new.xvisible_web, new.xnovedad,new.xpromocion,new.ximagen_prelim,new.ximagen_amp,new.xtexto1,new.xtexto2,new.xtexto3,new.xtexto4,new.xtexto5);
    ELSE 
    UPDATE ivan_test.mag_articulos_IT SET OLD.ivan_test.mag_articulos_IT = NEW.Prueba_Ivan.mag_articulos_PI;    
    END IF;
END 

但我有这个错误: Error Code: 1109. Unknown table 'OLD.Prueba_Ivan' in IN/ALL/ANY subquery

有人可以帮我找出错误吗?

谢谢!!

4

1 回答 1

0

OLD.Prueba_Ivan.mag_articulos_PI

OLD是触发行的别名。您trigger适用于Prueba_Ivan,这意味着OLDNEW分别代表您Prueba_Ivan在更改之前和之后的记录。这意味着当您打算引用 时mag_articulos_PI,您需要通过 来完成OLD.mag_articulos_PI,因此请从该表达式中删除表名。

OLD.ivan_test.mag_articulos_IT

如上一节所述,这里OLD是更新记录的另一个自我Prueba_Ivan,您不需要它来引用ivan_test.

进一步说明

形式的表达

a.b.c

内容如下:

在数据库 a,表 b,列 c。当你做类似的事情时

OLD.t.c

它显示:在 OLD 数据库中,表 t,列 c。

于 2020-07-21T10:31:25.410 回答