同じテーブルの更新後にトリガーでテーブルを更新する
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 列がそれに応じて更新されることを保証します。
以上がSQL で同じテーブルを更新した後、トリガー内でテーブルを安全に更新するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。