Choco Soft

Nadesiko DE RDB

Choco Soft header image 2

SQLiteのトリガー

2015年10月02日 · コメント(0) · SQLite2, SQLite3

なでしこをフロントエンドにして、データ部はSQLiteにする場合に意外と便利です。
欲を言えば、ストアドが欲しい・・・。

【INSERT用のトリガーを書いてみる】
1.テーブルを作成する。テーブル名は「test2」
2.フィールドはこんな感じ
CREATE TABLE test2 (ID INTEGER NOT NULL,NAME TEXT,EVERYDAY TEXT,PRIMARY KEY(ID));

【仕様】
IDは自動発番にしておいて、名前だけをインサートすると自動的にインサートした日付と時間が「everday」に入るようにする。
CREATE TRIGGER insert_test AFTER INSERT ON test2 begin update test2 set everyday = datetime(‘now’) where id = new.id;
end;
これをSQLITE実行する。

その後に、何かデータを入れてみる。
INSERT INTO test2(name) VALUES(‘choco’)
そうして中身を表示すると、ちゃんと日付が入ってます。

では、トリガー作成文の説明に移ります。
CREATE TRIGGER insert_test AFTER INSERT ON test2
これは、TEST2というテーブルに何かがインサートされたら・・・と言う動きに対して「insert_test」と言う名前をつける事です。
begin update test2 set everyday = datetime(”now”) where id = new.id;
言わずとしれたトランザクションの開始から、test2テーブルのeverydayフィールドに日付を入れます。
その時の条件として、常にデータがインサートされた時のIDを条件としてます。
end;
トランザクションの終了です。
■NEWやOLDには、特別な意味合いがあります。
■NEW,OLD疑似リレーション NEW 変更・挿入後の値を参照できます。 OLD 変更・削除前の値を参照できます。

【UPDATE用のトリガーを書いてみる】
1.テーブルを作成する。
テーブル名は「test2」
2.フィールドはこんな感じ
CREATE TABLE test2 (ID INTEGER NOT NULL,NAME TEXT,EVERYDAY TEXT,PRIMARY KEY(ID));
【仕様】
IDは自動発番にしておいて、名前を変更(更新)すると自動的にインサートした日付と時間が入るようにする。
CREATE TRIGGER update_test AFTER UPDATE ON test2 BEGIN UPDATE test2 SET EVERYDAY = DATETIME(”NOW”) WHERE id = new.id; END;’)

次はDelete用かな・・・(to be continue

タグ : ·

コメント(0)

コメントを受け付けておりません。