同じテーブルの更新後のトリガーでのテーブルの更新
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