久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

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

138次閱讀
沒有評論

共計 3268 個字符,預計需要花費 9 分鐘才能閱讀完成。

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

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

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

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

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

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

DDL 觸發(fā)器

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

 DML 觸發(fā)器

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

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

  替代觸發(fā)器

INSTEAD OF 觸發(fā)器又稱為替代觸發(fā)器,用于執(zhí)行一個替代操作來代替觸發(fā)事件的操
作。例如:針對 INSERT 事件的 INSTEAD OF 觸發(fā)器,它由 INSERT 語句觸發(fā),當出現(xiàn) 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ā)器

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

          可在寫入數(shù)據(jù)表前,強制檢驗或轉(zhuǎn)換數(shù)據(jù)。

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

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

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

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

       1. 確保數(shù)據(jù)庫的安全性

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

       2. 實施復雜的安全性授權(quán)

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

       3. 提供復雜的審計功能

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

       4. 維護不同數(shù)據(jù)庫之間同步表

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

        5. 實現(xiàn)復雜的數(shù)據(jù)完整性規(guī)則

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

        6. 實現(xiàn)復雜的非標準的數(shù)據(jù)庫相關(guān)完整性規(guī)則

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

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

  觸發(fā)器是由

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

關(guān)于“如何分析 sql 中的觸發(fā)器”就介紹到這了, 更多相關(guān)內(nèi)容可以搜索丸趣 TV 以前的文章,希望能夠幫助大家答疑解惑,請多多支持丸趣 TV 網(wǎng)站!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-08-04發(fā)表,共計3268字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 拉萨市| 垫江县| 大足县| 临清市| 千阳县| 二手房| 仁寿县| 左贡县| 剑川县| 麻城市| 时尚| 阿拉善盟| 洛南县| 三原县| 南川市| 会东县| 峨眉山市| 双峰县| 吉隆县| 辰溪县| 临安市| 张家界市| 建瓯市| 维西| 澜沧| 谷城县| 宜兴市| 克什克腾旗| 玛沁县| 海伦市| 青海省| 黄龙县| 开阳县| 凌海市| 合江县| 钟祥市| 瑞昌市| 奉化市| 承德县| 湘阴县| 砚山县|