觸發(fā)器的作用是當表上有對應(yīng)SQL語句發(fā)生時呼盆,則觸發(fā)執(zhí)行城须。
1.語法
CREATE
????[DEFINER = {user|CURRENT_USER}]
????TRIGGER ? trigger_name??
? ? trigger_time ? ?trigger_event
????ON ?tbl_name ?FOR ?EACH ?ROW ?
????[trigger_order]? ?
?????trigger_body ?
trigger_time: {BEFORE|AFTER}
trigger_event: {INSERT|UPDATE|DELETE}
trigger_order: {FOLLOWS|PRECEDES} other_trigger_name
說明:
trigger_name:觸發(fā)器的名稱,不能與已經(jīng)存在的觸發(fā)器重復(fù)哮针;
trigger_time:{ BEFORE | AFTER }玛瘸,表示在事件之前或之后觸發(fā)媒峡;
trigger_event::{ INSERT |UPDATE | DELETE }淤年,觸發(fā)該觸發(fā)器的具體事件钧敞;
tbl_name:該觸發(fā)器作用在tbl_name上;
2.關(guān)鍵說明
Definer關(guān)鍵詞用來指定trigger的安全環(huán)境麸粮;
trigger_time指定觸發(fā)器的執(zhí)行時間溉苛,BEFORE和AFTER指定觸發(fā)器在表中的每行數(shù)據(jù)修改前或者后執(zhí)行;
trigger_event指定觸發(fā)該觸發(fā)器的集體事件:
INSERT 當新的一行數(shù)據(jù)插入表中時觸發(fā)弄诲,如執(zhí)行insert愚战,load data,replace語句插入新數(shù)據(jù)
UPDATE 當表的一行數(shù)據(jù)被修改時觸發(fā)威根,如執(zhí)行update語句時
DELETE 當表的一行數(shù)據(jù)被刪除時觸發(fā)凤巨,如執(zhí)行delete视乐,replace語句時
當執(zhí)行insert into...on duplicate key update語句時洛搀,當碰到重復(fù)行執(zhí)行update時,則觸發(fā)update下的觸發(fā)器佑淀;
從5.7.2版本開始留美,可以創(chuàng)建具有相同trigger_time和trigger_event的同一個表上的多個觸發(fā)器,默認情況下伸刃,按照創(chuàng)建時間依次執(zhí)行谎砾,通過指定FOLLOWS/PRECEDES改變執(zhí)行順序,即FOLLOWS時表示新創(chuàng)建的觸發(fā)器執(zhí)行捧颅,PRECEDES則表示新觸發(fā)器先執(zhí)行景图;
trigger_body 表示觸發(fā)器觸發(fā)之后要執(zhí)行的一個或多個語句,在內(nèi)部可以引用涉及表的字段碉哑,OLD.col_name表示行數(shù)據(jù)被修改或刪除之前的字段數(shù)據(jù)挚币,NEW.col_name表示數(shù)據(jù)被插入或修改之后的字段數(shù)據(jù)亮蒋;
3.實例
4.查看觸發(fā)器(information_schema)
5.刪除觸發(fā)器
DROPTRIGGER[IFEXISTS] [schema_name.]trigger_name
if exists用來避免刪除不存在的觸發(fā)器時引發(fā)的報錯
當你執(zhí)行drop table時,表上的觸發(fā)器也被drop掉了
mysql> drop trigger simple_trigger;Query OK, 0 rows affected (0.00 sec)
原文鏈接:https://www.cnblogs.com/tongxiaoda/p/8031891.html