MySQL データベースに orders
という名前のテーブルがあります。 payment_date
プロパティは、資金を受け取るまでは Null ですが、資金を受け取ると日付に更新されます。 payment_date code> 属性が更新されると、
order_state code> 属性が (手動で) 1 または 2 から値 3 に更新されます。
このプロセスを自動化するために トリガーを作成したいと考えています。これが私の試みです:
リーリーこれを呼び出すと、次のエラー メッセージが表示されます:
[HY000][1442] ストアド関数/トリガーのテーブル 'orders' は、このストアド関数/トリガーを呼び出すステートメントによってすでに使用されているため、更新できません。
これはロック状況 (または無限ループのリスク) である可能性を考慮して、トリガーを BEFORE UPDATE
に変更しました。ただし、同じエラーメッセージが表示されました。
この問題はどうすれば解決できますか?
###ありがとう!
わかりました。トリガーを生成した行を更新するだけでよいと上記でコメントしたことを考えると、トリガー本体で
リーリーUPDATE
を使用せずにこれを行うことができます。設定
NEW.
トリガーが生成された対応する行にのみ適用されます。トリガー本体は、
FOR EACH ROW
で示されるように、一度に 1 行を処理します。したがって、このトリガーを生成するUPDATE
操作に複数の行が含まれる場合、一度に 1 行が処理されます。NEW.
の値を変更するには、BEFORE
トリガーを使用する必要があります。AFTER
トリガーが実行されてからでは、値を変更することはできません。