我想创造一个 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
有人能帮我找出错误吗?
谢谢您!!
1条答案
按热度按时间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列中。当你做类似于
它的内容是:在旧数据库中,表t,列c。