【发布时间】:2020-11-10 15:40:54
【问题描述】:
我正在尝试创建一个trigger,以同时使用相同的数据更新与我更新的table不同的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
谁能帮我找出错误?
谢谢!!
【问题讨论】:
-
表定义在哪里?
OLD.Prueba_Ivan.mag_articulos_PI是对什么的引用? -
您可以访问 OLD。值,但您无法更新它们...
-
没有必要用表名来限定列 - 这是我假设你在这里尝试做的 - OLD.Prueba_Ivan.mag_articulos_PI 如果你这样做了,我猜想和 sql 中的其他所有内容一样表名会排在第一位。此外,没有证据表明您正在设置分隔符或任何理解方式,如果您确实需要设置它们,因为您没有告诉我们您是否在工作台中使用向导。
-
@Scratte OLD.Prueba_Ivan.mag_articulos_PI 在更新前引用数据库 Prueba_ivan,表 mag_articulos_PI。我正在尝试检查要更新的行是否在另一个表中,如果不是,我添加它。
-
我认为您不能以这种方式引用数据库。我认为 MySQL 期望旧值是触发器的表
mag_articulos_PI上的列。除了表定义之外,如果您用文字解释您正在尝试做什么,并且如果您有多个数据库,如果您尝试更新这些数据库中的数据,这将非常有帮助。
标签: mysql sql triggers sql-update mysql-workbench