?

對SQL SERVER 中觸發器的深入研究

2023-07-21 11:16邢偉杰
計算機應用文摘·觸控 2023年14期
關鍵詞:觸發器應用

摘 要SQL SERVER 觸發器是一個特定的數據信息存儲程序 它由用戶確定 并在消息表或數據庫系統內容上進行處理 觸發器無法被用戶進行處理 也無法接收各種功能 它們通常由事件驅動 由DBMS函數實現 當用戶在消息表中進行DELETE,INSERT,UPDATE 操作時 觸發器會被激活 并能夠進行相關的處理 為確保操作能夠順利完成 觸發器必須遵守規定的限制原則 一旦觸發器被運行 所有動作都將被視為一次事務處理 若事務未能成功完成 則DBMS 將回到事務開始前的狀態觸發器可以用來檢查數據規范 條件和默認值的完整性 檢測更復雜的信息 以及運行更復雜的業務邏輯 在此基礎上 文章深入探討SQL SERVER 觸發器的種類 特性及其形成的2 種臨時表 并著力闡述觸發器在提升數據分析完整性方面的應用 及其相關的事宜 旨在為數據庫系統設計者提供有效的參考 幫助其更好地控制數據完整性

關鍵詞SQL SERVER 觸發器 應用

中圖法分類號tp311 ?文獻標識碼a

1 引言

數據庫系統是信息系統開發和運行的基礎,而其存儲數據的準確性則是至關重要的。為確保數據的準確性,各種DBMS 提供了多種檢測和檢查方法,而靈活和合理地使用觸發器可以有效地提升信息系統的數據準確性,一般而言,數據庫系統開發人員會采用一些數據約束來確保數據的完整性。但是,當面對復雜的檢查策略和操作時,SQL SERVER 提供了一種更加有效的方法———觸發器。

2 SQL SERVER 觸發器含義及分類

2.1 SQL SERVER 觸發器含義

觸發器是由事件驅使的數據存儲過程,它可以被使用者定義在數據表上,并且可以被DBMS 自動調用運行。當使用者在數據表中進行任何操作,如更改、撤銷、進入或建立資料數據庫對象等,觸發器將會自動響應,從而實現統計信息的有效管理和分析。

2.2 SQL SERVER 觸發器分類

SQL SERVER 觸發器能夠根據引發事件的差異而分為Data Definition Language 和Data ManipulationLanguage 2 種,前者以數據編程語言為基礎,后者以數據過程語句為基礎。

DDL 觸發器可以用來處理各種DDL 事情,包括用戶進入和后退、CREATE、DROP、ALTER 語句等。它不僅可以用來檢查標準數據庫系統中的表結構和視圖結構,還可以作為應用系統管理主要任務,以確保信息系統的安全性和可靠性。

DML 觸發器是一種可以回應用戶DML 執行行為的機制,它可以檢查表或視圖中的INSERT,DELETE和UPDATE 動作是否符合業務規則,從而確保數據的完整性,并且可以在DML 編輯數據時引發執行,以提高數據處理的效率和準確性。

DML 觸發器可以根據在前面還是后面執行來劃分,這種劃分方式被稱為INSTEAD OF 和AFTER(FOR)觸發器。

INSTEAD OF 觸發器是一種在數據運算之前執行的程序, 它可以定義在視圖或表上, 用于替代DELETE,UPDATE 和INSERT 等功能,從而實現信息的有效處理。每個INSTEAD OF 觸發器只能被定義一次,以確保信息的有效處理,它可以在數據變動之前被調用,替代用戶的操作語句,從而實現觸發器所定義的操作,使用戶能夠更加輕松地完成任務。

在DML 語句結束執行后,AFTER(FOR)觸發器會被激活,以檢測被執行的信息是否合乎業務規則,若不合乎規則,則會回到該數據操作前的狀態。在同一張數據表上,可以定義多個AFTER(FOR)觸發器,而不僅僅是在表格中,AFTER 觸發器可以在大量數據動作結束后被調動運行,根據變化后的信息,對相關業務規范做出審查,從而決定是否接受或拒絕這些變化。

3 臨時表

SQL SERVER 在運行DML 觸發器時,會產生2 種只讀型臨時表,即DELETED 表和INSERTED 表。它們僅出現在存儲器中,其結構與激活DML 觸發器的視圖或基表相似,但功能卻有所不同。

