存儲(chǔ)過程與觸發(fā)器課件_第1頁
存儲(chǔ)過程與觸發(fā)器課件_第2頁
存儲(chǔ)過程與觸發(fā)器課件_第3頁
存儲(chǔ)過程與觸發(fā)器課件_第4頁
存儲(chǔ)過程與觸發(fā)器課件_第5頁
已閱讀5頁,還剩14頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、存儲(chǔ)過程與觸發(fā)器補(bǔ)充內(nèi)容存儲(chǔ)過程與觸發(fā)器概述在大型數(shù)據(jù)庫系統(tǒng)中,存儲(chǔ)過程和觸發(fā)器具有很重要的作用。無論是存儲(chǔ)過程還是觸發(fā)器,都是SQL 語句和流程控制語句的集合。就本質(zhì)而言,觸發(fā)器也是一種存儲(chǔ)過程。存儲(chǔ)過程在運(yùn)算時(shí)生成執(zhí)行方式,所以,以后對其再運(yùn)行時(shí)其執(zhí)行速度很快。SQL Server 2000 不僅提供了用戶自定義存儲(chǔ)過程的功能,而且也提供了許多可作為工具使用的系統(tǒng)存儲(chǔ)過程。1.1 存儲(chǔ)過程的概念存儲(chǔ)過程(Stored Procedure)是一組為了完成特定功能的SQL 語句集,經(jīng)編譯后存儲(chǔ)在數(shù)據(jù)庫中。用戶通過指定存儲(chǔ)過程的名字并給出參數(shù)(如果該存儲(chǔ)過程帶有參數(shù))來執(zhí)行它。1.1 存儲(chǔ)過程的

2、概念在SQL Server 的系列版本中存儲(chǔ)過程分為兩類:系統(tǒng)提供的存儲(chǔ)過程和用戶自定義存儲(chǔ)過程。系統(tǒng)過程主要存儲(chǔ)在master數(shù)據(jù)庫中并以sp_為前綴,并且系統(tǒng)存儲(chǔ)過程主要是從系統(tǒng)表中獲取信息,從而為系統(tǒng)管理員管理SQL Server 提供支持。通過系統(tǒng)存儲(chǔ)過程,MS SQL Server 中的許多管理性或信息性的活動(dòng)(如了解數(shù)據(jù)庫對象、數(shù)據(jù)庫信息)都可以被順利有效地完成。盡管這些系統(tǒng)存儲(chǔ)過程被放在master數(shù)據(jù)庫中,但是仍可以在其它數(shù)據(jù)庫中對其進(jìn)行調(diào)用,在調(diào)用時(shí)不必在存儲(chǔ)過程名前加上數(shù)據(jù)庫名。而且當(dāng)創(chuàng)建一個(gè)新數(shù)據(jù)庫時(shí),一些系統(tǒng)存儲(chǔ)過程會(huì)在新數(shù)據(jù)庫中被自動(dòng)創(chuàng)建。用戶自定義存儲(chǔ)過程是由用戶創(chuàng)

3、建并能完成某一特定功能(如查詢用戶所需數(shù)據(jù)信息)的存儲(chǔ)過程。在本次課中所涉及到的存儲(chǔ)過程主要是指用戶自定義存儲(chǔ)過程。舉例:sp_columns;sp_datatype_info1.2 存儲(chǔ)過程的優(yōu)點(diǎn)當(dāng)利用SQL Server 創(chuàng)建一個(gè)應(yīng)用程序時(shí),SQL 是一種主要的編程語言。若運(yùn)用SQL 來進(jìn)行編程,有兩種方法。其一是,在本地存儲(chǔ)SQL 程序,并創(chuàng)建應(yīng)用程序向SQL Server 發(fā)送命令來對結(jié)果進(jìn)行處理。其二是,可以把部分用SQL 編寫的程序作為存儲(chǔ)過程存儲(chǔ)在SQL Server 中,并創(chuàng)建應(yīng)用程序來調(diào)用存儲(chǔ)過程,對數(shù)據(jù)結(jié)果進(jìn)行處理存儲(chǔ)過程能夠通過接收參數(shù)向調(diào)用者返回結(jié)果集,結(jié)果集的格式由調(diào)

