私は現在、次のMySQLクエリを持っています。これは別のクエリではなく、トリガに含めることにします。接合可能である2つの表にクエリ更新データ:INSERTトリガーから2つのテーブルの結合された行を更新する
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
に持つべきです(SHOULD)。 testing_names
に行が挿入された後、次に更新クエリを実行すると、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.
ありがとうございました。相互更新トリガでもそれを行うことはできないようです。私は現在、 'testing_names' BEFORE INSERTトリガーを使って' testing_names'を調整する方法を探しています。その後、AFTER INSERTを使って 'purchase_names'を調整します。これは、私が信じている 'purchase_names' AFTER UPDATEトリガーの必要性を否定するはずです。 – SimonMayer
さらに詳しい情報として、 'testing_names'のBEFORE INSERTトリガーの一部として、BEGIN ... ENDの中の' purchase_names'テーブルでSELECTとUPDATEステートメントを実行することで、すべてを行うことができました。 – SimonMayer