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

本篇文章經過學習《數據庫系統概論》和《MySQL從入門到精通》,總結所得sql

今天學習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,將結束符設置爲其餘符號。下面是多條語句建立觸發器的完整過程:spa

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)中。代碼以下:code

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.列名都合法。cdn

查看觸發器

語法 描述
show triggers 顯示全部觸發器的信息
show create trigger 觸發器名 查看指定觸發器的定義信息

刪除觸發器

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

結束

本篇文章主要學習了 觸發器的建立、觸發器的查看、觸發器的刪除。內容比較多的是觸發器的建立,它能夠和 數據的增刪改組合,來提升數據的完整性。但在使用觸發器時也要慎重,由於在每次訪問一個表時均可能觸發一個觸發器,這樣會影響系統的性能。it

本篇文章的學習到此爲止,有不對的或不許確的地方歡迎在評論中指定出來。感謝大家的鼓勵。io

公衆號:HarLearn

HarLearn
相關文章
相關標籤/搜索