本篇文章通過學習《資料庫系統概論》和《mysql從入門到精通》,總結所得今天學習mysql中的
觸發器
。觸發器是使用者定義在關係表上的一類由事件驅動的特殊過程,能夠加強資料庫表中資料的完整性約束和業務規則等。類似於現實中的監控一樣,當檢測到指定目標時,就會執行一些步驟(如:報警)。
基本語法:
create
trigger 觸發器名
before|
after 觸發事件 on 表名
for each row
啟用觸發器後被執行的語句;
create trigger
是建立觸發器的關鍵字;before | after
關鍵字用來指定觸發器的執行時間,before
表示在觸發事件之前執行觸發器語句,after
表示在觸發器事件之後執行觸發器語句;觸發事件
為觸發器執行的條件,包含delete
,insert
,update
語句;表名
用來表示觸發事件操作表的名字;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...