本篇文章經過學習《數據庫系統概論》和《MySQL從入門到精通》,總結所得sql
今天學習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
,將結束符設置爲其餘符號。下面是多條語句建立觸發器的完整過程: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