mysqlのトリガ
1562 ワード
ちょっとjsのイベントに似ています.テーブルの操作を監視し、関連する操作をトリガーできます.
事前にあるテーブルにコードをバインドし、テーブルの一部が変更された場合(削除)、システムは自動的にコードをトリガーし、実行します.
例:2枚の表、1枚の注文表、1枚の商品表があり、1つの注文を生成するたびに、商品の在庫が減少することを意味します.
フリップフロップ
トリガー:イベントタイプ、トリガーイベント、トリガーオブジェクト
イベントタイプ:削除
トリガ時間:前後before after
注意:トリガはテーブルのみでサポートされ、ビューはサポートされていません.
各テーブルのイベントごとに1つのトリガのみが許可されます.したがって,各テーブルには最大6つのトリガ(insert前後,update前後,delete前後)がある.
トリガーの作成
構文:
ここで2つのセミコロンが発生しました.この場合delimiterカスタムシンボルが必要です
文の終端を一時的に変更します.後続のコードではカスタムシンボルに出会ってこそ終了します.
臨時修正をする
delimiter ;
例ordersテーブルにトリガを追加
そしてordersテーブルにデータを挿入します
goodsテーブルが確かに変わったことに気づきました
しかしgidが1のnumだけが1を減算した.
死んだと書いてあるので、トリガにパラメータを渡す必要があります.
トリガを先に削除する必要があります
すべてのトリガを表示すると、demo 1トリガが削除されていることがわかります.
上記の問題を解決する.
old new
MySQLでは、old、newを使用して、現在のステータスと実行後の新しいステータスを記録します.
挿入するとき、old削除がないとき、newがありません
事前にあるテーブルにコードをバインドし、テーブルの一部が変更された場合(削除)、システムは自動的にコードをトリガーし、実行します.
例:2枚の表、1枚の注文表、1枚の商品表があり、1つの注文を生成するたびに、商品の在庫が減少することを意味します.
フリップフロップ
トリガー:イベントタイプ、トリガーイベント、トリガーオブジェクト
イベントタイプ:削除
トリガ時間:前後before after
注意:トリガはテーブルのみでサポートされ、ビューはサポートされていません.
各テーブルのイベントごとに1つのトリガのみが許可されます.したがって,各テーブルには最大6つのトリガ(insert前後,update前後,delete前後)がある.
トリガーの作成
構文:
create trigger t1( )
after ( )
insert ( )
on orders( , )
for each row ( )
begin ( )
update goods xxx ( , , )
end; ( )
ここで2つのセミコロンが発生しました.この場合delimiterカスタムシンボルが必要です
文の終端を一時的に変更します.後続のコードではカスタムシンボルに出会ってこそ終了します.
臨時修正をする
delimiter ;
例ordersテーブルにトリガを追加
delimiter $
create trigger demo1
after
insert
on orders
for each row
begin
update goods set num = num-1 where gid = 1;
end$
delimiter ;
そしてordersテーブルにデータを挿入します
insert into orders values(123,1,4);
goodsテーブルが確かに変わったことに気づきました
しかしgidが1のnumだけが1を減算した.
死んだと書いてあるので、トリガにパラメータを渡す必要があります.
トリガを先に削除する必要があります
drop trigger demo1;
show triggers;
すべてのトリガを表示すると、demo 1トリガが削除されていることがわかります.
上記の問題を解決する.
old new
MySQLでは、old、newを使用して、現在のステータスと実行後の新しいステータスを記録します.
挿入するとき、old削除がないとき、newがありません
delimiter $
create trigger demo1
after
insert
on orders
for each row
begin
update goods set num = num - new.much where gid = new.gid;
end$
delimiter ;