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

削除更新後に MySQL トリガーが機能しない

この問題についてはフォーラムにたくさんの情報があるため、再度質問して申し訳ありません。しかし、私の問題が他の問題とは異なることを願っています。私の下手な英語でごめんなさい。

最初に 2 つのテーブル (親テーブルと子テーブル) があります。 親(位置)

loc_id loc_size
1 100
2 75

子供たち(エリア)

###乾燥### 12これは削除後のトリガーです。
ar_loc_id ar_size
2 35
2 40
リーリー

たとえば、ar_id = '2' を削除したい場合、ar_size は loc_size の位置で更新されます。

loc_size 値は「0」であるため、トリガーの実行後の値は 40 になります。

問題は、トリガーが正しく実行されていないことです。トリガーの実行後、loc_size はまったく更新されず、「0」値だけが更新されます。

何かが足りないのか、それとも単に機能しないために何かが起こっているのでしょうか。

この問題の解決を手伝ってください。 どうもありがとうございます。

P粉155832941P粉155832941258日前336

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

  • P粉639667504

    P粉6396675042024-02-04 20:57:10

    トリガーに問題はないようですね。テストしてみたところ、うまくいきました。これを完了するために、テーブル region に挿入トリガーを追加しました。

    リーリー

    ご覧のとおり、挿入操作と削除操作の両方で、値がそれに応じて更新されます。
    -- ここから更新します --

    これはトリガー after_insert_area_location の拡張バージョンであり、データの整合性を維持するために新しく追加された IF ステートメントを示します。 SIGNAL ステートメントはエラーを発生させるために使用され、警告メッセージとして機能し、操作を終了することに注意してください。

    リーリー

    ご覧のとおり、トリガーの IF ステートメント内の SIGNAL ステートメントにより、SQL_STATE コード 77777 とメッセージ「Is Preliminary set」のエラーが発生しました。これにより、新しい行が挿入されてから加えられた変更が元に戻されます。

    リーリー

    つまり、トリガーで IF ステートメントを使用すると、データ フローをある程度制御できます。 SIGNAL ステートメントを使用すると、意図的にエラーを呼び出して、トリガーの実行を停止または元に戻したり、トリガーのアクションを開始したりすることができます。前述したように、トリガー内の UPDATE が実行されないだけでなく、トリガーをトリガーした insert ステートメントも取り消されます。

    返事
    0
  • キャンセル返事