SQLiteトリガー
SQLite のトリガーはデータベースのコールバック関数であり、指定されたデータベース イベントが発生したときに自動的に実行/呼び出しされます。 SQLite のトリガーに関する重要なポイントは次のとおりです。 SQLite Trigger (トリガー) は、データベースのコールバック関数であり、指定されたデータベース イベントが発生したときに自動的に実行/呼び出されます。 SQLite のトリガーに関する重要なポイントは次のとおりです:
SQLite のトリガーは、特定のデータベース テーブルで DELETE、INSERT、または UPDATE が発生したとき、または 1 つ以上の指定されたテーブルの列が発生したときにトリガーするように指定できます。アップデートが発生します。
SQLite は FOR EACH ROW トリガー (トリガー) のみをサポートしており、FOR EACH STATEMENT トリガー (トリガー) はありません。したがって、FOR EACH ROW の明示的な指定はオプションです。
WHEN 句とトリガーアクションは、NEW.column-name および OLD.column-name の形式の参照を使用して、挿入、削除、または更新される行要素にアクセスできます。ここで、column-name は名前の由来です。トリガーに関連付けられたテーブルの列の。
WHEN 句が指定されている場合、SQL ステートメントは、WHEN 句が true である指定された行に対してのみ実行されます。 WHEN 句が指定されていない場合、SQL ステートメントはすべての行に対して実行されます。
BEFORE または AFTER キーワードは、関連付けられた行の挿入、変更、または削除の前か後かに関係なく、トリガー アクションがいつ実行されるかを決定します。
トリガーに関連付けられたテーブルが削除されると、トリガー(Trigger)も自動的に削除されます。
変更するテーブルは、トリガーがアタッチされているテーブルまたはビューと同じデータベース内に存在する必要があり、database.tablenameではなく、tablenameのみを使用する必要があります。
特別な SQL 関数 RAISE() を使用して、プログラム内でスローされる例外をトリガーできます。
構文
トリガーを作成するための基本的な構文は次のとおりです:
BEGIN
-- トリガーロジックがここに入ります....
END ;
event_nameは、前述のテーブルtable_nameに対するINSERT、DELETE、およびUPDATEのデータベース操作です。オプションで、テーブル名の後に FOR EACH ROW を指定できます。
以下は、UPDATE 操作でテーブルの 1 つ以上の指定された列にトリガー (トリガー) を作成する構文です:BEGIN
--トリガーロジックはここにあります....
END;
例
新しく作成した COMPANY テーブルに挿入されたすべてのレコードの監査テストを維持する (または、既に存在する場合は削除して再作成する) という状況を想定します。
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
);
監査実験を維持するために、 AUDIT という新しいテーブルを作成します。 COMPANY テーブルに新しいレコード項目が存在するたびに、ログ メッセージがそこに挿入されます:
EMP_ID INT NOT NULL,
ENTRY_DATE TEXT NOT NULL
);
ここで、IDは AUDIT レコードの ID、EMP_ID は COMPANY テーブルの ID、DATE は COMPANY のレコードが作成されたときのタイムスタンプを保持します。そこで、次のように COMPANY テーブルにトリガーを作成しましょう:
ON COMPANY
BEGIN
INSERT INTO AUDIT(EMP_ID, ENTRY_DATE) VALUES (new.ID, datetime( 'now' ));
END;
次に、COMPANY テーブルへのレコードの挿入を開始します。これにより、AUDIT テーブルに監査ログ レコードが作成されます。そこで、COMPANY テーブルに次のようにレコードを作成しましょう:
VALUES (1, 'Paul', 32, 'California', 20000.00 ) ;
これにより、COMPANY テーブルに次のレコードが作成されます:
---------- ---------- ---- --- --- ----------- ----------
1 " Paul " 32 " カリフォルニア 20000.0
同時にAUDITテーブルにレコードが作成されます。このレコードは、INSERT 操作で COMPANY テーブルに作成したトリガーの結果です。同様に、必要に応じて UPDATE および DELETE 操作でトリガーを作成できます。
---------- ------------------
1 2013-04-05 06:26:00
リストTRIGGERS (TRIGGERS)
次のように sqlite_master テーブルからすべてのトリガーをリストできます:
WHERE type = 'trigger'; 上記のステートメントは 1 つのエントリのみをリストします。次のように:
name
----------特定のテーブルのトリガーを一覧表示する場合は、以下に示すように、AND 句を使用してテーブル名を結合します。
sqlite> DROP TRIGGER trigger_name;