第26課 觸發(fā)器 trigger!!!

什么是觸發(fā)器

就是trigger(扳機(jī)), 一碰就動(dòng), 一觸即發(fā), 就叫觸發(fā)器
跟存儲(chǔ)過程類似, 也是主要用于增, 刪, 改
事先為某張表綁定一段代碼, 當(dāng)表中的某些內(nèi)容發(fā)生改變的時(shí)候(對(duì)表進(jìn)行增刪改), 系統(tǒng)就會(huì)自動(dòng)觸發(fā)代碼執(zhí)行
監(jiān)聽, 只要...就觸發(fā), 然后執(zhí)行...

觸發(fā)器.png

為什么需要觸發(fā)器?

有些sql語句, 或者數(shù)據(jù)庫操作, 在邏輯上是緊密相關(guān), 不可分割的, 需要一起執(zhí)行

創(chuàng)建觸發(fā)器

創(chuàng)建觸發(fā)器.png

我們需要一些測(cè)試數(shù)據(jù)

drop database if exists mail;

create database mail character set utf8;

use mail;

create table goods(
    goods_id int primary key,
    goods_name varchar(20) not null,
    goods_inventory int not null
);

create table orders(
    orders_id int primary key,
    orders_goods_id int not null,
    orders_buy_number int not null,
    foreign key(orders_goods_id) references goods(goods_id)
);



insert into goods set goods_id = 1, goods_name = 'television', goods_inventory = 20;
insert into goods set goods_id = 2, goods_name = 'bicyle', goods_inventory = 99;

insert into orders set orders_id = 1, orders_goods_id = 1, orders_buy_number = 2;
insert into orders set orders_id = 2, orders_goods_id = 2, orders_buy_number = 10;
商城數(shù)據(jù)庫.png

insert

insert之前(語法)

drop trigger if exists 插入前觸發(fā);
create trigger 插入前觸發(fā) before insert on teacher for each row
   -- sql語句, 不能是select
begin
  
end;

insert之后(語法)

drop trigger if exists 插入后觸發(fā);
create trigger 插入后觸發(fā) after insert on teacher for each row
begin
    -- sql語句, 不能是select
end;

我們的需求, 當(dāng)訂單表里新增訂單之后, 商品表里的庫存需要相應(yīng)減少

drop trigger if exists change_inventory;

create trigger change_inventory after insert on orders for each ROW begin 
    update goods 
    set 
        goods_inventory = goods_inventory - new.orders_buy_number 
    where 
        goods_id = new.orders_goods_id;
end;

insert into orders 
set 
    orders_id = 3, 
    orders_goods_id = 1, 
    orders_buy_number = 3;
image.png
image.png
image.png
Snipaste_2019-04-13_17-48-39_看圖王.png

delete

如果訂單取消, 商品的庫存應(yīng)該恢復(fù)

image.png
image.png

我們編寫一個(gè)觸發(fā)器, 如果訂單取消, 則電視機(jī)的庫存恢復(fù)到原來的20

drop trigger if exists recover_inventory;

create trigger recover_inventory after delete on orders for each row begin 
    update goods 
    set goods_inventory = goods_inventory + old.orders_buy_number 
    where goods_id = old.orders_goods_id;
end;

delete from orders where orders_id = 3;
image.png
image.png

查看觸發(fā)器

查看所有觸發(fā)器

show triggers;
image.png

查看觸發(fā)器創(chuàng)建語句

show create trigger 觸發(fā)器名稱;
image.png

刪除&修改觸發(fā)器

觸發(fā)器不能修改, 只能先刪除, 再修改

drop trigger 觸發(fā)器名稱;

最后說明

  1. 觸發(fā)器中, 只能有增刪改, 不能有查
  2. 觸發(fā)器中只能對(duì)非監(jiān)聽的表, 進(jìn)行增刪改, 避免死循環(huán)
  3. 觸發(fā)器的監(jiān)聽對(duì)象,并不都有new和old

trigger監(jiān)聽對(duì)象

監(jiān)聽對(duì)象.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末帝璧,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子累驮,更是在濱河造成了極大的恐慌刨肃,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,110評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異黑滴,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)紧索,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門袁辈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人珠漂,你說我怎么就攤上這事晚缩。” “怎么了媳危?”我有些...
    開封第一講書人閱讀 165,474評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵荞彼,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我待笑,道長(zhǎng)鸣皂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,881評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮签夭,結(jié)果婚禮上齐邦,老公的妹妹穿的比我還像新娘。我一直安慰自己第租,他們只是感情好措拇,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著慎宾,像睡著了一般丐吓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上趟据,一...
    開封第一講書人閱讀 51,698評(píng)論 1 305
  • 那天券犁,我揣著相機(jī)與錄音,去河邊找鬼汹碱。 笑死粘衬,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的咳促。 我是一名探鬼主播稚新,決...
    沈念sama閱讀 40,418評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼跪腹!你這毒婦竟也來了褂删?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,332評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤冲茸,失蹤者是張志新(化名)和其女友劉穎屯阀,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體轴术,經(jīng)...
    沈念sama閱讀 45,796評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡难衰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了逗栽。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盖袭。...
    茶點(diǎn)故事閱讀 40,110評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖祭陷,靈堂內(nèi)的尸體忽然破棺而出苍凛,到底是詐尸還是另有隱情,我是刑警寧澤兵志,帶...
    沈念sama閱讀 35,792評(píng)論 5 346
  • 正文 年R本政府宣布醇蝴,位于F島的核電站,受9級(jí)特大地震影響想罕,放射性物質(zhì)發(fā)生泄漏悠栓。R本人自食惡果不足惜霉涨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望惭适。 院中可真熱鬧笙瑟,春花似錦、人聲如沸癞志。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽凄杯。三九已至错洁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間戒突,已是汗流浹背屯碴。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留膊存,地道東北人导而。 一個(gè)月前我還...
    沈念sama閱讀 48,348評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像隔崎,于是被迫代替她去往敵國(guó)和親今艺。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容