版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第10章 其他數(shù)據(jù)庫(kù)對(duì)象學(xué)習(xí)目標(biāo)本章重點(diǎn)本章內(nèi)容10/12/20221學(xué)習(xí)目標(biāo)標(biāo)從業(yè)務(wù)數(shù)數(shù)據(jù)角度度來(lái)看,同一種種業(yè)務(wù)數(shù)數(shù)據(jù)有可可能分散散在不同同的表中中,如何何從一個(gè)個(gè)數(shù)據(jù)庫(kù)庫(kù)對(duì)象中中查看這這些分散散存儲(chǔ)的的數(shù)據(jù)呢呢?從安全角角度來(lái)看看,不同同的操作作人員或或許只能能看到表表中不同同部分的的數(shù)據(jù)。從數(shù)據(jù)的的應(yīng)用角角度來(lái)看看,一個(gè)個(gè)報(bào)表中中的數(shù)據(jù)據(jù)往往來(lái)來(lái)自于多多個(gè)不同同的表中中,如何何提高報(bào)報(bào)表的設(shè)設(shè)計(jì)效率率呢?視視圖是解解決這些些問(wèn)題的的一種有有效手段段。存儲(chǔ)過(guò)程程是一個(gè)個(gè)可重用用的代碼碼模塊,可以高高效率地地完成指指定的操操作。觸發(fā)器是是一種特特殊類型型的存儲(chǔ)儲(chǔ)過(guò)程,可以實(shí)實(shí)現(xiàn)自動(dòng)動(dòng)化的操
2、操作。用戶定義義函數(shù)是是由用戶戶根據(jù)自自己應(yīng)用用程序的的需要而而定義的的可以完完成特定定操作的的函數(shù)。本章將全全面研究究視圖、存儲(chǔ)過(guò)過(guò)程、觸觸發(fā)器、用戶定定義函數(shù)數(shù)等數(shù)據(jù)據(jù)庫(kù)對(duì)象象的特點(diǎn)點(diǎn)和使用用方式。1/15/20202本章重點(diǎn)點(diǎn)視圖特點(diǎn)點(diǎn)和類型型管理視圖圖存儲(chǔ)過(guò)程程特點(diǎn)和和類型管理存儲(chǔ)儲(chǔ)過(guò)程觸發(fā)器特特點(diǎn)和類類型管理觸發(fā)發(fā)器用戶定義義函數(shù)1/15/20203本章內(nèi)容容10.1視視圖10.2存存儲(chǔ)過(guò)程程10.3觸觸發(fā)器10.4用用戶定義義函數(shù)10.5上上機(jī)練習(xí)習(xí)10.6習(xí)習(xí)題1/15/20204本章內(nèi)容容10.1視視圖10.2存存儲(chǔ)過(guò)程程10.3觸觸發(fā)器10.4用用戶定義義函數(shù)10.5上上機(jī)練
3、習(xí)習(xí)10.6習(xí)習(xí)題1/15/2020510.1視視圖本節(jié)全面面研究與與視圖有有關(guān)的內(nèi)內(nèi)容。首先,分分析視圖圖的作用用和存在在意義。其次,研研究了視視圖的類類型和特特點(diǎn)。接下來(lái),探討創(chuàng)創(chuàng)建視圖圖技術(shù)。然后,討討論如何何通過(guò)視視圖修改改表中數(shù)數(shù)據(jù)。最后,瀏瀏覽如何何通過(guò)圖圖形化工工具來(lái)創(chuàng)創(chuàng)建和維維護(hù)視圖圖。1/15/20206概述數(shù)據(jù)是存存儲(chǔ)在表表中,對(duì)對(duì)數(shù)據(jù)的的操縱主主要是通通過(guò)表進(jìn)進(jìn)行的。但是,僅僅通通過(guò)表操操縱數(shù)據(jù)據(jù)會(huì)帶來(lái)來(lái)一系列列的性能能、安全全、效率率等問(wèn)題題。下面面,對(duì)這這些問(wèn)題題進(jìn)行分分析。從業(yè)務(wù)數(shù)數(shù)據(jù)角度度來(lái)看,由于數(shù)數(shù)據(jù)庫(kù)設(shè)設(shè)計(jì)時(shí)考考慮到數(shù)數(shù)據(jù)異常常等問(wèn)題題,同一一種業(yè)務(wù)務(wù)數(shù)據(jù)有
4、有可能被被分散在在不同的的表中,但是對(duì)對(duì)這種業(yè)業(yè)務(wù)數(shù)據(jù)據(jù)的使用用經(jīng)常是是同時(shí)使使用的。前面講講過(guò)的連連接、子子查詢、聯(lián)合等等技術(shù)就就是解決決這種問(wèn)問(wèn)題的一一種手段段。但是是,對(duì)于于多個(gè)表表來(lái)說(shuō)這這些操作作都是比比較復(fù)雜雜的,能能不能只只通過(guò)一一個(gè)數(shù)據(jù)據(jù)庫(kù)對(duì)象象就可以以同時(shí)看看到這些些分散存存儲(chǔ)的業(yè)業(yè)務(wù)數(shù)據(jù)據(jù)呢?如如果能得得話,將將大大簡(jiǎn)簡(jiǎn)化查詢?cè)冋Z(yǔ)句的的復(fù)雜程程度。從數(shù)據(jù)安安全角度度來(lái)看,由于工工作性質(zhì)質(zhì)和需求求不同,不同的的操作人人員只是是需要查查看表中中的部分分?jǐn)?shù)據(jù),不能查查看表中中的所有有數(shù)據(jù)。從數(shù)據(jù)的的應(yīng)用角角度來(lái)看看,在設(shè)設(shè)計(jì)報(bào)表表時(shí),需需要明確確地指定定數(shù)據(jù)的的來(lái)源途途徑和方方式。
5、能能不能采采取有效效手段,提高報(bào)報(bào)表的設(shè)設(shè)計(jì)效率率呢?解決上述述問(wèn)題的的一種有有效手段段就是視視圖。1/15/20207視圖的內(nèi)內(nèi)容基表的列列的子集集或行的的子集,也就是是說(shuō)視圖圖可以是是基表的的其中一一部分。兩個(gè)或多多個(gè)基表表的聯(lián)合合,也就就是說(shuō)視視圖是對(duì)對(duì)多個(gè)基基表進(jìn)行行聯(lián)合運(yùn)運(yùn)算檢索索的SELECT語(yǔ)句句。兩個(gè)或多多個(gè)基表表的連接接,也就就是說(shuō)視視圖是通通過(guò)對(duì)若若干個(gè)基基表的連連接生成成的?;淼慕y(tǒng)統(tǒng)計(jì)匯總總,也就就是說(shuō)視視圖不僅僅是基表表的投影影,還可可以是經(jīng)經(jīng)過(guò)對(duì)基基表的各各種復(fù)雜雜運(yùn)算的的結(jié)果。另外一個(gè)個(gè)視圖的的子集,也就是是說(shuō)視圖圖既可以以基于表表,也可可以基于于另外一一個(gè)視圖圖
6、。來(lái)自于函函數(shù)或同同義詞中中的數(shù)據(jù)據(jù)。視圖和基基表的混混合,在在視圖的的定義中中,視圖圖和基表表可以起起到同樣樣的作用用。1/15/20208視圖類型型在Microsoft SQLServer2005系統(tǒng)統(tǒng)中,可可以把視視圖分成成3種類類型,即即標(biāo)準(zhǔn)視視圖、索索引視圖圖和分區(qū)區(qū)視圖。一般情況況下的視視圖都是是標(biāo)準(zhǔn)視視圖,它它是一個(gè)個(gè)虛擬表表并不占占物理存存儲(chǔ)空間間。如果果希望提提高聚合合多行數(shù)數(shù)據(jù)的視視圖性能能,那么么可以創(chuàng)創(chuàng)建索引引視圖。索引視圖圖是被物物理化的的視圖,它包含含有經(jīng)過(guò)過(guò)計(jì)算的的物理數(shù)數(shù)據(jù)。通過(guò)使用用分區(qū)視視圖,可可以連接接一臺(tái)或或多臺(tái)服服務(wù)器中中成員表表中的分分區(qū)數(shù)據(jù)據(jù),使得
7、得這些數(shù)數(shù)據(jù)看起起來(lái)就像像來(lái)自一一個(gè)表中中一樣。1/15/20209創(chuàng)建視圖圖在Microsoft SQLServer2005系統(tǒng)統(tǒng)中,主主要使用用CREATE VIEW語(yǔ)語(yǔ)句創(chuàng)建建視圖。只能在在當(dāng)前數(shù)數(shù)據(jù)庫(kù)中中創(chuàng)建視視圖。當(dāng)當(dāng)創(chuàng)建視視圖時(shí),Microsoft SQLServer首首先驗(yàn)證證視圖定定義中所所引用的的對(duì)象是是否存在在。視圖的名名稱應(yīng)該該符合命命名規(guī)則則。是否否指定視視圖的架架構(gòu)則是是可選的的。視圖圖的外表表和表的的外表是是一樣的的,因此此為了區(qū)區(qū)別表和和視圖,建議采采用一種種命名機(jī)機(jī)制,使使人容易易分辨出出視圖和和表,例例如可以以在視圖圖名稱之之前使用用vw_作為前前綴。1/15
8、/202010【例10-1】使用CREATEVIEW語(yǔ)句句創(chuàng)建簡(jiǎn)簡(jiǎn)單的視視圖1/15/202011【例10-2】使用sp_helptext系統(tǒng)統(tǒng)存儲(chǔ)過(guò)過(guò)程查看看視圖信信息1/15/202012【例10-3】使用WITH ENCRYPTION子子句加密密視圖定定義文本本信息1/15/202013【例10-4】使用DROP VIEW語(yǔ)語(yǔ)句刪除除視圖1/15/202014通過(guò)視圖圖修改數(shù)數(shù)據(jù)無(wú)論在什什么時(shí)候候修改視視圖的數(shù)數(shù)據(jù),實(shí)實(shí)際上都都是在修修改視圖圖的基表表中的數(shù)數(shù)據(jù)。在在滿足一一定的限限制條件件下,可可以通過(guò)過(guò)視圖自自由地插插入、刪刪除和更更新基表表中的數(shù)數(shù)據(jù)。在修改視視圖時(shí),要注意意一些條
9、條件1/15/202015【例10-5】通過(guò)視視圖修改改數(shù)據(jù)1/15/202016【例10-5】1/15/202017使用SQLServerManagementStudio除了使用用CREATE VIEW語(yǔ)語(yǔ)句之外外,也可可以使用用SQL ServerManagement Studio圖形形化工具具定義視視圖。1/15/202018【例10-6】使用圖圖形化工工具定義義視圖1/15/202019本章內(nèi)容容10.1視視圖10.2存存儲(chǔ)過(guò)程程10.3觸觸發(fā)器10.4用用戶定義義函數(shù)10.5上上機(jī)練習(xí)習(xí)10.6習(xí)習(xí)題1/15/20202010.2存存儲(chǔ)過(guò)程程存儲(chǔ)過(guò)程程可以提提高應(yīng)用用程序的的設(shè)計(jì)效效
10、率和增增強(qiáng)系統(tǒng)統(tǒng)的安全全性。本節(jié)全面面介紹存存儲(chǔ)過(guò)程程的特點(diǎn)點(diǎn)、類型型、創(chuàng)建建及執(zhí)行行等內(nèi)容容。1/15/202021存儲(chǔ)過(guò)程程的特點(diǎn)點(diǎn)存儲(chǔ)過(guò)程程是一個(gè)個(gè)可重用用的代碼碼模塊,可以高高效率地地完成指指定的操操作。在在Microsoft SQLServer2005系統(tǒng)統(tǒng)中,既既可以使使用Transact-SQL語(yǔ)言言編寫存存儲(chǔ)過(guò)程程,也可可以使用用CLR方式編編寫存儲(chǔ)儲(chǔ)過(guò)程。使用CLR編編寫存儲(chǔ)儲(chǔ)過(guò)程是是Microsoft SQLServer2005系統(tǒng)統(tǒng)與.NET框框架緊密密集成的的一種表表現(xiàn)形式式。使用Transact-SQL語(yǔ)言言編寫存存儲(chǔ)過(guò)程程而不使使用存儲(chǔ)儲(chǔ)在客戶戶端計(jì)算算機(jī)上的的Tr
11、ansact-SQL語(yǔ)言有有許多優(yōu)優(yōu)點(diǎn)1/15/202022存儲(chǔ)過(guò)程程的類型型在Microsoft SQLServer2005系統(tǒng)統(tǒng)中,提提供了3種基本本的存儲(chǔ)儲(chǔ)過(guò)程類類型,即即用戶定定義的存存儲(chǔ)過(guò)程程、擴(kuò)展展存儲(chǔ)過(guò)過(guò)程和系系統(tǒng)存儲(chǔ)儲(chǔ)過(guò)程。用戶定義義的存儲(chǔ)儲(chǔ)過(guò)程是是主要的的存儲(chǔ)過(guò)過(guò)程類型型,是封封裝了可可重用代代碼的模模塊或例例程。用戶定義義的存儲(chǔ)儲(chǔ)過(guò)程可可以接受受輸入?yún)?shù)、向向客戶端端返回表表格或標(biāo)標(biāo)量結(jié)果果和消息息、調(diào)用用數(shù)據(jù)定定義語(yǔ)言言、數(shù)據(jù)據(jù)操縱語(yǔ)語(yǔ)言語(yǔ)句句,然后后返回參參數(shù)。在Microsoft SQLServer2005系統(tǒng)統(tǒng)中,用用戶定義義的存儲(chǔ)儲(chǔ)過(guò)程又又可以分分為Transa
12、ct-SQL類型型的存儲(chǔ)儲(chǔ)過(guò)程和和CLR類型的的存儲(chǔ)過(guò)過(guò)程。1/15/202023擴(kuò)展存儲(chǔ)儲(chǔ)過(guò)程擴(kuò)展存儲(chǔ)儲(chǔ)過(guò)程是是指使用用某種變變成語(yǔ)言言如C語(yǔ)語(yǔ)言創(chuàng)建建的外部部例程,是可以以在MicrosoftSQLServer實(shí)例中中動(dòng)態(tài)加加載和運(yùn)運(yùn)行的DLL。但是,微微軟公司司宣布從從Microsoft SQLServer2005版本本開(kāi)始,將逐步步刪除擴(kuò)擴(kuò)展存儲(chǔ)儲(chǔ)過(guò)程類類型,這這是因?yàn)闉槭褂肅LR存存儲(chǔ)過(guò)程程可以可可靠和安安全地替替代擴(kuò)展展存儲(chǔ)過(guò)過(guò)程的功功能。1/15/202024系統(tǒng)存儲(chǔ)儲(chǔ)過(guò)程系統(tǒng)存儲(chǔ)儲(chǔ)過(guò)程是是指用來(lái)來(lái)完成MicrosoftSQL Server2005中許多多管理活活動(dòng)的特特殊存儲(chǔ)儲(chǔ)
13、過(guò)程。從物理上上來(lái)看,系統(tǒng)存存儲(chǔ)過(guò)程程存儲(chǔ)在在Resource系系統(tǒng)數(shù)據(jù)據(jù)庫(kù)中,并且?guī)в衧p_前綴綴。從邏輯上上來(lái)看,系統(tǒng)存存儲(chǔ)過(guò)程程出現(xiàn)在在每個(gè)系系統(tǒng)數(shù)據(jù)據(jù)庫(kù)和用用戶數(shù)據(jù)據(jù)庫(kù)的sys架架構(gòu)中。在Microsoft SQLServer2005系統(tǒng)統(tǒng)中,主主要的系系統(tǒng)存儲(chǔ)儲(chǔ)過(guò)程類類型和功功能如表表10-1所示示。1/15/202025創(chuàng)建存儲(chǔ)儲(chǔ)過(guò)程的的規(guī)則在設(shè)計(jì)和和創(chuàng)建存存儲(chǔ)過(guò)程程中應(yīng)該該滿足一一定的約約束和規(guī)規(guī)則。只只有滿足足了這些些約束和和規(guī)則,才可以以創(chuàng)建有有效的存存儲(chǔ)過(guò)程程。雖然說(shuō)在在CREATE PROCEDURE語(yǔ)句句中可以以包括任任意數(shù)量量和類型型的Transact-SQL語(yǔ)句句
14、,但是是某些特特殊的語(yǔ)語(yǔ)句是不不能包含含在存儲(chǔ)儲(chǔ)過(guò)程定定義中的的。1/15/202026創(chuàng)建存儲(chǔ)儲(chǔ)過(guò)程在Microsoft SQLServer2005系統(tǒng)統(tǒng)中,可可以使用用CREATE PROCEDURE語(yǔ)句句創(chuàng)建存存儲(chǔ)過(guò)程程。需要要強(qiáng)調(diào)的的是,必必須具有有CREATE PROCEDURE權(quán)限限才能創(chuàng)創(chuàng)建存儲(chǔ)儲(chǔ)過(guò)程,存儲(chǔ)過(guò)過(guò)程是架架構(gòu)作用用域中的的對(duì)象,只能在在本地?cái)?shù)數(shù)據(jù)庫(kù)中中創(chuàng)建存存儲(chǔ)過(guò)程程。在創(chuàng)建存存儲(chǔ)過(guò)程程時(shí),應(yīng)應(yīng)該指定定所有的的輸入?yún)?shù)、執(zhí)執(zhí)行數(shù)據(jù)據(jù)庫(kù)操作作的編程程語(yǔ)句、返回至至調(diào)用過(guò)過(guò)程或批批處理表表明成功功或失敗敗的狀態(tài)態(tài)值、捕捕捉和處處理潛在在錯(cuò)誤的的錯(cuò)誤處處理語(yǔ)句句。1/15
15、/202027CREATEPROCEDURE語(yǔ)句CREATEPROCEDURE procedure_nameparameter_namedata_type, WITH procedure_optionASsql_statement1/15/202028【例10-7】使用CREATEPROCEDURE語(yǔ)句創(chuàng)創(chuàng)建存儲(chǔ)儲(chǔ)過(guò)程1/15/202029【例10-8】使用OUTPUT關(guān)關(guān)鍵字創(chuàng)創(chuàng)建存儲(chǔ)儲(chǔ)過(guò)程1/15/202030執(zhí)行存儲(chǔ)儲(chǔ)過(guò)程在Microsoft SQLServer2005系統(tǒng)統(tǒng)中,可可以使用用EXECUTE語(yǔ)句句執(zhí)行存存儲(chǔ)過(guò)程程。EXECUTE語(yǔ)句也也可以簡(jiǎn)簡(jiǎn)寫為EXEC。如果將要要執(zhí)行的
16、的存儲(chǔ)過(guò)過(guò)程需要要參數(shù),那么應(yīng)應(yīng)該在存存儲(chǔ)過(guò)程程名稱后后面帶上上參數(shù)值值。1/15/202031【例10-9】使用EXEC語(yǔ)句執(zhí)執(zhí)行存儲(chǔ)儲(chǔ)過(guò)程1/15/202032【例10-10】執(zhí)行行帶有參參數(shù)的存存儲(chǔ)過(guò)程程1/15/202033【例10-11】在執(zhí)執(zhí)行EXEC語(yǔ)語(yǔ)句時(shí)引引用參數(shù)數(shù)和使用用OUTPUT關(guān)鍵字字1/15/202034修改和刪刪除存儲(chǔ)儲(chǔ)過(guò)程在Microsoft SQLServer2005系統(tǒng)統(tǒng)中,可可以使用用ALTERPROCEDURE語(yǔ)句修修改已經(jīng)經(jīng)存在的的存儲(chǔ)過(guò)過(guò)程。修修改存儲(chǔ)儲(chǔ)過(guò)程不不同于刪刪除和重重建存儲(chǔ)儲(chǔ)過(guò)程,其目的的是保持持存儲(chǔ)過(guò)過(guò)程的權(quán)權(quán)限不發(fā)發(fā)生變化化。例如,如如
17、果修改改HumanResources.GetEmployeeInfo存儲(chǔ)過(guò)過(guò)程,那那么與該該存儲(chǔ)過(guò)過(guò)程對(duì)象象相關(guān)的的權(quán)限將將不會(huì)發(fā)發(fā)生任何何變化。但是,如果刪刪除HumanResources.GetEmployeeInfo存儲(chǔ)儲(chǔ)過(guò)程并并且重新新創(chuàng)建同同名的存存儲(chǔ)過(guò)程程,那么么該存儲(chǔ)儲(chǔ)過(guò)程對(duì)對(duì)象相關(guān)關(guān)的權(quán)限限都需要要重新定定義。如果數(shù)據(jù)據(jù)庫(kù)中某某個(gè)存儲(chǔ)儲(chǔ)過(guò)程不不再需要要了,可可以使用用DROPPROCEDURE語(yǔ)語(yǔ)句刪除除該存儲(chǔ)儲(chǔ)過(guò)程。這種刪刪除是永永久性的的,不能能恢復(fù)。1/15/202035存儲(chǔ)過(guò)程程的執(zhí)行行過(guò)程存儲(chǔ)過(guò)程程創(chuàng)建之之后,在在第一次次執(zhí)行時(shí)時(shí)需要經(jīng)經(jīng)過(guò)語(yǔ)法法分析階階段、解解析階段
18、段、編譯譯階段和和執(zhí)行階階段。語(yǔ)法分析析階段是是指創(chuàng)建建存儲(chǔ)過(guò)過(guò)程時(shí),系統(tǒng)檢檢查其創(chuàng)創(chuàng)建語(yǔ)句句的語(yǔ)法法正確性性的過(guò)程程。在存存儲(chǔ)過(guò)程程的創(chuàng)建建過(guò)程中中如果碰碰到語(yǔ)法法錯(cuò)誤,那么該該存儲(chǔ)過(guò)過(guò)程創(chuàng)建建失敗。如果語(yǔ)語(yǔ)法檢查查通過(guò)之之后,系系統(tǒng)將該該存儲(chǔ)過(guò)過(guò)程的名名稱存儲(chǔ)儲(chǔ)在當(dāng)前前數(shù)據(jù)庫(kù)庫(kù)的sys.sql_modules目錄錄視圖中中。解析階段段是指某某個(gè)存儲(chǔ)儲(chǔ)過(guò)程首首次執(zhí)行行時(shí),查查詢處理理器從sys.sql_modules目目錄視圖圖中讀取取該存儲(chǔ)儲(chǔ)過(guò)程的的文本并并且檢查查該過(guò)程程引用的的對(duì)象名名稱是否否存在的的過(guò)程。編譯階段段是指分分析存儲(chǔ)儲(chǔ)過(guò)程和和生成存存儲(chǔ)過(guò)程程執(zhí)行計(jì)計(jì)劃的過(guò)過(guò)程。執(zhí)行階段段
19、是指執(zhí)執(zhí)行駐留留在過(guò)程程高速緩緩沖存儲(chǔ)儲(chǔ)區(qū)中的的存儲(chǔ)過(guò)過(guò)程的執(zhí)執(zhí)行計(jì)劃劃的過(guò)程程。1/15/202036查看存儲(chǔ)儲(chǔ)過(guò)程的的信息在Microsoft SQLServer2005系統(tǒng)統(tǒng)中,可可以使用用系統(tǒng)存存儲(chǔ)過(guò)程程和目錄錄視圖查查看有關(guān)關(guān)存儲(chǔ)過(guò)過(guò)程的信信息。如果希望望查看存存儲(chǔ)過(guò)程程的定義義信息,那么可可以使用用sys.sql_modules目錄視視圖、OBJECT_DEFINITION元數(shù)數(shù)據(jù)函數(shù)數(shù)、sp_helptext系統(tǒng)存存儲(chǔ)過(guò)程程等。1/15/202037【例10-12】查看看存儲(chǔ)過(guò)過(guò)程信息息1/15/202038本章內(nèi)容容10.1視視圖10.2存存儲(chǔ)過(guò)程程10.3觸觸發(fā)器10.4用用
20、戶定義義函數(shù)10.5上上機(jī)練習(xí)習(xí)10.6習(xí)習(xí)題1/15/20203910.3觸觸發(fā)器MicrosoftSQL Server2005系統(tǒng)提提供了兩兩種強(qiáng)制制業(yè)務(wù)邏邏輯和數(shù)數(shù)據(jù)完整整性的機(jī)機(jī)制,即即約束技技術(shù)和觸觸發(fā)器技技術(shù)。前面已經(jīng)經(jīng)講過(guò)了了約束技技術(shù),本本節(jié)講述述觸發(fā)器器技術(shù)。1/15/202040觸發(fā)器類類型按照觸發(fā)發(fā)事件的的不同,可以把把Microsoft SQLServer2005系統(tǒng)統(tǒng)提供的的觸發(fā)器器分成兩兩大類型型,即DML觸觸發(fā)器和和DDL觸發(fā)器器。需要要補(bǔ)充的的是,DDL觸觸發(fā)器是是Microsoft SQLServer2005系統(tǒng)統(tǒng)新增的的功能,以前的的版本只只有DML觸發(fā)發(fā)器
21、。當(dāng)數(shù)據(jù)庫(kù)庫(kù)中發(fā)生生數(shù)據(jù)操操縱語(yǔ)言言(datamanipulation language,DML)事事件時(shí)將將調(diào)用DML觸觸發(fā)器。DML事件包包括在指指定表或或視圖中中修改數(shù)數(shù)據(jù)的INSERT語(yǔ)語(yǔ)句、UPDATE語(yǔ)語(yǔ)句或DELETE語(yǔ)語(yǔ)句。在在DML觸發(fā)器器中,可可以執(zhí)行行查詢其其他表的的操作,也可以以包含更更加復(fù)雜雜的Transact-SQL語(yǔ)句句。DML觸發(fā)發(fā)器將觸觸發(fā)器本本身和觸觸發(fā)事件件的語(yǔ)句句作為可可以在觸觸發(fā)器內(nèi)內(nèi)回滾的的單個(gè)事事務(wù)對(duì)待待。也就就是說(shuō),當(dāng)在執(zhí)執(zhí)行觸發(fā)發(fā)器操作作過(guò)程中中,如果果檢測(cè)到到錯(cuò)誤發(fā)發(fā)生,則則整個(gè)觸觸發(fā)事件件語(yǔ)句和和觸發(fā)器器操作的的事務(wù)自自動(dòng)回滾滾。DDL觸觸
22、發(fā)器與與DML觸發(fā)器器相同的的是,都都需要觸觸發(fā)事件件進(jìn)行觸觸發(fā)。但但是,DDL觸觸發(fā)器的的觸發(fā)事事件是數(shù)數(shù)據(jù)定義義語(yǔ)言(datadefinition language,DDL)語(yǔ)語(yǔ)句。1/15/202041DML觸觸發(fā)器的的基本類類型按照觸發(fā)發(fā)器事件件類型的的不同,可以把把Microsoft SQLServer2005系統(tǒng)統(tǒng)DML觸發(fā)器器分成3種類型型,即INSERT類類型、UPDATE類類型和DELETE類類型。這也是DML觸觸發(fā)器的的基本類類型。1/15/202042創(chuàng)建DML觸發(fā)發(fā)器DML觸觸發(fā)器是是一種特特殊類型型的存儲(chǔ)儲(chǔ)過(guò)程,所以DML觸觸發(fā)器的的創(chuàng)建和和存儲(chǔ)過(guò)過(guò)程的創(chuàng)創(chuàng)建方式式有
23、很多多相似的的地方??梢允故褂肅REATETRIGGER語(yǔ)句創(chuàng)創(chuàng)建DML觸發(fā)發(fā)器。在CREATE TRIGGER語(yǔ)語(yǔ)句中,指定了了定義觸觸發(fā)器的的基表或或視圖、觸發(fā)事事件的類類型和觸觸發(fā)的時(shí)時(shí)間、觸觸發(fā)器的的所有指指令等內(nèi)內(nèi)容。使用CREATETRIGGER語(yǔ)句創(chuàng)創(chuàng)建DML觸發(fā)發(fā)器1/15/202043CREATETRIGGER語(yǔ)句句CREATETRIGGERtrigger_nameONtable_name_or_view_nameWITH ENCRYPTION FOR| AFTER |INSTEADOF DELETE , INSERT , UPDATE ASsql_statement1/15
24、/202044【例10-13】查看看觸發(fā)器器信息1/15/202045DML觸觸發(fā)器的的工作原原理前面介紹紹了DML觸發(fā)發(fā)器的基基本概念念、類型型、特點(diǎn)點(diǎn)、創(chuàng)建建、修改改、刪除除等內(nèi)容容,現(xiàn)在在我們來(lái)來(lái)看看觸觸發(fā)器是是如何工工作的。通過(guò)了了解觸發(fā)發(fā)器的工工作原理理,就可可以更好好地使用用觸發(fā)器器,寫出出效率更更高的觸觸發(fā)器。下面主要要介紹INSERT、DELETE和UPDATE類型型觸發(fā)器器的工作作原理。1/15/202046INSERT觸觸發(fā)器的的工作原原理當(dāng)向表中中插入數(shù)數(shù)據(jù)時(shí),INSERT觸發(fā)器器觸發(fā)執(zhí)執(zhí)行。當(dāng)當(dāng)INSERT觸發(fā)器器觸發(fā)時(shí)時(shí),新的的記錄增增加到觸觸發(fā)器表表中和insert
25、ed表中中。該inserted表表是一個(gè)個(gè)邏輯表表,保存存了所插插入記錄錄的拷貝貝,允許許用戶參參考INSERT語(yǔ)句句中數(shù)據(jù)據(jù)。觸發(fā)發(fā)器可以以檢查inserted表,來(lái)確定定該觸發(fā)發(fā)器的操操作是否否應(yīng)該執(zhí)執(zhí)行和如如何執(zhí)行行。在inserted表中中的那些些記錄,總是觸觸發(fā)器表表中一行行或多行行記錄的的冗余。1/15/202047DELETE觸觸發(fā)器的的工作原原理當(dāng)觸發(fā)一一個(gè)DELETE觸發(fā)發(fā)器時(shí),被刪除除的記錄錄放在一一個(gè)特殊殊的deleted表表中。deleted表是一一個(gè)邏輯輯表,用用來(lái)保存存已經(jīng)從從表中刪刪除的記記錄。該該deleted表允允許參考考原來(lái)的的DELETE語(yǔ)句刪刪除的已已經(jīng)
26、記錄錄在日志志中的數(shù)數(shù)據(jù)。當(dāng)當(dāng)使用DELETE語(yǔ)語(yǔ)句時(shí),應(yīng)該考考慮下列列一些因因素:當(dāng)記錄放放在deleted表表中的時(shí)時(shí)候,該該記錄就就不會(huì)存存在數(shù)據(jù)據(jù)庫(kù)的表表中了。因此,在數(shù)據(jù)據(jù)庫(kù)表和和deleted表之之間沒(méi)有有共同的的記錄。邏輯表deleted總是存存放在內(nèi)內(nèi)存中,以提供供性能。在DELETE觸發(fā)器器中,不不能包括括TRUNCATETABLE語(yǔ)語(yǔ)句,這這是因?yàn)闉樵撜Z(yǔ)句句是不記記日志的的操作。1/15/202048UPDATE觸觸發(fā)器的的工作原原理修改一條條記錄就就等于插插入一條條新記錄錄和刪除除一條舊舊記錄。同樣,UPDATE語(yǔ)句也也可以看看成是由由刪除一一條記錄錄的DELETE語(yǔ)句句
27、和增加加一條記記錄的INSERT語(yǔ)語(yǔ)句組成成。當(dāng)在在某一個(gè)個(gè)有UPDATE觸發(fā)發(fā)器表的的上面修修改一條條記錄時(shí)時(shí),表中中原來(lái)的的記錄移移動(dòng)到deleted表中,修改過(guò)過(guò)的記錄錄插入到到了inserted表中。觸發(fā)器器可以檢檢查deleted表表和inserted表及被被修改的的表,以以便確定定是否修修改了多多個(gè)行和和應(yīng)該如如何執(zhí)行行觸發(fā)器器的操作作。1/15/202049一個(gè)具體體的示例例為了更加加全面地地掌握開(kāi)開(kāi)發(fā)觸發(fā)發(fā)器的步步驟和技技術(shù),本本節(jié)通過(guò)過(guò)一個(gè)具具體的示示例,全全面講述述使用Transact-SQL語(yǔ)語(yǔ)言開(kāi)發(fā)發(fā)和創(chuàng)建建觸發(fā)器器的技術(shù)術(shù)。一般地,開(kāi)發(fā)觸觸發(fā)器的的過(guò)程包包括用戶戶需求
28、分分析、確確定觸發(fā)發(fā)器的邏邏輯結(jié)構(gòu)構(gòu)、編寫寫觸發(fā)器器代碼和和測(cè)試觸觸發(fā)器。1/15/202050【例10-14】設(shè)計(jì)計(jì)和實(shí)現(xiàn)現(xiàn)DML觸發(fā)器器1/15/202051創(chuàng)建t_accountData_insert觸發(fā)器器1/15/202052創(chuàng)建t_accountData_delete觸發(fā)1/15/202053一組插入入數(shù)據(jù)的的操作1/15/202054審計(jì)到的的插入數(shù)數(shù)據(jù)的操操作1/15/202055一組刪除除數(shù)據(jù)的的操作1/15/202056審計(jì)到的的刪除數(shù)數(shù)據(jù)的操操作1/15/202057DDL觸觸發(fā)器DDL觸觸發(fā)器與與DML觸發(fā)器器有許多多類似的的地方,如可以以自動(dòng)觸觸發(fā)完成成規(guī)定的的操作、
29、都可以以使用CREATETRIGGER語(yǔ)句句創(chuàng)建等等,但是是也有一一些不同同的地方方。例如,DDL觸觸發(fā)器的的觸發(fā)事事件主要要是CREATE、ALTER、DROP以及GRANT、DENY及REVOKE等語(yǔ)語(yǔ)句,并并且觸發(fā)發(fā)的時(shí)間間條件只只有AFTER,沒(méi)有有INSTEADOF。1/15/202058【例10-15】使用用DDL觸發(fā)器器1/15/202059本章內(nèi)容容10.1視視圖10.2存存儲(chǔ)過(guò)程程10.3觸觸發(fā)器10.4用用戶定義義函數(shù)10.5上上機(jī)練習(xí)習(xí)10.6習(xí)習(xí)題1/15/20206010.4用用戶定義義函數(shù)在Microsoft SQLServer2005系統(tǒng)統(tǒng)中,用用戶定義義函數(shù)是是
30、接受參參數(shù)、執(zhí)執(zhí)行操作作并且將將運(yùn)算結(jié)結(jié)果以值值的形式式返回的的例程。這種返回回值既可可以是單單個(gè)標(biāo)量量值,也也可以是是一個(gè)結(jié)結(jié)果集。在Microsoft SQLServer2005系統(tǒng)統(tǒng)中,用用戶定義義函數(shù)既既可以使使用Transact-SQL語(yǔ)言言編寫,也可以以使用任任何.NET編編程語(yǔ)言言來(lái)編寫寫。1/15/202061特點(diǎn)在Microsoft SQLServer2005系統(tǒng)統(tǒng)中,所所有的用用戶定義義函數(shù)都都具有相相同的由由兩部分分組成的的結(jié)構(gòu):標(biāo)題和和正文。標(biāo)題可以以定義這這些內(nèi)容容:具有有可選架架構(gòu)/所所有者名名稱的函函數(shù)名稱稱;輸入入?yún)?shù)名名稱和數(shù)數(shù)據(jù)類型型;可以以用于輸輸入?yún)?shù)數(shù)
31、的選項(xiàng)項(xiàng);返回回參數(shù)數(shù)數(shù)據(jù)類型型和可選選名稱;可以用用于返回回參數(shù)的的選項(xiàng)等等。正文定義義了函數(shù)數(shù)將要執(zhí)執(zhí)行的操操作,這這些操作作既可以以是一個(gè)個(gè)或多個(gè)個(gè)Transact-SQL語(yǔ)句,也可以以是.NET程程序集的的引用。在Microsoft SQLServer2005系統(tǒng)統(tǒng)中,用用戶定義義函數(shù)又又可以分分為兩大大類,即即用戶定定義標(biāo)量量函數(shù)和和用戶定定義表值值函數(shù)。用戶定定義標(biāo)量量函數(shù)返返回在RETURNS子句中中定義的的類型的的單個(gè)數(shù)數(shù)據(jù)值。對(duì)于多多語(yǔ)句標(biāo)標(biāo)量函數(shù)數(shù),定義義在BEGIN END塊中中的函數(shù)數(shù)體包含含一系列列返回單單個(gè)值的的Transact-SQL語(yǔ)句。返回類類型可以以是除te
32、xt、ntext、image、cursor、timestamp以以外的任任何數(shù)據(jù)據(jù)類型。用戶定定義表值值函數(shù)返返回table數(shù)據(jù)類類型。實(shí)實(shí)際上,在表值值函數(shù)中中,表是是單個(gè)SELECT語(yǔ)語(yǔ)句的結(jié)結(jié)果集。1/15/202062創(chuàng)建時(shí)的的考慮在Microsoft SQLServer2005系統(tǒng)統(tǒng)中,可可以分別別使用CREATEFUNCTION、ALTERFUNCTION、DROPFUNCTION語(yǔ)句句來(lái)實(shí)現(xiàn)現(xiàn)用戶定定義函數(shù)數(shù)的創(chuàng)建建、修改改和刪除除。在創(chuàng)創(chuàng)建用戶戶定義函函數(shù)時(shí),每個(gè)完完全限定定用戶函函數(shù)的名名稱(schema_name.function_name)必須須唯一。函數(shù)的BEGINEN
33、D塊塊中的語(yǔ)語(yǔ)句不能能有任何何副作用用。函數(shù)數(shù)副作用用是指對(duì)對(duì)具有函函數(shù)外作作用域(例如修修改數(shù)據(jù)據(jù)庫(kù)表)的資源源狀態(tài)的的任何永永久性更更改。函函數(shù)中的的語(yǔ)句唯唯一能做做的更改改是對(duì)函函數(shù)上的的局部對(duì)對(duì)象(如如局部游游標(biāo)或局局部變量量)的更更改。不不能在函函數(shù)中執(zhí)執(zhí)行的操操作包括括對(duì)數(shù)據(jù)據(jù)庫(kù)表的的修改、對(duì)不在在函數(shù)上上的局部部游標(biāo)進(jìn)進(jìn)行操作作、發(fā)送送電子郵郵件、嘗嘗試修改改目錄,以及生生成返回回至用戶戶的結(jié)果果集。1/15/202063使用CREATEFUNCTION語(yǔ)句句在Microsoft SQLServer2005系統(tǒng)統(tǒng)中,使使用CREATEFUNCTION語(yǔ)句句可以創(chuàng)創(chuàng)建標(biāo)量量函數(shù)、內(nèi)聯(lián)表表值函數(shù)數(shù)、多語(yǔ)語(yǔ)句表值值函數(shù)。需要說(shuō)說(shuō)明的是是,如
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 家庭教育中的親子關(guān)系建立與維護(hù)策略
- 教育科技助力小學(xué)新課標(biāo)的實(shí)施與優(yōu)化
- 教學(xué)智能化、教學(xué)情境和師生互動(dòng)關(guān)系的研究報(bào)告
- 教育政策與學(xué)生創(chuàng)新能力培養(yǎng)的關(guān)系研究
- 教育機(jī)構(gòu)在農(nóng)村科普中的角色和貢獻(xiàn)
- 教育心理學(xué)在孩子成長(zhǎng)中的應(yīng)用
- 數(shù)字時(shí)代的辦公變革AI圖像識(shí)別的實(shí)際應(yīng)用
- 小區(qū)超市采購(gòu)策略與成本控制
- 提升商業(yè)環(huán)境中員工的安全生產(chǎn)意識(shí)
- Unit 4 My home Part A Let's talk 說(shuō)課(說(shuō)課稿)-2024-2025學(xué)年人教PEP版英語(yǔ)四年級(jí)上冊(cè)
- 新能源行業(yè)市場(chǎng)分析報(bào)告
- 2025年高考?xì)v史復(fù)習(xí)之小題狂練300題(選擇題):秦漢時(shí)期(20題)
- 鉆機(jī)安全操作規(guī)程(3篇)
- 2025年產(chǎn)業(yè)園區(qū)運(yùn)營(yíng)與管理企業(yè)組織結(jié)構(gòu)及部門職責(zé)
- 巖土工程勘察.課件
- 第五章 無(wú)土育苗技術(shù)
- 福建省福州三牧中學(xué)2024-2025學(xué)年七年級(jí)上學(xué)期期中生物試題(無(wú)答案)
- 2024統(tǒng)戰(zhàn)工作總結(jié)
- 銀行營(yíng)業(yè)網(wǎng)點(diǎn)詐騙、冒領(lǐng)等突發(fā)事件應(yīng)急預(yù)案
- 初一英語(yǔ)語(yǔ)法練習(xí)
- 《數(shù)字信號(hào)處理(第2版)》本科全套教學(xué)課件
評(píng)論
0/150
提交評(píng)論