MySQL トリガーに関する質問

一个新手
リリース: 2017-10-23 10:30:17
オリジナル
2120 人が閲覧しました

trigger

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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート