什麼是MySql觸發器?作用是什麼?

2021-10-01 23:03:58 字數 2588 閱讀 3729

由於專案經理臨時有事,被安排面試乙個新人,期間聊到了mysql的儲存過程、觸發器等知識,發現他對這一塊的知識比較陌生,由於之前講過儲存過程,現在就講講什麼是觸發器。其實觸發器很好理解,按照字面意思,就是會觸發一系列事件操作的東西。

基本概念:觸發器是與表事件相關的特殊儲存過程,它的執行不由程式呼叫,也非手工啟動,而是由事件觸發而被執行的(需要區別儲存過程:儲存過程則需要主動呼叫其名字執行)

觸發器(trigger):事先為某張表繫結一段**,當表中的某些內容發生增、刪、改時,系統會自動觸發**並執行。

講解觸發器的經典案例,就是下訂單,比如存貨100件,如果下訂單購買10件,該商品的庫存量需相應減少,即買幾個商品就減少多少個庫存量,先看建表語句:

create table goods(

gid int,

name varchar(20),

num smallint

);create table ord(

oid int,

gid int,

much smallint

);insert into goods values(1,'cat',100);

insert into goods values(2,'dog',200);

insert into goods values(3,'pig',300);

建立觸發器語句如下:

drop trigger if exists databasename.tri_name;  

create trigger tri_name -- tri_name代表觸發器名稱

tirgger_time trigger_event on tablename -- tirgger_time為觸發時機,可選值有after/before,trigger_event為觸發事件,可選值有insert/update/delete

for each row -- 這句話在mysql是固定的,表示任何一條記錄上的操作滿足觸發事件都會觸發該觸發器。

begin

sql語句;

end(1)檢視已有觸發器:show triggers

(2)刪除已有觸發器:drop trigger triggername

create trigger t1 

after

insert

on ord

for each row

begin

update goods set num=num-2 where gid = 1;

end

我們現在已經建立了乙個簡單的儲存過程,只要訂單表ord的gid=1的商品有insert(只要買了貓cat,貓的存貨就減少2,當然,實際開發過程中減去的具體值,需要是訂單購買數量值),看如下過程:

我們執行一下插入操作:insert into ord value(1,10,66)

觸發器建立的四個要素

1)監視地點(table)

2)監視事件(insert/update/delete)

3)觸發時間(after/before)

4)觸發事件(insert/update/delete)

觸發器中引用行變數

1)在觸發目標上執行insert操作後會有乙個新行,如果在觸發事件中需要用到該新行的變數,可以用new關鍵字表示

2)在觸發目標上執行delete操作後會有乙個舊行,如果在觸發事件中需要用到該舊行的變數,可以用old關鍵字表示

3)在觸發目標上執行update操作後原紀錄是舊行,新記錄是新行,可以使用new和old關鍵字來分別操作

為了解釋上面這句話,我們建立乙個t2、t3、t4觸發器:

create trigger t2

after

insert

on ord

for each row

begin

update goods set num=num-new.much where gid=new.gid;

endcreate trigger t3

after

delete

on ord

for each row

begin

update goods set num=num+old.much where gid=old.gid;

endcreate trigger t4

before

update

on ord

for each row

begin

update goods set num=num+old.much-new.much where gid = 1;

end

什麼是MySQL觸發器

mysql的觸發器和儲存過程一樣,都是嵌入到mysql的一段程式。利用mysql觸發器可以對錶進行增 刪 改操作同時響應另一張表做出相同的操作。下面簡單介紹一下mysql觸發器的基本語法。如何建立乙個觸發器 修改delimiter為 mysql d 建立乙個名字為tg1的觸發器,當向t1表中插入資料...

什麼是觸發器?MySQL觸發器概念及其應用解析

觸發器自動執行。當對表進行insert update以及delete操作,試圖修改表中的資料時,相應操作的觸發器立即自動執行。觸發器可以通過資料庫中相關表進行層疊更改。這比直接把 寫在前台的做法更安全合理。觸發器可以實現表的約束實現不了的複雜約束。在觸發器可以引用其他表的列,從而實現多個表之間資料的...

學習什麼是觸發器

一oracle觸發器語法 觸發器是特定事件出現的時候,自動執行的 塊。類似於儲存過程,觸發器與儲存過程的區別在於 儲存過程是由使用者或應用程式顯式呼叫的,而觸發器是不能被直接呼叫的。功能 1 允許 限制對錶的修改 2 自動生成派生列,比如自增字段 3 強制資料一致性 4 提供審計和日誌記錄 5 防止...