• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于SQL Server的觸發(fā)器技術(shù)研究與應(yīng)用

    2014-04-29 00:00:00吳立竹

    摘 要:本文研究在數(shù)據(jù)庫應(yīng)用程序開發(fā)中,通過使用觸發(fā)器,解決數(shù)據(jù)完整性和一致性機(jī)制的問題,提高數(shù)據(jù)質(zhì)量,使功能簡化、流程優(yōu)化,提高工作效率和質(zhì)量。

    關(guān)鍵詞:數(shù)據(jù)庫;數(shù)據(jù)完整性;數(shù)據(jù)一致性;觸發(fā)器;數(shù)據(jù)庫應(yīng)用程序開發(fā)

    中圖分類號:TP311.13

    數(shù)據(jù)庫中的數(shù)據(jù)在從外界輸入的過程中,由于種種原因,有時會輸入無效或錯誤的信息。在數(shù)據(jù)庫中進(jìn)行數(shù)據(jù)的操縱時,有時進(jìn)行了錯誤的信息處理方式。那么如何保證輸入及操縱的數(shù)據(jù)的正確性、一致性和可靠性,就成了數(shù)據(jù)庫系統(tǒng)關(guān)注的重要問題。觸發(fā)器在處理一些復(fù)雜的業(yè)務(wù)邏輯時,比其它方案更易于實現(xiàn),而且效果會更好,用數(shù)據(jù)庫自身帶有的觸發(fā)器實施完整性的約束,往往會起到事半功倍的作用。

    1 觸發(fā)器的概念

    觸發(fā)器是一種特殊類型的存儲過程,它與數(shù)據(jù)表緊密相連,觸發(fā)器被看作是數(shù)據(jù)表定義的一部分。觸發(fā)器是通過事件觸發(fā)而被自動執(zhí)行的。當(dāng)用戶對某個表或視圖中的數(shù)據(jù)進(jìn)行了相關(guān)操作時,將會觸發(fā)表或視圖上所定義的相關(guān)類型的觸發(fā)器,觸發(fā)器將會自動執(zhí)行,即觸發(fā)器所定義的操作被執(zhí)行。觸發(fā)器基于一個表創(chuàng)建,但是它可以針對多個表進(jìn)行操作,并可以包含復(fù)雜的Transcact-SQL語句。SQL Server將觸發(fā)器和觸發(fā)它的語句作為可在觸發(fā)器內(nèi)回滾的單個事務(wù)對待,如果檢測到嚴(yán)重的錯誤,則整個事務(wù)自動回滾,恢復(fù)到原來的狀態(tài),所以觸發(fā)器常被用來實現(xiàn)復(fù)雜的商業(yè)規(guī)則。

    2 觸發(fā)器的工作原理

    SQL Server觸發(fā)器功能強(qiáng)大,而且使用靈活,對一些較復(fù)雜的操作能夠順利完成。這是吸引數(shù)據(jù)庫開發(fā)技術(shù)人員喜歡選擇使用的重要原因之一。當(dāng)用戶為數(shù)據(jù)表或數(shù)據(jù)表中某個字段設(shè)置上觸發(fā)器后,當(dāng)該數(shù)據(jù)表或數(shù)據(jù)表中的該字段的數(shù)據(jù)被Insert(插入操作)、Delete(刪除操作)、Update(修改操作)時,依附在數(shù)據(jù)表或字段上的觸發(fā)器便被激活并自動執(zhí)行。

    觸發(fā)器本質(zhì)上來講就是一個事件監(jiān)控器,在執(zhí)行觸發(fā)器時,系統(tǒng)自動創(chuàng)建了兩個特殊的邏輯表:INSERTED表和DELETED表。它們是由系統(tǒng)來維護(hù),我們用戶是不能對兩個系統(tǒng)邏輯表的結(jié)構(gòu)和數(shù)據(jù)進(jìn)行修改。這兩個邏輯存儲在內(nèi)存中而不是數(shù)據(jù)庫中。而且這兩個表的表結(jié)構(gòu)是與被觸發(fā)器作用的表的表結(jié)構(gòu)是完全相同。觸發(fā)器在執(zhí)行完成后,與該觸發(fā)器相關(guān)的這兩個邏輯表也會自動被刪除。

    2.1 INSERTED邏輯表

    在觸發(fā)器的執(zhí)行過程中,當(dāng)用戶執(zhí)行了Insert或Update操作時,會產(chǎn)生INSERTED邏輯表,INSERTED表中存放由于執(zhí)行Insert操作時插入的新的數(shù)據(jù)行,或Update操作時,被修改之后的所有新的數(shù)據(jù)行。即在執(zhí)行Insert或Update操作時,新的數(shù)據(jù)行即添加到數(shù)據(jù)表中同時也添加到激活觸發(fā)器的INSERTED表中,INSERTED表的內(nèi)容是激活觸發(fā)器的表中新行的拷貝。

    2.2 DELETED邏輯表

    在觸發(fā)器的執(zhí)行過程中,當(dāng)用戶執(zhí)行了Delete或Update操作時,會產(chǎn)生DELETED邏輯表,DELETED邏輯表中存放由于執(zhí)行Delete操作時被刪除的所有數(shù)據(jù)行,或Update操作時,被修改之前的所有原始的數(shù)據(jù)行。即在執(zhí)行Delete或Update操作時,被刪除的行從激活觸發(fā)器的數(shù)據(jù)表中被刪除,同時這些被數(shù)據(jù)表刪除的行也被移動到DELETED表中,DELETED表的內(nèi)容是激活觸發(fā)器的表中被刪除數(shù)據(jù)行的備份,這兩個表不會有共同的行。

    3 觸發(fā)器的觸發(fā)方式

    觸發(fā)器是由事件觸發(fā)而自動執(zhí)行的。如果按照觸發(fā)器被激活的時機(jī)區(qū)分,SQL Server的觸發(fā)器可分為“后觸發(fā)”和“替代觸發(fā)”兩種觸發(fā)方式。

    3.1 后觸發(fā)

    若引發(fā)觸發(fā)器被執(zhí)行的操作,能夠通過了各種約束檢查成功執(zhí)行后,觸發(fā)器才被激活并自動執(zhí)行觸發(fā)器定義的操作,則這種觸發(fā)方式稱為“后觸發(fā)”。

    3.2 替代觸發(fā)

    若激活觸發(fā)器被執(zhí)行的操作,僅僅起到激活觸發(fā)器的作用,一旦激活觸發(fā)器后該操作并沒有被執(zhí)行,而是轉(zhuǎn)去執(zhí)行觸發(fā)器定義的操作,即激活觸發(fā)器的語句并沒有被執(zhí)行,相當(dāng)于觸發(fā)器操作替代了某種操作。這種觸發(fā)方式稱為“替代觸發(fā)”。

    4 觸發(fā)器的應(yīng)用實例

    觸發(fā)器可以實現(xiàn)比關(guān)系、主鍵和約束檢查等更靈活復(fù)雜的完整性控制。以“圖書信息管理系統(tǒng)”為例如下圖1所示,在SQL Server中創(chuàng)建如圖所示的“圖書信息”數(shù)據(jù)庫。在“圖書信息系統(tǒng)中”最主要的兩項工作過程就是:借書過程和還書過程。在還書過程中,如果涉及到超期圖書時還要計算罰金。這項工作我們要以觸發(fā)器方式自動計算,即在“租借信息”表上定義一個Update類型的后觸發(fā)器FaJin。當(dāng)執(zhí)行還書過程中填入還書日期時,就觸發(fā)了依附在租借信息表中還書日期字段上定義的FaJin觸發(fā)器,F(xiàn)aJin觸發(fā)器就可自動運(yùn)行計算罰金,并將罰金金額自動添加到該記錄的罰金字段中,60天為正常租書期限,超過一天罰金0.1元。FaJin觸發(fā)器的定義如下:

    create trigger FaJin on 租借信息

    after update as

    set 罰金=0.1*(datediff(day,借書日期,getdate())-60) where借書證號=(select 借書證號 from inserted)

    圖1 圖書信息管理系統(tǒng)

    5 結(jié)束語

    本文主要討論了SQL Server觸發(fā)器的應(yīng)用問題。SQL Server觸發(fā)器允許用戶定義一組操作,這些操作通過對指定的表進(jìn)行刪除、插入或更新操作來執(zhí)行或觸發(fā)。觸發(fā)器可以用來對表實施復(fù)雜的完整性約束。當(dāng)觸發(fā)器所保護(hù)的數(shù)據(jù)發(fā)生改變時,觸發(fā)器會自動被激活,從而對數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行保護(hù)。

    觸發(fā)器應(yīng)用較廣,它存儲在數(shù)據(jù)庫中,能提高客戶/服務(wù)器模式數(shù)據(jù)庫應(yīng)用系統(tǒng)的性能,能大大增強(qiáng)系統(tǒng)的執(zhí)行效率和數(shù)據(jù)的安全性,減少網(wǎng)絡(luò)流量,減輕數(shù)據(jù)庫服務(wù)器的負(fù)擔(dān)。可見,編寫觸發(fā)器程序?qū)⑹强蛻?服務(wù)器模式下數(shù)據(jù)庫應(yīng)用程序開發(fā)中T-SQL編程的針對數(shù)據(jù)庫功能深度挖掘一個最主要應(yīng)用。

    參考文獻(xiàn):

    [1]唐揚(yáng).數(shù)據(jù)庫游標(biāo)與觸發(fā)器機(jī)制的研究與實現(xiàn)[J].國防科技大學(xué),2004.

    [2]鄧衛(wèi)紅,肖卓鵬,黃金水.SQL Server觸發(fā)器的妙用[J].硅谷,2010(24).

    [3]韓蕾,王海蛟.SQL Server數(shù)據(jù)庫中數(shù)據(jù)完整性的實現(xiàn)[J].科技信息,2010(04).

    作者簡介:吳立竹(1971-),女,吉林四平人,副教授,工程碩士,研究方向:數(shù)據(jù)庫技術(shù)及應(yīng)用。

    作者單位:四平職業(yè)大學(xué),吉林四平 136002

    象山县| 珠海市| 京山县| 临猗县| 芷江| 桐城市| 宁南县| 成都市| 新龙县| 屏东市| 梁河县| 滕州市| 南皮县| 玛曲县| 巴彦淖尔市| 新巴尔虎左旗| 临夏县| 阳谷县| 民乐县| 安阳市| 杨浦区| 马关县| 四子王旗| 安庆市| 通化县| 万源市| 锡林浩特市| 汉中市| 铁岭市| 新源县| 满洲里市| 广东省| 沅江市| 台东市| 临武县| 绍兴县| 湘阴县| 鹰潭市| 汪清县| 万山特区| 迁安市|