【SQL基礎】トリガーの作成part3
前々回の記事(part1)、前回の記事(part2)ではトリガーの作成方法を説明しました。
トリガー作成についての基本事項がわからない方は先に前回までの記事をご覧ください。
本記事では、引き続きトリガーの作成方法を説明します。
トリガーの概要について知りたい方はこちら
PRECEDESとFOLLOWS
同じ条件で起動するトリガーを複数登録する場合、基本的には作成された順にトリガーが実行されます。
実行順を制御したい場合は、トリガー作成時にPRECEDES/FOLLOWSキーワードを用いて指定する必要があります。
PRECEDESを使用すると指定したトリガーの前、FOLLOWSを使用すると指定したトリガーの後に実行されます。
記述する場所は以下のとおり、トリガー処理の直前です。
CREATE
TRIGGER トリガー名
BEFORE/AFTER INSERT/UPDATE/DELETE
ON テーブル名 FOR EACH ROW
PRECEDES/FOLLOWS 他のトリガー名
トリガーの処理
PRECEDES/FOLLOWSの例
注文テーブル(orders)と更新履歴テーブル(update_log)を使用します。
注文テーブルは前の記事でも扱ったもので、「みかん」と「りんご」が登録されています。
更新履歴テーブルは、log_idカラム、logカラム、created_atカラムで構成されているものを新たに作成しました。
例1.注文テーブルのレコードが更新された後、更新履歴テーブルにデータが3件追加されるようにトリガーを作成する。
まずorder_update1というトリガーを作成します。ordersテーブルに更新があったとき、update_logテーブルにログをINSERTするためのトリガーです。
そして、PRECEDES order_update1を指定したorder_update2トリガーとFOLLOWS order_update1を指定したorder_update3トリガーを作成します。
order_update2トリガーもorder_update3トリガーも動作自体はorder_update1と同様です。ログの内容でそれぞれのトリガーの見分けがつくようになっています。
order_update2はorder_update1より前に実行されるはずです。
order_update3はorder_update1より後に実行されるはずです。
確認してみましょう。
注文テーブルを更新(UPDATE)してみます。
注文テーブルの「りんご」が「ぶどう」に更新されました。
更新履歴テーブルのログを確認すると、期待したとおりの実行順になっていることがわかります。
次回はトリガー作成の続きとトリガーの削除について扱います。
学習のポイント
・複数のトリガーの実行順を制御するにはPRECEDES/FOLLOWSを使用する。
・PRECEDESを使用してトリガーを作成すると、指定したトリガーの前に実行される。
・FOLLOWSを使用してトリガーを作成すると、指定したトリガーの後に実行される。
練習問題
問、次に示したtriggerA,triggerB,triggerC,triggerDの実行される順序を答えてください。
CREATE TRIGGER triggerA AFTER UPDATE ON orders FOR EACH ROW トリガーの処理 CREATE TRIGGER triggerB AFTER UPDATE ON orders FOR EACH ROW FOLLOWS triggerA トリガーの処理 CREATE TRIGGER triggerC AFTER UPDATE ON orders FOR EACH ROW トリガーの処理 CREATE TRIGGER triggerD AFTER UPDATE ON orders FOR EACH ROW FOLLOWS triggerA トリガーの処理