Developer

【SQL基礎】トリガーの作成
2021.08.31
Lv1

【SQL基礎】トリガーの作成

前回の記事ではトリガーの概要を説明しました。
トリガーについてよくわからない方は先に前回の記事をご覧ください。
本記事では、トリガーの作成方法を説明します。


トリガーの設定内容

トリガー作成の際、設定すべき内容は以下のとおりです。
トリガーの名前
実行のタイミングきっかけとなるSQLの種類
対象のテーブル名行単位か文単位かの選択(MySQLでは行単位のトリガーしかサポートしていないため、FOR EACH ROWのみ可)
トリガーとして実行したいSQL


トリガーの基本構文

トリガー作成の基本構文は以下のとおりです。(①~④は上記の設定内容と対応しています。)
CREATE
TRIGGER トリガー名 ……①
BEFORE/AFTER INSERT/UPDATE/DELETE ……②
ON テーブル名 FOR EACH ROW ……③
トリガーの処理 ……④


実行例を見ていきましょう。

本記事では、例として以下のテーブルを使用します。

①注文テーブル(orders)

order_idカラムとitemカラムで構成されています。

②注文履歴テーブル(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とする。

答え
[sql]

CREATE
TRIGGER testD
BEFORE DELETE
ON testA FOR EACH ROW
INSERT INTO testB VALUES (testC);

[/sql]

 

 

連載目次リンク

SQL基礎 連載目次

関連する連載リンク

SQL練習問題 一覧まとめ