數(shù)據(jù)庫(kù)觸發(fā)器(Trigger)的一點(diǎn)使用心得
更新時(shí)間:2009年07月27日 18:18:29 作者:
最近了解了一下數(shù)據(jù)庫(kù)觸發(fā)器,并做一點(diǎn)實(shí)際的應(yīng)用,在翻看其概念的時(shí)候,還是本著從理解的角度來(lái)學(xué)習(xí)的,但是,到了實(shí)際的應(yīng)用場(chǎng)景中,還是有一些特別注意的地方的,下面是自己在應(yīng)用中的幾點(diǎn)體會(huì)
(1) 針對(duì)較為復(fù)雜的跨多表的數(shù)據(jù)業(yè)務(wù)級(jí)別的約束,可以通過(guò)觸發(fā)器來(lái)替代大量的后臺(tái)判斷代碼,效率較高且便捷。
(2) 如果想通過(guò)觸發(fā)器輔助業(yè)務(wù)邏輯,不能單著眼于數(shù)據(jù)庫(kù)內(nèi)容的變化來(lái)設(shè)計(jì)觸發(fā)器,還必須緊密結(jié)合業(yè)務(wù)模型中涉及該表的所有地方,因?yàn)楹苡锌赡芤驗(yàn)椴灰恢碌倪壿嬏幚矸绞綄?dǎo)致我們?cè)O(shè)計(jì)的觸發(fā)器遺漏下一些分支條件!其實(shí),在這種情況下,如果能有更好的方法,不建議使用觸發(fā)器,因?yàn)闋砍兜竭^(guò)多的業(yè)務(wù)邏輯內(nèi)容的話,會(huì)使觸發(fā)器的設(shè)計(jì)和編寫(xiě)困難重重,不能充分發(fā)揮其便捷高效的優(yōu)點(diǎn)。
(3) 鑒于觸發(fā)器在實(shí)際運(yùn)行的時(shí)候,是被包含在一個(gè)數(shù)據(jù)庫(kù)事務(wù)中的,所以我們?cè)诰帉?xiě)了完整的處理分支后,就可以完全信賴它的執(zhí)行,大量并發(fā)情況下,數(shù)據(jù)庫(kù)會(huì)自動(dòng)處理好對(duì)各事務(wù)的操作,不用擔(dān)心觸發(fā)器的性能和正確性。
(4) 在同一個(gè)事務(wù)中的不同執(zhí)行語(yǔ)句,如果后面語(yǔ)句中的操作觸發(fā)了相應(yīng)表的觸發(fā)器,則在觸發(fā)器內(nèi)可以查看前面語(yǔ)句執(zhí)行后的結(jié)果列表的內(nèi)容,所以,在使用觸發(fā)器的時(shí)候,對(duì)事物中多條語(yǔ)句的操作的順序是要考慮清楚的。
(5) 如果我們使用觸發(fā)器+數(shù)據(jù)表的形式來(lái)對(duì)數(shù)據(jù)進(jìn)行一些統(tǒng)計(jì)性的操作的時(shí)候,我們?cè)诒WC觸發(fā)器邏輯完整性的前提下,最好能通過(guò)數(shù)據(jù)庫(kù)任務(wù)的方式來(lái)定時(shí)進(jìn)行檢查,因?yàn)橛|發(fā)器對(duì)于一個(gè)用程序的操作都能有相應(yīng)的處理,但對(duì)于人為的數(shù)據(jù)庫(kù)操作有時(shí)卻是無(wú)能為力的,所以,為了避免這樣的錯(cuò)誤發(fā)生,有必要對(duì)統(tǒng)計(jì)結(jié)果做定期的校驗(yàn),保證數(shù)據(jù)的正確性,當(dāng)然,如果可以,盡量不要使用這種方法,但在一些個(gè)性化項(xiàng)目中,因?yàn)橐恍┨貏e的原因,可能會(huì)有所應(yīng)用。
(6) 我們可以間接地通過(guò)更新數(shù)據(jù)表的方式來(lái)調(diào)試觸發(fā)器,當(dāng)然,也可以通過(guò)在觸發(fā)器中添加一些“特殊的日志性質(zhì)的更新語(yǔ)句”來(lái)輔助我們的調(diào)試。
最后再說(shuō)一句,所謂“好鋼用在刀刃上”,觸發(fā)器在一些特殊的應(yīng)用情況下,會(huì)極大地簡(jiǎn)化我們的開(kāi)發(fā)工作量,并提升處理效率,但是它并使萬(wàn)能的,也不是適用于各種應(yīng)用環(huán)境,所以我們使用的時(shí)候,一定要慎重,更要權(quán)衡利弊。
(2) 如果想通過(guò)觸發(fā)器輔助業(yè)務(wù)邏輯,不能單著眼于數(shù)據(jù)庫(kù)內(nèi)容的變化來(lái)設(shè)計(jì)觸發(fā)器,還必須緊密結(jié)合業(yè)務(wù)模型中涉及該表的所有地方,因?yàn)楹苡锌赡芤驗(yàn)椴灰恢碌倪壿嬏幚矸绞綄?dǎo)致我們?cè)O(shè)計(jì)的觸發(fā)器遺漏下一些分支條件!其實(shí),在這種情況下,如果能有更好的方法,不建議使用觸發(fā)器,因?yàn)闋砍兜竭^(guò)多的業(yè)務(wù)邏輯內(nèi)容的話,會(huì)使觸發(fā)器的設(shè)計(jì)和編寫(xiě)困難重重,不能充分發(fā)揮其便捷高效的優(yōu)點(diǎn)。
(3) 鑒于觸發(fā)器在實(shí)際運(yùn)行的時(shí)候,是被包含在一個(gè)數(shù)據(jù)庫(kù)事務(wù)中的,所以我們?cè)诰帉?xiě)了完整的處理分支后,就可以完全信賴它的執(zhí)行,大量并發(fā)情況下,數(shù)據(jù)庫(kù)會(huì)自動(dòng)處理好對(duì)各事務(wù)的操作,不用擔(dān)心觸發(fā)器的性能和正確性。
(4) 在同一個(gè)事務(wù)中的不同執(zhí)行語(yǔ)句,如果后面語(yǔ)句中的操作觸發(fā)了相應(yīng)表的觸發(fā)器,則在觸發(fā)器內(nèi)可以查看前面語(yǔ)句執(zhí)行后的結(jié)果列表的內(nèi)容,所以,在使用觸發(fā)器的時(shí)候,對(duì)事物中多條語(yǔ)句的操作的順序是要考慮清楚的。
(5) 如果我們使用觸發(fā)器+數(shù)據(jù)表的形式來(lái)對(duì)數(shù)據(jù)進(jìn)行一些統(tǒng)計(jì)性的操作的時(shí)候,我們?cè)诒WC觸發(fā)器邏輯完整性的前提下,最好能通過(guò)數(shù)據(jù)庫(kù)任務(wù)的方式來(lái)定時(shí)進(jìn)行檢查,因?yàn)橛|發(fā)器對(duì)于一個(gè)用程序的操作都能有相應(yīng)的處理,但對(duì)于人為的數(shù)據(jù)庫(kù)操作有時(shí)卻是無(wú)能為力的,所以,為了避免這樣的錯(cuò)誤發(fā)生,有必要對(duì)統(tǒng)計(jì)結(jié)果做定期的校驗(yàn),保證數(shù)據(jù)的正確性,當(dāng)然,如果可以,盡量不要使用這種方法,但在一些個(gè)性化項(xiàng)目中,因?yàn)橐恍┨貏e的原因,可能會(huì)有所應(yīng)用。
(6) 我們可以間接地通過(guò)更新數(shù)據(jù)表的方式來(lái)調(diào)試觸發(fā)器,當(dāng)然,也可以通過(guò)在觸發(fā)器中添加一些“特殊的日志性質(zhì)的更新語(yǔ)句”來(lái)輔助我們的調(diào)試。
最后再說(shuō)一句,所謂“好鋼用在刀刃上”,觸發(fā)器在一些特殊的應(yīng)用情況下,會(huì)極大地簡(jiǎn)化我們的開(kāi)發(fā)工作量,并提升處理效率,但是它并使萬(wàn)能的,也不是適用于各種應(yīng)用環(huán)境,所以我們使用的時(shí)候,一定要慎重,更要權(quán)衡利弊。
相關(guān)文章
在ACCESS和SQL Server下Like 日期類(lèi)型查詢區(qū)別
Like 和日期類(lèi)型在ACCESS和SQL Server的區(qū)別,需要的朋友可以參考下。2009-10-10
Dbeaver做數(shù)據(jù)遷移的詳細(xì)過(guò)程記錄
DBeaver是一款跨平臺(tái)的通用數(shù)據(jù)庫(kù)開(kāi)源管理工具,支持 MySQL,PostgreSQL,Oracle,DB2,MSSQL,Sybase,Mimer,HSQLDB,Derby以及其他兼容JDBC的數(shù)據(jù)庫(kù),下面這篇文章主要給大家介紹了關(guān)于Dbeaver做數(shù)據(jù)遷移的詳細(xì)過(guò)程,需要的朋友可以參考下2023-05-05
數(shù)據(jù)庫(kù)服務(wù)器構(gòu)建和部署檢查列表詳解
這篇文章主要介紹了數(shù)據(jù)庫(kù)服務(wù)器構(gòu)建和部署檢查列表的相關(guān)內(nèi)容,小編覺(jué)得挺不錯(cuò)的,這里分享給大家,供各位參考。2017-10-10
以前架征途時(shí)的合區(qū)的SQL語(yǔ)句代碼備份
本來(lái)以為資料都是丟了的,今天整理移動(dòng)硬盤(pán)時(shí)發(fā)現(xiàn)found.000這個(gè)目錄超大,進(jìn)去一看,我的媽呀,資料都在這里了,這下可把我樂(lè)壞了,我趕緊把一些有用的都發(fā)上來(lái)先2008-08-08

