トリガーは、データベース内の特別なイベントが発生するたびに自動的に呼び出されるデータベース内のストアド プロシージャです。たとえば、指定されたテーブルに行が挿入されたとき、または特定のテーブル列が更新されたときに、トリガーを呼び出すことができます。簡単に言うと、トリガーは以下の集合です。 SQL システム メモリに保存される特定の名前を持つステートメント。これは、データベース サーバー イベントに応答して自動的に呼び出されるストアド プロシージャの特定のクラスに属します。すべてのトリガーにはテーブルが接続されています。
トリガーはストアド プロシージャとは異なり、直接呼び出すことができないため、特殊なプロシージャと呼ばれます。トリガーは、テーブルに対するデータ変更イベントが発生するたびに自動的に呼び出されます。これがトリガーとプロシージャの主な違いです。一方、ストアド プロシージャは直接呼び出す必要があります。
トリガーとストアド プロシージャの主な違いは次のとおりです。
- トリガーを手動で呼び出したり実行したりすることはできません。
- トリガーがパラメーターを受け取る可能性はありません。
- トランザクションはトリガー内でコミットまたはロールバックできません。
構文:
トリガー [トリガー名] を作成します
[前 |後]
休憩のためのJava入れる
[テーブル名] で
[各行について]
[トリガーボディ]
構文の説明
- トリガーの作成 [trigger_name]: 既存のトリガーを作成するか、trigger_name で置き換えます。
- [前 | after]: トリガーをいつ実行するかを指定します。
- insert : DML 操作を指定します。
- On [table_name]: トリガーに関連付けられたテーブルの名前を指定します。
- [for each row]: これは行レベルのトリガーを指定します。つまり、トリガーは影響を受ける行ごとに実行されます。
- [trigger_body]: トリガーが起動されたときに実行される操作を提供します。
なぜトリガーを採用するのか?
特定の望ましいシナリオでいくつかのアクションを自動的に実行する必要がある場合、トリガーが役立ちます。たとえば、常に変化するテーブルに対する変更の頻度とタイミングを認識する必要があります。このような場合、プライマリ テーブルに変更が加えられた場合に、必要なデータを別のテーブルに挿入するトリガーを作成できます。
SQL Server のさまざまなトリガーの種類
トリガーには 2 つのカテゴリが存在します。
- DDLトリガー
- DMLトリガー
- ログオントリガー
DDL トリガー
Create_table、Create_view、drop_table、Drop_view、Alter_table などのデータ定義言語 (DDL) コマンド イベントにより、DDL トリガーがアクティブになります。
SQLサーバー
create trigger safety on database for create_table,alter_table,drop_table as print 'you can not create,drop and alter tab>
出力:
DML トリガー
データは、挿入、更新、および削除で始まる操作言語 (DML) コマンド イベントを使用して、DML トリガーを開始します。 insert_table、update_view、および delete_table に対応します。
SQLサーバー
Javaリストノード
create trigger deep on emp for insert,update ,delete as print 'you can not insert,update and delete this table i' rollback;>
出力:
ログオントリガー
ログオン トリガーは、LOGON イベントに応答して起動されます。ログ記録の認証プロセスが完了した後、ユーザー セッションを確立する前に、SQL Server インスタンスとのユーザー セッションが作成されると、LOGON イベントが発生します。その結果、PRINT ステートメントのメッセージとトリガーによって生成されたエラーはすべて SQL Server エラー ログに表示されます。認証エラーにより、ログオン トリガーが使用できなくなります。これらのトリガーを使用すると、ログイン アクティビティを追跡したり、サーバー セッションを監査および管理するために特定のログインが保持できるセッション数に制限を設定したりできます。
SQL Server はどのようにトリガーを表示しますか?
show トリガーまたは list トリガーは、多数のテーブルを含む多数のデータベースがある場合に便利です。このクエリは、テーブル名が複数のデータベース間で同じである場合に非常に便利です。以下のコマンドを使用して、SQL Server で使用可能なすべてのトリガーのリストを表示できます。
構文:
FROM sys.triggers、SELECT 名、is_instead_of_trigger
IF タイプ = 'TR';
SQL Server Management Studio を使用すると、特定のテーブルで使用できるすべてのトリガーを非常に簡単に表示またはリストできます。これを達成するには、次の手順が役立ちます。
に行きます データベース メニューから目的のデータベースを選択し、展開します。
- を選択 テーブル メニューを選択して展開します。
- 特定のテーブルを選択して展開します。
ここでさまざまなオプションを取得します。私たちが選択するとき、 トリガー オプションを選択すると、この表で使用可能なすべてのトリガーが表示されます。
トリガー前とトリガー後
BEFORE トリガーは、トリガーとなるステートメントが実行される前にトリガー アクションを実行します。 AFTER トリガーは、トリガー ステートメントの実行後にトリガー アクションを実行します。
例
学生の成績評価が記録される所定の学生レポート データベース。このようなスキーマでは、レコードが挿入されるたびに、指定されたマークの合計と割合が自動的に挿入されるようにトリガーを作成します。
部分誘導体ラテックス
ここでは、BEFORE タグを使用できるように、レコードが挿入される前にトリガーが呼び出されます。
データベーススキーマを仮定します。
クエリ
mysql>>説明学生;>>
問題ステートメントへの SQL トリガー。
上記の SQL ステートメントは、学生データベースにトリガーを作成します。このトリガーは、科目マークが入力されるたびに、このデータをデータベースに挿入する前に、これら 2 つの値を計算し、入力された値とともに挿入します。つまり
出力
このようにして、データベース内でトリガーを作成して実行できます。
トリガーの利点
SQL Server でトリガーを使用する利点は次のとおりです。
- データベース オブジェクトのルールはトリガーによって確立され、ルールが満たされない場合は変更が元に戻されます。
- トリガーはデータを検査し、必要に応じて変更を加えます。
- トリガーのおかげでデータの整合性を強制できます。
- データは挿入または更新される前にトリガーを使用して検証されます。
- トリガーは、記録ログの維持に役立ちます。
- トリガーは実行するたびにコンパイルする必要がないため、SQL クエリのパフォーマンスが向上します。
- クライアント側のコードはトリガーによって削減され、時間と労力が節約されます。
- トリガーのメンテナンスが簡単です。
不利益 トリガーの
SQL Server でトリガーを使用する場合の欠点は次のとおりです。
- 拡張検証の使用を許可するのはトリガーのみです。
- 自動トリガーが使用されるため、ユーザーはトリガーがいつ実行されるかを知りません。したがって、データベース層で発生する問題のトラブルシューティングは困難です。
- トリガーの結果として、データベース サーバーのオーバーヘッドが増加する可能性があります。
- 単一の CREATE TRIGGER ステートメントで、INSERT や UPDATE などの複数のユーザー アクションに対して同じトリガー アクションを指定できます。
- トリガーの作成に使用できるのは現在のデータベースのみですが、データベースの外部のオブジェクトへの参照を作成することはできます。
よくある質問
Q1: SQLトリガーとは何ですか?
答え:
SQL トリガーはテーブルに関連付けられたデータベース オブジェクトであり、そのテーブルで特定のイベントが発生したときに一連の SQL ステートメントを自動的に実行します。トリガーは、ビジネス ルールを適用し、データの整合性を維持し、データベース内の特定のアクションを自動化するために使用されます。これらは、テーブル内のデータの挿入、更新、削除などのさまざまなイベントによってトリガーでき、それらのイベントに基づいて追加の操作を実行できるようになります。
Q2: SQL トリガーはどのように機能しますか?
答え:
SQL トリガーは SQL ステートメントを使用して定義され、特定のテーブルに関連付けられます。定義されたトリガー イベント (INSERT、UPDATE、DELETE など) がそのテーブルで発生すると、関連付けられたトリガー コードが自動的に実行されます。トリガー コードは、同じテーブルまたは別のテーブル内のデータを操作したり、制約を強制したり、その他のアクションを実行したりできる SQL ステートメントで構成されます。トリガーはトランザクション スコープ内で実行され、トリガー イベントの前または後に実行するように定義できます。
Q3: SQL トリガーを使用する利点は何ですか?
答え:
SQL トリガーを使用する利点は次のとおりです。
データの整合性: トリガーを使用すると、複雑なビジネス ルールと制約をデータベース レベルで強制し、データの一貫性と正確性を確保できます。
JavaScriptのforループ自動化: トリガーは、指定されたイベントが発生するたびに事前定義されたアクションを実行することにより、反復的なタスクや複雑なタスクを自動化できます。これにより、手動介入の必要性が減り、効率が向上します。
監査証跡: トリガーを使用して、別の監査テーブルに変更を記録するなど、データに加えられた変更を追跡できます。これは、データ変更の履歴を監査および維持するのに役立ちます。
データ検証: トリガーは、データが挿入、更新、または削除される前に追加の検証チェックを実行し、有効で適合するデータのみがデータベースに保存されるようにすることができます。