SQLiteのトリガー
SQLiteデータベース・トリガーは、コールバック関数であるコール/指定されたデータベース・イベントが発生したときに、それが自動的に実行されます。 トリガーSQLiteの上の主なポイントは次のとおりです。指定されたデータベース・イベントが発生したときにSQLiteのトリガー(トリガー)がデータベースのコールバック関数がされ、それが自動的に/コールを実行します。 次のSQLiteのトリガー(トリガー)に関する主なポイントは以下のとおりです。
SQLiteのトリガーが(トリガー)トリガーは、INSERTまたはUPDATEをDELETE特定のデータベーステーブルの発生時に指定、またはテーブルの更新の1つまたは複数の指定された列が発生したときにトリガすることができます。
SQLiteはないEACH STATEMENTトリガー(トリガー)のため、のみEACH ROWトリガー(トリガー)FORをサポートしています。 したがって、明示的にFOR EACH ROWの指定はオプションです。
句とトリガー(トリガー)アクションが挿入された形NEW.column名とOLD.column名の参照、削除、または更新された行の要素、列名を使用してアクセスすることができるWHEN表の列からのトリガーに関連付けられています名前。
句は、与えられた場合、句はSQL文を実行する行を指定した場合のみに当てはまるWHENです。 何のWHEN句は、すべての行のSQL文を実行されない場合。
BEFOREまたはAFTERトリガーアクションの実装後キーワードは、トリガー・アクションは、決定は、関連する行に挿入され、または削除または変更する前に時を決定します。
テーブルが削除されたトリガーに関連付けられている場合には、自動的にトリガー(トリガー)を削除します。
テーブルがトリガーと同じデータベース内に存在している必要があります修正するには、テーブルやビュー装着されている、とのみテーブル名を使用する必要があり、その代わりにdatabase.tablename。
特別なSQL関数RAISE()は、プログラム内の例外をトリガするために使用することができます。
文法
基本的な構文トリガー(トリガー)を作成し、次のとおりです。
TRIGGERのTRIGGER_NAMEをCREATE [BEFORE | AFTER] EVENT_NAME table_nameで BEGIN - トリガーロジックがここに.... END;
ここで、EVENT_NAMEは、INSERTの表table_nameに記載されたDELETEとUPDATEのデータベース操作することができます。必要に応じて、テーブル名の後にFOR EACH ROWの指定することができます。
以下は、列上の1つまたは複数のテーブルにUPDATE操作で指定されたトリガ(トリガー)構文を作成します。
COLUMN_NAME OF UPDATE | TRIGGERのTRIGGER_NAME [AFTER BEFORE]をCREATE table_nameで BEGIN - トリガーロジックがここに.... END;
例
記録管理、監査テストのそれぞれに(それが既に存在する場合、再作成を削除する)私たちは新しく作成されたテーブルの会社に挿入することにしたいような状況を想定してみましょう:
sqliteの>(表会社を作成 ID INT PRIMARY KEY NOT NULL、 名前テキスト、NOT NULL、 AGEのINT NOT NULLと、 ADDRESSのCHAR(50)、 SALARYのREAL );
監査トライアルを維持するために、我々はAUDITと呼ばれる新しいテーブルを作成します。 会社テーブルは、新たなレコードを持っているときはいつでも、ログメッセージが挿入されます。
sqliteの>(表AUDITをCREATE EMP_IDのINT NOT NULLと、 ENTRY_DATEのTEXT、NOT NULL );
ここで、IDは、監査レコードID、COMPANYテーブルからEMP_ID IDは、COMPANYが記録されたときに、タイムスタンプを維持するDATEが作成されています。 だから、今、次のように私たちはCOMPANY表にトリガーを作成してみましょう:
sqliteの> INSERT AFTERトリガAUDIT_LOGをCREATE COMPANY ON BEGIN AUDIT。INSERT INTO(EMP_ID、ENTRY_DATE)VALUES(new.ID、日時( '今')); END;
我々は今COMPANYテーブルのレコードを挿入するために開始され、これは監査ログAUDITテーブルの作成につながります。 だから、次のようにのは、会社のテーブルのレコードを作成してみましょう:
企業へのsqlite> INSERT(ID、名前、年齢、住所、SALARY) VALUES(1、 'ポール'、32、 'カリフォルニア'、20000.00);
これは、次の表の会社のレコードを作成します。
IDのNAME AGEアドレスSALARY ---------- ---------- ---------- ---------- ---------- 1ポール32カリフォルニア20000.0
同時に、我々は、監査テーブルにレコードを作成します。 このレコードは、我々は、テーブル作成COMPANY(トリガー)の操作をINSERTトリガであるトリガ、の結果です。 同様に、UPDATEおよびDELETE操作(トリガー)にトリガを作成することができます。
EMP_ID ENTRY_DATE ---------- ------------------- 12013-04-05午前六時26分00秒
リストトリガ(TRIGGERS)
次のように、sqlite_masterテーブルからすべてのトリガをリストすることができます。
sqliteの> sqlite_masterから名前を選択 WHEREタイプ= 'トリガ';
次のように上記のSQLiteステートメントは、一つだけのエントリを示しています。
名前 ---------- AUDIT_LOG
あなたが特定のテーブルの上にトリガを表示したい場合は、テーブルを結合するためのAND句を使用して、以下の通りでした:
sqliteの> sqlite_masterから名前を選択 WHEREタイプ= 'トリガ' AND tbl_nameを= 'COMPANY';
次のように上記のSQLiteステートメントは、一つだけのエントリを示しています。
名前 ---------- AUDIT_LOG
(TRIGGERS)トリガを削除します
以下は、DROPコマンドは、既存のトリガを削除するために使用することができています。
sqliteの>のDROP TRIGGERのTRIGGER_NAME。