【发布时间】:2017-11-05 10:31:31
【问题描述】:
我正在尝试使用触发器在 2 个不同数据库的 2 个表中同步数量字段。
我找到了一些示例并尝试使它们适应此要求,为什么不成功并显示此错误...
#1442- 无法更新存储函数/触发器中的表“oc_product”,因为它已被调用此存储的语句使用 函数/触发器。
...尝试执行此查询时:
UPDATE `db`.`oc_product` SET `quantity` = '220' WHERE `oc_product`.`product_id` = 50
db2 的触发器,表 stock:
DROP TRIGGER IF EXISTS t1_ai &&
CREATE TRIGGER t1_ai BEFORE UPDATE ON stock FOR EACH ROW BEGIN
IF @__disable_trigger_t1t2 = 1 THEN
SET @__disable_trigger_t1t2 = NULL;
ELSE
SET @__disable_trigger_t1t2 = 1;
-- trigger logic goes in here
UPDATE `db1`.oc_product
SET `quantity` = NEW.quantity
WHERE SKU = NEW.SKU;
END IF;
END &&
db1 的触发器,表 oc_product:
DROP TRIGGER IF EXISTS t2_ai &&
CREATE TRIGGER t2_ai BEFORE UPDATE ON oc_product FOR EACH ROW BEGIN
IF @__disable_trigger_t1t2 = 1 THEN
SET @__disable_trigger_t1t2 = NULL;
ELSE
SET @__disable_trigger_t1t2 = 1;
-- trigger logic goes in here
UPDATE `db2`.stock
SET `quantity` = NEW.quantity
WHERE SKU = NEW.SKU;
END IF;
END &&
知道如何解决这个错误吗?
额外信息: 如果我对 db2 上的 stock 表执行此查询:
UPDATE `db2`.`stock` SET `quantity` = '220' WHERE `stock`.`id` = 7631;
然后触发器 t1_ai 完成工作,反之则不行
【问题讨论】:
-
我不这么认为,为什么另一个触发器不工作?是什么原因?
-
您有一个触发 anotehr 的触发器,该触发器会更新您不允许修改的表之一。在这种情况下,表名为 stock
-
实现这一点的最佳方法是什么?我实现了这些触发器来更新两者,你有什么建议?
标签: mysql triggers synchronization