觸發器是乙個特殊的儲存過程,不同的是儲存過程要用call來呼叫,而觸發器不需要使用call
也不需要手工啟動,只要當乙個預定義的事件發生的時候,就會被mysql自動呼叫。
建立觸發器
語法如下:
createtrigger
trigger_name trigger_time trigger_event
on tbl_name for each row trigger_stmt
觸發程式是與表有關的命名資料庫物件,當表上出現特定事件時,將啟用該物件。
觸發程式與命名為tbl_name的表相關。tbl_name必須引用永久性表。不能將觸發程式與臨時表表或檢視關聯起來。
trigger_time是觸發程式的動作時間。它可以是before或after,以指明觸發程式是在啟用它的語句之前或之後觸發。
trigger_event指明了啟用觸發程式的語句的型別。trigger_event可以是下述值之一:
· insert:將新行插入表時啟用觸發程式,例如,通過insert、load data和replace語句。
· update:更改某一行時啟用觸發程式,例如,通過update語句。
· delete:從表中刪除某一行時啟用觸發程式,例如,通過delete和replace語句。
請注意,trigger_event與以表操作方式啟用觸發程式的sql語句並不很類似,這點很重要。
例如,關於insert的before觸發程式不僅能被insert語句啟用,也能被load data語句啟用。
可能會造成混淆的例子之一是insert into .. on duplicate update ...語法:before insert觸發程式對於每一行將啟用,後跟after insert觸發程式,或before update和after update觸發程式,具體情況取決於行上是否有重複鍵。
對於具有相同觸發程式動作時間和事件的給定表,不能有兩個觸發程式。
例如,對於某一表,不能有兩個before update觸發程式。
但可以有1個before update觸發程式和1個before insert觸發程式,或1個before update觸發程式和1個after update觸發程式。
trigger_stmt是當觸發程式啟用時執行的語句。
如果你打算執行多個語句,可使用begin ... end復合語句結構。這樣,就能使用儲存子程式中允許的相同語句。
mysql 觸發器簡單例項
~~語法~~create
trigger
《觸發器名稱》 --觸發器必須有名字,最多64個字元,可能後面會附有分隔符.它和mysql中其他物件的命名方式基本相象.
--觸發器有執行的時間設定:可以設定為事件發生前或後。
--同樣也能設定觸發的事件:它們可以在執行insert、update或delete的過程中觸發。
on 《表名稱》 --觸發器是屬於某乙個表的:當在這個表上執行插入、 更新或刪除操作的時候就導致觸發器的啟用. 我們不能給同一張表的同乙個事件安排兩個觸發器。
for
each
row--觸發器的執行間隔:for each row子句通知觸發器 每隔一行執行一次動作,而不是對整個表執行一次。
《觸發器sql語句》 --觸發器包含所要觸發的sql語句:這裡的語句可以是任何合法的語句, 包括復合語句,但是這裡的語句受的限制和函式的一樣。
--你必須擁有相當大的許可權才能建立觸發器(create trigger),如果你已經是root使用者,那麼就足夠了。這跟sql的標準有所不同。
~~例項~~建立表tab1
1
2
3
4
drop
table
if exists tab1;
create
table
tab1(
tab1_id
varchar
(11)
);
建立表tab2
1
2
3
4
drop
table
if exists tab2;
create
table
tab2(
tab2_id
varchar
(11)
);
建立觸發器:t_afterinsert_on_tab1
作用:增加tab1表記錄後自動將記錄增加到tab2表中
1
2
3
4
5
6
7
drop
trigger
if exists t_afterinsert_on_tab1;
create
trigger
t_afterinsert_on_tab1
after
insert
on
tab1
for
each row
begin
insert
into
tab2(tab2_id)
values
(new.tab1_id);
end
;
測試一下
1
insert
into
tab1(tab1_id)
values
(
'0001'
);
看看結果
1
2
select
*
from
tab1;
select
*
from
tab2;
example2:
建立觸發器:t_afterdelete_on_tab1
作用:刪除tab1表記錄後自動將tab2表中對應的記錄刪去
1
2
3
4
5
6
7
drop
trigger
if exists t_afterdelete_on_tab1;
create
trigger
t_afterdelete_on_tab1
after
delete
on
tab1
for
each row
begin
delete
from
tab2
where
tab2_id=old.tab1_id;
end
;
測試一下
1
delete
from
tab1
where
tab1_id=
'0001'
;
看看結果
1
2
select
*
from
tab1;
select
*
from
tab2;
觸發器詳解
mysql包含對觸發器的支援。觸發器是一種與表操作有關的資料庫物件,當觸發器所在表上出現指定事件時,將呼叫該物件,即表的操作事件觸發表上的觸發器的執行。建立觸發器 在mysql中,建立觸發器語法如下 如下 create trigger trigger name trigger time trigge...
觸發器詳解 (一)D觸發器
觸發器是時序邏輯電路的基本單元,用來儲存1位2進製資訊,具有記憶和儲存功能,其資訊由雙穩態電路來儲存。觸發器位脈衝邊緣敏感器間,分為上公升沿敏感和下降沿敏感。觸發器的種類很多,由d觸發器,j k觸發器,t觸發器等。並且根據運用場景的不同,觸發器還會有置位,復位,使能和選擇等功能。d觸發器是一種最簡單...
oracle觸發器詳解
l 資料庫觸發器是乙個與表相關聯的 儲存的 pl sql 程式。每當乙個特定的資料操作語句 insert,update,delete 在指定的表上發出時,oracle 自動地執行觸發器中定義的語句序列。l l觸發器的型別 語句級觸發器 在指定的操作語句操作之前或之後執行一次,不管這條語句影響了多少行...