ホームページ  >  に質問  >  本文

MySQL: ストアド関数/トリガーのテーブル 'order' は、このストアド関数/トリガーを呼び出すステートメントによってすでに使用されているため更新できません

MySQL データベースに orders という名前のテーブルがあります。 payment_date プロパティは、資金を受け取るまでは Null ですが、資金を受け取ると日付に更新されます。 payment_date 属性が更新されると、 order_state 属性が (手動で) 1 または 2 から値 3 に更新されます。

このプロセスを自動化するために トリガーを作成したいと考えています。これが私の試みです:

リーリー

これを呼び出すと、次のエラー メッセージが表示されます:

[HY000][1442] ストアド関数/トリガーのテーブル 'orders' は、このストアド関数/トリガーを呼び出すステートメントによってすでに使用されているため、更新できません。

これはロック状況 (または無限ループのリスク) である可能性を考慮して、トリガーを BEFORE UPDATE に変更しました。ただし、同じエラーメッセージが表示されました。

この問題はどうすれば解決できますか?

###ありがとう!

P粉282627613P粉282627613258日前549

全員に返信(1)返信します

  • P粉724737511

    P粉7247375112024-02-05 10:14:31

    わかりました。トリガーを生成した行を更新するだけでよいと上記でコメントしたことを考えると、トリガー本体で UPDATE を使用せずにこれを行うことができます。

    リーリー

    設定NEW.トリガーが生成された対応する行にのみ適用されます。

    トリガー本体は、FOR EACH ROW で示されるように、一度に 1 行を処理します。したがって、このトリガーを生成する UPDATE 操作に複数の行が含まれる場合、一度に 1 行が処理されます。

    NEW. の値を変更するには、BEFORE トリガーを使用する必要があります。 AFTER トリガーが実行されてからでは、値を変更することはできません。

    返事
    0
  • キャンセル返事