? ? ? ? ? ? ?
?
1、觸發器 Trigger介紹
觸發器可以實現完整性規則和保證一些復雜業務規則的實施。針對示警或滿足特定 條件下自動執行某項任務來說,觸發器是十分有用的機制。觸發器是由事件1驅動的特殊過程,一旦由某個用戶定義,任何用戶對該觸發器指定的數據新增、刪除、修改操作,系統會自動激活相應的觸發器,在核心層進行集中的完整性控制。
2、觸發器特點
1) 當數據庫開發者聲明事件發生時,觸發器激活,事件可以是對某個特定關系的插入、刪除、更新。
2) 觸發器被事件激活后,不是立即執行,而是先由觸發器測試觸發條件,若條件不成立,響應該事件的觸發器將不做任何處理。
3) 如果觸發器的申明條件滿足時,則與該觸發器相連的動作由DBMS執行。可以阻止事件、撤銷事件。
注意事項:
1)觸發器為數據庫對象時,創建觸發器必須指定名稱、在其定義觸發器的表、觸發器觸發時機、觸發器做什么事情。觸發器不能作用在臨時表,但可以引用臨時表。
3、觸發器分類
行級觸發器:對事件影響的每一行(FOR EACH ROW) ,每一元組執行。
語句級觸發器:對整個事件只執行一次觸發過程(FOR EACH STATEMENT)。是觸發器默認方式。
4、創建觸發器
觸發器定義包括:觸發器的觸發事件、觸發器執行的動作。針對update操作中還可以指定特定的屬性或屬性組的修改為觸發條件。事件的觸發還有兩個相關時間:before、after。
before:觸發器是在事件發生之前觸發。
after:觸發器是在事件發生之后觸發。
創建觸發器語法格式:
create trigger <觸發器名稱>[{after|before}]
{[delete|update|updateof[列名清單]]}
on 表名
[referencing <臨時視圖名稱>]
[when<觸發條件>]
begin
<觸發動作>
end [觸發器]
參數說明:
before:說明DBMS在執行觸發語句之前激發觸發器。
after:說明DBMS在執行觸發語句之后激發觸發器。
delete:delete觸發器,每當一個delete語句從表中刪除一行時激發觸發器。
insert:insert,每當一個insert語句從表中插入一行時激發觸發器。
update:update觸發器,每當update語句修改由of子句指定的列值時激發觸發器。如果忽略of子句,表示任何列值時,DBMS都將激發觸發器。
referencing <臨時視圖名稱>:指定臨時視圖的別名。在觸發器運行過程中,系統會生成兩個臨時視圖,分別存放更新值(舊值)、更新后的值(新值)。
行級觸發器:默認臨時視圖名分別是OLD、NEW。
語句觸發器:默認臨時視圖名分別是OLD-TABLE、NEW-TABLE。觸發器結束臨時視圖也會隨著銷毀。
WHEN<觸發條件>:指定觸發器的觸發條件。只有條件滿足觸發條件時,才會激發觸發器。觸發條件必須包含臨時視圖名、不包含查詢。
針對示警或滿足特定條件下自動執行某項任務來說,觸發是非常有用的機制。
5、更改觸發器
語法格式:
alter trigger <觸發器名> [{after|before}]
{[delete|update|updateof[列名清單]]}
on 表名
[referencing <臨時視圖名稱>]
[when<觸發條件>]
begin要執行的SQL語句
end
6、刪除觸發器
drop trigger <觸發器名>[,...n]
說明:n表示可以指定多個觸發器的占位符。
7、完整示例
- 需求:當向員工表插入一條記錄時,希望mysql自動同時往日志表插入數據
-- 創建觸發器(添加)-- 當往員工表插入一條記錄時
CREATE TRIGGER tri_empAdd AFTER INSERT ON employee FOR EACH ROW
INSERT INTO test_log(content) VALUES('員工表插入了一條記錄');
-- 當往員工表修改一條記錄時
CREATE TRIGGER tri_empUpd AFTER UPDATE ON employee FOR EACH ROW
INSERT INTO test_log(content) VALUES('員工表修改了一條記錄');
-- 當往員工表刪除一條記錄時
CREATE TRIGGER tri_empDel AFTER DELETE ON employee FOR EACH ROW
INSERT INTO test_log(content) VALUES('員工表刪除了一條記錄');
-- 刪除創建觸發器
DROP TRIGGER tri_empAdd;
觸發器事件:數據庫表行的插入、刪除、修改。也就是執行insert、delete、update語句。
IT技術分享社區
個人博客網站:https://programmerblog.xyz
文章推薦程序員效率:畫流程圖常用的工具程序員效率:整理常用的在線筆記軟件遠程辦公:常用的遠程協助軟件,你都知道嗎?51單片機程序下載、ISP及串口基礎知識硬件:斷路器、接觸器、繼電器基礎知識