sqlite トリガーを作成する

sqlite トリガーを作成する

sqliteで、トリガーを作成する手順を記述してます。「CREATE TRIGGER」にトリガー名を指定することで可能です。ここでは、実際に実行した結果を画像で掲載してます。

環境

  • OS windows11 home
  • sqlite 3.37.1
  • DB Browser for SQLite 3.12.2

手順

テーブル操作時に指定した処理を実行できるトリガーを作成するには、「CREATE TRIGGER」を使用します。

CREATE TRIGGER トリガー名
[BEFORE | AFTER | INSTEAD OF] [INSERT | UPDATE | DELETE] ON テーブル名
[FOR EACH ROW]
BEGIN
 処理;
END;
パラメータ説明
BEFORE |
AFTER |
INSTEAD OF
トリガーを発動させるタイミング
before:データ操作前にトリガーを起動する
after:データ操作後にトリガーを起動する
instead of:データ操作されるSQL実行時に、SQLは実行しなでトリガーだけ起動
FOR EACH ROW複数行のデータ操作時に、各行ごとにトリガーを起動

実際に、「hoge」テーブルを削除すると履歴をとるために「hoge_history」に削除日を書き込む、
トリガー「trg」を作成してみます。

CREATE TRIGGER trg
AFTER DELETE ON hoge
FOR EACH ROW
BEGIN
 INSERT INTO hoge_history(name) values('DELETE');
END;

実行結果を見ると作成されていることが確認できます。

トリガー起動

実際に「hoge」テーブルに「DELETE」を実行してトリガーを発動させてみます。

DELETE FROM hoge WHERE id=3;

テーブル「hoge_history」を確認します。

トリガーが実行されていることが確認できます。

テーブル削除

トリガーで実行されるテーブルを削除すると、対象のテーブルにアクションを行う際にエラーとなります。

「hoge_history」を削除後に、

DROP table hoge_history;

「hoge」テーブルに「DELETE」を実行すると、

DELETE FROM hoge WHERE id=2;

結果: no such table: main.hoge_history

エラーとなります。