我目前有以下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.
答案 0 :(得分:1)
不幸的是,表上的触发器无法更新同一个表。
在存储的函数或触发器中,不允许通过调用函数或触发器的语句修改已经使用(用于读取或写入)的表。
相反,您可以通过让testing_names上的触发器更新purchase_names并在purchase_names上另一个触发器更新testing_names来完成更新。
答案 1 :(得分:0)
尝试使用之前插入