【SQLite入門】トリガーの作成方法

SQLiteでトリガー(INSERT、UPDATE、DELETE)を作成する方法について記載します。

1. INSERTトリガー

INSERTが行われた際に実行するトリガーです。

INSERTトリガーでは、NEW.列名 と指定することで、インサートする値を参照することができます。

構文

CREATE TRIGGER トリガー名 AFTER(BEFORE) INSERT ON テーブル名
BEGIN
実行するSQL文;
END;
トリガーの実行タイミングは、BEFORE とAFTER から指定します。
BEFORE:INSERT実行前にトリガーの処理を行います。
AFTER:INSERT実行後にトリガーの処理を行います。

実行例

商品テーブル(product)と 在庫テーブル(product_stock)がある場合に、在庫テーブルにインサートされたタイミングで、商品テーブルの在庫数をインクリメントするトリガーを作成します。

商品テーブル

在庫テーブル

トリガー(商品テーブルの在庫(count)をインクリメントする)

実行結果

2. UPDATEトリガー(更新列指定なし)

UPDATEが行われた際に実行するトリガーです。

UPDATEトリガーでは、UPDATE前後の値を OLD.列名NEW.列名 として参照することができます。

構文

CREATE TRIGGER トリガー名 AFTER(BEFORE)UPDATE ON テーブル名
BEGIN
実行するSQL文;
END;

実行例

商品テーブル(product)が更新される度に、商品履歴テーブル(product_history)に更新前の値をインサートするトリガーを作成します。

商品テーブル

商品履歴テーブル

トリガー(商品テーブルが更新されると、商品履歴テーブルに古い内容を登録)

実行結果

3. UPDATEトリガー(更新列指定あり)

UPDATEトリガーでは、”特定の列が更新された” という条件を指定することも出来ます。

構文

CREATE TRIGGER トリガー名 AFTER(BEFORE) UPDATE OF カラム名1, ・・・ON テーブル名
BEGIN
実行するSQL;
END;

特定の列は、OF の後にカラムを指定します。対象カラムはカンマ区切りで複数指定することも出来ます。

実行例

商品テーブル(product)の price列が更新された場合のみ、価格履歴テーブル(price_history)にインサートするトリガーを作成します。

商品テーブル

価格履歴テーブル

トリガー(商品テーブルのprice列が更新された場合、価格履歴テーブルに古いデータをインサート)

実行結果

4. DELETEトリガー

DELETEが行われた際に実行するトリガーです。

DELETEトリガーでは、DELETEする行の列値を OLD.列名 として参照することができます。

構文

CREATE TRIGGER トリガー名 AFTER(BEFORE)DELETE ON テーブル名
BEGIN
実行するSQL文;
END;

実行例

商品テーブル(product)の データが削除された際に、同データを削除商品テーブル(deleted_product)にインサートするトリガーを作成します。

商品テーブル

削除商品テーブル

トリガー(商品を削除すると、削除商品テーブルに同データを挿入)

実行結果

5. トリガーに実行条件を指定する

INSERT・UPDATE・DELETE の各トリガーには、条件に一致した場合のみ、トリガーを実行させることが出来ます。

条件は テーブル名の後ろにWHEN句を使用して指定します。

構文

CREATE TRIGGER ・・・ON テーブル名 WHEN 条件
BEGIN
実行するSQL
END;

実行例

商品テーブル(product)が更新された場合、price列の値が 1000 以上の場合は、price列の値を 1.1倍 するトリガーを作成します。

商品テーブル

トリガー(price列が1000以上の場合、price列を1.1倍する)

実行結果

この例では、WHEN句の条件は更新前のpriceの値が1000以上の場合という条件にしました。

これ以外にも、列の値が NULL の場合は次のように指定します。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする