mysqlトリガの作成

1597 ワード

トリガ文は一言だけ
beginとendは省略できます
CREATE trigger `do_praise` after insert on praise 
    for each row
    update post set praiseCount=praiseCount+1;

delimiterについて
sqlでは、多くのキーシンボルは強制的に要求されず、escape select 'we#' like 'we#%';-- escape '#';などのユーザによって指定される.
コメントなしの結果は1、コメントがある結果は0です.たとえば、'%'を含む文字列を一致させるには、'%#%'escape'#'と書きます.delimiterは区切り記号を表し、デフォルトはセミコロンで、文字列として書くこともできます.
delimiter weidiao
select 3weidiao
select 4;
select 5;

上のコードは、select 4とselect 5の間に区切り記号が欠けているとエラーが表示されます.以上から,この実装は簡単な文字列置換であり,#defineマクロ定義に相当する.
トリガ文に複数の文がある
beginとendを省略することはできません.endの後にdelimiterが必要です.beginとendの間には必ずsqlコードがあり、sqlコードの区切り記号は必ずカスタムの他の文字列ではなくセミコロンです.トリガだからこのdelimiterはどんな記号ですか?宣言されたもので、delimiter;;;;;;などの文字列に宣言できます.@#$%^&*などの記号として宣言したり、他の任意の文字列として宣言したりすることができます.トリガの前にdelimiterを宣言し、トリガ定義が終了した後もdelimiterを定義します(これは、区切り記号として';'に戻る場合に相当します).
delimiter @
CREATE trigger `do_praise`  after insert on praise 
for each row
begin
    update post set praiseCount=praiseCount+1; 
end @
delimiter ;

トリガ6種類(before+after)*(insert+delete+update)=6の場合workbenchを使用するとトリガの作成が可視化され、トリガ文に集中できます.
トリガのセキュリティ
この三つのもの
  • beforeフリップフロップ
  • 削除文
  • afterフリップフロップ
  • 1つのトランザクションで、エラーが1つあれば、後で実行しません.エラーが発生すると、トランザクションがロールバックされ、前の操作が無効になります.
    トリガを作成するタブー
    回路を生成することはできません.例えば、表1の挿入によって表2の削除がトリガーされ、表2の削除は発表1の操作に触れることはできません(削除変更を含む).
    転載先:https://www.cnblogs.com/weiyinfu/p/5430839.html