MySQL でトリガーを使用するにはどうすればよいですか? MySQLトリガーの詳しい説明
MySQL は、トリガーの使用をサポートする一般的に使用されるリレーショナル データベース管理システムです。トリガーは、イベント駆動型プログラミング モデルと同様に、特定のテーブルに対して一連のSQLステートメントを実行できるMySQLの特別なストアド プロシージャです。トリガーを使用して複雑なビジネス ロジックを実装し、データベースのパフォーマンスと信頼性を向上させます。この記事では、 MySQLでのトリガーの使い方を詳しく紹介します。
1. トリガーを作成する
MySQLでは、 CREATE TRIGGERステートメントを使用してトリガーを作成できます。CREATE TRIGGERステートメントの基本構文は次のとおりです。
CREATE TRIGGER トリガー名 トリガー時間 トリガーイベント ON テーブル名 行ごと トリガー本体;
このうち、trigger_nameはトリガーの名前、trigger_timeはトリガーの実行時間 ( BEFOREまたはAFTER )、trigger_eventはトリガーのイベント ( INSERT 、UPDATEまたはDELETE )、table_nameはトリガーの名前です。トリガーが配置されているテーブル。trigger_bodyはトリガーです。 サーバーのSQL。
たとえば、次のトリガーは、従業員テーブルにBEFORE INSERTトリガーを作成します。これにより、新しい従業員が入社したときに、エントリ時刻が現在時刻に自動的に設定されます。
行ごとに従業員に挿入する前にトリガー set_join_date を作成します
始める
SET NEW.join_date = NOW();
終わり;
2. トリガー実行時間
MySQLでは、トリガーはINSERT 、UPDATE 、またはDELETEイベントの前後に実行できます。トリガーの実行時間はBEFOREまたはAFTERです。
トリガー前
BEFOREトリガーは、 INSERT 、UPDATE 、またはDELETE操作を実行する前に実行され、データベース内で一部のデータの前処理と検証を実装できます。
たとえば、次のトリガーは、従業員テーブルにBEFORE UPDATEトリガーを作成します。従業員の給与が10,000を超える場合、給与は10,000に設定されます。
各行の従業員を更新する前に、limit_salary をトリガーして作成します
始める
新しい場合、給与 > 10000 THEN
NEW.salary = 10000; を設定します。
終了 IF;
終わり;
トリガー後
AFTERトリガーは、 INSERT 、UPDATE 、またはDELETE操作の実行後に実行され、データベース内で一部のデータの後処理と計算を実装できます。
たとえば、次のトリガーは注文テーブルにAFTER INSERTトリガーを作成し、新しい注文が追加されると製品の在庫を自動的に更新します。
各行の順序で挿入後にトリガー update_inventory を作成します
始める
UPDATE 製品 SET 在庫 = 在庫 - NEW.quantity WHERE id = NEW.product_id;
終わり;
3. イベントをトリガーする
MySQLでは、 INSERT 、UPDATE 、またはDELETEイベントでトリガーを実行できます。新しいレコードが挿入されるとINSERTイベントがトリガーされ、レコードが更新されるとUPDATEイベントがトリガーされ、レコードが削除されるとDELETEイベントがトリガーされます。トリガーは複数のイベントで実行できます。
たとえば、次のトリガーは、従業員テーブルにBEFORE INSERTまたはUPDATEトリガーを作成し、従業員の給与が10,000を超える場合、給与は10,000に設定されます。
従業員の行ごとに挿入または更新する前に、トリガーlimit_salaryを作成してください
始める
新しい場合、給与 > 10000 THEN
NEW.salary = 10000; を設定します。
終了 IF;
終わり;
4. トリガー実行条件
MySQLでは、 IFステートメントを使用してトリガーの実行条件を制御できます。IFステートメントは、条件に基づいてトリガー内のSQLステートメントを実行するかどうかを決定できます。
たとえば、次のトリガーは、従業員テーブルにBEFORE INSERTトリガーを作成します。従業員の給与が5,000未満の場合、従業員の入力時刻は現在の時刻に設定されます。
行ごとに従業員に挿入する前にトリガー set_join_date を作成します
始める
新しい場合、給与 < 5000 THEN
SET NEW.join_date = NOW();
終了 IF;
終わり;
5. トリガープロセス制御
MySQLでは、トリガーはフロー制御ステートメントを使用して、 IFステートメント、CASEステートメント、WHILEステートメント、LOOPステートメントなどのプログラムの実行フローを制御できます。フロー制御ステートメントは、開発者がより複雑なビジネス ロジックを実装するのに役立ちます。
たとえば、次のトリガーは、従業員テーブルにBEFORE INSERTトリガーを作成します。従業員の給与が5,000未満の場合、従業員の入社時刻は現在の時刻に設定され、そうでない場合は、入社時刻は 1 か月前の時刻に設定されます。
行ごとに従業員に挿入する前にトリガー set_join_date を作成します
始める
新しい場合、給与 < 5000 THEN
SET NEW.join_date = NOW();
それ以外
SET NEW.join_date = DATE_SUB(NOW(), INTERVAL 1 MONTH);
終了 IF;
終わり;
6. トリガーの最適化
トリガーは、開発者がデータベースのパフォーマンスと信頼性を最適化するのに役立ちます。トリガーの最適化に関するヒントをいくつか紹介します。
トリガーの実行時間を最小限に抑え、トリガーが大きく複雑になるのを回避します。
複雑なSQLステートメントはパフォーマンスの低下を引き起こすため、トリガー内で複雑なSQLステートメントを実行しないでください。
トリガーの実行条件とフロー制御ステートメントを使用して、実行フローを制御し、トリガーの不必要な実行を回避します。
複数のSQLステートメントはパフォーマンスの低下を引き起こすため、トリガー内で複数のSQLステートメントを実行しないでください。
7. まとめ
トリガーは、イベント駆動型プログラミング モデルと同様に、特定のテーブルに対して一連のSQLステートメントを実行できるMySQLの特別なストアド プロシージャです。この記事では、 MySQLでトリガーを作成する方法、トリガーの実行時間の制御、イベントとプロセスの制御、トリガーの最適化などの方法を紹介します。開発者は、ニーズやシナリオに応じてトリガーを柔軟に使用して、MySQLデータベースの効率と信頼性を向上させることができます。