MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLトリガーの作成と使用方法を徹底解説!基本構文から実行例まで

MySQLで新しいトリガー(TRIGGER)を作成するには、CREATE TRIGGERステートメントを使用します。トリガーを使うと、特定のテーブルに対してINSERT・UPDATE・DELETEなどの操作が行われたときに、自動的に定義した処理を実行できます。基本構文は以下の通りです。

CREATE TRIGGER trigger_name trigger_time trigger_event
ON table_name
FOR EACH ROW
BEGIN
...
END;

構文の各要素の解説

  • trigger_name(トリガー名):CREATE TRIGGERステートメントの直後に指定するトリガーの名前です。命名規則としては「[トリガータイミング]_[テーブル名]_[トリガーイベント]」のようにするのが推奨されます。例えば、「before_student_update」や「after_student_insert」のような名前が考えられます。
  • trigger_time(トリガータイミング):トリガーが起動するタイミングを示し、BEFOREまたはAFTERのどちらかを指定します。テーブルへの変更が行われる前に処理を実行したい場合はBEFOREを、変更が行われた後に処理したい場合はAFTERを指定します。トリガー定義時には必ずタイミングを指定する必要があります。
  • trigger_event(トリガーイベント):INSERT、UPDATE、DELETEのいずれかを指定します。このイベントが発生した際にトリガーが呼び出されます。1つのトリガーが対応できるイベントは1つだけなので、複数のイベントで動作させる場合は、イベントごとに個別のトリガーを定義する必要があります。
  • table_name(テーブル名):トリガーは必ず特定のテーブルに関連付けられます。テーブルなしにトリガーは存在できないため、ONキーワードの後にテーブル名を指定します。
  • BEGIN…END:トリガーが実行する実際のロジック(処理内容)を定義するブロックです。

実例:トリガーを作成して動作を確認する

ここでは、次のように作成したStudent_ageテーブルにトリガーを設定してみます。

mysql> Create table Student_age(age INT, Name Varchar(35));
Query OK, 0 rows affected (0.80 sec)

続いて、以下のトリガーを作成します。このトリガーにより、誰かが負の値(age < 0)を挿入しようとした場合、自動的にage = 0が設定されるようになります。

mysql> DELIMITER //
mysql> Create Trigger before_inser_studentage BEFORE INSERT ON student_age FOR EACH ROW
BEGIN
IF NEW.age < 0 THEN SET NEW.age = 0;
END IF;
END //
Query OK, 0 rows affected (0.30 sec)

では、INSERT文を実行してこのトリガーを呼び出してみましょう。

mysql> INSERT INTO Student_age(age, Name) values(30, 'Rahul');
Query OK, 1 row affected (0.14 sec)

mysql> INSERT INTO Student_age(age, Name) values(-10, 'Harshit');
Query OK, 1 row affected (0.11 sec)

mysql> Select * from Student_age;
+------+---------+
| age  | Name    |
+------+---------+
| 30   | Rahul   |
| 0    | Harshit |
+------+---------+
2 rows in set (0.00 sec)

結果セットを見ると、負の値(-10)を挿入しようとしたレコードには、トリガーによって自動的に0が挿入されていることがわかります。

この例は、trigger_eventがINSERT、trigger_timeがBEFOREであるトリガーのケースです。同じ手順で、UPDATEやDELETEイベント、あるいはAFTERタイミングのトリガーも同様に作成できます。データの整合性を保ちたい場合などに、トリガーは非常に便利な機能です。

  1. MySQLの単一クエリでCOUNT()とIF()を組み合わせる方法

    はじめにMySQLでは、COUNT()関数とIF()関数を1つのクエリ内で組み合わせることで、特定の条件に一致するレコード数を効率的に集計できます。この記事では、ブール型(boolean)のカラムを持つテーブルを例に、「値が1であるレコードの総数」を取得する方法を段階的に解説します。1. サンプルテーブルの作成まず、boolean型のカラムを持つテーブルを作成します。mysql> create table DemoTable(    isValidUser boolean);Query OK, 0 rows affected (0.70 sec)M

  2. TikTokアバターの作り方と使い方|モバイルアプリでの設定手順をわかりやすく解説

    TikTokのアバターフィルターを使えば、実際の自分の姿をアニメーション風のキャラクターに置き換えることができます。自分に似せたアバターにすることも、まったく別の見た目のキャラクターにすることも可能です。この機能は、顔を出したくないときや、まったく新しいデジタル上のペルソナを演じたいときにとても便利です。アバターを選ぶ際は、あらかじめ用意された既製キャラクターから選ぶことも、ゼロからオリジナルのアバターを作成することもできます。一度作成してしまえば、その後のTikTok動画で何度でも使い回すことが可能です。それでは、TikTokモバイルアプリでアバターを作成・使用する具体的な手順を見ていきまし