見出し画像

MySQLのトリガー

クリエイター : Narayan Shrestha , 株式会社readytowork ネパール支店 チームマネージャー

はじめに

MySQLのトリガは、データベースで発生した特定のイベントに応答して、指定されたアクションまたはアクションのセットを自動的に実行するデータベースオブジェクトです。これらのイベントには、INSERT、UPDATE、DELETE、または、データベースの起動やシャットダウンイベントが含まれます。トリガは、データの整合性を強制し、一貫性を維持し、データベース内の反復タスクを自動化するために使用されます。

MySQL でトリガを作成する基本的な例:

CREATE TRIGGER my_trigger
BEFORE INSERT ON my_table
FOR EACH ROW
BEGIN
    -- Trigger body: Perform actions before inserting into my_table
    SET NEW.column_name = 'value';
END;

この例では、my_triggerという名前のBEFORE INSERTトリガがmy_tableテーブルに作成されます。トリガ本体は、テーブルに新しい行を挿入する前に、列の値を変更します。

全体として、MySQLのトリガはデータベースタスクの自動化、データ整合性の強制、データベース内でのビジネスロジックの実装を行う強力なツールです。しかし、意図しない結果を避け、データベースシステムのパフォーマンスを維持するために、慎重に使用する必要があります。

トリガーを理解する:

MySQL のトリガに関する主なコンポーネントと概念:

  1. イベント: トリガは、INSERT、UPDATE、DELETE 操作など、特定のテーブルで発生する特定のイベントに関連付けられます。指定されたイベントがテーブル上で発生すると、トリガは起動され、定義されたアクションが実行されます。

2. タイミング: トリガーは、トリガーイベントに対して、いつトリガーのアクションが実行されるかを決定するタイミングに基 づいて分類することができます。タイミングには、主に2つのタイプがあります:

  • BEFORE : BEFOREトリガで定義されたアクションは、トリガ イベントがテーブルに適用される前に実行されます。これらのトリガは一般的に、挿入、更新、削除される前にデータを検証したり、修正したりするために使用されます。

  • AFTER : AFTERトリガで定義されたアクションは、トリガイベントがテーブルに適用された後に実行されます。これらのトリガは、変更のログ記録、他のテーブルの更新、参照整合性制約の適用などのタスクを実行するためによく使用されます。

3. トリガ本体 : トリガ本体には、トリガが起動された時に実行されるアクションを定義するSQL文や手続きコードが含まれます。これには、ストアドプロシージャや関数の呼び出しと同様に、単一または複数のSQL文が含まれます。

4. データへのアクセス: MySQLのトリガは、トリガイベントの影響を受ける行の新旧両方の値にアクセスすることができます。これにより、トリガはイベントの前後の値を比較することができ、データ検証、監査、参照整合性の維持などのアクションが可能になります。

5. 複数のトリガー: 異なるイベントやタイミングに対して、同じテーブルに複数のトリガーを定義することができます。トリガーはそのタイミングに基づき、事前に定義された順序で実行されます(BEFOREトリガーはAFTERトリガーより先に実行されます)。

6. トリガの作成 : MySQLのトリガはCREATE TRIGGER文を使用して作成され、トリガ名、トリガ イベント、タイミング、トリガがアタッチされるテーブル、トリガ本体を指定します。

トリガの作成

  • MySQL でトリガーを作成するための構文。

  • シナリオ例 Employees 「テーブルに新しい従業員の給与を挿入した後、」Company_expenses "テーブルを更新するトリガーを作成する。

CREATE TRIGGER update_expenses AFTER INSERT ON Employees
FOR EACH ROW
BEGIN
    UPDATE Company_expenses
    SET salaries_expenses = salaries_expenses + NEW.salary;
END;

BEFOREトリガーの使用

  • BEFOREトリガーの説明とその応用。

  • シナリオ例: BEFOREトリガーを使用して、「Employees 」テーブルに挿入する前に、新しい従業員の給与を検証し、調整する。

CREATE TRIGGER adjust_salary BEFORE INSERT ON Employees
FOR EACH ROW
BEGIN
    IF NEW.salary < 30000 THEN
        SET NEW.salary = 30000;
    END IF;
END;

AFTERトリガーの使用

  • AFTERトリガーの適用とその意義。

  • シナリオ例 従業員の給与を更新した後、「Company_expenses 」テーブルの税金費用を計算して更新するために、AFTERトリガーを使用する。

CREATE TRIGGER update_tax AFTER UPDATE ON Employees
FOR EACH ROW
BEGIN
    UPDATE Company_expenses
    SET taxes = (SELECT SUM(salary * 0.2) FROM Employees);
END;

参考: MySQL :: MySQL 8.0 Reference Manual :: 27.3.1 Trigger Syntax and Examples


協業開発及び開発パートナーをお探しのお客様へ

弊社は、ネパールに海外拠点を持ち、生成AI、モバイルアプリ、システム開発を中心に事業を展開する企業です。

自社サービスの開発経験を活かし、クライアント様と共に事業を創造することを重視し、創業以来、スタートアップから中小企業、大手企業、自治体まで、幅広い開発実績があります。プロダクトはユーザーが使いやすいように設計しており、企画から開発、保守運用まで対応しています。開発技術を厳選し限定することで、セキュリティ、プロダクトの品質向上に努めており、事業開発に関する課題を深く理解し、最適なご提案が可能です

お問い合わせはこちらから:
お問い合わせフォーム:https://readytowork.jp/ 

直通番号:080-8940-7169