如何分析sql中的觸發(fā)器

這篇文章主要為大家分析了如何分析sql中的觸發(fā)器的相關知識點,內容詳細易懂,操作細節(jié)合理,具有一定參考價值。如果感興趣的話,不妨跟著跟隨小編一起來看看,下面跟著小編一起深入學習“如何分析sql中的觸發(fā)器”的知識吧。

成都網絡公司-成都網站建設公司成都創(chuàng)新互聯(lián)公司十多年經驗成就非凡,專業(yè)從事成都網站設計、成都網站制作,成都網頁設計,成都網頁制作,軟文平臺,1元廣告等。十多年來已成功提供全面的成都網站建設方案,打造行業(yè)特色的成都網站建設案例,建站熱線:18980820575,我們期待您的來電!

一.觸發(fā)器是什么

                 觸發(fā)器(trigger)是SQL server 提供給程序員和數據分析員來保證數據完整性的一種方法,它是與表事件相關的特殊的存儲過程,它的執(zhí)行不是由程序調用,也不是手工啟動,而是由事件來觸發(fā),比如當對一個表進行操作( insert,delete, update)時就會激活它執(zhí)行,查詢是沒有觸發(fā)器的。觸發(fā)器經常用于加強數據的完整性約束和業(yè)務規(guī)則等。 當然我們要知道存儲過程是沒有返回值(return)的,而觸發(fā)器是有(return)的,

二.觸發(fā)器能干什么

       觸發(fā)器可以查詢其他表,而且可以包含復雜的SQL語句。它們主要用于強制服從復雜的業(yè)務規(guī)則或要求。例如:您可以根據客戶當前的帳戶狀態(tài),控制是否允許插入新訂單。這是百度百科的答案,看到不懂,那我覺得觸發(fā)器就像javaScript中的事件,點擊事件也好,鼠標移入移出事件也罷,也就是說不需要我們手動的去啟動它,只是將事件設好,當他根據某一行為執(zhí)行這些事件的開始(這兒也就是觸發(fā)器),有了觸發(fā)器我們完全可以在執(zhí)行第一條sql語句的時候,觸發(fā)也去執(zhí)行第二條語句(當然這兒涉及到了觸發(fā)器的分類)

三,觸發(fā)器的分類   

DDL觸發(fā)器

       它是Sql Server2005新增的觸發(fā)器,主要用于審核與規(guī)范對數據庫中表,觸發(fā)器,視圖等結構上的操作。比如在修改表,修改列,新增表,新增列等。它在數據庫結構發(fā)生變化時執(zhí)行,我們主要用它來記錄數據庫的修改過程,以及限制程序員對數據庫的修改,比如不允許刪除某些指定表等。

 DML觸發(fā)器

         當數據庫中表中的數據發(fā)生變化時,包括insert,update,delete任意操作,如果我們對該表寫了對應的DML觸發(fā)器,那么該觸發(fā)器自動執(zhí)行。DML觸發(fā)器的主要作用在于強制執(zhí)行業(yè) 務規(guī)則,以及擴展Sql Server約束,默認值等。因為我們知道約束只能約束同一個表中的數據,而觸發(fā)器中則可以執(zhí)行任意Sql命令。      

例:建立一個觸發(fā)器,當職工表執(zhí)行刪除一條記錄的時候,把被刪除的記錄添加刪除日志表里

如何分析sql中的觸發(fā)器

 替代觸發(fā)器

INSTEAD OF 觸發(fā)器又稱為替代觸發(fā)器,用于執(zhí)行一個替代操作來代替觸發(fā)事件的操
作。例如:針對 INSERT事件的 INSTEAD OF 觸發(fā)器,它由 INSERT語句觸發(fā),當出現 INSERT
語句時,該語句不會被執(zhí)行,而是執(zhí)行 INSTEAD OF 觸發(fā)器中定義的語句。
創(chuàng)建 INSTEAD OF 觸發(fā)器需要注意以下幾點:
                 只能被創(chuàng)建在視圖上,并且該視圖沒有指定 WITH CHECK OPTION 選項。
                 不能指定 BEFORE 或 AFTER 選項。  FOR EACH ROW 子可是可選的,即                                  INSTEAD OF 觸發(fā)器只能在行級上觸發(fā)、或只能是行級觸發(fā)器,沒有必要指定。
                 沒有必要在針對一個表的視圖上創(chuàng)建 INSTEAD OF 觸發(fā)器,只要創(chuàng)建 DML 觸發(fā)器就                  可以了。

系統(tǒng)事件觸發(fā)器:                          

            登錄觸發(fā)器:

                          例: 創(chuàng)建登陸,退出觸發(fā)器

如何分析sql中的觸發(fā)器

四,觸發(fā)器的究極作用

          可在寫入數據表前,強制檢驗或轉換數據。

          觸發(fā)器發(fā)生錯誤時,異動的結果會被撤銷。

           部份數據庫管理系統(tǒng)可以針對數據定義語言(DDL)使用觸發(fā)器,稱為DDL觸發(fā)器。

            可依照特定的情況,替換異動的指令 (INSTEAD OF)。

五.觸發(fā)器的應用

       1.確保數據庫的安全性

可以基于時間限制用戶的操作,例如不允許下班后和節(jié)假日修改數據庫數據。
可以基于數據庫中的數據限制用戶的操作,例如不允許價格的升幅一次超過 10%。

       2.實施復雜的安全性授權

利用觸發(fā)器控制實體的安全性,可以將權限藉于各種數據庫的值。

       3.提供復雜的審計功能