3.1 DELETED 表

DELETED 表是一個存儲器,它只保存用于進行UPDATE 或delete 運算的舊數據行。當這些數據行被更新或移除時, 它們將從原有的基表中遷移到DELETED 表。

3.2 INSERTED 表

INSERTED 表是一個存儲系統,它可以存儲本次UPDATE 和INSERT 操作所產生的新數據行。當執行UPDATE 或INSERT 操作時,這些新數據行會被插入到基表中,并被復制到INSERTED 表中。

事實上,UPDATE 操作是由DELETE 和INSERT2個步驟組成的。在UPDATE 操作中,DBMS 會將需要更新的數據行從基表中移除, 并將其移動到DELETED 表中, 最后將新的數據行同樣移入INSERTED 表和基表中。

4 SQL SERVER 觸發器應用

觸發器機制應該被視為Windows 系統的一種消息響應機制,它能夠在數據表上實施更加復雜的檢查和操作,同時提供更加精確和強力的數據信息控制功能。此外,DDL 觸發器還能夠用于各類應用管理,從而有效地提升數據庫應用控制系統的可靠性。

4.1 實現CHECK 約束檢查功能

DML 觸發器可以靈活編寫代碼,以處理各種業務邏輯,因此它可以設置比CHECK 約束更加復雜、強大的數據檢查規則。當數據庫系統設計者需要發出差錯消息以提醒用戶時,CHECK 約束根本無法滿足需求,而觸發器可以有效地實現這一目標。并且當需要使用其他表格中的數據時,觸發器可以提供有效的支持,而CHECK 約束則可以提供更多的靈活性和便利性。

4.2 數據庫設計與批量數據導入

在信息系統工程設計中,表內部結構的改變和完善是不可避免的。因此,在表上設計各種限制以及表與表之間的引用關系等,都必須進行精確的計算,以確保數據庫系統的正常運行。然而,由于表內部結構的變化,原有的完整性限制都必須被取消,而重新建立各種限制又會造成一定的不便,這就給設計者提出了極大的挑戰。通過觸發器來設置有關限制規定,能夠在表內部結構發生變化時,快速禁用觸發器,從V,)"而節省時間和精力,同時能夠便捷地修復觸發器的應用,大幅提高了信息系統產品設計和測試的效率。

5 合理選擇觸發器與完整性約束

數據完整性約束和觸發器的作用機制各有不同,它們在完成不同任務時各有優勢和不足。

5.1 首選完整性約束

一般而言,只要能夠滿足應用系統業務邏輯的完整性要求,就應該采取完整性約束措施。完整性是一個關系數據庫系統的基本要求,它能夠通過建立主鍵、外鍵、值域和用戶定義的約束來實現。應用的完整性是至關重要的,因此應盡可能采用FOREIGNKEY 約束來強制執行。若完整性能夠符合應用的需求,則應該通過CHECK 約束來確保執行的有效性[1~2] 。

5.2 使用觸發器以滿足復雜的特殊需求

觸發器是一種有效的解決方案,它可以使用SQL語句來處理復雜的邏輯,從而滿足完整性約束的要求。然而,它并不總是最優的選擇,在完整性約束根本無法滿足用戶需求時,觸發器就顯得尤為重要。

5.2.1 CHECK 約束無法滿足特殊檢查

CHECK 條件雖然快速且效率高,但它無法滿足所有檢查要求。觸發器能夠根據需要定制更復雜、更強大的檢查規則,而CHECK 條件只能用于同一個表中的數字,因此它只能通過邏輯表示或者同一個列的另一值來檢驗列值。一旦需要檢驗列值,觸發器就能夠提供有效地支持,從而使用戶能夠從多個表中獲取有效的信息。比如,觸發器能夠從同一個數據庫系統的SELECT 結果中接入或修改相關的信息,以便更準確地識別出列值。

5.2.2 對中間數據進行處理

當我們不關心表中某個字段的過去或現在的值,只想知道變化的程度時,雖然沒有列表可以提供這些信息,但是可以通過觸發器中的INSERTED 臨時表和DELETED 臨時表來計算出變化的程度,從而獲得有關變化的信息。觸發器可以檢測數據在各個表中的變化,并根據這些變化采取相應的應對措施,以確保數據的準確性和完整性。

