【SQL基礎】トリガーの作成
前回の記事ではトリガーの概要を説明しました。
トリガーについてよくわからない方は先に前回の記事をご覧ください。
本記事では、トリガーの作成方法を説明します。
トリガーの設定内容
トリガー作成の際、設定すべき内容は以下のとおりです。
①トリガーの名前
②実行のタイミング、きっかけとなるSQLの種類
③対象のテーブル名、行単位か文単位かの選択(MySQLでは行単位のトリガーしかサポートしていないため、FOR EACH ROWのみ可)
④トリガーとして実行したいSQL
トリガーの基本構文
トリガー作成の基本構文は以下のとおりです。(①~④は上記の設定内容と対応しています。)
CREATE
TRIGGER トリガー名 ……①
BEFORE/AFTER INSERT/UPDATE/DELETE ……②
ON テーブル名 FOR EACH ROW ……③
トリガーの処理 ……④
実行例を見ていきましょう。
本記事では、例として以下のテーブルを使用します。
①注文テーブル(orders)
②注文履歴テーブル(order_history)
history_idカラムとcreated_atカラムで構成されています。
例1.注文テーブルにレコードが追加された後、注文履歴テーブルにもデータが追加されるようにトリガーを作成する。
トリガー名はorder_insertとしています。
また、order_historyテーブルのhistroy_idはauto_incrementが設定されているため0を指定し、created_atは現在時刻をINSERTするためにNOW()関数を指定しています。
CREATE TRIGGER order_insert ……① AFTER INSERT ……② ON orders FOR EACH ROW ……③ INSERT INTO order_history VALUES (0, NOW()); ……④
これでトリガーが作成できました。
例2.作成したトリガーを確認する。
作成したトリガーはSHOW TRIGGERSで確認可能です。
例3.ordersテーブルにデータを追加してみる。
ordersテーブルのorder_idカラムもauto_incrementが設定されているため0を指定しています。
itemカラムに指定するものは何でも良いですが、今回は’りんご’としています。
INSERT INTO orders VALUES (0, 'りんご');
ordersテーブルに正しくデータが追加されました。
order_historyテーブルを確認してみると、こちらにもデータが追加されているのがわかります。
トリガー作成の基本は以上です。
もう少し複雑な設定については、次回以降の記事で扱います。
学習のポイント
・トリガーはCREATE TRIGGERで作成する。
・作成したトリガーはSHOW TRIGGERSで確認できる。
練習問題
以下のような条件でトリガーを作成します。どのように記述すべきでしょうか。
【条件】
testAというテーブルのレコードが削除されるとき、レコードが削除される前にtestBというテーブルにtestCというデータを挿入する。トリガー名はtestDとする。