sql >> データベース >  >> RDS >> Database

SQLのトリガーとは何ですか?それらを実装する方法は?

    SQLのトリガーは、指定されたテーブルの特定のイベントに応答して自動的に実行される手続き型コードです。これらの小さなコードがデータベースのパフォーマンスにどのように大きな違いをもたらすかを理解することが重要です。この記事では、例とともにトリガーを実装する方法を学習します。

    この記事では、次のトピックについて説明します。

    • トリガーとは何ですか?
    • 構文と例
    • トリガーでの操作
    • 長所と短所

    トリガーとは何ですか?

    トリガーは、特定のテーブルの特定のイベントに応答して自動的に実行されるSQLコードです。これらは、データの整合性を維持するために使用されます。 SQLのトリガーは、実際のトリガーと同様に機能します。たとえば、銃の引き金を引くと弾丸が発射されます。私たちは皆これを知っていますが、これはSQLのトリガーとどのように関連していますか?これを理解するために、架空の状況を考えてみましょう。

    ジョンは会社のマーケティング責任者です。新しい顧客データが会社のデータベースに入力されると、彼は各新しい顧客にウェルカムメッセージを送信する必要があります。 1人か2人の顧客の場合、ジョンは手動でそれを行うことができますが、カウントが1000を超える場合はどうなりますか?このようなシナリオでは、トリガーが役立ちます。

    したがって、Johnは、データがデータベースに入力されると、新しい顧客にウェルカムメールを自動的に送信するトリガーを簡単に作成できるようになりました。したがって、SQLでのトリガーの導入について明確に理解していただければ幸いです。

    1つのテーブルに対して同じようなアクション時間とイベントを持つ2つのトリガーは存在できないことを常に覚えておいてください。たとえば、テーブルに対して2つのBEFOREUPDATEトリガーを設定することはできません。ただし、更新前は可能です。 および挿入前 トリガー、または更新前 および更新後 トリガー。

    トリガーの基本について詳しく説明する前に、SQLの基本と正規化の概念を理解して、SQLのトリガーをよりよく理解できるようにすることをお勧めします。

    >

    構文と例

    次に、トリガーの構文を見てみましょう。

    Create Trigger Trigger_Name
    (Before | After)  [ Insert | Update | Delete]
    on [Table_Name]
    [ for each row | for each column ]
    [ trigger_body ]

    ここで、この構文を分解して、すべての部分を詳細に説明します。

    • トリガーの作成
      これらの2つのキーワードは、トリガーブロックが宣言されることを指定するために使用されます。
    • Trigger_Name
      トリガーの名前を指定します。トリガー名は一意である必要があり、繰り返さないでください。
    • 前|後
      これは、トリガーがいつ実行されるかを指定します。トリガーが開始された時刻、つまり進行中のイベントの前または後の時刻を示します。
    • トリガーの前 データベースに保存される前にレコード値を更新または検証するために使用されます。
    • トリガー後 システムによって設定されたフィールド値にアクセスし、他のレコードに変更を加えるために使用されます。アフタートリガーをアクティブにするレコードは読み取り専用です。レコードを更新する場合は、読み取り専用エラーが発生するため、Afterトリガーを使用できません。
    • [ 挿入|更新|削除 ]
      これらはDML操作であり、特定のトリガーでどちらかを使用できます。
    • [ Table_Name ]
      トリガーが適用されているテーブル名について言及する必要があります。 を使用することを忘れないでください キーワードを指定し、選択したテーブルがデータベースに存在することも確認してください。
    • [各行|列ごとに]
      1. 行レベルのトリガーは、行の任意の列値の前または後に実行されます。 変更
      2. 列レベルのトリガーは、指定された列の前または後に実行されます 変更
    • [ trigger_body]
      これは、トリガーが呼び出されたときに実行する必要のあるクエリで構成されています。

    つまり、これはすべて単純なトリガーに関するものでした。ただし、マルチプロセスを実行できるネストされたトリガーを作成することもできます。また、適切なタイミングで処理および終了することも非常に重要です。トリガーを適切に終了しないと、無限ループが発生する可能性があります。

    ネストされたトリガーをどのシナリオで使用できるか疑問に思われるかもしれません。カスタマイズされた回答を提供するのではなく、シナリオを共有します。これは、ネストされたトリガーをより適切に理解するのに役立ちます。前のシナリオから続けて、ジョンは会社のデータベースに追加されたすべての新規顧客に電子メールを送信しました。では、彼が電子メールの送信先の顧客の数を追跡したい場合はどうでしょうか。次に、ジョンはネストされたトリガーを作成して、電子メールの送信とともにカウントを追跡する必要があります。

    これでトリガーの構文について説明しました。次に、SQLでトリガーの例を実装してみましょう。

    トリガーの例:

    以下のトリガーでは、学生の詳細がデータベースに更新されるとすぐに、学生の割合を計算しようとしています。

    CREATE TRIGGER sample_trigger
    before INSERT
    ON student
    FOR EACH ROW
    SET new.total = new.marks/6;

    ここに「NEW」があります キーワードは、影響を受ける行を指します。

    トリガーの操作

    トリガーを使用して多くの操作を実行できます。単純なものもあれば、少し複雑なものもありますが、クエリを実行すると理解しやすいものもあります。

    • トリガーをドロップ
    DROP TRIGGER trigger name;
    • トリガーを表示する

    以下のコードは、存在するすべてのトリガーを表示します。

    SHOW TRIGGERS;

    以下のコードは、特定のデータベースに存在するすべてのトリガーを表示します。

    SHOW TRIGGERS
    IN database_name;

    例:

    SHOW TRIGGERS IN edureka;

    上記の例では、Edurekaという名前のデータベースに存在するすべてのトリガーが表示されます。

    また、挿入前と挿入後のトリガーのいくつかの主要なバリエーションについても説明します。この例では、すでにトリガーが見られます。しかし、表の助けを借りて、これがどのように正確に機能するかを見てみましょう。

    トリガーの作成方法はすでに理解しているので、次に、挿入前と挿入後の2つのトリガーのバリエーションを理解しましょう。それらを実装するために、以下に示すようにさまざまな列を持つ学生テーブルを作成しましょう。

    CREATE TABLE Student(
    studentID INT NOT NULL AUTO_INCREMENT,
    FName VARCHAR(20),
    LName VARCHAR(20),
    Address VARCHAR(30),
    City VARCHAR(15),
    Marks INT,
    PRIMARY KEY(studentID)
    );
    >

    このクエリを実行すると、次のテーブルが表示されます。

    最初のバリエーション、つまり挿入前を使用してみましょう

    CREATE TRIGGER calculate
    before INSERT 
    ON student
    FOR EACH ROW
    SET new.marks = new.marks+100;

    ここで、データを生徒のテーブルに自動的に挿入すると、トリガーが呼び出されます。トリガーにより、マーク列の生徒列に100が追加されます。

    次に、2番目のバリエーション、つまりを使用しましょう。 挿入

    このバリアントを使用するには、もう1つのテーブル、つまりトリガーが結果を保存するパーセンテージが必要です。以下のコードを使用して、パーセンテージテーブルを作成します。

    create table Final_mark(
    per int );

    次に、挿入後トリガーを使用しましょう

    CREATE TRIGGER total_mark
    after insert 
    ON student
    FOR EACH ROW
    insert into Final_mark values(new.marks);

    ここで、テーブルにデータを挿入すると、 total_mark trigger 結果はFinal_markテーブルに保存されます。

    これでトリガーの操作について説明しました。次に進み、その長所と短所を見てみましょう。

    トリガーの長所と短所

    利点

    • セキュリティを強制する データベースに存在するテーブルの承認
    • トリガーは、データの整合性をチェックする別の方法を提供します
    • 無効な対策 交換
    • トリガーエラーの処理 データベースレイヤーから
    • 通常、トリガーはデータの検査に役立ちます テーブルの変更
    • トリガーは、スケジュールされたタスクを実行するための代替方法を提供します 。トリガーを使用すると、テーブル内のデータに変更が加えられる前または後にトリガーが自動的に呼び出されるため、スケジュールされたイベントが実行されるのを待つ必要はありません。

    デメリット s

    • トリガーは拡張された検証のみを提供できます つまり、すべての種類の検証ではありません。簡単な検証には、NOT NULL、UNIQUE、CHECK、およびFOREIGNKEY制約を使用できます
    • トリガーにより、オーバーヘッドが増加する可能性があります データベースの
    • トリガーはトラブルシューティングが難しい場合があります データベースで自動的に実行されるため、クライアントアプリケーションからは見えない可能性があります

    これで、SQLのトリガーに関する記事は終わりです。トリガーの概念を理解していただければ幸いです。

    MySQLについて詳しく知り、このオープンソースのリレーショナルデータベースについて知りたい場合は、インストラクター主導のライブトレーニングと実際のトレーニングが付属するMySQLDBA認定トレーニングを確認してください。 -ライフプロジェクトの経験。このトレーニングは、MySQLを深く理解し、主題をマスターするのに役立ちます。

    質問がありますか? SQLのこのトリガーのコメントセクションにその旨を記載してください。折り返しご連絡いたします。


    1. チェック制約は別のテーブルに関連付けることができますか?

    2. プランエクスプローラーで転換点を視覚化する

    3. SQL ServerでID列を更新するにはどうすればよいですか?

    4. より多くのトランザクションログファットをトリミングする