sql触发器更新另一个表中的旧值

5anewei6  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(423)

我想创造一个 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 有人能帮我找出错误吗?
谢谢您!!

dl5txlt9

dl5txlt91#

老普拉巴·伊凡·玛格·阿提库洛斯·皮 OLD 是触发行的别名。你的 trigger 适用于 Prueba_Ivan ,也就是说 OLD 以及 NEW 代表你的 Prueba_Ivan 分别记录变更前和变更后。这意味着当你打算参考 mag_articulos_PI ,您需要通过 OLD.mag_articulos_PI ,因此从该表达式中删除表名。

old.ivan\u test.mag\u articulos\u it.旧的.ivan\u测试.mag\u articulos\u it

如前一节所述 OLD 是新时代的另一个自我 Prueba_Ivan 记录,您不需要它来引用 ivan_test .

进一步解释

形式的表达

a.b.c

内容如下:
在数据库a的表b的c列中。当你做类似于

OLD.t.c

它的内容是:在旧数据库中,表t,列c。

相关问题