SQLite クラシック チュ...login
SQLite クラシック チュートリアル
著者:php.cn  更新時間:2022-04-13 17:05:02

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() を使用して、プログラム内でスローされる例外をトリガーできます。

構文

トリガーを作成するための基本的な構文は次のとおりです:

CREATE TRIGGER trigger_name [BEFORE|AFTER]event_name
ON table_name
BEGIN
-- トリガーロジックがここに入ります....
END ;
ここで、

event_nameは、前述のテーブルtable_nameに対するINSERT、DELETE、およびUPDATEのデータベース操作です。オプションで、テーブル名の後に FOR EACH ROW を指定できます。

以下は、UPDATE 操作でテーブルの 1 つ以上の指定された列にトリガー (トリガー) を作成する構文です:

CREATE TRIGGER トリガー名 [BEFORE|AFTER] UPDATE OF 列名
ON テーブル名
BEGIN
--トリガーロジックはここにあります....
END;

新しく作成した COMPANY テーブルに挿入されたすべてのレコードの監査テストを維持する (または、既に存在する場合は削除して再作成する) という状況を想定します。

sqlite> CREATE TABLE COMPANY(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
);

監査実験を維持するために、 AUDIT という新しいテーブルを作成します。 COMPANY テーブルに新しいレコード項目が存在するたびに、ログ メッセージがそこに挿入されます:

sqlite> CREATE TABLE AUDIT(
EMP_ID INT NOT NULL,
ENTRY_DATE TEXT NOT NULL
);

ここで、IDは AUDIT レコードの ID、EMP_ID は COMPANY テーブルの ID、DATE は COMPANY のレコードが作成されたときのタイムスタンプを保持します。そこで、次のように COMPANY テーブルにトリガーを作成しましょう:

sqlite> CREATE TRIGGER Audit_log AFTER INSERT
ON COMPANY
BEGIN
INSERT INTO AUDIT(EMP_ID, ENTRY_DATE) VALUES (new.ID, datetime( 'now' ));
END;

次に、COMPANY テーブルへのレコードの挿入を開始します。これにより、AUDIT テーブルに監査ログ レコードが作成されます。そこで、COMPANY テーブルに次のようにレコードを作成しましょう:

sqlite> INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'Paul', 32, 'California', 20000.00 ) ;

これにより、COMPANY テーブルに次のレコードが作成されます:

ID NAME ADDRESS SALARY
---------- ---------- ---- --- --- ----------- ----------
1 " Paul " 32 " カリフォルニア 20000.0

同時にAUDITテーブルにレコードが作成されます。このレコードは、INSERT 操作で COMPANY テーブルに作成したトリガーの結果です。同様に、必要に応じて UPDATE および DELETE 操作でトリガーを作成できます。

EMP_ID ENTRY_DATE
---------- ------------------
1 2013-04-05 06:26:00

リストTRIGGERS (TRIGGERS)

次のように sqlite_master テーブルからすべてのトリガーをリストできます:

sqlite> SELECT name FROM sqlite_master
WHERE type = 'trigger'; 上記のステートメントは 1 つのエントリのみをリストします。次のように:

name

----------
audit_log


特定のテーブルのトリガーを一覧表示する場合は、以下に示すように、AND 句を使用してテーブル名を結合します。
sqlite> SELECT name FROM sqlite_master
WHERE type = 'trigger' AND tbl_name = 'COMPANY';

上記の SQLite ステートメントは、次のように 1 つのエントリのみをリストします。 --
audit_log
トリガーの削除 (TRIGGERS)

以下は、既存のトリガーを削除するために使用できる DROP コマンドです:

sqlite> DROP TRIGGER trigger_name;