ホームページ >php教程 >PHP开发 >SQLにおけるトリガーの詳しい説明

SQLにおけるトリガーの詳しい説明

高洛峰
高洛峰オリジナル
2016-12-14 16:14:461361ブラウズ

トリガー

トリガーの概要: トリガーは特別なストアド プロシージャであり、その実行はプログラムによって呼び出されたり、手動で開始されたりするのではなく、テーブルの操作 (挿入、削除、更新) によってトリガーされます。トリガーは、データ整合性の制約とビジネス ルールを強化するためによく使用されます。私の考えでは、トリガーは実際にはイベントであり、C# と同じように、ボタンをクリックすると対応する操作がトリガーされます。


トリガーの分類:

(1) DML (データ操作言語) トリガー: データベースで DML イベントが発生したときにトリガーが有効になることを意味します。 DML イベントは、テーブルまたはビュー内のデータを変更する挿入、更新、および削除ステートメントを指します。

(2) DDL (データ定義言語) トリガー: サーバーまたはデータベースで DDL イベントが発生し、テーブルまたはインデックス内の create、alter、drop ステートメントを参照するときに有効になることを意味します。 ) ログイントリガー: ユーザーが SQL SERVER インスタンスにログインしてセッションを確立するときにトリガーされます



そのうち、DML トリガーが最もよく使用され、DML の方法に応じて次の 2 つの状況に分けられますトリガーがトリガーされる:

(1) AFTER トリガー: INSERT、UPDATE、および DELETE ステートメントの操作を実行した後にトリガー操作を実行します。エラーが発生した場合、Rollback Transaction ステートメントは主に変更の記録後の処理またはチェックに使用されます。

(2) INSTEAD OF トリガー: INSERT、UPDATE、および DELETE ステートメントの操作を実行する前に、トリガー自体によって定義された操作を実行します。 INSTEAD OF トリガーはビューで定義できます。


INSERTED と DELETED

SQL SERVER 2008 では、DML トリガーの実装は 2 つの論理テーブル DELETED と INSERTED を使用し、データベース サーバーのメモリに構築されます。 DELETED テーブルと INSERED テーブルの構造は、トリガーが実行されると自動的に削除されます。INSERED テーブルは次の目的で使用されます。たとえば、データを挿入すると、そのレコードは INSERTED テーブルに挿入されます。DELETED テーブルは、データベース内に insert、update、delete ステートメントがある場合、これら 2 つの一時メモリ常駐テーブルを使用して、特定のステートメントの効果をテストできます。利点と欠点:

トリガーは、データベース内の関連テーブルを介してカスケード変更を実装でき、CHECK 制約で定義された制約よりも複雑な制約を強制できます。たとえば、トリガーは別のテーブルで SELECT を使用して、挿入または更新されたデータを比較したり、データ変更前後のテーブルの状態に基づいて対策を講じたりすることもできます (テーブル内の複数の同様のトリガー)。 、UPDATE、または DELETE) を使用すると、同じ変更ステートメントに応じて複数の異なる応答を取ることができます。

同時に、トリガーは強力で、多くの複雑な機能を簡単かつ確実に実装できますが、なぜ注意して使用する必要があるのでしょうか?トリガーが多すぎると、データベースとアプリケーションの保守が困難になります。同時に、トリガーに過度に依存すると、必然的にデータベースの構造に影響が生じ、保守手順が複雑になります。文法

トリガーの作成

CREATE TRIGGER 触发器名称  
ON 表名  
{ FOR | AFTER | INSTEAD OF }   
{ [ INSERT ] [ , ] [ DELETE ] [ , ]   
   [UPDATE ] }  
AS   
  SQL 语句 [ ... n ]

トリガーの削除:

DROP TRIGGER 触发器名 [ , ... n ]
E
トリガーの変更:

ALTER TRIGGER 触发器名称  
ON 表名  
{ FOR | AFTER | INSTEAD OF }   
{ [ INSERT ] [ , ] [ DELETE ] [ , ]   
   [UPDATE ] }  
AS   
  SQL 语句 [ ... n ]

開くと無効にする:

disable trigger trigDB on database --禁用触发器  
enable trigger trigDB on database --开启触发器

リマインダーと保護:

Rreee

S テーブルの UPDATE トリガー:

print '删除了触发器***'   
raiserror('数据一致性验证',16,1)  
rollback transaction

SC テーブル内の不合格の成績を持つ生徒の記録を削除することは禁止されています:

Create trigger tri_Updates  
on s  
for update   
as   
print 'the table s was updated'

SC テーブル内の不合格の生徒の成績を合格に変更することは禁止されています:

CREATE TRIGGER tri_del_grade  
  ON SC FOR DELETE  
  AS  
    IF EXISTS(SELECT * FROM DELETED      
          WHERE Grade < 60)  
      ROLLBACK

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。