審計用戶操作數據庫的語句。
把用戶對數據庫的更新寫入審計表。

       4.維護不同數據庫之間同步表

在不同的數據庫之間可以利用快照來實現數據的復制,但有些系統(tǒng)要求兩個數據庫數據
實時同步,就必須利用觸發(fā)器從一個數據庫中向另一個數據庫復制數據。

        5.實現復雜的數據完整性規(guī)則

實現非標準的數據完整性檢查和約束。觸發(fā)器可產生比規(guī)則更為復雜的限制。與規(guī)則不
同,觸發(fā)器可以引用列或數據庫對象。
提供可變的缺省值。

        6.實現復雜的非標準的數據庫相關完整性規(guī)則

觸發(fā)器可以對數據庫中相關的表進行連環(huán)更新。例如,在 auths 表 author_code 列上的
刪除觸發(fā)器可導致相應刪除在其它表中的與之匹配的行。
 觸發(fā)器能夠拒絕或回退那些破壞相關完整性的變化,取消試圖進行數據更新的事務。當
插入一個與其主健不匹配的外部鍵時,這種觸發(fā)器會起作用。

六.觸發(fā)器的組成

 觸發(fā)器是由

觸發(fā)事件(如增刪改查).

觸發(fā)時間(即增刪改查發(fā)生之前還是之后).

觸發(fā)操作(該TRIGGER 被觸發(fā)之后的目的和意圖),

觸發(fā)對象(包括表、視圖、模式、數據庫。只有在這些對象上發(fā)生了符合觸發(fā)條件的觸發(fā)事件,才會執(zhí)行觸發(fā)操作。).

觸發(fā)條件(由 WHEN 子句指定一個邏輯表達式。只有當該表達式的值為 TRUE 時,遇到觸發(fā)事件才會自動執(zhí)行觸發(fā)器,使其執(zhí)行觸發(fā)操作。).

觸發(fā)頻率(說明觸發(fā)器內定義的動作被執(zhí)行的次數。即語句級(STATEMENT)觸發(fā)
器和行級(ROW)觸發(fā)器。)

七.觸發(fā)器的觸發(fā)次序

1. 執(zhí)行 BEFORE 語句級觸發(fā)器;

2對與受語句影響的每一行
   2.1  執(zhí)行 BEFORE 行級觸發(fā)器
   2.2 執(zhí)行 DML 語句
   2.3 執(zhí)行 AFTER 行級觸發(fā)器
3. 執(zhí)行 AFTER 語句級觸發(fā)器

八.觸發(fā)器的優(yōu)點

優(yōu): 觸發(fā)器可通過數據庫中的相關表實現級聯(lián)更改,不過,通過級聯(lián)引用完整性約
束可以更有效地執(zhí)行這些更改。觸發(fā)器可以強制比用 CHECK 約束定義的約束更為復雜的
約束。與 CHECK 約束不同,觸發(fā)器可以引用其它表中的列。例如,觸發(fā)器可以使用另一
個表中的 SELECT 比較插入或更新的數據,以及執(zhí)行其它操作,如修改數據或顯示用戶定
義錯誤信息。觸發(fā)器也可以評估數據修改前后的表狀態(tài),并根據其差異采取對策。一個表中
的多個同類觸發(fā)器(INSERT、UPDATE 或 DELETE)允許采取多個不同的對策以響應同一
個修改語句.

缺: 觸發(fā)器功能強大,輕松可靠地實現許多復雜的功能,但是它也具有一些缺點那
就是由于我們的濫用會造成數據庫及應用程序的維護困難。在數據庫操作中,我們可以通過
關系、觸發(fā)器、存儲過程、應用程序等來實現數據操作。同時規(guī)則、約束、缺省值也是保證
數據完整性的重要保障。如果我們對觸發(fā)器過分的依賴,勢必影響數據庫的結構,同時增加
了維護的復雜程序.

九.編寫觸發(fā)器的注意事項

首先觸發(fā)器是不接受參數的,

其次一個表上最多是可以有12個觸發(fā)器的,但是同一時間,同一事件,同一類型的觸發(fā)器只能有一個,并且觸發(fā)器之間不能有矛盾,

當然一個表中的觸發(fā)器越多,對該表的DML操作的性能影響就越大,觸發(fā)器最大為32kb,

若是確是需要,可以先建立過程,然后在觸發(fā)器中用call語句進行調用,

在觸發(fā)的執(zhí)行部分只能用DML語句,不能使用DDL語句

觸發(fā)器中不能包含事務控制語句,因為觸發(fā)器是觸發(fā)語句中的一部分,觸發(fā)語句被提交,回滾時觸發(fā)器也被提交或是回滾了,

在觸發(fā)器主體中調用的任何過程,函數,都不能使用事務控制語句.

在觸發(fā)器主體中不能申明任何 long的 blob變量,新值new 和舊值oid也不能向表中的任何long和blob列

不同類型的觸發(fā)器的語法 格式和作用有較大區(qū)別

觸發(fā)器聲明變量附值方式的dephi類似,使用:=符號來賦值,新值new,舊值old前面不要忘記:引號符號.

關于“如何分析sql中的觸發(fā)器”就介紹到這了,更多相關內容可以搜索創(chuàng)新互聯(lián)以前的文章,希望能夠幫助大家答疑解惑,請多多支持創(chuàng)新互聯(lián)網站!

文章名稱:如何分析sql中的觸發(fā)器
標題網址:http://muchs.cn/article48/pgophp.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供網站制作、網站改版、品牌網站制作、做網站、域名注冊、微信小程序

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

網站建設網站維護公司