MySQL學習筆記之觸發器的使用

2021-09-26 02:17:11 字數 2303 閱讀 3732

本篇文章通過學習《資料庫系統概論》和《mysql從入門到精通》,總結所得

今天學習mysql中的觸發器。觸發器是使用者定義在關係表上的一類由事件驅動的特殊過程,能夠加強資料庫表中資料的完整性約束和業務規則等。類似於現實中的監控一樣,當檢測到指定目標時,就會執行一些步驟(如:報警)。

基本語法:

create

trigger 觸發器名

before|

after 觸發事件 on 表名

for each row

啟用觸發器後被執行的語句;

create trigger是建立觸發器的關鍵字;before | after關鍵字用來指定觸發器的執行時間,before表示在觸發事件之前執行觸發器語句,after表示在觸發器事件之後執行觸發器語句;觸發事件為觸發器執行的條件,包含deleteinsertupdate語句;表名用來表示觸發事件操作表的名字;for each row設定觸發器的型別為行級觸發器。

如果被執行的語句是多條,需要包含在begin ... end之間。如:

create

trigger 觸發器名

before|

after 觸發事件 on 表名

for each row

begin

語句1;

語句2;..

.語句n;

end;

每條語句之間使用;隔開。但是由於建立觸發器語句的結束符也是;,所以需要通過關鍵字delimiter,將結束符設定為其他符號。下面是多條語句建立觸發器的完整過程:

delimiter $$      # 把結束符 設定為`$$`

create

trigger 觸發器名

before|

after 觸發事件 on 表名

for each row

begin

語句1;

語句2;..

.語句n;

end $$ # 使用結束符

delimiter

;# 把結束符還原為預設的`;`

例項:建立乙個觸發器,當更新學生成績時,把成績操作記錄存入表sc_u(s_id, c_id, old_grade, new_grade)中。**如下:

delimiter $$

create

trigger sc_t

after

update

on tab_sc

for each row

begin

insert

into sc_u (s_id, c_id, old_grade, new_grade)

values

( old.s_id, old.c_id, old.sc_grade, new.sc_grade)

;end $$

delimiter

;

在上述**中使用了old.列名new.列名兩個識別符號,用於標識不同狀態下的列名;old.列名表示在更新或刪除之前引用行的列;new.列名表示引用要插入的新行的列或更新後的現有行的列。所以insert語句中new.列名是合法的,在delete語句中old.列名是合法的,在update語句中old.列名new.列名都合法。語法

描述show triggers

顯示所有觸發器的資訊

show create trigger 觸發器名

檢視指定觸發器的定義資訊

使用drop trigger 觸發器名;語句來刪除指定觸發器。

本篇文章主要學習了 觸發器的建立、觸發器的檢視、觸發器的刪除。內容比較多的是觸發器的建立,它可以和 資料的增刪改組合,來提高資料的完整性。但在使用觸發器時也要慎重,因為在每次訪問乙個表時都可能觸發乙個觸發器,這樣會影響系統的效能。

mysql學習筆記之五(觸發器)

觸發器 trigger 是mysql的資料庫物件之一,該物件與程式語言中的函式非常類似,都需要宣告 執行,但是觸發器的執行不是由程式呼叫,也不是手工啟動,而是由事件來觸發,啟用從而實現執行。例項 1 學生表中擁有字段學生姓名,字段學生總數,每當新增一條學生記錄時,學生總數就必須同時改變。2 在顧客資...

學習筆記之MYSQL篇 觸發器

觸發器 trigger 是使用者定義在關係表上的一類由事件驅動的特殊過程 create trigger 觸發器名 觸發事件 on 表名 觸發事件 insert插入 update更新 delete刪除 referencing new old row as 變數 referencing 指出引用變數 f...

MySQL學習之觸發器

對觸發器的理解 觸發器和儲存過程一樣,都是嵌入在mysql中的一段程式,兩者區別是 觸發器是由事件觸發產生,而儲存過程則是由 call 來呼叫的。觸發器主要用於滿足複雜的業務要求。一 建立觸發器 1 建立乙個執行語句的觸發器 create trigger trigger name trigger t...