ホームページ >データベース >mysql チュートリアル >MySQL トリガーの例を示した説明: データベース アクションの自動化

MySQL トリガーの例を示した説明: データベース アクションの自動化

Susan Sarandon
Susan Sarandonオリジナル
2024-12-20 16:15:13948ブラウズ

MySQL Triggers Explained with Examples: Automating Database Actions

MySQL トリガーの例を示した説明: データベース アクションの自動化

MySQL トリガー は、テーブル上の特定のイベント (INSERTUPDATE など) に応答してデータベース内で指定されたアクションを自動的に実行できる強力な機能です。 、または 削除。トリガーは、アプリケーション コードでこれらのアクションを明示的に管理する必要がなく、ビジネス ルールの適用、データの整合性の維持、または変更のログ記録に役立ちます。

このガイドでは、トリガーとは何か、どのように機能するのかを説明し、MySQL でのトリガーの使用法を理解するのに役立つ実践的な例を提供します。


MySQL トリガーとは何ですか?

トリガーは、テーブルで特定のイベントが発生したときに MySQL によって自動的に実行される (または「トリガー」される) SQL ステートメントのセットです。イベントは次のいずれかになります:

  • INSERT: 挿入操作の後にトリガーされます。
  • UPDATE: 更新操作の後にトリガーされます。
  • DELETE: 削除操作の後にトリガーされます。

トリガーはイベントの BEFORE または AFTER のいずれかで実行されるように定義できるため、データの処理方法を柔軟に行うことができます。

トリガーを作成するための構文

MySQL でトリガーを作成するための一般的な構文は次のとおりです。

CREATE TRIGGER trigger_name
    trigger_time trigger_event
    ON table_name
    FOR EACH ROW
    trigger_body;
  • trigger_name: トリガーの名前。
  • trigger_time: イベントの前後にすることができます。
  • trigger_event: INSERT、UPDATE、または DELETE を指定できます。
  • table_name: トリガーが関連付けられているテーブルの名前。
  • trigger_body: トリガーが起動されたときに実行される SQL ステートメント。

トリガータイミング: BEFORE vs. AFTER

  • BEFORE Trigger: トリガー アクションは、トリガー イベントの前 (挿入、更新、または削除操作の前など) に実行されます。これにより、テーブルにコミットされる前にデータを変更できます。

  • AFTER Trigger: トリガー アクションはイベント後 (レコードの挿入、更新、削除後など) に実行されます。これは、ログ記録など、データに加えられた変更に基づいてアクションを実行する場合に便利です。


MySQL トリガーの例

1. トリガーの挿入例: デフォルト値を自動的に設定する

created_at 列を含む従業員情報を含むemployeesというテーブルがあるとします。 AFTER INSERT トリガーを作成して、新しいレコードが挿入されたときに created_at フィールドを現在のタイムスタンプに自動的に設定できます。

CREATE TRIGGER trigger_name
    trigger_time trigger_event
    ON table_name
    FOR EACH ROW
    trigger_body;

この例では:

  • トリガーは、employees テーブルに対して AFTER INSERT で実行されます。
  • NEW キーワードは、新しく挿入された行を参照するために使用されます。 NEW.id は、新しく挿入された行の ID を表します。
  • トリガーは、新しく挿入されたレコードの created_at 列を現在のタイムスタンプに更新します。

2. 更新トリガーの例: 更新値を自動計算する

価格と割引の列を持つテーブル products を想像してください。価格が更新されるたびに、discount_price フィールドを自動的に更新したいとします。


CREATE TRIGGER set_created_at
AFTER INSERT ON employees
FOR EACH ROW
BEGIN
    UPDATE employees SET created_at = NOW() WHERE id = NEW.id;
END;
この例では:

    トリガーは、products テーブルに対して
  • AFTER UPDATE で実行されます。
  • NEW.price は更新された価格を指し、OLD.price は以前の値を指します。
  • 価格が変更された場合 (NEW.price <> OLD.price)、トリガーは新しい価格と割引に基づいてdiscount_priceを更新します。
