0

2 つのフィールドを合計し、合計値で3 番目のフィールドを更新する単純なUPDATE AFTER INSERTトリガーを作成しました。DECIMAL(10,2)DECIMAL(10,2)

トリガーコードは次のとおりです。

delimiter |
CREATE TRIGGER calc_ttl_cost AFTER INSERT ON buybox_rec
  FOR EACH ROW 
  BEGIN
      UPDATE buybox_rec SET total_cost = (price+shipping_cost);
  END;
|

phpMyAdmin を使用して SQL コマンドを実行しているので、トリガーが正常に作成されていることがわかります。さらに、UPDATE buybox_rec SET total_cost = (price+shipping_cost);SQL ステートメントを単独で実行すると、期待どおりに動作します。(フィールド名の前後にバックティックを使用して同じコードも試しましたが、それが機能する場合、これをすべて書くことはありません)

問題は、新しい行を挿入すると、トリガーが機能せず、次のエラーがスローされることです。

#1442 - Can't update table 'buybox_rec' in stored function/trigger 
because it is already used by statement which invoked this stored 
unction/trigger. 

このエラーは、ある種の再帰参照または循環参照の問題のように見えますが、問題の場所/内容がわかりません。

また、ストアド プロシージャを作成し、トリガー内から呼び出して同じ結果を取得しようとしましたが、同じエラーが発生しました。

MySQL UPDATEトリガーに関連する他のSOの質問をたくさんチェックし、グーグルで調べましたが、ここにあります.

これは MySQL の範囲外ですか? 許可するのは、非常に一般的で簡単なタスクのようです。

このタスクを自律的に達成する方法を知っている人はいますか? (別名、たとえば、PHP を介して事後にフィールドを合計することについて聞きたくありません)

助けてくれてありがとう

4

1 に答える 1

0

問題は、UPDATE+TRIGGER操作ですでに使用されているテーブルの内容を変更しようとしていることです。これは単純に行うことはできませんが、別の方法があります。

たとえば、意味のあるデータ(または独立変数)が価格と送料であり、合計コストがそれらに依存している場合、テーブルに最初の2つだけを保持し、非常に単純なVIEW(SELECT price, shipping_cost, price+shipping_cost total_cost FROM buybox_rec、などのいずれか)を使用できます。必要なフィールド)合計を監視したい場合。

于 2012-12-23T15:15:09.353 に答える