Mysql學習筆記(十二)觸發器

2021-09-06 23:04:00 字數 4556 閱讀 3646

原文:

mysql學習筆記(十二)觸發器

學習內容:

1.觸發器:

什麼是觸發器?我們什麼時候能夠使用觸發器?

觸發器就是用來監聽某個表的變化,當這個表發生變化的時候來觸發某種操作..比若說兩個表是相互關聯的,當我們在對其中乙個**進行操作的同時,另乙個表內的資料也需要進行某種操作,那麼我們就需要建立乙個觸發器來監聽任何乙個表發生的變化,當其中乙個表的資料發生變化的同時,觸發器裡的**塊將會對另乙個**進行對資料的某種操作。。

總而言之,觸發器一般是使用在表與表之間的,單個的表建立觸發器是沒有任何的意義的。。。。

觸發器的監聽範圍:增,刪,改

觸發的操作:增,刪,改

有點懵,我們來舉乙個例項。。。比如說乙個訂餐系統。。其中存在著乙個訂單數量的資料庫,乙個外賣樣式的資料庫。。當客戶進行訂餐的時候,訂單的數量變化的同時,那麼外賣樣式的資料庫資訊也要發生變化,這兩個表是相互關聯的。。總不能我們的庫存外賣數量已經空了,我們還能夠接受訂單吧?一旦出現這種情況,那麼必定會出現問題。。。因此我們可以使用觸發器來解決這個問題。。。

create

table

order_form

( order_form_id

intnot

null, //

每一種外賣的id

order_form_much

intnot

null

//每一種外賣允許訂的最大數量

);

//建立乙個訂單**.....

create

table

food

( food_id

intnot

null, //

外賣的id資訊

food_name

nvarchar(50) not

null, //

外賣的名字,樣式

food_much

intnot

null

//外賣的庫存量

);insert

into order_form values(1,10),(2,5),(3,15),(4,20),(5,5); //

插入資料資訊

insert

into food values(1,'

澳洲鮑魚

',10),(2,'

龍蝦',5),(3,'

魚翅',15),(4,'

花枝',20),(5,'

干貝',5); //

插入資訊

比如說使用者訂了乙份澳洲鮑魚,那麼food內名字為澳洲鮑魚的庫存數量就需要減一,同時訂單內名字為澳洲鮑魚的數量也需要減一。。。當最大數量減為0的時候,那麼就代表庫存空了,那麼就不再接受客戶的訂單了....

這個過程的實現需要觸發器。。。基本語法:

create

trigger trigger_name (after/before insert

/update

/delete 監聽的範圍) on table_name for

each row

begin

一句或者多句sql語句;

end;

create

trigger trg1 after on order_form for

each row

begin

update food set food_much=food_much-

1where food_id=old.order_form_id; //

這個old必須要加,否則出錯....

end;

update order_form set order_form_much=order_form_much-

1where order_form_id=

1; //

當這句話執行的時候觸發器將被觸發。。意思就是客戶定了乙份外賣,那麼訂單數在減一的同時,庫存量同時也要減少....

這個觸發器不靈活,因為客戶不可能每次都定乙份外賣吧。。有可能訂多份。。。我們是可以對訂的數量進行判斷,但是如果訂了1000份,我們總不能判斷1000次吧。。。因此我們還可以新建乙個**,裡面儲存著每乙份外賣被訂了多少次。。然後通過對這個表儲存的資訊來修改其他兩個表資訊....

create

table

c_count

( id

intnot

null

, num

intnot

null

default0,

primary

key(id);

); 當有訂單的時候,我們把訂單的資料更新到這個**內。。

建立觸發器。。。

create

trigger trg2 after on

update

onfor

each row

begin

update food set food_much=food_much-old.num where food_id=

old.id;

update food set order_form_much=order_form_much-old.num where order_form_id=

old.id;

end;

update c_count set num=

2where id=

3;//觸發器被觸發。。。

上面只是簡單的介紹了一下更新操作,我再簡單的說一下插入和刪除操作是如何觸發監聽的,雖然說模式都差不多,但是還是有一些需要注意的地方...

刪除操作後的觸發:

比如說當使用者取消訂單的時候,那麼我們對應的允許的訂單數量和庫存量也要隨之發生改變。。。

create

table

c_count

( id

intnot

null

, num

intnot

null

default0,

primary

key(id);

); //

還是那個**。。。

create

trigger trg2 after on

update

onfor

each row

begin

update food set food_much=food_much+old.num where food_id=

old.id;

update food set order_form_much=order_form_much+old.num where order_form_id=

old.id; //也是使用(old.資料) 來表示刪除前的資料資訊

end;

delete

from c_count where id=

1;

插入操作的觸發:

比如說:店內新增了一樣產品。。。那麼我們仍然需要更新資料庫內的資訊...

mysql>

create

trigger trg1 after insert

on c_count for

each row

->

begin

->

insert

into food values(6,'

比目魚',8

);

->

insert

into order_form values(6,8

);

->

end;

mysql

>

insert

into c_count values(6,8

);

//這裡還有乙個注意。。就是像上面刪除的地方我們需要使用(old.資料)來操作我們刪除之前的資料。。。那麼這裡的插入操作,我們需要使用(new.資料)來操作我們插入的新資料...

刪除觸發器:

drop

trigger trg1;

檢視觸發器資訊:

show triggers;

觸發器裡after和before的區別:

after是先安完成資料的增,刪,改再觸發

觸發的語句晚於監視的增,刪,改,無法影響前面的增刪改動作

before是先完成觸發,再增刪改

觸發的語句先於監視的增刪改發生,我們有機會判斷,修改即將發生的操作

MySQL學習筆記6(觸發器)

觸發器 trigger 是由事件來觸發某個操作。這些事件包括insert語句 update語句和delete語句。當資料庫系統執行這些事件時,就會啟用觸發器執行相應的操作。1 觸發器的含義和作用 2 如何建立觸發器 3 如何檢視觸發器 4 如何刪除觸發器 語法基本形式為 create trigger...

(八)MySQL學習筆記 觸發器

觸發器有三種 觸發器型別 old的含義 new的含義 insert 型觸發器 無 因為插入前狀態無資料 new 表示將要或者已經新增的資料 update 型觸發器 old 表示修改之前的資料 new 表示將要或已經修改後的資料 delete 型觸發器 old 表示將要或者已經刪除的資料 無 因為刪除...

MySQL學習筆記(12) 觸發器

本文更新於2019 06 23,使用mysql 5.7,作業系統為deepin 15.4。目錄為了便於描述,此處將建立觸發器的ddl複述一次,其已於 sql 章節描述。create trigger triggername before after insert update delete on ta...