您好,登錄后才能下訂單哦!
這篇文章主要為大家分析了如何分析sql中的觸發器的相關知識點,內容詳細易懂,操作細節合理,具有一定參考價值。如果感興趣的話,不妨跟著跟隨小編一起來看看,下面跟著小編一起深入學習“如何分析sql中的觸發器”的知識吧。
一.觸發器是什么
觸發器(trigger)是SQL server 提供給程序員和數據分析員來保證數據完整性的一種方法,它是與表事件相關的特殊的存儲過程,它的執行不是由程序調用,也不是手工啟動,而是由事件來觸發,比如當對一個表進行操作( insert,delete, update)時就會激活它執行,查詢是沒有觸發器的。觸發器經常用于加強數據的完整性約束和業務規則等。 當然我們要知道存儲過程是沒有返回值(return)的,而觸發器是有(return)的,
二.觸發器能干什么
觸發器可以查詢其他表,而且可以包含復雜的SQL語句。它們主要用于強制服從復雜的業務規則或要求。例如:您可以根據客戶當前的帳戶狀態,控制是否允許插入新訂單。這是百度百科的答案,看到不懂,那我覺得觸發器就像javaScript中的事件,點擊事件也好,鼠標移入移出事件也罷,也就是說不需要我們手動的去啟動它,只是將事件設好,當他根據某一行為執行這些事件的開始(這兒也就是觸發器),有了觸發器我們完全可以在執行第一條sql語句的時候,觸發也去執行第二條語句(當然這兒涉及到了觸發器的分類)
三,觸發器的分類
DDL觸發器
它是Sql Server2005新增的觸發器,主要用于審核與規范對數據庫中表,觸發器,視圖等結構上的操作。比如在修改表,修改列,新增表,新增列等。它在數據庫結構發生變化時執行,我們主要用它來記錄數據庫的修改過程,以及限制程序員對數據庫的修改,比如不允許刪除某些指定表等。
DML觸發器
當數據庫中表中的數據發生變化時,包括insert,update,delete任意操作,如果我們對該表寫了對應的DML觸發器,那么該觸發器自動執行。DML觸發器的主要作用在于強制執行業 務規則,以及擴展Sql Server約束,默認值等。因為我們知道約束只能約束同一個表中的數據,而觸發器中則可以執行任意Sql命令。
例:建立一個觸發器,當職工表執行刪除一條記錄的時候,把被刪除的記錄添加刪除日志表里
替代觸發器
INSTEAD OF 觸發器又稱為替代觸發器,用于執行一個替代操作來代替觸發事件的操
作。例如:針對 INSERT事件的 INSTEAD OF 觸發器,它由 INSERT語句觸發,當出現 INSERT
語句時,該語句不會被執行,而是執行 INSTEAD OF 觸發器中定義的語句。
創建 INSTEAD OF 觸發器需要注意以下幾點:
只能被創建在視圖上,并且該視圖沒有指定 WITH CHECK OPTION 選項。
不能指定 BEFORE 或 AFTER 選項。 FOR EACH ROW 子可是可選的,即 INSTEAD OF 觸發器只能在行級上觸發、或只能是行級觸發器,沒有必要指定。
沒有必要在針對一個表的視圖上創建 INSTEAD OF 觸發器,只要創建 DML 觸發器就 可以了。
系統事件觸發器:
登錄觸發器:
例: 創建登陸,退出觸發器
四,觸發器的究極作用
可在寫入數據表前,強制檢驗或轉換數據。
觸發器發生錯誤時,異動的結果會被撤銷。
部份數據庫管理系統可以針對數據定義語言(DDL)使用觸發器,稱為DDL觸發器。
可依照特定的情況,替換異動的指令 (INSTEAD OF)。
五.觸發器的應用
1.確保數據庫的安全性
可以基于時間限制用戶的操作,例如不允許下班后和節假日修改數據庫數據。
可以基于數據庫中的數據限制用戶的操作,例如不允許價格的升幅一次超過 10%。
2.實施復雜的安全性授權
利用觸發器控制實體的安全性,可以將權限藉于各種數據庫的值。
3.提供復雜的審計功能
審計用戶操作數據庫的語句。
把用戶對數據庫的更新寫入審計表。
4.維護不同數據庫之間同步表
在不同的數據庫之間可以利用快照來實現數據的復制,但有些系統要求兩個數據庫數據
實時同步,就必須利用觸發器從一個數據庫中向另一個數據庫復制數據。
5.實現復雜的數據完整性規則
實現非標準的數據完整性檢查和約束。觸發器可產生比規則更為復雜的限制。與規則不
同,觸發器可以引用列或數據庫對象。
提供可變的缺省值。
6.實現復雜的非標準的數據庫相關完整性規則
觸發器可以對數據庫中相關的表進行連環更新。例如,在 auths 表 author_code 列上的
刪除觸發器可導致相應刪除在其它表中的與之匹配的行。
觸發器能夠拒絕或回退那些破壞相關完整性的變化,取消試圖進行數據更新的事務。當
插入一個與其主健不匹配的外部鍵時,這種觸發器會起作用。
六.觸發器的組成
觸發器是由
觸發事件(如增刪改查).
觸發時間(即增刪改查發生之前還是之后).
觸發操作(該TRIGGER 被觸發之后的目的和意圖),
觸發對象(包括表、視圖、模式、數據庫。只有在這些對象上發生了符合觸發條件的觸發事件,才會執行觸發操作。).
觸發條件(由 WHEN 子句指定一個邏輯表達式。只有當該表達式的值為 TRUE 時,遇到觸發事件才會自動執行觸發器,使其執行觸發操作。).
觸發頻率(說明觸發器內定義的動作被執行的次數。即語句級(STATEMENT)觸發
器和行級(ROW)觸發器。)
七.觸發器的觸發次序
1. 執行 BEFORE 語句級觸發器;
2對與受語句影響的每一行
2.1 執行 BEFORE 行級觸發器
2.2 執行 DML 語句
2.3 執行 AFTER 行級觸發器
3. 執行 AFTER 語句級觸發器
八.觸發器的優點
優: 觸發器可通過數據庫中的相關表實現級聯更改,不過,通過級聯引用完整性約
束可以更有效地執行這些更改。觸發器可以強制比用 CHECK 約束定義的約束更為復雜的
約束。與 CHECK 約束不同,觸發器可以引用其它表中的列。例如,觸發器可以使用另一
個表中的 SELECT 比較插入或更新的數據,以及執行其它操作,如修改數據或顯示用戶定
義錯誤信息。觸發器也可以評估數據修改前后的表狀態,并根據其差異采取對策。一個表中
的多個同類觸發器(INSERT、UPDATE 或 DELETE)允許采取多個不同的對策以響應同一
個修改語句.
缺: 觸發器功能強大,輕松可靠地實現許多復雜的功能,但是它也具有一些缺點那
就是由于我們的濫用會造成數據庫及應用程序的維護困難。在數據庫操作中,我們可以通過
關系、觸發器、存儲過程、應用程序等來實現數據操作。同時規則、約束、缺省值也是保證
數據完整性的重要保障。如果我們對觸發器過分的依賴,勢必影響數據庫的結構,同時增加
了維護的復雜程序.
九.編寫觸發器的注意事項
首先觸發器是不接受參數的,
其次一個表上最多是可以有12個觸發器的,但是同一時間,同一事件,同一類型的觸發器只能有一個,并且觸發器之間不能有矛盾,
當然一個表中的觸發器越多,對該表的DML操作的性能影響就越大,觸發器最大為32kb,
若是確是需要,可以先建立過程,然后在觸發器中用call語句進行調用,
在觸發的執行部分只能用DML語句,不能使用DDL語句
觸發器中不能包含事務控制語句,因為觸發器是觸發語句中的一部分,觸發語句被提交,回滾時觸發器也被提交或是回滾了,
在觸發器主體中調用的任何過程,函數,都不能使用事務控制語句.
在觸發器主體中不能申明任何 long的 blob變量,新值new 和舊值oid也不能向表中的任何long和blob列
不同類型的觸發器的語法 格式和作用有較大區別
觸發器聲明變量附值方式的dephi類似,使用:=符號來賦值,新值new,舊值old前面不要忘記:引號符號.
關于“如何分析sql中的觸發器”就介紹到這了,更多相關內容可以搜索億速云以前的文章,希望能夠幫助大家答疑解惑,請多多支持億速云網站!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。