數據庫---觸發器

繼續接上一講,今天梳理一下數據庫中的觸發器的相關知識點。

一、觸發器的概念

1.1觸發器是什麼?

觸發器是與表事件相關的特殊的存儲過程,它的執行不是由程序調用,也不是手工啓動,而是由事件來觸發,比如當對一個表進行操作( insert,delete, update)時就會激活它執行。關鍵詞:自動觸發。

1.2爲什麼要使用觸發器?

觸發器經常用於加強數據的完整性約束和業務規則等。

1.3 觸發器類型

後置觸發器 after
使用after定義的觸發器爲後觸發型的觸發器,只有在語句(引發觸發器執行的)指定的操作都已成功執行,後續才執行觸發器。該種觸發器涉及的場景較多,較爲常用。
ps:不能在視圖上定義AFTER觸發器
前置觸發器 before
使用before 選項定義的觸發器爲前觸發型觸發器,在這種模式的觸發器中,先指定執行觸發器,而不是先執行語句。
舉個例子:用前觸發器實現:新插入職工數據時,其工資必須在相應工作的最低工資到最高工資之間。

二、觸發器的書寫格式

-- 觸發器 TRIGGER   代碼開發過程中,用的很少;數據體量較大時,儘量少用
-- 觸發器的書寫格式如下:
create trigger 觸發器名稱 after/before  insert/update/delete  on 表名 
begin
	-- 觸發器業務代碼
end

注意事項
①觸發器名稱在數據庫中,是唯一的。
②for 作用 等同於 after。
③在一個表上,可以建立多個名稱不同、類型各異的觸發器、每個觸發器可由3個操作來引發。

三、觸發器的使用

3.1創建觸發器

 最後點擊"保存"即可生效

3.2查看觸發器

剛剛創建好的觸發器,如何查看呢?

-- 查看觸發器
show TRIGGERS

3.3修改觸發器

-- 修改觸發器:alter trigger 觸發器名
ALTER trigger tri_age

3.4刪除觸發器

-- 刪除觸發器:drop trigeer 觸發器名
DROP trigger tri_age

四、其他問題答疑

①前置觸發器與後置觸發器的區別?
前置觸發器:before觸發器執行失敗,sql也會執行失敗;
後置觸發器:sql執行失敗時,after觸發器不會執行,sql會回滾;
②觸發器與存儲過程的區別?
觸發器:是特殊的存儲過程,是自動觸發
存儲過程:由用戶、程序、或者觸發器 顯式調用
③行級觸發器與語句級觸發器的區別?
行級觸發器:for each row (sql影響1行就觸發1次),需要對每一行數據做處理,使用行級觸發器。
語句級觸發器:for each statement (默認,1條sql觸發1次),語句執行完成後,做該語句的業務處理,用語句級別觸發器。
特別注意
mysql不支持語句觸發器,所以必須寫for each row。
oracle觸發器中分行級觸發器和語句級觸發器,可不寫for each row,無論影響多少行都只執行一次。
④可以在視圖中創建after觸發器嗎?
不能

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章