數(shù)據(jù)庫觸發(fā)器(Trigger)的一點使用心得
更新時間:2009年07月27日 18:18:29 作者:
最近了解了一下數(shù)據(jù)庫觸發(fā)器,并做一點實際的應用,在翻看其概念的時候,還是本著從理解的角度來學習的,但是,到了實際的應用場景中,還是有一些特別注意的地方的,下面是自己在應用中的幾點體會
(1) 針對較為復雜的跨多表的數(shù)據(jù)業(yè)務級別的約束,可以通過觸發(fā)器來替代大量的后臺判斷代碼,效率較高且便捷。
(2) 如果想通過觸發(fā)器輔助業(yè)務邏輯,不能單著眼于數(shù)據(jù)庫內容的變化來設計觸發(fā)器,還必須緊密結合業(yè)務模型中涉及該表的所有地方,因為很有可能因為不一致的邏輯處理方式導致我們設計的觸發(fā)器遺漏下一些分支條件!其實,在這種情況下,如果能有更好的方法,不建議使用觸發(fā)器,因為牽扯到過多的業(yè)務邏輯內容的話,會使觸發(fā)器的設計和編寫困難重重,不能充分發(fā)揮其便捷高效的優(yōu)點。
(3) 鑒于觸發(fā)器在實際運行的時候,是被包含在一個數(shù)據(jù)庫事務中的,所以我們在編寫了完整的處理分支后,就可以完全信賴它的執(zhí)行,大量并發(fā)情況下,數(shù)據(jù)庫會自動處理好對各事務的操作,不用擔心觸發(fā)器的性能和正確性。
(4) 在同一個事務中的不同執(zhí)行語句,如果后面語句中的操作觸發(fā)了相應表的觸發(fā)器,則在觸發(fā)器內可以查看前面語句執(zhí)行后的結果列表的內容,所以,在使用觸發(fā)器的時候,對事物中多條語句的操作的順序是要考慮清楚的。
(5) 如果我們使用觸發(fā)器+數(shù)據(jù)表的形式來對數(shù)據(jù)進行一些統(tǒng)計性的操作的時候,我們在保證觸發(fā)器邏輯完整性的前提下,最好能通過數(shù)據(jù)庫任務的方式來定時進行檢查,因為觸發(fā)器對于一個用程序的操作都能有相應的處理,但對于人為的數(shù)據(jù)庫操作有時卻是無能為力的,所以,為了避免這樣的錯誤發(fā)生,有必要對統(tǒng)計結果做定期的校驗,保證數(shù)據(jù)的正確性,當然,如果可以,盡量不要使用這種方法,但在一些個性化項目中,因為一些特別的原因,可能會有所應用。
(6) 我們可以間接地通過更新數(shù)據(jù)表的方式來調試觸發(fā)器,當然,也可以通過在觸發(fā)器中添加一些“特殊的日志性質的更新語句”來輔助我們的調試。
最后再說一句,所謂“好鋼用在刀刃上”,觸發(fā)器在一些特殊的應用情況下,會極大地簡化我們的開發(fā)工作量,并提升處理效率,但是它并使萬能的,也不是適用于各種應用環(huán)境,所以我們使用的時候,一定要慎重,更要權衡利弊。
(2) 如果想通過觸發(fā)器輔助業(yè)務邏輯,不能單著眼于數(shù)據(jù)庫內容的變化來設計觸發(fā)器,還必須緊密結合業(yè)務模型中涉及該表的所有地方,因為很有可能因為不一致的邏輯處理方式導致我們設計的觸發(fā)器遺漏下一些分支條件!其實,在這種情況下,如果能有更好的方法,不建議使用觸發(fā)器,因為牽扯到過多的業(yè)務邏輯內容的話,會使觸發(fā)器的設計和編寫困難重重,不能充分發(fā)揮其便捷高效的優(yōu)點。
(3) 鑒于觸發(fā)器在實際運行的時候,是被包含在一個數(shù)據(jù)庫事務中的,所以我們在編寫了完整的處理分支后,就可以完全信賴它的執(zhí)行,大量并發(fā)情況下,數(shù)據(jù)庫會自動處理好對各事務的操作,不用擔心觸發(fā)器的性能和正確性。
(4) 在同一個事務中的不同執(zhí)行語句,如果后面語句中的操作觸發(fā)了相應表的觸發(fā)器,則在觸發(fā)器內可以查看前面語句執(zhí)行后的結果列表的內容,所以,在使用觸發(fā)器的時候,對事物中多條語句的操作的順序是要考慮清楚的。
(5) 如果我們使用觸發(fā)器+數(shù)據(jù)表的形式來對數(shù)據(jù)進行一些統(tǒng)計性的操作的時候,我們在保證觸發(fā)器邏輯完整性的前提下,最好能通過數(shù)據(jù)庫任務的方式來定時進行檢查,因為觸發(fā)器對于一個用程序的操作都能有相應的處理,但對于人為的數(shù)據(jù)庫操作有時卻是無能為力的,所以,為了避免這樣的錯誤發(fā)生,有必要對統(tǒng)計結果做定期的校驗,保證數(shù)據(jù)的正確性,當然,如果可以,盡量不要使用這種方法,但在一些個性化項目中,因為一些特別的原因,可能會有所應用。
(6) 我們可以間接地通過更新數(shù)據(jù)表的方式來調試觸發(fā)器,當然,也可以通過在觸發(fā)器中添加一些“特殊的日志性質的更新語句”來輔助我們的調試。
最后再說一句,所謂“好鋼用在刀刃上”,觸發(fā)器在一些特殊的應用情況下,會極大地簡化我們的開發(fā)工作量,并提升處理效率,但是它并使萬能的,也不是適用于各種應用環(huán)境,所以我們使用的時候,一定要慎重,更要權衡利弊。
相關文章
SQL語句優(yōu)化之JOIN和LEFT JOIN 和 RIGHT JOIN語句的優(yōu)化
在數(shù)據(jù)庫的應用中,我們經常需要對數(shù)據(jù)庫進行多表查詢,然而當數(shù)據(jù)量非常大時多表查詢會對執(zhí)行效率產生非常大的影響,因此我們在使用JOIN和LEFT JOIN 和 RIGHT JOIN語句時要特別注意2018-03-03
DBeaver操作數(shù)據(jù)表的拷貝的實現(xiàn)
這篇文章主要介紹了DBeaver操作數(shù)據(jù)表的拷貝的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-11-11
基于navicat連接登錄windows10本地wsl數(shù)據(jù)庫
這篇文章主要介紹了基于navicat連接登錄windows10本地wsl數(shù)據(jù)庫,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-11-11
淺談一下數(shù)據(jù)庫系統(tǒng)的發(fā)展與組成
這篇文章主要介紹了淺談一下數(shù)據(jù)庫系統(tǒng)的發(fā)展與組成,數(shù)據(jù)庫系統(tǒng),指在計算機系統(tǒng)中引入數(shù)據(jù)庫后的系統(tǒng),一般由數(shù)據(jù)庫、數(shù)據(jù)庫管理系統(tǒng)、應用系統(tǒng)、數(shù)據(jù)庫管理員(DBA)構成,本文就數(shù)據(jù)庫的發(fā)展展開詳細講解2023-07-07
DBeaver之如何導出數(shù)據(jù)庫結構和數(shù)據(jù)
這篇文章主要介紹了DBeaver之如何導出數(shù)據(jù)庫結構和數(shù)據(jù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04

