从INSERT触发器更新两个表中的连接行
我目前有以下MySQL查询,我希望将其包含在触发器中,而不是作为单独的查询。在两个表中,其查询的更新数据是可接合的:从INSERT触发器更新两个表中的连接行
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 ;
但显然运行一个新的更新查询是不允许的,因为在插入一排,我得到一个错误:#1442 - Can't update table 'testing_names' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
不幸的是,表上的触发器无法更新同一个表。
Within a stored function or trigger, it is not permitted to modify a table that is already being used (for reading or writing) by the statement that invoked the function or trigger.
相反,你可能能够通过其对testing_names更新purchase_names触发器来完成您的更新和对purchase_names更新testing_names另一个触发。
尝试使用之前的插入而不是
谢谢。似乎也不可能用相互更新触发器来做到这一点。我目前正在研究如何使用'testing_names' BEFORE INSERT触发器来调整'testing_names',然后使用AFTER INSERT调整'purchase_names'。这应该否定对'purchase_names' AFTER UPDATE触发器的任何需要,我相信这会导致错误。 – SimonMayer 2012-02-16 09:47:04
有关详细信息,我可以在'testing_names'的BEFORE INSERT触发器上执行所有操作,方法是在BEGIN ... END内部的'purchase_names'表上运行SELECT和UPDATE语句。 – SimonMayer 2012-02-16 19:13:10