MySQL でトリガーを使用するにはどうすればよいですか? MySQLトリガーの詳しい説明

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データベースの効率と信頼性を向上させることができます。

おすすめ

転載: blog.csdn.net/thanklife/article/details/131964017