Developer

【SQL基礎】トリガーとは
2021.08.31
Lv1

【SQL基礎】トリガーとは

「トリガー」の一般的な意味

トリガーとは銃の引き金のことです。
転じて「物事のきっかけ」という意味も持っています。


SQLにおける「トリガー」

SQLにおけるトリガーは、「あるSQLをきっかけとして実行されるSQL」のことです。
(きっかけとなるSQL自体を指すわけではないというのが、元々のトリガーの意味から考えると少しややこしいかもしれません。)
きっかけとなり得るSQLはINSERT,UPDATE,DELETEの3種類です。
トリガー実行のタイミングは、きっかけとなるSQLの前後で指定ができます。
トリガーはテーブルごとに設定できます。

例えば、「注文」テーブルにINSERTが実行されたとき「注文履歴」テーブルにINSERTを実行するという設定ができます。
「注文」テーブルへのINSERTがきっかけとなり、「注文履歴」テーブルへのINSERTが実行されます。
このトリガーは「注文」テーブルに対して設定します。

上記の例も該当しますが、トリガーにはログを残す等の用途があります。


トリガーの種類

トリガーは2種類存在します。
行単位のトリガー(FOR EACH ROW)と文単位のトリガー(FOR EACH STATEMENT)です。
例えば、1回のUPDATE文で2行のレコードが更新された場合、FOR EACH ROWだとトリガーは2回実行されます。
FOR EACH STATEMENTだとトリガーは1回実行されます。
MySQLでは行単位のトリガー(FOR EACH ROW)のみサポートしています。

トリガーの設定方法など、詳しい説明は次回の記事で扱います。


学習のポイント

・トリガーが設定できるのはINSERT,UPDATE,DELETEの3種類
・MySQLでは行単位のトリガー(FOR EACH ROW)のみサポート


練習問題

次のうち、MySQLのトリガーの設定として誤っているものを選んでください。

1.テーブルAにレコードを1件挿入したときに、テーブルBにログを1件残す設定。
2.テーブルAのレコードを2件更新したときに、テーブルBにログを1件残す設定。
3.テーブルAのレコードを3件抽出したときに、テーブルBにログを3件残す設定。
4.テーブルAのレコードを4件削除したときに、テーブルBにログを4件残す設定。

答え

2と3。
MySQLは行単位のトリガーのみサポートしているため、トリガーはレコード1件ごとに起動します。したがって、2は誤りです。
また、トリガーはデータの抽出(SELECT文)には設定できません。したがって、3は誤りです。

 

連載目次リンク

SQL基礎 連載目次

関連する連載リンク

SQL練習問題 一覧まとめ