4、用者確定;返回狀態(tài)值給調(diào)用者,指明調(diào)用是成功或是失?。话ㄡ槍?shù)據(jù)庫的操作語句,并且可以在一個(gè)存儲(chǔ)過程中調(diào)用另一存儲(chǔ)過程。1.2 存儲(chǔ)過程的優(yōu)點(diǎn)我們通常更偏愛于使用第二種方法,即在SQL Server 中使用存儲(chǔ)過程而不是在客戶計(jì)算機(jī)上調(diào)用SQL 編寫的一段程序,原因在于存儲(chǔ)過程具有以下優(yōu)點(diǎn):(1) 存儲(chǔ)過程允許標(biāo)準(zhǔn)組件式編程存儲(chǔ)過程在被創(chuàng)建以后可以在程序中被多次調(diào)用,而不必重新編寫該存儲(chǔ)過程的SQL 語句。而且數(shù)據(jù)庫專業(yè)人員可隨時(shí)對存儲(chǔ)過程進(jìn)行修改,但對應(yīng)用程序源代碼毫無影響(因?yàn)閼?yīng)用程序源代碼只包含存儲(chǔ)過程的調(diào)用語句),從而極大地提高了程序的可移植性。1.2 存儲(chǔ)過程的優(yōu)點(diǎn)(2) 存儲(chǔ)過程

5、能夠?qū)崿F(xiàn)較快的執(zhí)行速度如果某一操作包含大量的SQL 代碼或被多次執(zhí)行,那么存儲(chǔ)過程要比批處理的執(zhí)行速度快很多。因?yàn)榇鎯?chǔ)過程是預(yù)編譯的,在首次運(yùn)行一個(gè)存儲(chǔ)過程時(shí),查詢優(yōu)化器對其進(jìn)行分析、優(yōu)化,并給出最終被存在系統(tǒng)表中的執(zhí)行計(jì)劃。而批處理的SQL 語句在每次運(yùn)行時(shí)都要進(jìn)行編譯和優(yōu)化,因此速度相對要慢一些。1.2 存儲(chǔ)過程的優(yōu)點(diǎn)(3) 存儲(chǔ)過程能夠減少網(wǎng)絡(luò)流量 對于同一個(gè)針對數(shù)據(jù)數(shù)據(jù)庫對象的操作(如查詢、修改),如果這一操作所涉及到的 SQL 語句被組織成一存儲(chǔ)過程,那么當(dāng)在客戶計(jì)算機(jī)上調(diào)用該存儲(chǔ)過程時(shí),網(wǎng)絡(luò)中傳送的只是該調(diào)用語句,否則將是多條SQL 語句,從而大大增加了網(wǎng)絡(luò)流量,降低網(wǎng)絡(luò)負(fù)載。1.

6、2 存儲(chǔ)過程的優(yōu)點(diǎn)(4)存儲(chǔ)過程可被作為一種安全機(jī)制來充分利用系統(tǒng)管理員通過對執(zhí)行某一存儲(chǔ)過程的權(quán)限進(jìn)行限制,從而能夠?qū)崿F(xiàn)對相應(yīng)的數(shù)據(jù)訪問權(quán)限的限制,避免非授權(quán)用戶對數(shù)據(jù)的訪問,保證數(shù)據(jù)的安全。注意:存儲(chǔ)過程雖然既有參數(shù)又有返回值,但是它與函數(shù)不同。存儲(chǔ)過程的返回值只是指明執(zhí)行是否成功,并且它不能像函數(shù)那樣被直接調(diào)用,也就是在調(diào)用存儲(chǔ)過程時(shí),在存儲(chǔ)過程名字前一定要有EXEC保留字存儲(chǔ)過程幾種寫法 1) 創(chuàng)建使用參數(shù)的存儲(chǔ)過程Create Proc au_info lastname varchar(40), firstname varchar(20)AsSelect au_lname,au_fn

7、ame,title,pub_nameFrom .where au_fname=firstname And au_lname=lastnameGoEXECUTE au_info ringer,annecreate procedure s_query name varchar(255)as select sno,sn,agefrom swhere sn=namegoexec s_query 李濤存儲(chǔ)過程幾種寫法2)創(chuàng)建使用參數(shù)默認(rèn)值的存儲(chǔ)過程,該存儲(chǔ)過程在沒有輸入?yún)?shù)的情況下將默認(rèn)值得到的結(jié)果輸出Create Proc au_info lastname varchar(40)=ringer, fi

