「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > SQL で同じテーブルを更新した後、トリガー内でテーブルを安全に更新するにはどうすればよいですか?

SQL で同じテーブルを更新した後、トリガー内でテーブルを安全に更新するにはどうすればよいですか?

2024 年 12 月 22 日に公開
ブラウズ:269

How Can I Safely Update a Table Within a Trigger After an Update on the Same Table in SQL?

同じテーブルの更新後のトリガーでのテーブルの更新

SQL では、同じテーブルの更新後にトリガーでテーブルを更新します。同じテーブルには潜在的な問題が存在します。これは、テーブルが更新操作に対してすでにロックされており、同じトランザクションの一部として実行されるトリガー内でテーブルにアクセスしようとすると競合が発生する可能性があるためです。

この制限を回避するには、 AFTER の代わりに BEFORE オプションを使用して、トリガー内の影響を受ける列を削除します。これにより、元の更新操作が発生する前にテーブルの列を更新でき、トランザクションが完了する前にテーブルに必要な変更が確実に加えられます。

次の例を考えてみましょう:

CREATE TRIGGER upd_total_votes BEFORE UPDATE ON products_score
FOR EACH ROW
BEGIN
    SET new.votes_total = new.votes_1   new.votes_2   new.votes_3   new.votes_4   new.votes_5
END
;

この例では、products_score テーブルの各更新操作の前にトリガーが実行されます。更新された列 (votes_1 から votes_5) の値に基づいて votes_total 列の新しい値が計算され、トリガー コンテキストによって提供される new.votes_total 仮想列に格納されます。

テーブルを更新するときを使用すると、更新ステートメントが votes_total 列自体を明示的に更新しなくても、トリガーは votes_total 列がそれに応じて更新されることを保証します。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3