觸發器詳解

2021-07-25 19:31:04 字數 4551 閱讀 3196

觸發器是乙個特殊的儲存過程,不同的是儲存過程要用call來呼叫,而觸發器不需要使用call

也不需要手工啟動,只要當乙個預定義的事件發生的時候,就會被mysql自動呼叫。

建立觸發器

語法如下:

create

trigger

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

droptableif exists tab1;

createtabletab1(

tab1_idvarchar(11)

);

建立表tab2

1

2

3

4

droptableif exists tab2;

createtabletab2(

tab2_idvarchar(11)

);

建立觸發器:t_afterinsert_on_tab1

作用:增加tab1表記錄後自動將記錄增加到tab2表中

1

2

3

4

5

6

7

droptriggerif exists t_afterinsert_on_tab1;

createtriggert_afterinsert_on_tab1

afterinsertontab1

foreach row

begin

insertintotab2(tab2_id)values(new.tab1_id);

end;

測試一下

1

insertintotab1(tab1_id)values('0001');

看看結果

1

2

select*fromtab1;

select*fromtab2;

example2:

建立觸發器:t_afterdelete_on_tab1

作用:刪除tab1表記錄後自動將tab2表中對應的記錄刪去

1

2

3

4

5

6

7

droptriggerif exists t_afterdelete_on_tab1;

createtriggert_afterdelete_on_tab1

afterdeleteontab1

foreach row

begin

deletefromtab2wheretab2_id=old.tab1_id;

end;

測試一下

1

deletefromtab1wheretab1_id='0001';

看看結果

1

2

select*fromtab1;

select*fromtab2;

觸發器詳解

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觸發器的型別 語句級觸發器 在指定的操作語句操作之前或之後執行一次,不管這條語句影響了多少行...