


全文預(yù)覽已結(jié)束
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
觸發(fā)器在數(shù)據(jù)庫中的應(yīng)用及影響摘要:觸發(fā)器是一個(gè)特殊的存儲(chǔ)過程,它的執(zhí)行不是有程序調(diào)用,也不是手工啟動(dòng),而是由事件觸發(fā),比如對一個(gè)表進(jìn)行插入、刪除和更新操作時(shí)就會(huì)激發(fā)它執(zhí)行。觸發(fā)器經(jīng)常用于加強(qiáng)數(shù)據(jù)的完整性約束和業(yè)務(wù)規(guī)則,本文簡單介紹了觸發(fā)器在數(shù)據(jù)庫中的應(yīng)用及其影響。關(guān)鍵字:觸發(fā)器;數(shù)據(jù)庫;存儲(chǔ)過程一、觸發(fā)器概述 觸發(fā)器是SQL Server數(shù)據(jù)庫應(yīng)用中一個(gè)重要工具,是一種特殊類型的存儲(chǔ)過程,應(yīng)用非常廣泛。一般存儲(chǔ)過程主要通過存儲(chǔ)過程名而被直接調(diào)用,觸發(fā)器則是通過事件觸發(fā)執(zhí)行。觸發(fā)器基于一個(gè)表來創(chuàng)建并和一個(gè)或多個(gè)數(shù)據(jù)修改操作(插入、更新或刪除)相關(guān)聯(lián),可視作表的一部分。觸發(fā)器與數(shù)據(jù)庫中的表緊密相關(guān),比如當(dāng)對表執(zhí)行Insert、Update或Delete操作時(shí),觸發(fā)器就會(huì)自動(dòng)執(zhí)行。 SQL Server 包括兩大類觸發(fā)器:DML 觸發(fā)器和 DDL 觸發(fā)器。其中DDL 觸發(fā)器是 SQL Server 2005 的新增功能,當(dāng)服務(wù)器或數(shù)據(jù)庫中發(fā)生數(shù)據(jù)定義語言 (DDL) 事件時(shí)將調(diào)用該觸發(fā)器;DML 觸發(fā)器是指當(dāng)數(shù)據(jù)庫中發(fā)生數(shù)據(jù)操作語言 (DML) 事件時(shí)被調(diào)用。DML 事件包括在指定表或視圖中修改數(shù)據(jù)的 Insert、Update或 Delete 語句。DML 觸發(fā)器可以查詢其他表,還可以包含復(fù)雜的 Transact-SQL 語句。DML 觸發(fā)器用于在數(shù)據(jù)被修改時(shí)強(qiáng)制執(zhí)行業(yè)務(wù)規(guī)則,以及擴(kuò)展 Microsoft SQL Server 2005 約束、默認(rèn)值和規(guī)則的完整性檢查邏輯。本文中所講述的觸發(fā)器主要是指DML 觸發(fā)器。 DML觸發(fā)器包括三種類型:AFTER 觸發(fā)器、INSTEAD OF 觸發(fā)器、CLR 觸發(fā)器。在執(zhí)行了 Insert、Update 或 Delete 語句操作之后將會(huì)執(zhí)行AFTER 觸發(fā)器,本文將以AFTER觸發(fā)器為例來講述觸發(fā)器在保持?jǐn)?shù)據(jù)完整性中的應(yīng)用。其創(chuàng)建語法如下: Create TRIGGER trigger_name ON table_name AFTER Insert,Update,Delete AS Sql_statements RETURN 在觸發(fā)器的應(yīng)用中,我們通常會(huì)用到兩個(gè)特殊的表:inserted表和deleted表。它們都是針對當(dāng)前觸發(fā)器的局部表。這兩個(gè)表與觸發(fā)器所在表的結(jié)構(gòu)完全相同,而且總是存儲(chǔ)在高速緩存中。當(dāng)觸發(fā)Delete觸發(fā)器后,從受影響的表中刪除的行的副本將被放置到deleted表中。同理當(dāng)觸發(fā)Insert觸發(fā)器后,inserted表中保存的是剛被插入的數(shù)據(jù)行的一個(gè)副本。 當(dāng)一個(gè)觸發(fā)器執(zhí)行激發(fā)另一個(gè)觸發(fā)器的操作,而另一個(gè)觸發(fā)器又激發(fā)第三個(gè)觸發(fā)器,如此等等,這時(shí)就發(fā)生了觸發(fā)器的嵌套。也就是下文中用到的嵌套觸發(fā)器。DML 觸發(fā)器和 DDL 觸發(fā)器最多可以嵌套 32 層。 二、觸發(fā)器的應(yīng)用 我們以BBS論壇數(shù)據(jù)庫中多個(gè)關(guān)聯(lián)表的操作為例,闡述觸發(fā)器在保持?jǐn)?shù)據(jù)完整性、一致性中的應(yīng)用。 在BBS的程序設(shè)計(jì)中,我們經(jīng)常會(huì)碰到對一個(gè)數(shù)據(jù)表操作的同時(shí),還要自動(dòng)對另外幾個(gè)相關(guān)聯(lián)的數(shù)據(jù)表進(jìn)行操作,以保證各數(shù)據(jù)表之間數(shù)據(jù)的完整性與一致性。BBS論壇中常用的數(shù)據(jù)表有: BBS_User表(存儲(chǔ)用戶信息):用于存儲(chǔ)用戶信息。字段有用戶名、密碼、積分、發(fā)帖數(shù)、等級ID、最后一次發(fā)帖、qq、Email、頭像、注冊時(shí)間等; BBS_Type表:用于存儲(chǔ)大版塊信息。字段有版塊ID、版塊名稱等; BBS_LanMu表:存儲(chǔ)分論壇信息。字段有分論壇ID、名稱、所屬大版塊ID、主題總數(shù)、回復(fù)總數(shù)、版主等; BBS_Topic表:存儲(chǔ)帖子信息。字段有帖子ID、標(biāo)題、內(nèi)容、發(fā)帖人、所屬分論壇ID、回復(fù)總數(shù)、點(diǎn)擊總數(shù)、最后一次回貼時(shí)間、回帖人等; BBS_Reply表:存儲(chǔ)回復(fù)信息。字段有回復(fù)內(nèi)容、回復(fù)人、回復(fù)的帖子ID、回復(fù)時(shí)間等。 在BBS論壇中,觸發(fā)器主要應(yīng)用于以下幾種情況: 當(dāng)用戶在分論壇里發(fā)表帖子時(shí),對BBS_Topic表進(jìn)行操作,但同時(shí)要自動(dòng)對分論壇表BBS_LanMu里面的論壇主題總數(shù)增1,還要更新BBS_User表給該用戶增加相應(yīng)的積分,當(dāng)用戶積分達(dá)到一定分?jǐn)?shù)時(shí),自動(dòng)更新該用戶的等級ID,表示該用戶已經(jīng)升了一個(gè)等級。 當(dāng)用戶回復(fù)帖子時(shí),對BBS_Reply表操作的同時(shí),也需要對分論壇表BBS_LanMu里的回復(fù)總數(shù)增1、對BBS_Topic表的回復(fù)總數(shù)增1并更新該表里的最后回帖標(biāo)題和時(shí)間,還要將BBS_User表里的該用戶的發(fā)帖數(shù)增1、自動(dòng)增加相應(yīng)積分、更新最后發(fā)帖標(biāo)題和時(shí)間等; 在論壇的后臺管理中,管理員有時(shí)需要添加或者刪除一個(gè)大版塊。當(dāng)我們要?jiǎng)h除BBS_Type表一個(gè)大版塊時(shí),為了保證數(shù)據(jù)庫各表中數(shù)據(jù)的完整性與一致性,要同時(shí)對BBS_LanMu表、BBS_Topic表、BBS_Reply表中相關(guān)聯(lián)的數(shù)據(jù)記錄一并刪除。 三、下面將以后臺管理中對論壇大版塊進(jìn)行刪除操作時(shí)應(yīng)用觸發(fā)器為例來進(jìn)行具體介紹。 3.1需求分析 在一個(gè)論壇中有許多個(gè)大版塊,每個(gè)版塊又對應(yīng)多個(gè)分論壇。每個(gè)論壇又對應(yīng)多個(gè)帖子,每個(gè)帖子又對應(yīng)多個(gè)回復(fù)信息。因此需要4個(gè)相關(guān)聯(lián)的表來存儲(chǔ)相應(yīng)的信息:BBS_Type表(存儲(chǔ)大版塊信息)、BBS_LanMu表(存儲(chǔ)分論壇信息)、BBS_Topic表(存儲(chǔ)帖子信息)、BBS_Reply表(存儲(chǔ)回復(fù)信息)。BBS_Type與BBS_LanMu、BBS_LanMu與BBS_Topic、BBS_Topic與BBS_Reply之間都是一對多的關(guān)系。 當(dāng)我們要?jiǎng)h除BBS_Type表一個(gè)大版塊時(shí),為了保證數(shù)據(jù)庫各表中數(shù)據(jù)的完整性與一致性,需要同時(shí)對BBS_LanMu表、BBS_Topic表、BBS_Reply表中相關(guān)聯(lián)的數(shù)據(jù)記錄一并刪除。因?yàn)檫@里面存在3對一對多的關(guān)系,如果在程序中或者存儲(chǔ)過程實(shí)現(xiàn),顯然是很困難也是不合理的。根據(jù)觸發(fā)器的作用以及這4個(gè)表之間的關(guān)系,采用嵌套觸發(fā)器來實(shí)現(xiàn)這個(gè)刪除功能。為BBS_Type表、BBS_LanMu表、BBS_Topic表分別建立一個(gè)AFTER觸發(fā)器,該觸發(fā)器由Delete事件觸發(fā)。采用嵌套觸發(fā)器可以在數(shù)據(jù)庫里自動(dòng)完成這多個(gè)表中相關(guān)記錄的刪除,大大簡化了業(yè)務(wù)邏輯。這樣即保證了數(shù)據(jù)的完整性與一致性,又保證程序設(shè)計(jì)的合理性與方便性。 3.2創(chuàng)建觸發(fā)器 根據(jù)需求分析,為BBS_Type表、BBS_LanMu表、BBS_Topic表分別建立AFTER觸發(fā)器,該觸發(fā)器由Delete事件觸發(fā)。建立在這3個(gè)表之上的觸發(fā)器之間是嵌套觸發(fā)的關(guān)系,即BBS_Type表上的觸發(fā)器觸發(fā)BBS_LanMu表上的觸發(fā)器,BBS_LanMu表上的觸發(fā)器再觸發(fā)BBS_Topic表上的觸發(fā)器。本文中使用的數(shù)據(jù)庫為Microsoft SQL Server 2005。要讓觸發(fā)器能嵌套觸發(fā)必須在數(shù)據(jù)庫“屬性”中,將“遞歸觸發(fā)器已啟用”設(shè)置為TRUE。 3.2.1為BBS_Type表(存儲(chǔ)大版塊信息)建立觸發(fā)器DelType。該觸發(fā)器功能是刪除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 end3.2.2為BBS_LanMu表(存儲(chǔ)分論壇信息)建立觸發(fā)器DelLanmu。該觸發(fā)器功能是刪除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 END3.2.3為BBS_Topic表(存儲(chǔ)帖子信息)建立觸發(fā)器DelTopic。該觸發(fā)器功能是刪除BBS_Reply表中屬于剛刪除帖子的所有回復(fù)信息。 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 執(zhí)行過程 當(dāng)數(shù)據(jù)操作層對數(shù)據(jù)表BBS_Type發(fā)出Delete一條記錄的時(shí)候,觸發(fā)器DelType被觸發(fā),此觸發(fā)器將刪除BBS_LanMu表中屬于剛刪除的大版塊的所有分論壇信息。 當(dāng)DelType觸發(fā)器對數(shù)據(jù)表BBS_LanMu刪除一條記錄時(shí),又觸發(fā)BBS_LanMu表上的觸發(fā)器DelLanmu,此觸發(fā)器將刪除BBS_Topic表中屬于剛刪除分論壇的所有帖子信息。 當(dāng)DelLanmu觸發(fā)器對數(shù)據(jù)表BBS_Topic刪除一條記錄時(shí),又觸發(fā)觸發(fā)器DelTopic,此觸發(fā)器將刪除BBS_Reply表中屬于剛刪除帖子的所有回復(fù)信息。 至此數(shù)據(jù)庫中與BBS_Type中刪除記錄相關(guān)聯(lián)的所有記錄全部刪除,保證了數(shù)據(jù)庫各表數(shù)據(jù)的完整性與一致性。這個(gè)過程是在數(shù)據(jù)庫中自動(dòng)進(jìn)行的,因此速度非常快,用
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 鍛造供應(yīng)鏈專員考試試卷及答案
- 非遺傳承人(現(xiàn)代創(chuàng)新方向)筆試試題及答案
- 2025年懷化市辰溪縣自然資源局招募筆試考試試題【答案】
- 2025年廊坊文安縣選聘高中教師考試筆試試題【答案】
- 項(xiàng)目投資風(fēng)險(xiǎn)的管理
- 2025年井下瑞雷波探測儀合作協(xié)議書
- 2025年模組檢測系統(tǒng)項(xiàng)目建議書
- 2025年暑假建筑專業(yè)大學(xué)生.實(shí)踐報(bào)告范文
- 以實(shí)踐為導(dǎo)向的高校干細(xì)胞研究與教學(xué)策略
- 提升教學(xué)效果的利器教育機(jī)器人技術(shù)概覽
- 《抗生素分類課件》課件
- 2025年全國教育工作會(huì)議精神解讀
- 高級衛(wèi)生專業(yè)技術(shù)資格-副高級(護(hù)理學(xué))真題庫-14
- 2025全國市場監(jiān)督管理法律知識競賽測試題庫(含答案解析)
- 長螺旋鉆孔灌注樁施工培訓(xùn)
- 頸動(dòng)脈狹窄支架術(shù)后護(hù)理
- 時(shí)序數(shù)據(jù)庫數(shù)據(jù)壓縮算法的研究與應(yīng)用
- 醫(yī)院財(cái)務(wù)人員培訓(xùn)課程
- 爆破三員培訓(xùn)
- 浙江首考2025年1月普通高等學(xué)校招生全國統(tǒng)一考試 歷史 含答案
- 2025重慶電費(fèi)收費(fèi)標(biāo)準(zhǔn)
評論
0/150
提交評論