mysqlファミリーバケツ(五)トリガ

2583 ワード

一、概念
トリガ(trigger):ある状況を監視し、ある操作をトリガします.これはプログラマとデータ分析者にデータの完全性を保証する方法です.テーブルイベントに関連する特殊なストレージプロセスです.その実行はプログラムによって呼び出されるのではなく、手作業によって開始されるのではなく、イベントによってトリガされます.たとえば、テーブルを操作(insert,delete,update)すると、実行がアクティブになります.
トリガは、データの整合性制約やビジネス・ルールなどを強化するためによく使用されます.
二、要素
  • 監視場所(table)
  • 監視イベント(insert/update/delete)
  • トリガ時間(after/before)
  • トリガイベント(insert/update/delete)
  • 三、文法
    CREATE TRIGGER trigger_name
    trigger_time
    trigger_event ON tbl_name
    FOR EACH ROW
    trigger_stmt

    trigger_name:トリガ名を識別し、ユーザーが自分で指定します.trigger_time:トリガタイミングを識別し、BEFOREまたはAFTERの値をとる.trigger_event:INSERT、UPDATEまたはDELETEの値を持つトリガイベントを識別します.tbl_name:トリガを確立するテーブル名、すなわち、どのテーブルにトリガを確立するかを識別します.trigger_stmt:フリップフロップ・プログラム・ボディ.SQL文またはBEGINとENDに含まれる複数の文です.
    四、trigger_event
    MySQLはINSERT、UPDATE、DELETEの基本操作を定義するほか、LOAD DATAとREPLACE文も定義している
    LOAD DATA文は、一連のINSERT操作に相当するファイルをデータテーブルに読み込むために使用されます.
    REPLACE文は一般的にINSERT文と似ていますが、表にprimary keyまたはuniqueインデックスがある場合、挿入されたデータが元のprimary keyまたはuniqueインデックスと一致すると、元のデータが削除され、新しいデータが追加されます.つまり、1つのREPLACE文が1つのINSERT文に等しい場合があります.1つのDELETE文にINSERT文を付けるのと同じ場合があります.
    この2つの文はINSERT型トリガをトリガーします
    五、NEWとOLD
    INSERT型フリップフロップでは、NEWは、(BEFORE)または(AFTER)挿入する新しいデータを表すために使用される.UPDATE型フリップフロップでは、OLDは、変更されるべきまたは変更された元のデータを表し、NEWは、変更されるべきまたは変更された新しいデータを表す.DELETE型フリップフロップでは、OLDは、削除される元のデータまたは削除された元のデータを表すために使用される.使用方法:NEW.columnName(columnNameはデータテーブルのカラム名)また、OLDは読み取り専用であり、NEWはトリガでSETを使用して値を割り当てることができ、これによりトリガが再びトリガーされず、ループ呼び出し(データを挿入し、符号化前に今日の日付「yyyyyMMdd」を加えるなど)を行うことができます.
    六、変数
    #  ( begin )
    DECLARE variable_name [,variable_name...] datatype;
    
    #    ( begin、end  )
    SET     =      [,variable_name = expression ...]
    
    #  
    SET var_name = expr [, var_name = expr] ...
    
    

    七、例
    DROP TRIGGER IF EXISTS `ins_info`;  
    create trigger ins_info  
    after insert on nhfxelect for each row   
    begin  
        if HOUR(new.RecordTime)='20' then    
        insert into nhfxbyhour (UnitDepName, UnitDepCode, ElectCost, TimeJG, RecordTime)  
            values( '    ', '1', new.USERKWH, '20', new.RecordTime);  
        end if;  
    end;  

    八、表示、削除
    #     
    SHOW TRIGGERS [FROM schema_name];
    
    #  (schema_name    、trigger_name    )
    DROP TRIGGER [IF EXISTS] [schema_name.]trigger_name

    九、トリガ事務
    InnoDBデータベースはトランザクションが安全です.SQL文またはトリガの実行に失敗すると、MySQLはトランザクションをロールバックします.
  • BEFOREトリガの実行に失敗した場合、SQLは
  • を正しく実行できません.
  • SQLの実行に失敗した場合、AFTER型トリガは
  • をトリガーしません.
  • AFTERタイプのトリガの実行に失敗しました.SQLは
  • をロールバックします.