ホームページ > データベース > mysql チュートリアル > SQL で同じテーブルを更新した後、トリガー内でテーブルを安全に更新するにはどうすればよいですか?

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

Mary-Kate Olsen
リリース: 2024-12-21 16:15:14
オリジナル
1018 人が閲覧しました

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 列がそれに応じて更新されることを保証します。

以上がSQL で同じテーブルを更新した後、トリガー内でテーブルを安全に更新するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート