用語&ylbtech-DB- - トリガー:百科事典 |
トリガー(引き金)SQLサーバは、プログラマやデータアナリストが利用できる
データの整合性を確認し
、それをテーブルに関連付けられている特別なイベントであり、メソッドのを
、ストアドプロシージャ
、その実行は、プログラムではなく、手動開始によって呼び出されていませんしかし、イベントによってトリガされる
ような
テーブルの操作(挿入、削除、更新)は、それを実行するために活性化されるとき。トリガは、多くの場合、データの整合性制約およびビジネスルールなどを強化するために使用されています。トリガーはDBA_TRIGGERS、USER_TRIGGERSデータ辞書から見つけることができます。SQL3トリガーは、データベースの変更に対してステートメントがシステムによって自動的に実行することが可能です。
トリガーは、他のテーブルを照会することができ、複雑な含めることができる
のSQL
文を。彼らは主に服従、複雑なビジネスルールや要件を強制するために使用されています。例えば:あなたは、顧客の現在のアカウント状況、制御によれば、新規受注の挿入を可能にすることができるかどうか。
トリガーはまたテーブル、更新、または削除複数の行を追加するために、保持力との関係は表に定義され、参照整合性を強制するために使用することができます。ただし、参照整合性を施行するための最良の方法は、関連テーブルの主キーと外部キー制約を定義することです。データベースダイアグラム場合は、自動的に外部キー制約を作成するには、テーブル間のリレーションシップを作成することが可能です。
トリガとトリガとの間の唯一の違いは、ストアドプロシージャの呼び出しであるステートメントをEXECUTE実行することはできないが、ときに、ユーザが実行するTransact-SQLステートメントを自動的に実行引き起こしました。
さらにフリップフロップ回路は、メモリ機能を有する論理回路の基本単位であり、バイナリデータストレージ、メモリおよび他の情報のために使用することができます。
1. トップへ戻ります |
1、
- 中国名:トリガー
- 英語名:トリガー
- はじめに:のテーブルに関連付けられている特別なイベント のストアドプロシージャ
- 従来のタイプ:DMLトリガー、DDLトリガーなど
2、
2. トップへ戻ります |
1、
トリガーの役割
フリップフロップは、次のような効果があります。
-
データテーブル、データ変換や強制的な検査の前に記述することができます。
-
トリガーにエラーが発生した場合、トランザクションの結果が取り消されます。
-
データベース管理システムトリガーの部分は、DDLトリガーと呼ばれるデータ定義言語(DDL)のために使用することができます。
-
特定の条件があってもよいに従い、それは別の命令(その代わりに)を変化させます。
分類
DMLトリガー、DDLトリガー、およびログオントリガ:[1] SQL Serverは、トリガーの3つの一般的なタイプを含みます。
(論理機能に応じて論理回路で等RSフリップフロップ、Dフリップフロップ、同期トリガに分割することができます)
DMLトリガー
場合は、データベース内のテーブル
のデータの変更
、我々は自動的に、その後、テーブルの上にトリガを対応するDMLトリガーを作成する場合は、挿入、更新を含むが、任意の操作を削除します。ビジネスルールを施行DMLトリガーの主な役割、およびSQL Serverの制約、デフォルトなどを拡張しました。私たちは、同じテーブルからの唯一の制約制約データを知っているし、トリガすることができますので、SQLは、任意のコマンドを実行します。
DDLトリガ
これは、SQL Server2005で
の新しいトリガー
主にレビューのために、データベースのテーブル、トリガ、ビューなどの構造の動作を制御します。例えば、改変された形態で、列を変更する、テーブルを追加するなどの行を追加します。データベース構造の変更は、私たちは主に特定の指定リストを削除することができ、そのようなないよう、データベースプログラマの制限への変更、だけでなく、データベースを変更するプロセスを記録するためにそれを使用するときに実行されます。
ログオントリガー
ログオントリガーは、
LOGINイベントは、ストアドプロシージャを触発対応させていただきます
。ユーザー・セッションがSQL Serverインスタンスで確立されたときに、このイベントが発生します。ログイン認証フェーズが完了した後とユーザーのログオントリガは、実際に成立する前にセッションを刺激します。したがって、すべての内部トリガーから(例えばPRINT文からエラーメッセージやメッセージなどの)メッセージと一般ユーザーのに到着するには、SQL Serverエラーログに送信されます。認証が失敗した場合、ログインがトリガを起動しません。
SQL構文
DELIMITER |
CREATE TRIGGERを `<データベース>` .` <triggerName> `
<[BEFORE | AFTER]> <[INSERT | UPDATE | DELETE]>
ON [DBO]テーブルの所有者の<テーブル名>が// DBO代わっ
各行ごとに
ベギン
--do何か
END |
利点
データベーストリガーすることができ
、変更に関連するテーブルをカスケード接続し
、しかし、参照整合性制約をカスケード接続することによって、これらの変更をより効果的に実施することができます。トリガはよりも使用するように強制することができます
チェック
制約定義された制約より複雑な制約。CHECK制約異なるトリガは、テーブル内の他の列を参照することができます。例えば、トリガはSELECT比較が挿入または更新され、そしてそのような変更データや表示ユーザー定義のエラーメッセージのような他の操作を実行別のテーブル内のデータを使用することができます。トリガは、データ変更状態テーブルの前と後に評価し、差に応じて対策を取ることができます。表より同様のトリガー(INSERT、UPDATE、またはDELETE)が同じ修正文に応じて、異なる戦略の数を取ることができました。
トリガーおよび制約
制約およびトリガーは例外的な状況では、独自の利点を持っています。主な利点は、Transact-SQLのコードを使用してロジックを含む複雑なプロセスをトリガすることができるということです。したがって、トリガーは機能的制約のすべてをサポートすることができ、それは常に最良の方法で与えられた関数ではありません。エンティティ整合性は常に、最低レベルのインデックスを介してこれらのインデックスやPRIMARY KEYの一部とUNIQUE制約を強制すること、または独立した制約の外部で作成する必要があります。アプリケーションの機能要件を満たすための機能を想定し、ドメインの整合性をCHECK制約によって強制されなければならない、と参照整合性(RI)は、FOREIGN KEY制約によって強制されなければなりません。制約関数は、アプリケーションの機能要件を満たすために、サポートすることができない場合は、トリガー非常に便利。
たとえば、次の定義REFERENCES節参照ない限りカスケード操作、またはだけFOREIGN KEY制約値と他の列の値が完全に一致する列の値を確認することができます。
CHECK制約は、同じテーブル内の別の列に列の値または論理式に従って検証することができます。アプリケーションが表に記載されている別の列の値に応じて検証を必要とする場合、トリガーを使用しなければなりません。制約は、標準システムエラーメッセージによって誤ったメッセージを送ることができます。アプリケーションは、より複雑なハンドリングカスタム情報およびエラー(からまたは利益)を使用する必要がある場合、トリガーを使用する必要があります。
これは、データベース内の関連テーブルを使用して変更をカスケードトリガすることができますが、整合性制約は、参照をカスケード接続することによって、これらの変更をより効果的に実施することができます。トリガーは、ブロックすることができますまたはロールバックは、変更は、このようにデータ変更を排除し、参照の整合性に違反しようとしました。変化と新しい外部キーの値は、主キーと一致しない場合には、これらのトリガーの役割が発生することがあります。たとえば、あなたはそれのミスマッチ、挿入titles.title_idのロールバックで新しい価値の価値作り、titleauthor.title_idに挿入トリガーを作成することができます。ただし、FOREIGN KEYは、この目的のために一般に使用します。
そこトリガテーブル上の制約はあるが、INSTEAD OFトリガの実行後に実行AFTERトリガーの前にこれらの制約を確認してください。制約損傷した場合、INSTEAD OFトリガーロールバックは操作とAFTERトリガーを実行しません。
SQL Server™のBooks Onlineのビュー上に作成し、最後にトリガすることができ、ビューにトリガを作成することはできませんと言うことではない、と文法説明することを示している:作成した後TRIGGER ONが表示ことがあります。しかし、それはそうは思えない、多くの専門家は、ビューにトリガを作成することはできませんと言います。私はまた、それが通常のビューまたはインデックス付きビューであるかどうか、真実である、彼らはそれにトリガーを作成することはできません、それは本当に特別なテストをしましたか?
しかし、それで何も間違っている:あなたは、一時テーブルまたはシステムテーブル上のトリガが拒否されます作成するときに。
深い理解した後、INSERT、UPDATE、DELETE、1つ以上とするためのキーワードの文缶のトリガーを作成することを他の状況では希望ではないSELECT、TRUNCATE、WRITETEXT、UPDATETEXTを含む火災トリガー、。
直接データベーステーブルの変更を開くと、私たちは多くの登録システムは、登録後にユーザー名を変更することはできません参照が、これは主にアプリケーションによって決定されていることは興味深いアプリケーション関連コンテンツは、ユーザーは、トリガーで、その名前を変更することができます微妙に達成することができないロールバックを使用してユーザー名を変更...... ......この場合、トリガーの前にデータの変更操作は、エラーの詳細内のステートメントを無効。内部トリガランタイムエラーがこの時点で行われている間、例えば、トリガフリップフロップは、データテーブルに挿入され、それはエラー値を返し、ちょうど挿入されたデータを拒否する。文トリガーは、トリガーでは使用できませんT-SQLステートメントのほとんどで使用することができますが、文のいくつかは、トリガーで使用することができないよう。
CREATE文、など:データベースの作成CREATE TABLEを、CREATE INDEXをというように。
ALTER DATABASE、ALTER TABLE、ALTER INDEXと上のように次のようなALTER文、。
などDROP文:DROPデータベース、DROP TABLE、DROP INDEXなど。
DISK INIT、DISK RESIZE:などDISK文、。
LOAD文、など:LOAD DATABASE、LOADのLOG。
以下のような文を、RESTORE:DATABASEを復元し、LOGを復元します。
RECONFIGURE
TRUNCATE TABLE文は、フリップフロップSYBASEで使用することはできません!
トリガー注意
トリガー強力で、容易かつ確実に多くの複雑な機能を実現するには、なぜそれを注意して使用する必要があります。トリガー自体が故障していない、
しかし、私たちのために悪用の維持が困難とデータベース・アプリケーションを引き起こす可能性があります
。データベース操作では、我々は同じ時間ルール、制約、で......関係、トリガ、ストアドプロシージャ、アプリケーション、およびその他のデータ操作を通じて達成することができます
デフォルト値
だけでなく、保証するために、
データの整合性が
重要なセーフガードです。私たちは、トリガーにあまり依存している場合のメンテナンスの複雑さ増す一方で、データベースの構造に影響を与えるにバインドされ
学位を
。
SQLSERVER例
インサート
作成 トリガtri_insertの 上、学生 のため のインサート として 宣言 @student_idchar(10 ) を選択 @student_id = s.student_idをから学生 インナー 参加 insertedion s.student_id = i.student_id 場合 @student_id = ' 0000000001 ' を開始 RAISERRORを(「不能插入1的学号!"、16、8 ) rollbacktran エンド 行きます
更新
作成 トリガtri_update ON 学生 のための 更新 AS IF アップデート(STUDENT_IDを) 始める RAISERRORを(「学生の数を変更することはできません!」、16、。8 ) rollbacktran エンド ゴー
削除
作成 トリガtri_deleteの 上、学生 のために 削除 として 宣言 @student_idvarchar(10 ) を選択 @student_id = STUDENT_ID から削除された 場合 @student_id = ' 管理者' を開始 RAISERRORを(' 错误'、16、8 ) rollbacktran 終了
2、
3. トップへ戻ります |
4. トップ |
5. トップ |
1、
2、
6. トップへ戻ります |
著者:ylbtech 出典:http://ylbtech.cnblogs.com/ この記事は、執筆者に属し、公園の合計をブログ、転載を歓迎するが、作者の同意なしに、このセクションで宣言されたそれ以外の場合は、保持され、記事ページの見かけ上の位置に元の接続を指定する必要があります法的責任を追及する権利を有します。 |