从INSERT触发器更新两个表中的联接行

时间:2012-02-15 12:57:29

标签: mysql triggers

我目前有以下MySQL查询,我希望将其包含在触发器中,而不是作为单独的查询。查询更新两个可连接的表中的数据:

UPDATE `testing_names` INNER JOIN `purchase_names`
  ON `testing_names`.`fulldomain` = `purchase_names`.`fulldomain`
SET
  `testing_names`.`account_id` = `purchase_names`.`account_id`,
  `purchase_names`.`purchase_status` = 1
WHERE `purchase_names`.`purchase_status` = 0

将一行(单独)插入testing_names。这行应该在purchase_names中有相应的条目。在testing_names中插入一行后,下次运行我的UPDATE查询时,它会更新testing_names.account_id并更新purchase_names.purchase_status以有效地将此任务标记为已完成。

将此作为触发器的一部分运行是有意义的,但我无法创建执行此任务的触发器。

到目前为止,我已成功创建了一个触发器:

DELIMITER $$
  CREATE TRIGGER `my_trigger` AFTER INSERT
    ON testing_names 
      FOR EACH ROW BEGIN
        UPDATE `testing_names` INNER JOIN `purchase_names`
          ON `testing_names`.`fulldomain` = `purchase_names`.`fulldomain`
        SET
          `testing_names`.`account_id` = `purchase_names`.`account_id`,
          `purchase_names`.`purchase_status` = 1
        WHERE `purchase_names`.`purchase_status` = 0;
      END$$
DELIMITER ;

但是显然不允许运行新的UPDATE查询,因为在插入行时,我收到错误:#1442 - Can't update table 'testing_names' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

2 个答案:

答案 0 :(得分:1)

不幸的是,表上的触发器无法更新同一个表。

来自MySQL documentation

  

在存储的函数或触发器中,不允许通过调用函数或触发器的语句修改已经使用(用于读取或写入)的表。

相反,您可以通过让testing_names上的触发器更新purchase_names并在purchase_names上另一个触发器更新testing_names来完成更新。

答案 1 :(得分:0)

尝试使用之前插入