8、rstname varchar(20)=anneAsSelect au_lname,au_fname,title,pub_nameFrom .where au_fname=firstname And au_lname=lastnameGoEXECUTE au_info create procedure s_query name varchar(255)=李濤as select sno,sn,agefrom swhere sn=namegoexec s_query存儲(chǔ)過程幾種寫法 3)用顯式值替代參數(shù)默認(rèn)值的存儲(chǔ)過程Create Proc showind table varchar(30) =t

9、itlesas SELECT Table_Name=,INDEX_Name=,index_id=indidfrom sysindexes inner join sysobjects on sysobjects.id=sysindexes.idwhere =tableEXECUTE showind authorscreate procedure s_query name varchar(255)=李濤as select sno,sn,agefrom swhere sn=namegoexec s_query

10、陳文存儲(chǔ)過程幾種寫法4)使用參數(shù)默認(rèn)值NULL來創(chuàng)建存儲(chǔ)過程,在這種情況下如果沒有提供參數(shù)值,SQL將不會(huì)出錯(cuò)顯示Create Proc showind table varchar(30) =Nullas IF table is NUllprint 請輸入?yún)?shù)elseSELECT Table_Name=,INDEX_Name=,index_id=indidfrom sysindexs inner join sysobjects on sysobjects.id=sysindexes.idwhere =ta

11、bleEXECUTE showind authorscreate procedure s_query2 name varchar(255)=nullasIF name is NUllprint 請輸入?yún)?shù)else select sno,sn,agefrom swhere sn=namegoexec s_query2存儲(chǔ)過程幾種寫法5) 使用包含通配符的參數(shù)默認(rèn)值創(chuàng)建存儲(chǔ)過程,通配符包括(% , _ , 和 ),注意需要用Like關(guān)鍵字CREATE PROC au_info lastname varchar(40)=r% , firstname varchar(20)=% ASSelect au

12、_lname,au_fname,title,pub_namefrom authors inner join titleauthor on authors.au_id=titleauthor.au_id join titles on titleauthor.title_id=titles.title_idjoin publishers on titles.pub_id=publishers.pub_idwhere au_fname like firstnameand au_lname like lastnameGOcreate procedure s_query3 name varchar(25

13、5)asselect sno,sn,agefrom swhere sn like namegoexec s_query3 陳%1.3 觸發(fā)器的概念在SQL中,觸發(fā)器是一種特殊類型的存儲(chǔ)過程,它不同于SQL的存儲(chǔ)過程。觸發(fā)器主要是通過事件進(jìn)行觸發(fā)而被執(zhí)行的,而存儲(chǔ)過程可以通過存儲(chǔ)過程名字而被直接調(diào)用。當(dāng)對某一表進(jìn)行諸如UPDATE、 INSERT、 DELETE 這些操作時(shí),SQL Server 就會(huì)自動(dòng)執(zhí)行觸發(fā)器所定義的SQL 語句,從而確保對數(shù)據(jù)的處理必須符合由這些SQL 語句所定義的規(guī)則觸發(fā)器的主要作用就是其能夠?qū)崿F(xiàn)由主鍵和外鍵所不能保證的復(fù)雜的參照完整性和數(shù)據(jù)的一致性。它維護(hù)不同表中數(shù)據(jù)

14、間關(guān)系的有關(guān)規(guī)則。定義一個(gè)好的觸發(fā)器對簡化數(shù)據(jù)的管理,保證數(shù)據(jù)庫的安全都有重要的影響。觸發(fā)器是針對表一級的,這就意味著,只有表的所有者有權(quán)創(chuàng)建表的觸發(fā)器。創(chuàng)建觸發(fā)器的語法:Create Triggerowner.觸發(fā)器名On owner.表名For insert,update,deleteAsBeginSQL語句(塊)End舉例比如,有兩個(gè)表 Student:學(xué)生表,學(xué)號(hào)為主鍵 BorrowRecord:借書記錄表,學(xué)號(hào)為外碼 用到的功能有:1.如果更改了學(xué)生的學(xué)號(hào), 希望借書記錄仍然與這個(gè)學(xué)生相關(guān)(也就是同時(shí)更改借書記錄表的學(xué)號(hào));2.如果該學(xué)生已經(jīng)畢業(yè),希望刪除學(xué)號(hào)的同時(shí),也刪除借書記錄這時(shí)候可以用到觸發(fā)器。對于1,創(chuàng)建一個(gè)Update觸發(fā)器: Create Trigger truStudentOn Student-在Student表中創(chuàng)建觸發(fā)器for Update-為什么事件觸發(fā)As-事件觸發(fā)后所要做的事情 if Update(StudentID) beg

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論