談談觸發器那點事

2021-09-22 13:55:36 字數 645 閱讀 4264

2018.12.29

今天著實被觸發器坑了一把。

運維的系統當中有乙個功能需要呼叫某個儲存過程,這個儲存過程總是執行到一半就失敗了。而在伺服器的ssms執行exec ***,卻可以正常執行,百思不得其解。

後來,對於儲存過程進行了除錯,逐句分析(f11),發現儲存過程中操作的幾個表都帶有觸發器,其中乙個觸發器的語句中有乙個耗時較長,所以導致了客戶端遠端呼叫時出現了超時的情況。於是對觸發器進行了改進,解決了問題。

但是這次問題的解決也讓我對觸發器有了新的認識。以前,我只是覺得觸發器是方便我們工作的乙個自動化工具,畢竟是「一次新增,終生受用」,而且還能對錶進行了一定程度的約束。但通過今天的問題,結合翻閱的資料,我發現觸發器也有以下缺點:

1可移植性差;

2.占用伺服器資源,給伺服器造成壓力;

3.執行速度主要取決於資料庫伺服器的效能與觸發器**的複雜程度;

4.巢狀呼叫一旦出現問題,排錯困難,而且資料容易造成不一致,後期維護不方便。

觸發器其實更像是一種新增了觸發條件的儲存過程,而說到儲存過程就不得不提事務。觸發器有乙個比較有意思的地方是,如果觸發器發生了回滾,那麼他會和呼叫他的句子一起回滾。

綜合以上,我們應該從這次問題學習到什麼呢?那就是觸發器的設計問題:觸發器應該在什麼情況下使用,用的時候應該避免怎樣的問題?待更新。

談談觸發器那點事

今天著實被觸發器坑了一把。運維的系統當中有乙個功能需要呼叫某個儲存過程,這個儲存過程總是執行到一半就失敗了。而在伺服器的ssms執行exec 卻可以正常執行,百思不得其解。後來,對於儲存過程進行了除錯,逐句分析 f11 發現儲存過程中操作的幾個表都帶有觸發器,其中乙個觸發器的語句中有乙個耗時較長,所...

談談幾種觸發器

oracle資料庫有四種觸發器,分別是dml instead of ddl db觸發器,一般的應用系統中都是用到dml instead of觸發器,ddl db兩種觸發器是dba管理資料庫用得比較多 四種觸發器分別有不同的作用 一 dml觸發器 當發出update insert delete命令就可...

談談幾種觸發器

oracle資料庫有四種觸發器,分別是dml instead of ddl db觸發器,一般的應用系統中都是用到dml instead of觸發器,ddl db兩種觸發器是dba管理資料庫用得比較多 四種觸發器分別有不同的作用 一 dml觸發器 當發出update insert delete命令就可...