我目前有以下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.
謝謝。似乎也不可能用相互更新觸發器來做到這一點。我目前正在研究如何使用'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