mysqlファミリーバケツ(五)トリガ
2583 ワード
一、概念
トリガ(trigger):ある状況を監視し、ある操作をトリガします.これはプログラマとデータ分析者にデータの完全性を保証する方法です.テーブルイベントに関連する特殊なストレージプロセスです.その実行はプログラムによって呼び出されるのではなく、手作業によって開始されるのではなく、イベントによってトリガされます.たとえば、テーブルを操作(insert,delete,update)すると、実行がアクティブになります.
トリガは、データの整合性制約やビジネス・ルールなどを強化するためによく使用されます.
二、要素監視場所(table) 監視イベント(insert/update/delete) トリガ時間(after/before) トリガイベント(insert/update/delete) 三、文法
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」を加えるなど)を行うことができます.
六、変数
七、例
八、表示、削除
九、トリガ事務
InnoDBデータベースはトランザクションが安全です.SQL文またはトリガの実行に失敗すると、MySQLはトランザクションをロールバックします. BEFOREトリガの実行に失敗した場合、SQLは を正しく実行できません. SQLの実行に失敗した場合、AFTER型トリガは をトリガーしません. AFTERタイプのトリガの実行に失敗しました.SQLは をロールバックします.
トリガ(trigger):ある状況を監視し、ある操作をトリガします.これはプログラマとデータ分析者にデータの完全性を保証する方法です.テーブルイベントに関連する特殊なストレージプロセスです.その実行はプログラムによって呼び出されるのではなく、手作業によって開始されるのではなく、イベントによってトリガされます.たとえば、テーブルを操作(insert,delete,update)すると、実行がアクティブになります.
トリガは、データの整合性制約やビジネス・ルールなどを強化するためによく使用されます.
二、要素
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はトランザクションをロールバックします.