Mysqlのトリガーとは、トリガーが配置されているテーブル上で指定されたイベントが発生すると、そのオブジェクト、つまりテーブルの操作イベントが呼び出されます。テーブル実行でトリガーをトリガーします。
テーブル内の一部のデータを変更するときに、トリガーを使用すると、関連する他のテーブルのデータも変更したい場合があります。トリガーを使用すると、プログラムが簡素化され、プログラムの柔軟性が向上します。
トリガーを作成するための構文は次のとおりです:
create trigger name(触发器名称) after/befor(触发时间) insert/update/delete(触发事件,当填写其中一种,其它的操作不会激活触发器) on (监视的表,即在哪张表上建立触发器 ) for each row (行级触发器) begin (sql语句,希望改变的数据,可写多条语句,每条语句必须用 ; 结尾) end;
上記の SQL ステートメントは ; を記述した後に実行され、トリガーが完了する前にエラーが報告されます。
今回は DELIMITER コマンドを使用します(delimiter は区切り文字、区切り文字の意味です)。文末識別子を必要としないコマンドです。
DELIMITER ;; (mysql を入れることができます。終了識別子は、;; や $ などの他の記号に設定されます (複数の長さに設定することもできます)
このステートメントの後に、セミコロン、;; に遭遇した場合のみ、これは最後のステートメントとみなされます。注: 使用後は、必ず変更して元に戻してください。
システムに 2 つのテーブルがあるとします:
product テーブル Goods (製品 ID gid、製品名 Goods_name、製品数量 Goods_num)
order テーブル ord (order oid、製品 ID gid、注文数量 Goods_much)
トリガーを作成するには製品テーブルの商品の数量は、注文テーブルの注文数量で自動的に更新されます。 コードは次のとおりです:
delmiter $ #判断库存是否足够 create trigger t1 before insert on ord for each row begin #声明变量 declare goods_num int; select num into goods_num from goods where gid = new.gid; #判断 if new.much > goods_num then set new.much = goods_num; end if; update goods set num = num - new.much where gid=new.gid end$ delmiter ;
MySQL で宣言を使用して、BEGIN .. でのみ使用できます。 . END 複合ステートメントであり、複合ステートメントの先頭で NEW キーワードが使用されています。これは、MS SQL Server の INSERTED と DELETED に似ており、テーブルを表すために NEW と OLD が定義されています。トリガーが配置されている場所とそのデータ行。
具体的には: INSERT タイプのトリガーでは、挿入される (BEFORE) または挿入された (AFTER) 新しいデータを表すために NEW が使用されます。
UPDATE タイプのトリガーでは、挿入される、または挿入された元のデータを表すために OLD が使用されます。変更された、NEW は、変更される、または変更された新しいデータを表すために使用されます。
DELETE タイプのトリガーでは、削除される、または削除された元のデータを表すために使用されます
。
以上がMySQL トリガーに関する質問の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。