5.2.3 方便完整性更改

當表內部結構發生變化時,原有的完整性約束必須被刪除,這使得數據庫系統設計師面臨著巨大的挑戰,因為在再次創建表之前,必須先確保毫無疏漏,這會給數據庫系統設計師造成極大的麻煩。觸發器不僅僅關注表內部結構的變化,還關注表內部結構是否能夠正常運行。因此,當表結構發生變化時,只需要禁用觸發器,就能夠為數據庫系統開發者帶來便利。在數據庫系統開發過程中,應該先采用觸發器來確保引用完整性, 然后在開發完成后, 將其更改為DRI[3~4] 。

6 SQL SERVER 觸發器應用注意事項

6.1 觸發器執行不是主動執行

AFTER 觸發器是一種在事情產生后被啟動的引發語言,它會將引發語言運行的結果記載在日志中,但并沒有進行提交。這表明, 一旦觸發器要求rollback,就必須取消此前已進行的一系列操作,從而影響系統性能。因此,觸發器的效率取決于引發語言的工作量。約束是一種主動的行為,它們在實際語言產生之前就會發揮作用,以阻止失敗的產生。約束的執行速度要比其他行為快得多,但是當引發語言變得更加復雜、影響數據量更大時,使用觸發器可以帶來更高的效率。

6.2 保持觸發器簡潔

觸發器是一種特殊的事務,可以在語句結束時觸發它。如果觸發器語句包含大量的代碼,那么觸發器會持續運行很長時間,這意味著每一段代碼都需要花費大量的時間來完成。觸發器的執行需要一段時間,而SQL 語句則需要在觸發器完成后才能正式執行。若觸發器在執行過程中發現錯誤,則它會自動重新開始,這樣一來,降低了整個應用系統的運行效率,導致性能下降。

6.3 盡量避免在觸發器中回滾

盡管回滾是觸發器中最常見的任務, 但由于AFTER 觸發器在大部分操作完成后才會發生,因此回滾的成本較高,為了節省成本,推薦盡量采用DRI。在觸發器中應用多條ROLLBACK 語句時,最好在完成啟動觸發器以前就發現可能存在的問題,并立即進行檢查,以避免錯誤發生,而不是等到觸發器發出回滾信號。觸發器能夠有效地防止或回滾偏離業務邏輯規律的動作,但應盡量避免使用回滾,因為它會導致大量動作被撤銷,并增加系統運行的成本。尤其是當涉及大量信息時,或許會導致數據庫系統服務質量急劇下降,所以,建議盡可能使用完整性約束,而不過度依賴觸發器。

7 結束語

使用觸發器能夠協助數據庫信息管理系統設計者和維護者實現繁雜的各種功能,從而提升信息系統的完整性。但是,應該謹慎使用觸發器,因為過度使用會導致系統維護變得困難。所以,在數據庫信息管理系統產品設計中,應盡可能采用DRI 來確保數據信息完全。通過適當應用觸發器,能夠有效保護數據表中的各種數據信息,使其更加安全可靠,極大地減少數據庫信息管理系統設計者的操作量,從而達到事半功倍的效果。

參考文獻:

[1] 王珊.數據庫系統概論[M].北京:高等教育出版社,2012.

[2] 鄒建.深入淺出SQL SERVER 2005 開發、管理與應用實例[M].北京:人民郵電出版社,2008.

[3] 李霞. SQL SERVER 約束在維護數據完整性中的運用[J].晉城職業技術學院學報,2012(5):16?19.

[4] 張峰.觸發器在數據處理過程中的應用研究[J].計算機工程與科學,2008(5):156?158.

作者簡介:

邢偉杰( 1981—), 碩士, 講師, 研究方向: 計算機科學技術。

猜你喜歡
觸發器應用
主從JK觸發器邏輯功能分析
使用觸發器,強化安全性
GM(1,1)白化微分優化方程預測模型建模過程應用分析
煤礦井下坑道鉆機人機工程學應用分析
氣體分離提純應用變壓吸附技術的分析
會計與統計的比較研究
對觸發器邏輯功能轉換的分析
觸發器邏輯功能轉換的兩種方法
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合