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

SQLでトリガー

    この記事では、例を使用して、SQLでのトリガーの概念とその実装について学習します。

    構造化照会言語のトリガーは、データベース内のテーブルの特定のイベントへのフィードバックがある場合に自動的に実行される一連の手続き型ステートメントです。トリガーは、データベース内のデータの整合性を保護するために使用されます。

    SQLのトリガーの概念を理解するために、次の状況を見てみましょう。

    Supriyaが多国籍企業の情報技術マネージャーであるとします。新入社員の記録がデータベースに入力されると、彼女は各新入社員に「おめでとう」メッセージを送信する必要があります。従業員が5〜6人の場合、Supriyaは手動でそれを行うことができますが、新しい従業員の数が1,000人を超える場合、そのような状態では、データベースのトリガーを使用する必要があります。

    したがって、Supriyaはテーブルにトリガーを作成する必要があります。トリガーは、レコードがデータベースに挿入されると、新しい従業員に「おめでとう」メッセージを自動的に送信します。

    トリガーは常にデータベース内の特定のテーブルで実行されます。テーブルを削除すると、そのテーブルに関連付けられているすべてのトリガーも自動的に削除されます。

    構造化照会言語のトリガーは、イベントが発生する前またはイベントが発生した後にのみ呼び出されます。

    イベントの前後のトリガーで発生するイベントは、挿入イベント、更新イベント、または削除イベントの3つだけです。

    1.INSERTイベント :新しいレコードがテーブルに挿入されるたびに、挿入イベントが発生します。

    2.更新イベント :テーブル内の既存のレコードが更新されるたびに、更新イベントが発生します。

    3. DELETEイベント: Deleteイベントは、レコードがテーブルから削除されるたびに発生します。

    構造化照会言語のトリガーのタイプ

    構造化照会言語で使用される6種類のトリガーは次のとおりです。

    1. トリガーの挿入後:

    挿入後トリガーは、レコードがテーブルに挿入された後にSQLで呼び出されます。

    2. 更新後のトリガー:

    更新後トリガーは、テーブル内の既存のレコードが更新された後にSQLで呼び出されます。

    3. 削除後のトリガー:

    レコードがテーブルから削除された後、SQLでafterdeleteトリガーが呼び出されます。

    4. トリガーを挿入する前に:

    レコードがテーブルに挿入される前に、SQLでbeforeinsertトリガーが呼び出されます。

    5. 更新トリガーの前:

    テーブル内の既存のレコードが更新される前に、SQLで変更前トリガーが呼び出されます。

    6. トリガーを削除する前に:

    レコードがテーブルから削除される前に、SQLでbeforedeleteトリガーが呼び出されます。

    SQLでのトリガーの構文:

    CREATE TRIGGER Trigger_Name  

    [BEFORE | AFTER]  [Insert | Update | Delete] 

    ON [Table_Name] 

    [FOR EACH ROW | FOR EACH COLUMN] 

    AS 

    Set of SQL Statement
    • トリガー構文では、構文のCREATETRIGGERキーワードの直後にトリガー名を定義する必要があります。
    • トリガー名の後に、呼び出すトリガー、beforeトリガーまたはafterトリガーキーワードをイベント名で定義する必要があります。
    • 次に、トリガーが発生したテーブル名を指定する必要があります。
    • テーブル名の後に、行レベルまたは列レベルのトリガーでトリガーを定義する必要があります。
    • 最後に、発生したイベントに作用するSQLステートメントを作成する必要があります。

    SQLでのトリガーの例

    SQLのトリガーの概念を理解するには、トリガーを実行するテーブルを作成する必要があります。

    次のクエリは、SQLデータベースにStudentテーブルを作成します。

    CREATE TABLE Student(

    Student_rollno INT NOT NULL PRIMARY KEY,

    FirstName varchar(40),

    English_Marks INT,

    Physics_Marks INT,

    Chemistry_Marks INT,

    Biology_Marks INT,

    Maths_Marks INT,

    Total_Marks INT,

    Percentage INT);

    次のクエリは、Studentテーブルの構造を示しています。

    DESC学生;

    フィールド タイプ NULL キー デフォルト 追加
    Student_RollNo INT いいえ PRI NULL
    First_Name Varchar(40) はい NULL
    English_Marks INT はい NULL
    Physics_Marks INT はい NULL
    Chemistry_Marks INT はい NULL
    Biology_Marks INT はい NULL
    Maths_Marks INT はい NULL
    Total_Marks INT はい NULL
    パーセンテージ INT はい NULL

    次のクエリは、テーブルに学生レコードを挿入する前にトリガーを起動します。

    CREATE TRIGGER Student _Marks  

    BEFORE INSERT 

    ON 

    Student 

    FOR EACH ROW 

    SET new.Total_Marks = new.English_Marks + new.Physics_Marks + new.Chemistry_Marks + new.Biology_Marks + new.Maths_Marks,   

    new.Percentage = ( new.Total_Marks / 500) * 100;

    次のクエリは、レコードをStudentテーブルに挿入します。

    INSERT INTO Student (Student_RollNo, First_Name, English_Marks, Physics_Marks, Chemistry_Marks,Biology_Marks, Maths_Marks, Total_Marks, Percentage) VALUES ( 1, ‘Raman’, 90, 80, 75, 70 ,92, 0, 0);  

    上記のINSERTステートメントの出力を確認するには、次のSELECTステートメントを入力する必要があります。

    SELECT * FROM Student

    出力:

    Student_RollNo First_Name English_Marks Physics_Marks Chemistry_Marks Biology_Marks Maths_Marks Total_Marks パーセンテージ
    1 ラマン 90 80 75 70 92 407 81

    SQLのトリガーの利点

    構造化照会言語のトリガーの3つの主な利点は次のとおりです。

    1. SQLは、テーブル内のデータと参照整合性を維持するための代替方法を提供します。
    2. トリガーは、スケジュールされたタスクを自動的に実行するのに役立ちます。
    3. さまざまなビジネスのデータベースレイヤーでエラーを検出します。
    4. データベースユーザーは、挿入および更新する前に値を検証できます。

    SQLのトリガーの欠点

    構造化照会言語のトリガーの主な欠点は次のとおりです。

    1. コンパイルされません。
    2. トリガーのエラーを見つけてデバッグすることはできません。
    3. トリガーで複雑なコードを使用すると、アプリケーションの実行が遅くなります。
    4. トリガーを使用すると、データベースシステムの負荷が高くなります。


    1. 外部サービスでログインする

    2. 最高のPostgreSQL高可用性フレームワークは何ですか? PAF vs. repmgrvs.Patroniインフォグラフィック

    3. postgresqlで変数の値を出力する

    4. Mysqlには、mssqlのように@@ ROWCOUNTと同等のものがありますか?