




已閱讀5頁(yè),還剩67頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
04 03 2020 第1頁(yè) 第10章其他數(shù)據(jù)庫(kù)對(duì)象 學(xué)習(xí)目標(biāo)本章重點(diǎn)本章內(nèi)容 04 03 2020 第2頁(yè) 學(xué)習(xí)目標(biāo) 從業(yè)務(wù)數(shù)據(jù)角度來(lái)看 同一種業(yè)務(wù)數(shù)據(jù)有可能分散在不同的表中 如何從一個(gè)數(shù)據(jù)庫(kù)對(duì)象中查看這些分散存儲(chǔ)的數(shù)據(jù)呢 從安全角度來(lái)看 不同的操作人員或許只能看到表中不同部分的數(shù)據(jù) 從數(shù)據(jù)的應(yīng)用角度來(lái)看 一個(gè)報(bào)表中的數(shù)據(jù)往往來(lái)自于多個(gè)不同的表中 如何提高報(bào)表的設(shè)計(jì)效率呢 視圖是解決這些問(wèn)題的一種有效手段 存儲(chǔ)過(guò)程是一個(gè)可重用的代碼模塊 可以高效率地完成指定的操作 觸發(fā)器是一種特殊類型的存儲(chǔ)過(guò)程 可以實(shí)現(xiàn)自動(dòng)化的操作 用戶定義函數(shù)是由用戶根據(jù)自己應(yīng)用程序的需要而定義的可以完成特定操作的函數(shù) 本章將全面研究視圖 存儲(chǔ)過(guò)程 觸發(fā)器 用戶定義函數(shù)等數(shù)據(jù)庫(kù)對(duì)象的特點(diǎn)和使用方式 04 03 2020 第3頁(yè) 本章重點(diǎn) 視圖特點(diǎn)和類型管理視圖存儲(chǔ)過(guò)程特點(diǎn)和類型管理存儲(chǔ)過(guò)程觸發(fā)器特點(diǎn)和類型管理觸發(fā)器用戶定義函數(shù) 04 03 2020 第4頁(yè) 本章內(nèi)容 10 1視圖10 2存儲(chǔ)過(guò)程10 3觸發(fā)器10 4用戶定義函數(shù)10 5上機(jī)練習(xí)10 6習(xí)題 04 03 2020 第5頁(yè) 本章內(nèi)容 10 1視圖10 2存儲(chǔ)過(guò)程10 3觸發(fā)器10 4用戶定義函數(shù)10 5上機(jī)練習(xí)10 6習(xí)題 04 03 2020 第6頁(yè) 10 1視圖 本節(jié)全面研究與視圖有關(guān)的內(nèi)容 首先 分析視圖的作用和存在意義 其次 研究了視圖的類型和特點(diǎn) 接下來(lái) 探討創(chuàng)建視圖技術(shù) 然后 討論如何通過(guò)視圖修改表中數(shù)據(jù) 最后 瀏覽如何通過(guò)圖形化工具來(lái)創(chuàng)建和維護(hù)視圖 04 03 2020 第7頁(yè) 概述 數(shù)據(jù)是存儲(chǔ)在表中 對(duì)數(shù)據(jù)的操縱主要是通過(guò)表進(jìn)行的 但是 僅僅通過(guò)表操縱數(shù)據(jù)會(huì)帶來(lái)一系列的性能 安全 效率等問(wèn)題 下面 對(duì)這些問(wèn)題進(jìn)行分析 從業(yè)務(wù)數(shù)據(jù)角度來(lái)看 由于數(shù)據(jù)庫(kù)設(shè)計(jì)時(shí)考慮到數(shù)據(jù)異常等問(wèn)題 同一種業(yè)務(wù)數(shù)據(jù)有可能被分散在不同的表中 但是對(duì)這種業(yè)務(wù)數(shù)據(jù)的使用經(jīng)常是同時(shí)使用的 前面講過(guò)的連接 子查詢 聯(lián)合等技術(shù)就是解決這種問(wèn)題的一種手段 但是 對(duì)于多個(gè)表來(lái)說(shuō)這些操作都是比較復(fù)雜的 能不能只通過(guò)一個(gè)數(shù)據(jù)庫(kù)對(duì)象就可以同時(shí)看到這些分散存儲(chǔ)的業(yè)務(wù)數(shù)據(jù)呢 如果能得話 將大大簡(jiǎn)化查詢語(yǔ)句的復(fù)雜程度 從數(shù)據(jù)安全角度來(lái)看 由于工作性質(zhì)和需求不同 不同的操作人員只是需要查看表中的部分?jǐn)?shù)據(jù) 不能查看表中的所有數(shù)據(jù) 從數(shù)據(jù)的應(yīng)用角度來(lái)看 在設(shè)計(jì)報(bào)表時(shí) 需要明確地指定數(shù)據(jù)的來(lái)源途徑和方式 能不能采取有效手段 提高報(bào)表的設(shè)計(jì)效率呢 解決上述問(wèn)題的一種有效手段就是視圖 04 03 2020 第8頁(yè) 視圖的內(nèi)容 基表的列的子集或行的子集 也就是說(shuō)視圖可以是基表的其中一部分 兩個(gè)或多個(gè)基表的聯(lián)合 也就是說(shuō)視圖是對(duì)多個(gè)基表進(jìn)行聯(lián)合運(yùn)算檢索的SELECT語(yǔ)句 兩個(gè)或多個(gè)基表的連接 也就是說(shuō)視圖是通過(guò)對(duì)若干個(gè)基表的連接生成的 基表的統(tǒng)計(jì)匯總 也就是說(shuō)視圖不僅是基表的投影 還可以是經(jīng)過(guò)對(duì)基表的各種復(fù)雜運(yùn)算的結(jié)果 另外一個(gè)視圖的子集 也就是說(shuō)視圖既可以基于表 也可以基于另外一個(gè)視圖 來(lái)自于函數(shù)或同義詞中的數(shù)據(jù) 視圖和基表的混合 在視圖的定義中 視圖和基表可以起到同樣的作用 04 03 2020 第9頁(yè) 視圖類型 在MicrosoftSQLServer2005系統(tǒng)中 可以把視圖分成3種類型 即標(biāo)準(zhǔn)視圖 索引視圖和分區(qū)視圖 一般情況下的視圖都是標(biāo)準(zhǔn)視圖 它是一個(gè)虛擬表并不占物理存儲(chǔ)空間 如果希望提高聚合多行數(shù)據(jù)的視圖性能 那么可以創(chuàng)建索引視圖 索引視圖是被物理化的視圖 它包含有經(jīng)過(guò)計(jì)算的物理數(shù)據(jù) 通過(guò)使用分區(qū)視圖 可以連接一臺(tái)或多臺(tái)服務(wù)器中成員表中的分區(qū)數(shù)據(jù) 使得這些數(shù)據(jù)看起來(lái)就像來(lái)自一個(gè)表中一樣 04 03 2020 第10頁(yè) 創(chuàng)建視圖 在MicrosoftSQLServer2005系統(tǒng)中 主要使用CREATEVIEW語(yǔ)句創(chuàng)建視圖 只能在當(dāng)前數(shù)據(jù)庫(kù)中創(chuàng)建視圖 當(dāng)創(chuàng)建視圖時(shí) MicrosoftSQLServer首先驗(yàn)證視圖定義中所引用的對(duì)象是否存在 視圖的名稱應(yīng)該符合命名規(guī)則 是否指定視圖的架構(gòu)則是可選的 視圖的外表和表的外表是一樣的 因此為了區(qū)別表和視圖 建議采用一種命名機(jī)制 使人容易分辨出視圖和表 例如可以在視圖名稱之前使用vw 作為前綴 04 03 2020 第11頁(yè) 例10 1 使用CREATEVIEW語(yǔ)句創(chuàng)建簡(jiǎn)單的視圖 04 03 2020 第12頁(yè) 例10 2 使用sp helptext系統(tǒng)存儲(chǔ)過(guò)程查看視圖信息 04 03 2020 第13頁(yè) 例10 3 使用WITHENCRYPTION子句加密視圖定義文本信息 04 03 2020 第14頁(yè) 例10 4 使用DROPVIEW語(yǔ)句刪除視圖 04 03 2020 第15頁(yè) 通過(guò)視圖修改數(shù)據(jù) 無(wú)論在什么時(shí)候修改視圖的數(shù)據(jù) 實(shí)際上都是在修改視圖的基表中的數(shù)據(jù) 在滿足一定的限制條件下 可以通過(guò)視圖自由地插入 刪除和更新基表中的數(shù)據(jù) 在修改視圖時(shí) 要注意一些條件 04 03 2020 第16頁(yè) 例10 5 通過(guò)視圖修改數(shù)據(jù) 04 03 2020 第17頁(yè) 例10 5 04 03 2020 第18頁(yè) 使用SQLServerManagementStudio 除了使用CREATEVIEW語(yǔ)句之外 也可以使用SQLServerManagementStudio圖形化工具定義視圖 04 03 2020 第19頁(yè) 例10 6 使用圖形化工具定義視圖 04 03 2020 第20頁(yè) 本章內(nèi)容 10 1視圖10 2存儲(chǔ)過(guò)程10 3觸發(fā)器10 4用戶定義函數(shù)10 5上機(jī)練習(xí)10 6習(xí)題 04 03 2020 第21頁(yè) 10 2存儲(chǔ)過(guò)程 存儲(chǔ)過(guò)程可以提高應(yīng)用程序的設(shè)計(jì)效率和增強(qiáng)系統(tǒng)的安全性 本節(jié)全面介紹存儲(chǔ)過(guò)程的特點(diǎn) 類型 創(chuàng)建及執(zhí)行等內(nèi)容 04 03 2020 第22頁(yè) 存儲(chǔ)過(guò)程的特點(diǎn) 存儲(chǔ)過(guò)程是一個(gè)可重用的代碼模塊 可以高效率地完成指定的操作 在MicrosoftSQLServer2005系統(tǒng)中 既可以使用Transact SQL語(yǔ)言編寫存儲(chǔ)過(guò)程 也可以使用CLR方式編寫存儲(chǔ)過(guò)程 使用CLR編寫存儲(chǔ)過(guò)程是MicrosoftSQLServer2005系統(tǒng)與 NET框架緊密集成的一種表現(xiàn)形式 使用Transact SQL語(yǔ)言編寫存儲(chǔ)過(guò)程而不使用存儲(chǔ)在客戶端計(jì)算機(jī)上的Transact SQL語(yǔ)言有許多優(yōu)點(diǎn) 04 03 2020 第23頁(yè) 存儲(chǔ)過(guò)程的類型 在MicrosoftSQLServer2005系統(tǒng)中 提供了3種基本的存儲(chǔ)過(guò)程類型 即用戶定義的存儲(chǔ)過(guò)程 擴(kuò)展存儲(chǔ)過(guò)程和系統(tǒng)存儲(chǔ)過(guò)程 用戶定義的存儲(chǔ)過(guò)程是主要的存儲(chǔ)過(guò)程類型 是封裝了可重用代碼的模塊或例程 用戶定義的存儲(chǔ)過(guò)程可以接受輸入?yún)?shù) 向客戶端返回表格或標(biāo)量結(jié)果和消息 調(diào)用數(shù)據(jù)定義語(yǔ)言 數(shù)據(jù)操縱語(yǔ)言語(yǔ)句 然后返回參數(shù) 在MicrosoftSQLServer2005系統(tǒng)中 用戶定義的存儲(chǔ)過(guò)程又可以分為Transact SQL類型的存儲(chǔ)過(guò)程和CLR類型的存儲(chǔ)過(guò)程 04 03 2020 第24頁(yè) 擴(kuò)展存儲(chǔ)過(guò)程 擴(kuò)展存儲(chǔ)過(guò)程是指使用某種變成語(yǔ)言如C語(yǔ)言創(chuàng)建的外部例程 是可以在MicrosoftSQLServer實(shí)例中動(dòng)態(tài)加載和運(yùn)行的DLL 但是 微軟公司宣布從MicrosoftSQLServer2005版本開(kāi)始 將逐步刪除擴(kuò)展存儲(chǔ)過(guò)程類型 這是因?yàn)槭褂肅LR存儲(chǔ)過(guò)程可以可靠和安全地替代擴(kuò)展存儲(chǔ)過(guò)程的功能 04 03 2020 第25頁(yè) 系統(tǒng)存儲(chǔ)過(guò)程 系統(tǒng)存儲(chǔ)過(guò)程是指用來(lái)完成MicrosoftSQLServer2005中許多管理活動(dòng)的特殊存儲(chǔ)過(guò)程 從物理上來(lái)看 系統(tǒng)存儲(chǔ)過(guò)程存儲(chǔ)在Resource系統(tǒng)數(shù)據(jù)庫(kù)中 并且?guī)в衧p 前綴 從邏輯上來(lái)看 系統(tǒng)存儲(chǔ)過(guò)程出現(xiàn)在每個(gè)系統(tǒng)數(shù)據(jù)庫(kù)和用戶數(shù)據(jù)庫(kù)的sys架構(gòu)中 在MicrosoftSQLServer2005系統(tǒng)中 主要的系統(tǒng)存儲(chǔ)過(guò)程類型和功能如表10 1所示 04 03 2020 第26頁(yè) 創(chuàng)建存儲(chǔ)過(guò)程的規(guī)則 在設(shè)計(jì)和創(chuàng)建存儲(chǔ)過(guò)程中應(yīng)該滿足一定的約束和規(guī)則 只有滿足了這些約束和規(guī)則 才可以創(chuàng)建有效的存儲(chǔ)過(guò)程 雖然說(shuō)在CREATEPROCEDURE語(yǔ)句中可以包括任意數(shù)量和類型的Transact SQL語(yǔ)句 但是某些特殊的語(yǔ)句是不能包含在存儲(chǔ)過(guò)程定義中的 04 03 2020 第27頁(yè) 創(chuàng)建存儲(chǔ)過(guò)程 在MicrosoftSQLServer2005系統(tǒng)中 可以使用CREATEPROCEDURE語(yǔ)句創(chuàng)建存儲(chǔ)過(guò)程 需要強(qiáng)調(diào)的是 必須具有CREATEPROCEDURE權(quán)限才能創(chuàng)建存儲(chǔ)過(guò)程 存儲(chǔ)過(guò)程是架構(gòu)作用域中的對(duì)象 只能在本地?cái)?shù)據(jù)庫(kù)中創(chuàng)建存儲(chǔ)過(guò)程 在創(chuàng)建存儲(chǔ)過(guò)程時(shí) 應(yīng)該指定所有的輸入?yún)?shù) 執(zhí)行數(shù)據(jù)庫(kù)操作的編程語(yǔ)句 返回至調(diào)用過(guò)程或批處理表明成功或失敗的狀態(tài)值 捕捉和處理潛在錯(cuò)誤的錯(cuò)誤處理語(yǔ)句 04 03 2020 第28頁(yè) CREATEPROCEDURE語(yǔ)句 CREATEPROCEDUREprocedure nameparameter namedata type WITHprocedure optionASsql statement 04 03 2020 第29頁(yè) 例10 7 使用CREATEPROCEDURE語(yǔ)句創(chuàng)建存儲(chǔ)過(guò)程 04 03 2020 第30頁(yè) 例10 8 使用OUTPUT關(guān)鍵字創(chuàng)建存儲(chǔ)過(guò)程 04 03 2020 第31頁(yè) 執(zhí)行存儲(chǔ)過(guò)程 在MicrosoftSQLServer2005系統(tǒng)中 可以使用EXECUTE語(yǔ)句執(zhí)行存儲(chǔ)過(guò)程 EXECUTE語(yǔ)句也可以簡(jiǎn)寫為EXEC 如果將要執(zhí)行的存儲(chǔ)過(guò)程需要參數(shù) 那么應(yīng)該在存儲(chǔ)過(guò)程名稱后面帶上參數(shù)值 04 03 2020 第32頁(yè) 例10 9 使用EXEC語(yǔ)句執(zhí)行存儲(chǔ)過(guò)程 04 03 2020 第33頁(yè) 例10 10 執(zhí)行帶有參數(shù)的存儲(chǔ)過(guò)程 04 03 2020 第34頁(yè) 例10 11 在執(zhí)行EXEC語(yǔ)句時(shí)引用參數(shù)和使用OUTPUT關(guān)鍵字 04 03 2020 第35頁(yè) 修改和刪除存儲(chǔ)過(guò)程 在MicrosoftSQLServer2005系統(tǒng)中 可以使用ALTERPROCEDURE語(yǔ)句修改已經(jīng)存在的存儲(chǔ)過(guò)程 修改存儲(chǔ)過(guò)程不同于刪除和重建存儲(chǔ)過(guò)程 其目的是保持存儲(chǔ)過(guò)程的權(quán)限不發(fā)生變化 例如 如果修改HumanResources GetEmployeeInfo存儲(chǔ)過(guò)程 那么與該存儲(chǔ)過(guò)程對(duì)象相關(guān)的權(quán)限將不會(huì)發(fā)生任何變化 但是 如果刪除HumanResources GetEmployeeInfo存儲(chǔ)過(guò)程并且重新創(chuàng)建同名的存儲(chǔ)過(guò)程 那么該存儲(chǔ)過(guò)程對(duì)象相關(guān)的權(quán)限都需要重新定義 如果數(shù)據(jù)庫(kù)中某個(gè)存儲(chǔ)過(guò)程不再需要了 可以使用DROPPROCEDURE語(yǔ)句刪除該存儲(chǔ)過(guò)程 這種刪除是永久性的 不能恢復(fù) 04 03 2020 第36頁(yè) 存儲(chǔ)過(guò)程的執(zhí)行過(guò)程 存儲(chǔ)過(guò)程創(chuàng)建之后 在第一次執(zhí)行時(shí)需要經(jīng)過(guò)語(yǔ)法分析階段 解析階段 編譯階段和執(zhí)行階段 語(yǔ)法分析階段是指創(chuàng)建存儲(chǔ)過(guò)程時(shí) 系統(tǒng)檢查其創(chuàng)建語(yǔ)句的語(yǔ)法正確性的過(guò)程 在存儲(chǔ)過(guò)程的創(chuàng)建過(guò)程中如果碰到語(yǔ)法錯(cuò)誤 那么該存儲(chǔ)過(guò)程創(chuàng)建失敗 如果語(yǔ)法檢查通過(guò)之后 系統(tǒng)將該存儲(chǔ)過(guò)程的名稱存儲(chǔ)在當(dāng)前數(shù)據(jù)庫(kù)的sys sql modules目錄視圖中 解析階段是指某個(gè)存儲(chǔ)過(guò)程首次執(zhí)行時(shí) 查詢處理器從sys sql modules目錄視圖中讀取該存儲(chǔ)過(guò)程的文本并且檢查該過(guò)程引用的對(duì)象名稱是否存在的過(guò)程 編譯階段是指分析存儲(chǔ)過(guò)程和生成存儲(chǔ)過(guò)程執(zhí)行計(jì)劃的過(guò)程 執(zhí)行階段是指執(zhí)行駐留在過(guò)程高速緩沖存儲(chǔ)區(qū)中的存儲(chǔ)過(guò)程的執(zhí)行計(jì)劃的過(guò)程 04 03 2020 第37頁(yè) 查看存儲(chǔ)過(guò)程的信息 在MicrosoftSQLServer2005系統(tǒng)中 可以使用系統(tǒng)存儲(chǔ)過(guò)程和目錄視圖查看有關(guān)存儲(chǔ)過(guò)程的信息 如果希望查看存儲(chǔ)過(guò)程的定義信息 那么可以使用sys sql modules目錄視圖 OBJECT DEFINITION元數(shù)據(jù)函數(shù) sp helptext系統(tǒng)存儲(chǔ)過(guò)程等 04 03 2020 第38頁(yè) 例10 12 查看存儲(chǔ)過(guò)程信息 04 03 2020 第39頁(yè) 本章內(nèi)容 10 1視圖10 2存儲(chǔ)過(guò)程10 3觸發(fā)器10 4用戶定義函數(shù)10 5上機(jī)練習(xí)10 6習(xí)題 04 03 2020 第40頁(yè) 10 3觸發(fā)器 MicrosoftSQLServer2005系統(tǒng)提供了兩種強(qiáng)制業(yè)務(wù)邏輯和數(shù)據(jù)完整性的機(jī)制 即約束技術(shù)和觸發(fā)器技術(shù) 前面已經(jīng)講過(guò)了約束技術(shù) 本節(jié)講述觸發(fā)器技術(shù) 04 03 2020 第41頁(yè) 觸發(fā)器類型 按照觸發(fā)事件的不同 可以把MicrosoftSQLServer2005系統(tǒng)提供的觸發(fā)器分成兩大類型 即DML觸發(fā)器和DDL觸發(fā)器 需要補(bǔ)充的是 DDL觸發(fā)器是MicrosoftSQLServer2005系統(tǒng)新增的功能 以前的版本只有DML觸發(fā)器 當(dāng)數(shù)據(jù)庫(kù)中發(fā)生數(shù)據(jù)操縱語(yǔ)言 datamanipulationlanguage DML 事件時(shí)將調(diào)用DML觸發(fā)器 DML事件包括在指定表或視圖中修改數(shù)據(jù)的INSERT語(yǔ)句 UPDATE語(yǔ)句或DELETE語(yǔ)句 在DML觸發(fā)器中 可以執(zhí)行查詢其他表的操作 也可以包含更加復(fù)雜的Transact SQL語(yǔ)句 DML觸發(fā)器將觸發(fā)器本身和觸發(fā)事件的語(yǔ)句作為可以在觸發(fā)器內(nèi)回滾的單個(gè)事務(wù)對(duì)待 也就是說(shuō) 當(dāng)在執(zhí)行觸發(fā)器操作過(guò)程中 如果檢測(cè)到錯(cuò)誤發(fā)生 則整個(gè)觸發(fā)事件語(yǔ)句和觸發(fā)器操作的事務(wù)自動(dòng)回滾 DDL觸發(fā)器與DML觸發(fā)器相同的是 都需要觸發(fā)事件進(jìn)行觸發(fā) 但是 DDL觸發(fā)器的觸發(fā)事件是數(shù)據(jù)定義語(yǔ)言 datadefinitionlanguage DDL 語(yǔ)句 04 03 2020 第42頁(yè) DML觸發(fā)器的基本類型 按照觸發(fā)器事件類型的不同 可以把MicrosoftSQLServer2005系統(tǒng)DML觸發(fā)器分成3種類型 即INSERT類型 UPDATE類型和DELETE類型 這也是DML觸發(fā)器的基本類型 04 03 2020 第43頁(yè) 創(chuàng)建DML觸發(fā)器 DML觸發(fā)器是一種特殊類型的存儲(chǔ)過(guò)程 所以DML觸發(fā)器的創(chuàng)建和存儲(chǔ)過(guò)程的創(chuàng)建方式有很多相似的地方 可以使用CREATETRIGGER語(yǔ)句創(chuàng)建DML觸發(fā)器 在CREATETRIGGER語(yǔ)句中 指定了定義觸發(fā)器的基表或視圖 觸發(fā)事件的類型和觸發(fā)的時(shí)間 觸發(fā)器的所有指令等內(nèi)容 使用CREATETRIGGER語(yǔ)句創(chuàng)建DML觸發(fā)器 04 03 2020 第44頁(yè) CREATETRIGGER語(yǔ)句 CREATETRIGGERtrigger nameONtable name or view nameWITHENCRYPTION FOR AFTER INSTEADOF DELETE INSERT UPDATE ASsql statement 04 03 2020 第45頁(yè) 例10 13 查看觸發(fā)器信息 04 03 2020 第46頁(yè) DML觸發(fā)器的工作原理 前面介紹了DML觸發(fā)器的基本概念 類型 特點(diǎn) 創(chuàng)建 修改 刪除等內(nèi)容 現(xiàn)在我們來(lái)看看觸發(fā)器是如何工作的 通過(guò)了解觸發(fā)器的工作原理 就可以更好地使用觸發(fā)器 寫出效率更高的觸發(fā)器 下面主要介紹INSERT DELETE和UPDATE類型觸發(fā)器的工作原理 04 03 2020 第47頁(yè) INSERT觸發(fā)器的工作原理 當(dāng)向表中插入數(shù)據(jù)時(shí) INSERT觸發(fā)器觸發(fā)執(zhí)行 當(dāng)INSERT觸發(fā)器觸發(fā)時(shí) 新的記錄增加到觸發(fā)器表中和inserted表中 該inserted表是一個(gè)邏輯表 保存了所插入記錄的拷貝 允許用戶參考INSERT語(yǔ)句中數(shù)據(jù) 觸發(fā)器可以檢查inserted表 來(lái)確定該觸發(fā)器的操作是否應(yīng)該執(zhí)行和如何執(zhí)行 在inserted表中的那些記錄 總是觸發(fā)器表中一行或多行記錄的冗余 04 03 2020 第48頁(yè) DELETE觸發(fā)器的工作原理 當(dāng)觸發(fā)一個(gè)DELETE觸發(fā)器時(shí) 被刪除的記錄放在一個(gè)特殊的deleted表中 deleted表是一個(gè)邏輯表 用來(lái)保存已經(jīng)從表中刪除的記錄 該deleted表允許參考原來(lái)的DELETE語(yǔ)句刪除的已經(jīng)記錄在日志中的數(shù)據(jù) 當(dāng)使用DELETE語(yǔ)句時(shí) 應(yīng)該考慮下列一些因素 當(dāng)記錄放在deleted表中的時(shí)候 該記錄就不會(huì)存在數(shù)據(jù)庫(kù)的表中了 因此 在數(shù)據(jù)庫(kù)表和deleted表之間沒(méi)有共同的記錄 邏輯表deleted總是存放在內(nèi)存中 以提供性能 在DELETE觸發(fā)器中 不能包括TRUNCATETABLE語(yǔ)句 這是因?yàn)樵撜Z(yǔ)句是不記日志的操作 04 03 2020 第49頁(yè) UPDATE觸發(fā)器的工作原理 修改一條記錄就等于插入一條新記錄和刪除一條舊記錄 同樣 UPDATE語(yǔ)句也可以看成是由刪除一條記錄的DELETE語(yǔ)句和增加一條記錄的INSERT語(yǔ)句組成 當(dāng)在某一個(gè)有UPDATE觸發(fā)器表的上面修改一條記錄時(shí) 表中原來(lái)的記錄移動(dòng)到deleted表中 修改過(guò)的記錄插入到了inserted表中 觸發(fā)器可以檢查deleted表和inserted表及被修改的表 以便確定是否修改了多個(gè)行和應(yīng)該如何執(zhí)行觸發(fā)器的操作 04 03 2020 第50頁(yè) 一個(gè)具體的示例 為了更加全面地掌握開(kāi)發(fā)觸發(fā)器的步驟和技術(shù) 本節(jié)通過(guò)一個(gè)具體的示例 全面講述使用Transact SQL語(yǔ)言開(kāi)發(fā)和創(chuàng)建觸發(fā)器的技術(shù) 一般地 開(kāi)發(fā)觸發(fā)器的過(guò)程包括用戶需求分析 確定觸發(fā)器的邏輯結(jié)構(gòu) 編寫觸發(fā)器代碼和測(cè)試觸發(fā)器 04 03 2020 第51頁(yè) 例10 14 設(shè)計(jì)和實(shí)現(xiàn)DML觸發(fā)器 04 03 2020 第52頁(yè) 創(chuàng)建t accountData insert觸發(fā)器 04 03 2020 第53頁(yè) 創(chuàng)建t accountData delete觸發(fā) 04 03 2020 第54頁(yè) 一組插入數(shù)據(jù)的操作 04 03 2020 第55頁(yè) 審計(jì)到的插入數(shù)據(jù)的操作 04 03 2020 第56頁(yè) 一組刪除數(shù)據(jù)的操作 04 03 2020 第57頁(yè) 審計(jì)到的刪除數(shù)據(jù)的操作 04 03 2020 第58頁(yè) DDL觸發(fā)器 DDL觸發(fā)器與DML觸發(fā)器有許多類似的地方 如可以自動(dòng)觸發(fā)完成規(guī)定的操作 都可以使用CREATETRIGGER語(yǔ)句創(chuàng)建等 但是也有一些不同的地方 例如 DDL觸發(fā)器的觸發(fā)事件主要是CREATE ALTER DROP以及GRANT DENY及REVOKE等語(yǔ)句 并且觸發(fā)的時(shí)間條件只有AFTER 沒(méi)有INSTEADOF 04 03 2020 第59頁(yè) 例10 15 使用DDL觸發(fā)器 04 03 2020 第60頁(yè) 本章內(nèi)容 10 1視圖10 2存儲(chǔ)過(guò)程10 3觸發(fā)器10 4用戶定義函數(shù)10 5上機(jī)練習(xí)10 6習(xí)題 04 03 2020 第61頁(yè) 10 4用戶定義函數(shù) 在MicrosoftSQLServer2005系統(tǒng)中 用戶定義函數(shù)是接受參數(shù) 執(zhí)行操作并且將運(yùn)算結(jié)果以值的形式返回的例程 這種返回值既可以是單個(gè)標(biāo)量值 也可以是一個(gè)結(jié)果集 在MicrosoftSQLServer2005系統(tǒng)中 用戶定義函數(shù)既可以使用Transact SQL語(yǔ)言編寫 也可以使用任何 NET編程語(yǔ)言來(lái)編寫 04 03 2020 第62頁(yè) 特點(diǎn) 在MicrosoftSQLServer2005系統(tǒng)中 所有的用戶定義函數(shù)都具有相同的由兩部分組成的結(jié)構(gòu) 標(biāo)題和正文 標(biāo)題可以定義這些內(nèi)容 具有可選架構(gòu) 所有者名稱的函數(shù)名稱 輸入?yún)?shù)名稱和數(shù)據(jù)類型 可以用于輸入?yún)?shù)的選項(xiàng) 返回參數(shù)數(shù)據(jù)類型和可選名稱 可以用于返回參數(shù)的選項(xiàng)等 正文定義了函數(shù)將要執(zhí)行的操作 這些操作既可以是一個(gè)或多個(gè)Transact SQL語(yǔ)句 也可以是 NET程序集的引用 在MicrosoftSQLServer2005系統(tǒng)中 用戶定義函數(shù)又可以分為兩大類 即用戶定義標(biāo)量函數(shù)和用戶定義表值函數(shù) 用戶定義標(biāo)量函數(shù)返回在RETURNS子句中定義的類型的單個(gè)數(shù)據(jù)值 對(duì)于多語(yǔ)句標(biāo)量函數(shù) 定義在BEGINEND塊中的函數(shù)體包含一系列返回單個(gè)值的Transact SQL語(yǔ)句 返回類型可以是除text ntext image cursor timestamp以外的任何數(shù)據(jù)類型 用戶定義表值函數(shù)返回table數(shù)據(jù)類型 實(shí)際上 在表值函數(shù)中 表是單個(gè)SELECT語(yǔ)句的結(jié)果集 04 03 2020 第63頁(yè) 創(chuàng)建時(shí)的考慮 在MicrosoftSQLServer2005系統(tǒng)中 可以分別使用CREATEFUNCTION ALTERFUNCTION DROPFUNCTION語(yǔ)句來(lái)實(shí)現(xiàn)用戶定義函數(shù)的創(chuàng)建 修改和刪除 在創(chuàng)建用戶定義函數(shù)時(shí) 每個(gè)完全限定用戶函數(shù)的名稱 schema name function name 必須唯一 函數(shù)的BEGINEND塊中的語(yǔ)句不能有任何副作用 函數(shù)副作用是指對(duì)具有函數(shù)外作用域 例如修改數(shù)據(jù)庫(kù)表 的資源狀態(tài)的任何永久性更改 函數(shù)中的語(yǔ)句唯一能做的更改是對(duì)函數(shù)上的局部對(duì)象 如局部游標(biāo)或局部變量 的更改 不能在函數(shù)中執(zhí)行的操作包括對(duì)數(shù)據(jù)庫(kù)表的修改 對(duì)不在函數(shù)上的局部游標(biāo)進(jìn)行操作 發(fā)送電子郵件 嘗試修改目錄 以及生成返回至用戶的結(jié)果集 04 03 2020 第64頁(yè) 使用CREATEFUNCTION語(yǔ)句 在MicrosoftSQLServer2005系統(tǒng)中 使用CREATEFUNCTION語(yǔ)句可以創(chuàng)建標(biāo)量函數(shù) 內(nèi)聯(lián)表值函數(shù) 多語(yǔ)句表值函數(shù) 需要說(shuō)明的是 如果RETURNS子句指定了一種標(biāo)量數(shù)據(jù)類型 則該函數(shù)為標(biāo)量值 如果R
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 人教版高中地理必修第二冊(cè) 第四章交通運(yùn)輸布局與區(qū)域發(fā)展 第一節(jié)區(qū)域發(fā)展對(duì)交通運(yùn)輸布局的影響 課件
- 2025年國(guó)際經(jīng)濟(jì)合作與發(fā)展能力測(cè)評(píng)試卷及答案
- 2025年職業(yè)道德與法律考試試題及答案
- 人教版小學(xué)數(shù)學(xué)四年級(jí)上冊(cè) 《畫垂線》課件
- 兒童禮儀教育體系構(gòu)建
- 2025年翻譯理論與實(shí)踐試卷及答案
- 2025年傳統(tǒng)文化與現(xiàn)代教育知識(shí)測(cè)試題及答案
- 北京市九級(jí)2025屆英語(yǔ)七年級(jí)第二學(xué)期期末學(xué)業(yè)水平測(cè)試試題含答案
- 人力資源管理理論與實(shí)務(wù)試題集及答案
- 2025年西藏出租車從業(yè)資格證考試app
- 體檢機(jī)構(gòu)服務(wù)流程
- 水工混凝土建筑物修補(bǔ)加固技術(shù)規(guī)程
- 經(jīng)皮冠狀動(dòng)脈介入治療術(shù)術(shù)后健康飲食宣教
- 【語(yǔ)文】福建省廈門市演武小學(xué)小學(xué)二年級(jí)下冊(cè)期末試題
- 2021-2022學(xué)年山東省東營(yíng)市廣饒縣七年級(jí)(下)期末英語(yǔ)試卷(五四學(xué)制)(附答案詳解)
- 臥式常壓熱水鍋爐使用說(shuō)明書
- (完整版)新人教版英語(yǔ)七年級(jí)下冊(cè)單詞聽(tīng)寫表
- 酒店住宿水單模板2020
- 23J916-1:住宅排氣道(一)
- 物業(yè)公司權(quán)責(zé)手冊(cè)市場(chǎng)拓展
- 小學(xué)生小升初中自薦信5篇
評(píng)論
0/150
提交評(píng)論