由於專案經理臨時有事,被安排面試乙個新人,期間聊到了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 防止...