資料庫 Trigger 是資料庫中的一種特殊預存程序,會在特定事件發生時啟動。
Trigger 可以在資料表發生插入、更新或刪除等操作時自動執行,從而實現對資料庫操作的監控和控制。
Trigger 有多種類型,包括
- DML Trigger(對INSERT、UPDATE或DELETE事件觸發)
- DDL Trigger(CREATE、ALTER或DROP事件觸發)
- Logon Trigger(在使用者登入時觸發)
綜合 ChatGPT 的回答如下:
優點:
- 資料完整性和一致性:當對 table 執行INSERT、UPDATE 或DELETE 操作時, Trigger 會自動執行一些操作來維護資料的完整性
- 資料驗證:Trigger 可以在資料插入或更新之前對資料進行驗證,確保符合特定條件。
- 記錄日誌:透過 Trigger,可以輕鬆記錄資料庫操作的變更,有助於追蹤資料的變更歷史。
- 效能提升:Trigger 可以提高SQL查詢的效能,因為它們不需要每次執行時重新編譯。
- 減少客戶端程式碼:使用 Trigger 可以減少客戶端程式碼的編寫,節省時間和精力。
- 易於維護:Trigger相對容易維護,一旦定義好後,可以自動執行所需的操作,無需手動干預 。
缺點:
- 自動觸發:Trigger 是自動啟動的,使用者無法直接看到其執行過程,可能導致在資料庫層級出現難以偵錯的問題。
- 增加資料庫伺服器開銷:Trigger 的執行會增加資料庫伺服器的負擔,可能影響系統效能。
- 限制:Trigger 只能在目前資料庫中創建,但可以引用目前資料庫之外的對象,這可能會增加跨資料庫操作的複雜性。
- 相同 Trigger 多次執行:在相同CREATE TRIGGER語句中,可以為多個使用者操作(如INSERT和UPDATE)定義相同的 Trigger 操作,可能導致邏輯混亂。
- 偵錯困難:當存在多層嵌套 Trigger 時,偵錯和故障排除可能變得非常困難,消耗開發時間和資源
另外參考:
ithome 大家在系統中有沒有使用 資料庫的Trigger?
go777 的回覆:
- 重要(機敏)資料異動過程的紀錄(用於稽核、日誌記錄及其他用途)。
- 用於系統衍生資料產出。
- 應用系統間資料介接設計,例: 差勤系統中請假人完成請假流程,紀錄相關請假資料時,利用trigger將代理人及代理時段存入中介資料表,供公文系統使用,以正確完成公文傳送。
- 利用DDL trigger 防止未經許可的資料庫管理動作。(1.~3. 視為DML trigger)
其它:
MySQL高级篇-慎用的触发器
將資料填入快取的三種模式
DBTRDATA資料查路