3.

削除トリガーの例: 重要なデータの削除の防止

トリガーを使用して、特定の行の削除を防ぐなどのビジネス ルールを適用できます。たとえば、従業員テーブルで、重要としてフラグが付けられた従業員の削除を防止したい場合があります。


CREATE TRIGGER update_discounted_price
AFTER UPDATE ON products
FOR EACH ROW
BEGIN
    IF NEW.price <> OLD.price THEN
        UPDATE products SET discounted_price = NEW.price * (1 - NEW.discount / 100) WHERE id = NEW.id;
    END IF;
END;
この例では:

    トリガーは、employees テーブルの
  • BEFORE DELETE で実行されます。
  • OLD キーワードは、削除される前の行のデータを参照します。
  • is_critical 列が 1 に設定されている場合、トリガーは SIGNAL ステートメントを使用してエラーを発生させ、削除を防ぎます。
4.

トリガーの挿入例: 監査ログの作成

トリガーは、テーブルへの挿入の監査ログを維持するなど、ログの目的に使用できます。以下は、employees テーブルに追加されたすべての新しい従業員を Audit_log テーブルに記録する例です。


CREATE TRIGGER prevent_delete_critical_employee
BEFORE DELETE ON employees
FOR EACH ROW
BEGIN
    IF OLD.is_critical = 1 THEN
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Cannot delete critical employee';
    END IF;
END;
この例では:

  • トリガーは、employees テーブルに対して AFTER INSERT で実行されます。
  • トリガーは、audit_log テーブルにレコードを挿入し、アクション (INSERT)、テーブル名 (employees)、挿入された従業員の ID (NEW.id)、およびタイムスタンプ (NOW()) を記録します。

トリガーの管理

  • トリガーの表示: information_schema.triggers テーブルをクエリすることで、データベース内の既存のトリガーを表示できます。
CREATE TRIGGER trigger_name
    trigger_time trigger_event
    ON table_name
    FOR EACH ROW
    trigger_body;
  • トリガーを削除: トリガーが不要になった場合は、DROP TRIGGER ステートメントを使用して削除できます。
CREATE TRIGGER set_created_at
AFTER INSERT ON employees
FOR EACH ROW
BEGIN
    UPDATE employees SET created_at = NOW() WHERE id = NEW.id;
END;

トリガーを使用する場合の考慮事項

  1. パフォーマンスへの影響: トリガーは追加の SQL ステートメントを実行するため、データベース操作にオーバーヘッドが追加されます。特に大規模なテーブルや頻繁な操作の場合、トリガー ロジックがどれほど複雑であるかに注意してください。

  2. トリガーのネスト: 同じテーブルを変更するトリガーには注意してください。無限ループや過度のリソース使用につながる可能性があります。 MySQL では、トリガーがそれ自体を直接呼び出すこと (再帰トリガー) を許可していません。

  3. データ整合性: トリガーは、不要な削除の防止など、データの整合性を確保するのに役立ちますが、デバッグが難しい場合があります。トリガー ロジックが適切に文書化されていることを常に確認してください。

  4. トリガーのテスト: トリガーを運用環境にデプロイする前に、常に開発環境またはステージング環境で徹底的にテストしてください。意図しない副作用がアプリケーションのパフォーマンスやビジネス ロジックに影響を与える可能性があります。

結論

MySQL トリガーは、挿入、更新、削除など、データベースの変更に応じたアクションを自動化する強力な機能です。トリガーを使用すると、ビジネス ルールを適用し、データの整合性を維持し、監査やログなどのタスクを自動化できます。ただし、システムのパフォーマンスへの悪影響を避けるために、パフォーマンスへの影響を慎重に検討し、トリガーが慎重に実装されていることを確認することが重要です。


以上がMySQL トリガーの例を示した説明: データベース アクションの自動化の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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