ホームページ >データベース >mysql チュートリアル >UPDATE 後に実際にデータが変更された場合にのみ MySQL トリガーを実行するにはどうすればよいですか?

UPDATE 後に実際にデータが変更された場合にのみ MySQL トリガーを実行するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-13 22:15:46249ブラウズ

How Can I Make a MySQL Trigger Execute Only When Data Actually Changes After an UPDATE?

MySQL UPDATE トリガー: データが変更された場合にのみ実行されます

MySQL トリガーを使用すると、特定のデータベース イベント (テーブル更新など) が発生したときにアクションを自動的に実行できます。ただし、更新された行のデータが実際に変更された場合にのみ実行するトリガーが必要な場合もあります。

質問:

組み込みの「AFTER UPDATE」トリガーは、データを変更する更新とデータを変更しない更新を区別しません。これにより、特に多くの列を含むテーブルを処理する場合、不必要なトリガーの実行が発生する可能性があります。

解決策:

トリガー内のすべての列への変更を直接比較することはできませんが、タイムスタンプを使用する回避策があります。行が変更されるたびに、MySQL は行のタイムスタンプ列を自動的に更新します。したがって、このタイムスタンプを使用して、データが変更されたかどうかを判断できます。

実装:

  1. タイムスタンプ列の追加: トリガーするテーブルにタイムスタンプ列を作成します。
  2. トリガーの作成: 古いタイムスタンプ値と新しいタイムスタンプ値を比較する「AFTER UPDATE」トリガーを作成します。異なる場合は、必要なアクションを実行します。そうでない場合は、何も行いません。

これは例です:

<code class="language-sql">CREATE TRIGGER ins_sum AFTER UPDATE ON foo
FOR EACH ROW
BEGIN
    IF NEW.ts != OLD.ts THEN
        INSERT INTO bar (a, b) VALUES(NEW.a, NEW.b);
    END IF;
END;</code>

利点:

  • データが変更された場合にのみ実行されます。
  • 列を比較するためにカスタム コードは必要ありません。
  • 任意のサイズと列数のテーブルで使用できます。

注:

このソリューションは、MySQL の自動タイムスタンプ更新動作に依存しています。アプリケーションがタイムスタンプを明示的に更新すると、期待どおりに動作しない可能性があります。

以上がUPDATE 後に実際にデータが変更された場合にのみ MySQL トリガーを実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。