亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        巧妙應(yīng)用SQL Server觸發(fā)器

        2010-05-08 01:10:36徐曉麗
        微型電腦應(yīng)用 2010年4期
        關(guān)鍵詞:數(shù)據(jù)庫系統(tǒng)觸發(fā)器字段

        徐曉麗

        0 前言

        在大型關(guān)系數(shù)據(jù)庫設(shè)計中,會經(jīng)常用到觸發(fā)器。它的特點(diǎn)是:一旦被定義,就存在于后臺數(shù)據(jù)庫系統(tǒng)(server,服務(wù)器方)中,并會在往表中插入記錄、更改記錄或者刪除記錄時,被自動地隱式執(zhí)行,從而使得它的設(shè)計既與前臺(client,客戶機(jī)方)的平臺無關(guān),又免除了前臺相關(guān)的數(shù)據(jù)操作設(shè)計。因此,觸發(fā)器可以用來對表實施復(fù)雜的完整性約束,當(dāng)觸發(fā)器所保護(hù)的數(shù)據(jù)發(fā)生改變時,觸發(fā)器會自動被激活,從而防止對數(shù)據(jù)的不正確修改。

        1 觸發(fā)器的種類

        根據(jù)觸發(fā)器被激活的時機(jī)不同,SQL Server 2000中提供了兩種類型的觸發(fā)器:INSTEAD OF觸發(fā)器和AFTER觸發(fā)器[1]。

        AFTER觸發(fā)器在一個INSERT、UPDATE或DELETE語句完成之后執(zhí)行,進(jìn)行約束檢查等動作都將在AFTER觸發(fā)器被激活之前發(fā)生。AFTER觸發(fā)器只能用于表。

        INSTEAD OF觸發(fā)器用于替代引起觸發(fā)器執(zhí)行的T-SQL語句。除表之外,INSTEAD OF觸發(fā)器也可以用于視圖,用來擴(kuò)展視圖可以支持的更新操作。

        一個表或視圖的每個修改動作(INSERT、UPDATE和DELETE)都可以有一個INSTEAD OF觸發(fā)器,但可以有多個AFTER觸發(fā)器。

        2 觸發(fā)器的作用

        觸發(fā)器主要用于如下幾個方面:自動生成派生列值;禁止非法事務(wù);增強(qiáng)復(fù)雜的安全識別; 在分布式數(shù)據(jù)庫中增強(qiáng)參照完整性;增強(qiáng)復(fù)雜的商業(yè)規(guī)則;提供透明的事件日志;提供高級審計;維護(hù)同步表復(fù)制;在表存取上進(jìn)行聚合統(tǒng)計。開發(fā)人員一般是對上述幾種情況作組合使用,可歸為以下四種典型應(yīng)用。

        (1)對庫中相關(guān)表進(jìn)行連環(huán)更新,如:鍵值的同步更新,數(shù)據(jù)冗余實現(xiàn),計算表的同步更新等;

        (2)實現(xiàn)那些破壞完整性操作的拒絕,如:不匹配外鍵值的插入拒絕;

        (3)實現(xiàn)庫定義本身所不能實現(xiàn)的更為復(fù)雜的商業(yè)規(guī)則,如:更新操作的時間限制,更新數(shù)據(jù)的幅度限制等;

        (4)實現(xiàn)簡單的“如果……怎么辦”的分析。

        3 觸發(fā)器的實現(xiàn)

        觸發(fā)器的實現(xiàn)離不了以下兩個專用表:Inserted表和Deleted表。這是兩個邏輯表,由系統(tǒng)來維護(hù),用戶不能對它們進(jìn)行修改。它們存放在內(nèi)存而不是數(shù)據(jù)庫中。這兩個表的結(jié)構(gòu)總是與激活該觸發(fā)器的表的結(jié)構(gòu)相同。觸發(fā)器執(zhí)行完成后,與該觸發(fā)器相關(guān)的這兩個表也會被刪除。

        Deleted表存放由于執(zhí)行DELETE或UPDATE語句而要從表中刪除的所有行。在執(zhí)行DELETE或UPDATE操作時,被刪除的行從表中被移動到Deleted表,這兩個表不會有共同的行。

        Inserted表存放由于執(zhí)行INSERT或UPDATE語句而要向表中插入的所有行。在 INSERT或UPDATE事務(wù)中,新的行同時添加到激活觸發(fā)器的表和Inserted表中,Inserted表的內(nèi)容是激活觸發(fā)器的表中新行的拷貝。

        在創(chuàng)建觸發(fā)器時需要制定以下內(nèi)容:觸發(fā)器的名稱、觸發(fā)器所基于的表或視圖、觸發(fā)器種類(AFTER 或 INSTEAD OF)、激活觸發(fā)器的修改語句(INSERT、UPDATE和DELETE)、觸發(fā)器執(zhí)行的語句,用T-SQL語句創(chuàng)建觸發(fā)器的具本語法如下:[2]

        CREATE Trigger trigger_name

        ON {table_name | view_name}

        { AFTER | INSTEAD OF}

        [INSERT,UPDATE,DELETE]

        AS

        Sq_Statement

        4 實際應(yīng)用

        在一個Market數(shù)據(jù)庫中有Goods表、Customers表及Orders表,三個表的結(jié)構(gòu)如下所示:

        Goods:

        Customers:

        Orders:

        現(xiàn)要求當(dāng)向Orders表中插入一條記錄時,ordersum(訂貨金額)字段的值由quantity*price而得到,并且如課該客戶是重點(diǎn)客戶,則對其打8.5折,若是一般客戶,則不打折。

        分析:由于quantity字段和price字段分別來自不同的表中,因此不能在創(chuàng)建表時用公式來完成。為了實現(xiàn)此功能,我們可考慮在Orders中針對Insert操作建立一個INSTEAD OF觸發(fā)器,在觸發(fā)器中查詢下定單的客戶的類別及所定貨品的價格,計算出貨品的ordersum的值;然后再將記錄插入到Orders表中。具體代碼如下所示:

        CREATE TRIGGER orderinsert ON OrderS

        INSTEAD OF INSERT

        AS

        declare @price money,@quantity int,@type varchar(10)

        declare @sum money

        select @price=price,@quantity=quantity,@type=type from goods,inserted,customers where goods.name=inserted.goodsnameandcustomers.customerid=inserted.customerid

        if @type='一般客戶'

        set @sum=@price*@quantity

        else

        set @sum=@price*@quantity*0.85

        insert into orders(goodsname,customerid,quantity,ordersum,orderdate)select goodsname,customerid,quantity,@sum,orderdate from inserted.

        觸發(fā)器建成以后,只有向order表中插入記錄,就會自動計算ordersum字段的值,從而實現(xiàn)了比默認(rèn)值及公式都更為復(fù)雜的字段默認(rèn)值的設(shè)置。

        5 結(jié)束語

        本文通過使用觸發(fā)器,實現(xiàn)了通過幾個表的數(shù)據(jù)對某一字段進(jìn)行自動計算的功能,完成了比CHECK約束更復(fù)雜的限制。當(dāng)然,也可以通過觸發(fā)器實現(xiàn)數(shù)據(jù)庫的級聯(lián)更新、級聯(lián)刪除及某些字段的自動更新功能(如增加某一訂單時,減少Goods表中相應(yīng)貨品的庫存量)。綜上所述,觸發(fā)器的主要特點(diǎn)在于,不管何種原因造成數(shù)據(jù)變化,它均能自動響應(yīng)。觸發(fā)器對數(shù)據(jù)庫開發(fā)過程中遇到的問題,往往會有獨(dú)到的解決方法。因此,在當(dāng)今數(shù)據(jù)庫系統(tǒng)的建立中,系統(tǒng)開發(fā)人員除了使用視圖、存儲過程等技術(shù)外,大多也使用觸發(fā)器技術(shù),以改進(jìn)數(shù)據(jù)庫系統(tǒng)建立的質(zhì)量,使數(shù)據(jù)庫的設(shè)計變得簡潔和高效。

        [1]羅運(yùn)模,王珊等《SQL Server數(shù)據(jù)庫系統(tǒng)基礎(chǔ)》[M].高等教育出版社.

        [2][美]James R.Groff Paul N.Weinberg 著.章小莉,寧欣,汪永好.等譯《SQL 完全手冊》[M].電子工業(yè)出版社.

        [3]郭勐,張擁軍,彭宇行.數(shù)據(jù)庫觸發(fā)器機(jī)制的設(shè)計與實現(xiàn)[J].電子技術(shù)應(yīng)用,2005,(02).

        [4]莫裕清,SQL Server 2000中基于觸發(fā)器的自動更新[J].中國科技信息.2006 Vol.8 P.221-222.

        [5]黃曉濤,數(shù)據(jù)庫觸發(fā)器實現(xiàn)數(shù)據(jù)庫系統(tǒng)的主動功能[J].計算機(jī)應(yīng)用研究.2005 Vol.21 No.2 P.238-240.

        [6]周愛華,南理勇.SQL Server 2000數(shù)據(jù)庫觸發(fā)器的應(yīng)用[J].商場現(xiàn)代化,2008,(07).

        猜你喜歡
        數(shù)據(jù)庫系統(tǒng)觸發(fā)器字段
        圖書館中文圖書編目外包數(shù)據(jù)質(zhì)量控制分析
        數(shù)據(jù)庫系統(tǒng)shell腳本應(yīng)用
        電子測試(2018年14期)2018-09-26 06:04:24
        主從JK觸發(fā)器邏輯功能分析
        電子世界(2017年22期)2017-12-02 03:03:45
        微細(xì)銑削工藝數(shù)據(jù)庫系統(tǒng)設(shè)計與開發(fā)
        使用觸發(fā)器,強(qiáng)化安全性
        實時數(shù)據(jù)庫系統(tǒng)數(shù)據(jù)安全采集方案
        核反應(yīng)堆材料數(shù)據(jù)庫系統(tǒng)及其應(yīng)用
        CNMARC304字段和314字段責(zé)任附注方式解析
        無正題名文獻(xiàn)著錄方法評述
        關(guān)于CNMARC的3--字段改革的必要性與可行性研究
        人妻少妇偷人精品久久性色av| 无码吃奶揉捏奶头高潮视频| 色婷婷av一区二区三区不卡| 亚洲av毛片在线免费观看 | 伊人久久成人成综合网222| 国产成人精品男人的天堂网站| aa日韩免费精品视频一| 熟女无套高潮内谢吼叫免费| 欧美激情a∨在线视频播放| 日本理论片一区二区三区| 久久色悠悠综合网亚洲| 色天使久久综合网天天| 少妇人妻200篇白洁| 就国产av一区二区三区天堂| 人妻中文字幕在线一二区| 无码人妻一区二区三区免费看| 久久久久久久久久久国产| 波多野结衣一区二区三区免费视频| 精品国产日产av在线| 国产精品一区二区av麻豆| 天美传媒精品1区2区3区| 国产国拍亚洲精品永久69| 在线观看的a站免费完整版| 国产av一区二区精品凹凸| 国产黑色丝袜在线观看下| 亚洲情精品中文字幕有码在线| 国产一区二区三免费视频| 午夜无遮挡男女啪啪免费软件| 免费一区二区三区久久| 少妇被搞高潮在线免费观看| 东北女人一级内射黄片| 国产av无码专区亚洲awww| 国产自产c区| 亚洲高清一区二区精品| 国产精品无码久久综合网| 久久精品久久精品中文字幕| 国产中文字幕亚洲综合| 国产av无码专区亚洲av麻豆| 人人爽人人爽人人爽| 亚洲色欲色欲www成人网| 亚洲精品中文字幕视频色|