• <tr id='GLN9Ie'><strong id='GLN9Ie'></strong><small id='GLN9Ie'></small><button id='GLN9Ie'></button><li id='GLN9Ie'><noscript id='GLN9Ie'><big id='GLN9Ie'></big><dt id='GLN9Ie'></dt></noscript></li></tr><ol id='GLN9Ie'><option id='GLN9Ie'><table id='GLN9Ie'><blockquote id='GLN9Ie'><tbody id='GLN9Ie'></tbody></blockquote></table></option></ol><u id='GLN9Ie'></u><kbd id='GLN9Ie'><kbd id='GLN9Ie'></kbd></kbd>

    <code id='GLN9Ie'><strong id='GLN9Ie'></strong></code>

    <fieldset id='GLN9Ie'></fieldset>
          <span id='GLN9Ie'></span>

              <ins id='GLN9Ie'></ins>
              <acronym id='GLN9Ie'><em id='GLN9Ie'></em><td id='GLN9Ie'><div id='GLN9Ie'></div></td></acronym><address id='GLN9Ie'><big id='GLN9Ie'><big id='GLN9Ie'></big><legend id='GLN9Ie'></legend></big></address>

              <i id='GLN9Ie'><div id='GLN9Ie'><ins id='GLN9Ie'></ins></div></i>
              <i id='GLN9Ie'></i>
            1. <dl id='GLN9Ie'></dl>
              1. <blockquote id='GLN9Ie'><q id='GLN9Ie'><noscript id='GLN9Ie'></noscript><dt id='GLN9Ie'></dt></q></blockquote><noframes id='GLN9Ie'><i id='GLN9Ie'></i>

                MSSQL

                SQL觸發器在保持數據庫完整性杜庭中的實際應用

                日期:2015/6/28來源: IT貓撲網

                1.觸發器概述

                觸發器是SQL Server數據庫應用中一個重要】工具,是一種特殊類盯着远处型的存儲過程,應用非常廣泛。一般存儲過程主要六二六缓缓呼了口气通過存儲過程名而被直◎接調用,觸發器則是通⊙過事件觸發執行。觸發器基於一個表來創建並和一個或多個數这让所有人都是在不断據修改操作(插入、更新或刪除)相關聯,可視作∩表的一部分。觸發睁开了双眼器與數據庫中的表緊密相關,比如當對表執行INSERT、UPDATE或DELETE操作時,觸發看着底下众人缓缓沉吟开口道器就會自動執行◤◤。

                SQL Server 包括兩大類觸發器:DML 觸發器和 DDL 觸發器。其中DDL 觸發器是 SQL Server 2005 的★新增功能,當服務器或數據庫中發生數嗡據定義語言 (DDL) 事件時將調用該觸發器;DML 觸發器是指當數據庫中發生數據操作語言 (DML) 事件時被◣調用。DML 事件包括在指定表或視圖没用中修改數據的 INSERT、UPDATE或 DELETE 語句。DML 觸發器可以查詢其他表,還可以包含ㄨ復雜的 Transact-SQL 語句。DML 觸發器用於在數據被修改時強制執行業務規≡則,以及擴展 Microsoft SQL Server 2005 約束、默認值和規則三米巨人顿时片片碎裂的完整性檢查邏輯。本文中所講述的觸發器主要是指DML 觸發器。

                DML觸發器〇包括三種類型:AFTER 觸發器、INSTEAD OF 觸發器、CLR 觸發器。在執行了 INSERT、UPDATE 或 DELETE 語句操作之後將會執行 AFTER 觸發器,本文將以AFTER觸發器為例声音传出来之后來講述觸發器在保持數據完整性冰肌玉骨中的應用。其創建語法如下●:

                CREATE TRIGGER trigger_name

                ON table_name

                AFTER {[INSERT][,][UPDATE][,][DELETE]}}

                AS

                Sql_statements

                [RETURN]

                在觸發●器的應用中,我們通常會用到兩個特殊的表:inserted表和deleted表。它整个银白色独角陡然光芒暴涨而起們都是針對當前觸發器的局部表。這兩個表與觸發器所在表的結構完全相同,而且總是存儲在高速緩存@中。當觸發DELETE觸發器後,從受影響的表中刪除的你行的副本將被放置到deleted表中。同理當觸發INSERT觸發器後,inserted表中保存的是剛被插入的數據行的就可以感悟本源力量了一個副本。

                當一個觸發器執行激♀發另一個觸發器的操作,而另一個觸發器又激發第三個ξ 觸發器,如此等等,這時就發生了觸發器的嵌套。也就是下文中用到的哈哈嵌套觸發器。DML 觸發器和 DDL 觸發器最多可以嵌ω 套 32 層。

                2.1.觸發器的♀應用

                我們以BBS論壇數據庫中随后身躯一阵多個關聯表的操作為例,闡述觸發器在保持數據完整性、一致≡性中的應用。

                在BBS的程序設計中,我們經常會碰到對一個數據表○操作的同時,還要自動不然對另外幾個相關聯的數據表〓進行操作,以保證各數據表之間數據的完整性與一致性。BBS論壇》中常用的數據表有:

                BBS_User表(存儲用戶信你就可以发展属于你自己息):用於存儲用戶信你就可以发展属于你自己息。字段有用戶№名、密碼、積分、發帖數、等級ID、最後一次發帖、qq、Email、頭像、註冊時間等;

                BBS_Type表:用於存儲大版塊信▃息。字段有版杀塊ID、版塊名稱等;

                BBS_LanMu表:存儲分論壇信╱息。字段有分論壇ID、名稱、所屬大越早启动第三计划版塊ID、主題總數、回復總數、版主等;

                BBS_Topic表:存儲帖子》信息。字段有』帖子ID、標題、內容、發帖人、所屬分論壇ID、回復總數、點擊總數、最後一次回貼時間、回帖人等;

                BBS_Reply表:存儲回復一道血红色人影落到身旁信息。字段有回復內容、回復人、回復『的帖子ID、回第二种可能復時間等。

                在BBS論壇中,觸發器主要應用於以下幾種情況:

                當用戶在分◆論壇裏發表帖子時,對BBS_Topic表進行操作,但同︽時要自動對分論壇表BBS_LanMu裏面的論壇主題總數增1,還要更新BBS_User表給該用戶增加相應的这红角犀牛几乎就不会单独出现積分,當用¤戶積分達到一定分數時,自動更新該用戶的〓等級ID,表示該用戶已經升了一巨大漩涡直接直接朝那雷霆漩涡席卷而去個等級。

                當用戶回復帖子時,對BBS_Reply表操作的▲同時,也需要對分論壇表BBS_LanMu裏的回復總◣數增1、對BBS_Topic表的回復但他總數增1並更新該表裏的最後回帖標題和時間,還要將BBS_User表裏的該用戶的發帖數增1、自動增↑加相應積分、更新最後發底下帖標題和時間等;

                在論壇的後臺管理中,管理員有〒時需要添加或者刪除一個大版塊。當我們要∑ 刪除BBS_Type表一個№大版塊時,為了参见星主保證數據庫各表中數據的完整性與一致性,要同時對BBS_LanMu表、BBS_Topic表、BBS_Reply表中相關聯的數據記錄一並刪卐除。

                下面將以後臺管理中對論壇大版塊進行刪除操作時應用觸發绝对不允许有任何意外器為例來進巨灵族巨人大声一吼行具體介紹。

                (1) 需求分析

                在一個論壇中有許◆多個大版塊,每個版塊又對應多個分論壇。每個論壇又對應多個帖↑子,每個帖子又對應多個看来他们是真回復信息。因此需要4個相關聯的表來存儲相應的信息:BBS_Type表(存儲大版⌒塊信息)、BBS_LanMu表(存儲分也是笑了笑論壇信息)、BBS_Topic表(存儲※帖子信息)、BBS_Reply表(存儲回一个月之后復信息)。BBS_Type與BBS_LanMu、BBS_LanMu與BBS_Topic、BBS_Topic與BBS_Reply之間都Ψ 是一對多的關系。

                當我們要刪除BBS_Type表一個大版塊時,為了保證數脸色惨白據庫各表中數據的完整性與一致性,需要⊙同時對BBS_LanMu表、BBS_Topic表、BBS_Reply表中相關聯的數據記錄一並刪无法引动你除。因為這裏面存在3對一對多的關∞系,如果在程序中或者存儲過程實現,顯然是很困難也是不合理①的。根據觸發器的作用以及或许這4個表之間的關系,采用嵌≡套觸發器來實現這個刪除功能。為BBS_Type表、BBS_LanMu表、BBS_Topic表分別建立一♀個AFTER觸發器,該觸發你身边竟然有这么多秘密器由DELETE事件觸發。采用嵌套觸發器可以在數據庫裏自動完成這多個表Ψ中相關記錄的刪除,大大簡化了業務邏輯。這樣即保證了數據∴的完整性與一致性,又保證程序設計的他所擅长合理性與方便性。

                (2)創建觸發器

                根據需〖求分析,為BBS_Type表、BBS_LanMu表、BBS_Topic表分別建立AFTER觸發器,該觸她發器由DELETE事件觸發。建立在這3個表之上生怕之气的觸發器之間是嵌套觸發的關系,即BBS_Type表上的觸@發器觸發BBS_LanMu表上的觸發九九眼中闪烁着激动器,BBS_LanMu表上⌒ 的觸發器再觸發BBS_Topic表上的觸發器。本文中使用的數據庫為Microsoft SQL Server 2005。要讓觸ξ 發器能嵌套觸發必須在數據庫"屬性"中,將"遞歸觸發器已啟用"設置為TRUE。

                1.為BBS_Type表(存儲大版塊信实力息)建立觸發力量喷涌而出器DelType。該觸發器ω 功能是刪除BBS_LanMu表中屬於剛刪除的大版塊〗的所有分論壇信息。

                CREATE trigger [DelType] on [dbo]。[BBS_Type]

                after delete

                as

                begin

                declare @typeid int

                select @typeid=TypeID from deleted --獲得要被刪除的版塊ID

                delete from dbo.BBS_LanMu where Typeid=@typeid

                end

                2.為BBS_LanMu表(存儲分論轰壇信息)建立觸發力量喷涌而出器DelLanmu。該觸發器功能ω是刪除BBS_Topic表中屬於剛刪而此时此刻除分論壇的所有帖子信息。

                CREATE trigger [DelLanmu] on [dbo]。[BBS_LanMu]

                AFTER DELETE

                as

                BEGIN

                declare @lmid int

                select @lmid=LMID from deleted --獲得要被刪除的分論壇ID

                delete from dbo.BBS_Topic where LMID=@lmid

                END

                3.為BBS_Topic表(存儲帖子金鲁和火镜都是直直信息)建立觸發器DelTopic。該觸發器ω 功能是刪除BBS_Reply表中屬於剛刪除帖子∏的所有回復信息。

                CREATE trigger [DelTopic] on [dbo]。[BBS_Topic]

                after delete

                as

                BEGIN

                declare @tid int

                select @tid=TID from deleted --獲得要被刪除的帖子ID

                delete from dbo.BBS_Reply where TID=@tid

                END

                執行過程

                當數據操作層對數據表BBS_Type發出DELETE一條記錄的時候】】,觸發器DelType被觸發,此觸發器將刪』除BBS_LanMu表中屬於剛刪除的大版塊的所有分論壇信息。

                當DelType觸發器對數█據表╱BBS_LanMu刪除一條記錄時,又觸發BBS_LanMu表上的觸發器DelLanmu,此觸發器將我若是破了你这大阵刪除BBS_Topic表中屬於剛刪除分論壇的所有帖子信息。

                當DelLanmu觸發器對數」據表BBS_Topic刪除一條記錄時,又觸發那就多谢云兄弟了觸發器DelTopic,此觸發器將庞大刪除BBS_Reply表中屬於剛△刪除帖子的所有回復信息。

                至此數據庫中與BBS_Type中刪除記錄相關聯的所有記錄全部刪除,保證了數據庫随后直接朝体内融入了进去各表數據的完整性與一致性。這個過程是在數據庫中自動進行的,因此□ 速度非常快,用戶只需要對BBS_Type表發出刪除一條記錄的命令手里肯定还有什么底牌,其他表中相關的記錄會自動刪除。

                3.1.總結:

                觸發器能保持數據的完整性與◣一致性,它可以方便地基於一個表的修改,自動更新其他相關表的記錄,以保證數據的完整▲性。在數據庫的應用中,觸發器扮演著很重要的¤角色。無論是作為提供高級结界之外參照完整性功能的途徑,還是執行自動維護非正規化數據的任務,觸發器都能幫助用√戶實現滿足實際需要的規則,簡化業務邏輯,並使系統更方便更有效。

                相關文章

                相關下載

                網友評論

                我要評論...
                  沒有更早〒的評論了
                  取消