この問題についてはフォーラムにたくさんの情報があるため、再度質問して申し訳ありません。しかし、私の問題が他の問題とは異なることを願っています。私の下手な英語でごめんなさい。
最初に 2 つのテーブル (親テーブルと子テーブル) があります。 親(位置)
loc_id | loc_size |
---|---|
1 | 100 |
2 | 75 |
子供たち(エリア)
ar_loc_id | ar_size | |
---|---|---|
2 | 35 | |
2 | 40 |
たとえば、ar_id = '2' を削除したい場合、ar_size は loc_size の位置で更新されます。
loc_size 値は「0」であるため、トリガーの実行後の値は 40 になります。
問題は、トリガーが正しく実行されていないことです。トリガーの実行後、loc_size はまったく更新されず、「0」値だけが更新されます。
何かが足りないのか、それとも単に機能しないために何かが起こっているのでしょうか。
この問題の解決を手伝ってください。 どうもありがとうございます。
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
ステートメントも取り消されます。