數(shù)據(jù)庫存儲過程與觸發(fā)器ppt課件_第1頁
數(shù)據(jù)庫存儲過程與觸發(fā)器ppt課件_第2頁
數(shù)據(jù)庫存儲過程與觸發(fā)器ppt課件_第3頁
數(shù)據(jù)庫存儲過程與觸發(fā)器ppt課件_第4頁
數(shù)據(jù)庫存儲過程與觸發(fā)器ppt課件_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第第8 8章章 存儲過程與觸發(fā)器存儲過程與觸發(fā)器本章學習目的本章學習目的l 了解存儲過程和觸發(fā)器的作用了解存儲過程和觸發(fā)器的作用l 熟練創(chuàng)建和管理存儲過程及觸發(fā)熟練創(chuàng)建和管理存儲過程及觸發(fā)器器l 靈敏運用存儲過程和觸發(fā)器提高靈敏運用存儲過程和觸發(fā)器提高系統(tǒng)開發(fā)效率系統(tǒng)開發(fā)效率 8.1 存儲過程8.1.1 存儲過程根底知識1存儲過程簡介 存儲過程是存儲在效力器上的由SQL語句和控制流語句組成的一個預編譯集合。存儲過程劃分為系統(tǒng)存儲過程以及用戶存儲過程。一個存儲過程可以作為一個獨立的單元進展處置。在SQL Server中可以經(jīng)過存儲過程來完成很多管理義務,利用一些常用的系統(tǒng)存儲過程可以很方便的查看

2、、操作數(shù)據(jù)庫對象。系統(tǒng)存儲過程的命名通常以sp_作為前綴,并且存儲于Master數(shù)據(jù)庫中,假設用戶擁有足夠的權限,就可以在任何數(shù)據(jù)庫中調用這些存儲過程。存儲過程提供了一種封裝某一個需求反復執(zhí)行義務的方法。一旦定義了一個存儲過程之后,在運用程序中就可以對其進展調用。在存儲過程中,不僅可以包含程序流、邏輯以及對數(shù)據(jù)庫的查詢,而且也可以接受參數(shù)、輸出參數(shù)、前往單個或多個結果集。 所以經(jīng)過設計自定義用戶存儲過程,用戶可以使其實現(xiàn)強大的編程功能。 運用存儲過程可以比單獨的SQL語句完成更為復雜的功能,并且系統(tǒng)會對存儲過程中的SQL語句進展了預編譯處置,使得執(zhí)行速度有了大幅度的提升。存儲過程被第一次調用后

3、,會保管在高速緩沖區(qū)中,這樣再次執(zhí)行同一個存儲過程時,會提高了反復調用的效率。在實踐運用中,可以將復雜的商業(yè)規(guī)那么封裝在存儲過程中,從而提高程序語句的利用率。2存儲過程的優(yōu)點存儲過程的優(yōu)點存儲過程一旦執(zhí)行一次后,其執(zhí)行的方案就會駐留在計算機存儲過程一旦執(zhí)行一次后,其執(zhí)行的方案就會駐留在計算機的高速緩沖存儲器中。其后對同一個存儲過程的調用就可以的高速緩沖存儲器中。其后對同一個存儲過程的調用就可以直接利用編譯后在高速緩存中的二進制方式來完成操作。直接利用編譯后在高速緩存中的二進制方式來完成操作??梢栽趩蝹€存儲過程中執(zhí)行一系列可以在單個存儲過程中執(zhí)行一系列SQL語句,因此可以用于語句,因此可以用于設

4、計、封裝企業(yè)的功能模塊。運用程序運用一樣的存儲過程設計、封裝企業(yè)的功能模塊。運用程序運用一樣的存儲過程進展操作,確保了在數(shù)據(jù)訪問、支配的一致性。進展操作,確保了在數(shù)據(jù)訪問、支配的一致性。可以在當前的存儲過程內部援用其它存儲過程,這樣可以將復雜語句進展簡化。提供了一種數(shù)據(jù)庫訪問的途徑,只需求用戶擁有執(zhí)行存儲過程的權限,那么經(jīng)過運用存儲過程就可以完成對數(shù)據(jù)庫的各種操作,如添加數(shù)據(jù)、修正數(shù)據(jù)、刪除數(shù)據(jù)等,而不需求思索用戶能否擁有存儲過程所處置的數(shù)據(jù)對象的訪問權限。3運用存儲過程的本卷須知運用存儲過程的本卷須知在命名自定義存儲過程時防止與系統(tǒng)存儲過程名一樣。在命名自定義存儲過程時防止與系統(tǒng)存儲過程名一

5、樣。存儲過程最多可以支持存儲過程最多可以支持32層的嵌套。層的嵌套。命名存儲過程中的標識符時,長度不能超越命名存儲過程中的標識符時,長度不能超越128個字符。個字符。存儲過程中參數(shù)的個數(shù)不能超越存儲過程中參數(shù)的個數(shù)不能超越2100。8.1.2 創(chuàng)建和執(zhí)行存儲過程創(chuàng)建和執(zhí)行存儲過程在在SQL Server中,既可以經(jīng)過企業(yè)管理器,也可以經(jīng)過運用中,既可以經(jīng)過企業(yè)管理器,也可以經(jīng)過運用CREATE PROCEDRUE語句的方式來創(chuàng)建存儲過程。語句的方式來創(chuàng)建存儲過程。1運用企業(yè)管理器創(chuàng)建存儲過程運用企業(yè)管理器創(chuàng)建存儲過程步驟:步驟:在企業(yè)管理器中,展開效力器組、效力器節(jié)點、數(shù)據(jù)庫節(jié)在企業(yè)管理器中,

6、展開效力器組、效力器節(jié)點、數(shù)據(jù)庫節(jié)點。點。選擇某一個數(shù)據(jù)庫并在該節(jié)點上點擊鼠標右鍵,選擇【新選擇某一個數(shù)據(jù)庫并在該節(jié)點上點擊鼠標右鍵,選擇【新建】菜單下的【存儲過程】級聯(lián)菜單,將彈出如圖建】菜單下的【存儲過程】級聯(lián)菜單,將彈出如圖8-1所示的所示的對話框。對話框。圖8-1新建存儲過程對話框在【存儲過程屬性】對話框中的【文本】編輯框中,對OWNER以及PROCEDURE NAME部分進展修正,分別修正為該存儲過程的一切者和存儲過程稱號,并且輸入該存儲過程所包含的SQL語句。如圖8-2所示為創(chuàng)建了一個用于查詢學生信息的存儲過程。圖8-2用于查詢學生信息的存儲過程假設需求驗證存儲過程中的SQL語句的

7、正確性,可以單擊【檢查語法】按鈕,假設沒有語法錯誤那么會彈出如圖8-3所示的“語法檢查勝利的對話框。圖8-3“語法檢查勝利的提示對話框當存儲過程中沒有語法錯誤后,可以單擊【確定】按鈕來 保管自定義的存儲過程。2運用運用CREATE PROCEDURE語句來創(chuàng)建存儲過程語句來創(chuàng)建存儲過程該語句可以創(chuàng)建永久運用的存儲過程,也可以創(chuàng)建部分暫時該語句可以創(chuàng)建永久運用的存儲過程,也可以創(chuàng)建部分暫時過程、全局暫時過程。過程、全局暫時過程。語法格式為:語法格式為:CREATE PROCEDURE 存儲過程稱號存儲過程稱號 ;數(shù)值數(shù)值參數(shù)參數(shù) 數(shù)據(jù)類型數(shù)據(jù)類型 VARYING =參數(shù)的默許值參數(shù)的默許值 OU

8、TPUT ,n WITH RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION FOR REPLICATION AS SQL語句語句 .n 其中:存儲過程稱號 必需符合標識符命名規(guī)那么,而且對于數(shù)據(jù)庫以及一切者命名必需獨一。一個完好的命名不能超越128個字符?!纠?-1】運用CREATE PROCEDURE語句創(chuàng)建一個稱號為proc_bjrs的存儲過程,用于檢索現(xiàn)有班級及人數(shù)。CREATE PROCEDURE proc_bjrs AS SELECT DISTINCT(班級表班級表.班級編號班級編號),班級表班級表.班級班級 稱號,稱號, 人數(shù)人數(shù)=CO

9、UNT(學生根本信息表學生根本信息表.學號學號) FROM 學生根本信息表學生根本信息表,班級表班級表 WHERE 班級表班級表.班級編號班級編號=學生根本信息表學生根本信息表.班級編班級編號號 GROUP BY 班級表班級表.班級編號班級編號,班級表班級表.班級稱號班級稱號GO在查詢分析器中執(zhí)行以上命令后,然后執(zhí)行該存儲過在查詢分析器中執(zhí)行以上命令后,然后執(zhí)行該存儲過程程EXECUTE proc_bjrs,運轉結果如圖,運轉結果如圖8-4所示。所示。圖8-4 檢索現(xiàn)有班級以及人數(shù)【例8-2】設計一個帶有參數(shù)的存儲過程,該參數(shù)用于傳送班級編號,根據(jù)該參數(shù)在學生根本信息表中檢索出某一個班級中一切

10、學生的信息。CREATE PROCEDURE proc_bjcx bjbh VARCHAR(8)AS SELECT * FROM 學生根本信息表 WHERE 班級編號=bjbhGO其中參數(shù)bjbh用于接納班級編號,在實踐調用中根據(jù)該參數(shù)將會前往一個結果集。例如,EXECUTE proc_bjcx 20191003,將會顯示班級編號為20191003的學生信息。運轉結果如圖8-5所示圖8-5 用于傳送班級編號的存儲過程8.1.3 修正與刪除存儲過程修正與刪除存儲過程在在SQL Server中,可以經(jīng)過企業(yè)管理器或中,可以經(jīng)過企業(yè)管理器或SQL語句兩種方式語句兩種方式修正或刪除存儲過程。修正或刪除

11、存儲過程。1運用企業(yè)管理器修正存儲過程運用企業(yè)管理器修正存儲過程在企業(yè)管理器中,展開效力器組、效力器以及數(shù)據(jù)庫節(jié)點。在企業(yè)管理器中,展開效力器組、效力器以及數(shù)據(jù)庫節(jié)點。選擇某一個數(shù)據(jù)庫,展開該數(shù)據(jù)庫節(jié)點后點擊【存儲過選擇某一個數(shù)據(jù)庫,展開該數(shù)據(jù)庫節(jié)點后點擊【存儲過程】,在右側的窗口中將會顯示出存儲過程的列表。右擊需程】,在右側的窗口中將會顯示出存儲過程的列表。右擊需求修正的存儲過程,在彈出菜單中選擇【屬性】,彈出存儲求修正的存儲過程,在彈出菜單中選擇【屬性】,彈出存儲過程屬性對話框,如圖過程屬性對話框,如圖8-6所示。所示。圖8-6 【存儲過程屬性】對話框在【存儲過程屬性】對話框的【文本】編輯

12、框中修正包含的SQL語句。需求留意的是,存儲過程的稱號不能修正。在檢查了語法的正確性之后,可以單擊【確定】按鈕保管修正并封鎖對話框。2運用企業(yè)管理器重命名存儲過程在企業(yè)管理器中,展開效力器組、效力器以及數(shù)據(jù)庫節(jié)點。選擇某一個數(shù)據(jù)庫,展開該數(shù)據(jù)庫節(jié)點后點擊【存儲過程】,在右側的窗口中將會顯示出存儲過程的列表。右擊需求重命名的存儲過程,并選擇彈出菜單中的【重命名】命令,如圖8-7所示。圖8-7 彈出菜單中的【重命名】命令重新輸入存儲過程的稱號后,按下回車鍵完成修正。3運用ALTER PROCEDURE語句修正存儲過程ALTER PROCEDURE語句可以對數(shù)據(jù)庫中已有的存儲過程進展修該,但不會更改

13、權限,也不影響相關的存儲過程或觸發(fā)器。該語句的語法格式為:ALTER PROCEDURE 存儲過程稱號 ;數(shù)值參數(shù) 數(shù)據(jù)類型 VARYING =參數(shù)的默許值 OUTPUT ,n WITH RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION FOR REPLICATION AS SQL語句 .n 其中,存儲過程稱號為數(shù)據(jù)庫中曾經(jīng)存在的過程名,語法中的常用選項與CREATE PROCEDURE語句一致?!纠?-3】修正曾經(jīng)創(chuàng)建的存儲過程proc_bjcx及其功能,將其修正為可以根據(jù)系部編號來查詢某一個系部中一切學生的信息。修正后將存儲過程稱號重命名為pr

14、oc_xbcx。在查詢分析器中運轉如下命令,即可完成重命名:ALTER PROCEDURE proc_bjcx xbbh VARCHAR(2)AS SELECT * FROM 學生根本信息表 WHERE 班級編號 IN (SELECT 班級編號 FROM 班級表 WHERE 系部編號=xbbh) GOSP_RENAME proc_bjcx , proc_xbcxGO運用SP_RENAME可以重新命名一個現(xiàn)有的存儲過程。SP_RENAME的語法格式為:SP_RENAME 原稱號 , 新稱號。完成修正后查詢系部編號為01的學生信息。EXEC proc_xbcx 014運用企業(yè)管理器刪除存儲過程在企

15、業(yè)管理器中,展開效力器組、效力器以及數(shù)據(jù)庫節(jié)點。選擇某一個數(shù)據(jù)庫,展開該數(shù)據(jù)庫后點擊【存儲過程】,在右側的窗口中顯示出存儲過程的列表。右擊需求刪除的存儲過程,并在彈出菜單中選擇【刪除】命令,將彈出【除去對象】對話框,如圖8-8所示。在【除去對象】對話框中單擊【全部除去】按鈕將會完成對存儲過程的刪除操作。圖8-8 【除去對象】對話框5運用運用DROP PROCEDURE語句刪除存儲過程語句刪除存儲過程運用運用DROP PROCEDURE語句可以從當前的數(shù)據(jù)庫中刪除語句可以從當前的數(shù)據(jù)庫中刪除一個或多個存儲過程。一個或多個存儲過程。DROP PROCEDURE語句的語法格語句的語法格式為:式為:D

16、ROP PROCEDURE 存儲過程稱號存儲過程稱號 ,.n 【例【例8-4】同時刪除當前數(shù)據(jù)庫中的兩個存儲過程,】同時刪除當前數(shù)據(jù)庫中的兩個存儲過程,proc_a和和proc_b。在查詢分析器中運轉如下命令,即可完成刪除操作:在查詢分析器中運轉如下命令,即可完成刪除操作:DROP PROCEDURE proc_a , proc_bGO8.2 8.2 觸發(fā)器觸發(fā)器8.2.1 8.2.1 觸發(fā)器及其作用觸發(fā)器及其作用1 1觸發(fā)器簡介觸發(fā)器簡介 觸發(fā)器屬于一種特殊的存儲過程,觸發(fā)器屬于一種特殊的存儲過程,可以在其中包含復雜的可以在其中包含復雜的SQLSQL語句。觸發(fā)器與存語句。觸發(fā)器與存儲過程的區(qū)

17、別在于觸發(fā)器可以自動執(zhí)行并且儲過程的區(qū)別在于觸發(fā)器可以自動執(zhí)行并且不含有參數(shù)。通??梢栽谟|發(fā)器內編寫一段不含有參數(shù)。通??梢栽谟|發(fā)器內編寫一段自動執(zhí)行的程序,用于保證數(shù)據(jù)操作的完好自動執(zhí)行的程序,用于保證數(shù)據(jù)操作的完好性,從而擴展了對默許值、約束和規(guī)那么的性,從而擴展了對默許值、約束和規(guī)那么的完好性檢查。對表進展包括添加數(shù)據(jù)、刪除完好性檢查。對表進展包括添加數(shù)據(jù)、刪除數(shù)據(jù)、更新數(shù)據(jù)中的一種或多種操作時,觸數(shù)據(jù)、更新數(shù)據(jù)中的一種或多種操作時,觸發(fā)器就會自動執(zhí)行。發(fā)器就會自動執(zhí)行。 觸發(fā)器可以劃分為三種類別:觸發(fā)器可以劃分為三種類別:INSERTINSERT觸發(fā)器、觸發(fā)器、DELETEDELETE

18、觸發(fā)器、觸發(fā)器、UPDATEUPDATE觸發(fā)觸發(fā)器。這三種觸發(fā)器分別在發(fā)生數(shù)據(jù)的添加、器。這三種觸發(fā)器分別在發(fā)生數(shù)據(jù)的添加、刪除、修正行為時自動執(zhí)行。刪除、修正行為時自動執(zhí)行。2觸發(fā)器的優(yōu)點觸發(fā)器的優(yōu)點觸發(fā)器有助于在添加、更新或刪除表中的記錄時保管表之間已觸發(fā)器有助于在添加、更新或刪除表中的記錄時保管表之間已定義的關系。定義的關系。觸發(fā)器可以自動調用,當發(fā)生了對數(shù)據(jù)所作的任何修正時,與觸發(fā)器可以自動調用,當發(fā)生了對數(shù)據(jù)所作的任何修正時,與之相關的觸發(fā)器就會立刻被激活。之相關的觸發(fā)器就會立刻被激活??梢酝瓿蓴?shù)據(jù)庫中相關表之間的級聯(lián)修正。級聯(lián)修正是指為了可以完成數(shù)據(jù)庫中相關表之間的級聯(lián)修正。級聯(lián)修

19、正是指為了保證數(shù)據(jù)之間的邏輯性以及依賴關系,在對一張表進展修保證數(shù)據(jù)之間的邏輯性以及依賴關系,在對一張表進展修正的同時,其他表中需求進展的修正可以自動實現(xiàn)。正的同時,其他表中需求進展的修正可以自動實現(xiàn)。觸發(fā)器可以對需求存儲的數(shù)據(jù)加以限制,并且可以實現(xiàn)比觸發(fā)器可以對需求存儲的數(shù)據(jù)加以限制,并且可以實現(xiàn)比CHECK約束更為復雜的功能。在約束更為復雜的功能。在CHECK約束中不允許援約束中不允許援用其他表中的列,而觸發(fā)器可以援用。用其他表中的列,而觸發(fā)器可以援用。3觸發(fā)方式觸發(fā)方式 觸發(fā)器的觸發(fā)方式可以分為后觸發(fā)和替代觸發(fā)兩種方式。觸發(fā)器的觸發(fā)方式可以分為后觸發(fā)和替代觸發(fā)兩種方式。后觸發(fā):指可以引發(fā)

20、觸發(fā)器的修正操作在完成之后才執(zhí)行觸發(fā)后觸發(fā):指可以引發(fā)觸發(fā)器的修正操作在完成之后才執(zhí)行觸發(fā)器的行為方式。創(chuàng)建該類觸發(fā)器,需求運用器的行為方式。創(chuàng)建該類觸發(fā)器,需求運用AFTER關鍵字或關鍵字或者者FOR關鍵字。關鍵字。替代觸發(fā):指定執(zhí)行一個觸發(fā)器,而不是執(zhí)行SQL語句,這種替代觸發(fā)語句的方式稱為替代觸發(fā)方式。8.2.3 創(chuàng)建觸發(fā)器創(chuàng)建觸發(fā)器可以運用企業(yè)管理器以及可以運用企業(yè)管理器以及CREATE TRIGGER語句兩語句兩種方式來創(chuàng)建觸發(fā)器。種方式來創(chuàng)建觸發(fā)器。1運用企業(yè)管理器創(chuàng)建觸發(fā)器運用企業(yè)管理器創(chuàng)建觸發(fā)器翻開企業(yè)管理器,在控制臺根目錄下依次展開效力翻開企業(yè)管理器,在控制臺根目錄下依次展開

21、效力器組、效力器節(jié)點、數(shù)據(jù)庫節(jié)點。器組、效力器節(jié)點、數(shù)據(jù)庫節(jié)點。選擇某一個數(shù)據(jù)庫,并雙擊【表】節(jié)點,在右側窗選擇某一個數(shù)據(jù)庫,并雙擊【表】節(jié)點,在右側窗口的列表中選擇其中的一張表??诘牧斜碇羞x擇其中的一張表。右擊所選中的表,在彈出的下拉菜單中選擇【一切右擊所選中的表,在彈出的下拉菜單中選擇【一切義務】,并繼續(xù)選擇級聯(lián)菜單中的【管理觸發(fā)器】命義務】,并繼續(xù)選擇級聯(lián)菜單中的【管理觸發(fā)器】命令,將翻開圖令,將翻開圖8-9所示的【觸發(fā)器屬性】對話框。所示的【觸發(fā)器屬性】對話框。圖8-9 【觸發(fā)器屬性】對話框在【觸發(fā)器屬性】對話框的文本框中,將TRIGGER NAME修正為新建觸發(fā)器的稱號,并輸入觸發(fā)器

22、所包含的SQL語句。經(jīng)過點擊【檢查語法】按鈕來判別觸發(fā)器的語法能否正確,最后,點擊【確定】按鈕保管新建的觸發(fā)器。2運用CREATE TRIGGER語句創(chuàng)建觸發(fā)器CREATE TRIGGER語句的部分語法格式:CREATE TRIGGER 觸發(fā)器稱號 ON 表名 | 視圖名 WITH ENCRYPTION FOR | AFTER | INSTEAD OF DELETE , INSERT , UPDATEAS SQL語句 .n 其中:觸發(fā)器稱號 必需符合標識符命名規(guī)那么,并且在同一個數(shù)據(jù)庫中觸發(fā)器的稱號不允許反復。觸發(fā)器稱號中可以省略一切者稱號。表名或視圖稱號 是指建立觸發(fā)器所依賴的對象。也可以稱

23、為觸發(fā)器表或觸發(fā)器視圖。WITH ENCRYPTION 該選項的作用為對觸發(fā)器中所包含的SQL語句進展加密。FOR或AFTER 代表后觸發(fā)方式,即當滿足一切的援用級聯(lián)操作和約束檢查后并且完成了SQL 語句中指定的一切操作后,指定的觸發(fā)器才會被執(zhí)行。在視圖上不允許采用后觸發(fā)方式。INSTEAD OF 表示替代觸發(fā)方式,每一個INSERT、UPDATE、DELETE 語句只能定義一個 INSTEAD OF 觸發(fā)器。 DELETE、INSERT、UPDATE 三個選項中應該至少選擇其一,用于表示在表或視圖上執(zhí)行了哪一類的操作時會將觸發(fā)器激活。 SQL語句 為觸發(fā)器中包含的條件以及需求執(zhí)行的操作。 在

24、執(zhí)行觸發(fā)器時,系統(tǒng)會自動創(chuàng)建兩張暫時表INSERTED、DELETED,這兩張表的構造與觸發(fā)器所依賴的表類似,用于保管在用戶操作過程中被插入或被刪除的數(shù)據(jù)。每一個觸發(fā)器在執(zhí)行過程中都會產(chǎn)生與之相關的上述兩張暫時表,并且在執(zhí)行終了后,兩個暫時表會自動被系統(tǒng)刪除。對暫時表可以進展查詢操作,如SELECT * FROM DELETED,但是不能對暫時表進展修正 【例8-5】在數(shù)據(jù)庫XSCJ中設計一個觸發(fā)器,該觸發(fā)器的作用為:當在班級表中刪除某一個班級時,在學生根本信息表中該班級所包含的學生信息也全部被刪除。提示:在此例中,由于涉及到了班級表的刪除操作,因此需求設計一個DELETE類型的觸發(fā)器。在查詢

25、分析器中運轉如下命令:USE XSCJGOCREATE TRIGGER del_bj ON 班級表AFTER DELETEAS DELETE FROM 學生根本信息表 WHERE 班級編號 IN (SELECT 班級編號 FROM DELETED)GO運轉結果如圖8-10所示。圖8-10 一個DELETE類型的觸發(fā)器【例8-6】在數(shù)據(jù)庫XSCJ中設計一個觸發(fā)器,該觸發(fā)器可以保證在學生根本信息表中添加新的紀錄時,新學生的班級編號必需曾經(jīng)存在于班級表中。提示:設計該觸發(fā)器有助于實現(xiàn)學生信息的完好性。在此例中由于涉及到了學生根本信息表中的添加操作,因此需求設計一個INSERT類型的觸發(fā)器。在查詢分析

26、器中運轉如下命令:USE XSCJGOCREATE TRIGGER insert_xs ON 學生根本信息表AFTER INSERTAS IF EXISTS ( SELECT * FROM INSERTED WHERE 班級編號 IN (SELECT 班級編號 FROM 班級表) ) PRINT 添加勝利! ELSE BEGIN PRINT 班級編號與現(xiàn)有的班級不符! ROLLBACK TRANSACTION END運轉結果如圖8-11所示。 圖8-11 一個INSERT類型的觸發(fā)器 創(chuàng)建了觸發(fā)器insert_xs之后,我們可以添加新的學生紀錄進展測試,例如:INSERT INTO 學生根本信

27、息表 (學號,姓名,性別,族別,班級編號) VALUES(000108,王松濤,男,漢,20191001)由于“班級表中不存在編號為20191001的班級,因此添加操作將會被取消。ROLLBACK TRANSACTION用于回滾曾經(jīng)完成的操作。運轉結果如圖8-12所示。圖8-12 添加操作被取消8.2.4 修正與刪除觸發(fā)器修正與刪除觸發(fā)器1運用企業(yè)管理器修正觸發(fā)器運用企業(yè)管理器修正觸發(fā)器在控制臺根目錄下依次展開效力器組、效力器節(jié)在控制臺根目錄下依次展開效力器組、效力器節(jié)點、數(shù)據(jù)庫節(jié)點。點、數(shù)據(jù)庫節(jié)點。選擇某一個數(shù)據(jù)庫,并雙擊【表】節(jié)點,在右側選擇某一個數(shù)據(jù)庫,并雙擊【表】節(jié)點,在右側窗口的列表

28、中選擇某一張需求對其所建立的觸發(fā)器窗口的列表中選擇某一張需求對其所建立的觸發(fā)器進展修該的表。進展修該的表。右擊所選中的表,在彈出的下拉菜單中選擇【一右擊所選中的表,在彈出的下拉菜單中選擇【一切義務】,并繼續(xù)選擇級聯(lián)菜單中的【管理觸發(fā)器】切義務】,并繼續(xù)選擇級聯(lián)菜單中的【管理觸發(fā)器】命令,將翻開【觸發(fā)器】屬性對話框,如圖命令,將翻開【觸發(fā)器】屬性對話框,如圖8-13所所示。示。在【觸發(fā)器屬性】對話框中,在【稱號】下拉列在【觸發(fā)器屬性】對話框中,在【稱號】下拉列表框選擇一個已有的觸發(fā)器,并在【文本】編輯框表框選擇一個已有的觸發(fā)器,并在【文本】編輯框中對其所包含的中對其所包含的SQL語句進展修正。語

29、句進展修正。圖8-13 【觸發(fā)器】屬性對話框在語法檢查無誤的情況下,點擊【確定】按鈕保管修正。假設需求刪除當前觸發(fā)器,可以點擊【刪除】按鈕。2運用ALTER TRIGGER語句修正觸發(fā)器ALTER TRIGGER語句與CREATE TRIGGER語句的語法格式及其參數(shù)類似,部分語法格式為:ALTER TRIGGER 觸發(fā)器稱號 ON 表名 | 視圖名 WITH ENCRYPTION FOR | AFTER | INSTEAD OF DELETE , INSERT , UPDATEAS SQL語句 .n 【例8-7】修正del_bj觸發(fā)器,使得在班級表中刪除某一個班級時,不僅在學生根本信息表中該

30、班級所包含的學生信息將被刪除,而且在成果表中與學生相關的數(shù)據(jù)也將被刪除。在查詢分析器中運轉如下命令:ALTER TRIGGER del_bj ON 班級表AFTER DELETEAS DELETE FROM 成果表 WHERE 學號 IN (SELECT 學號 FROM 學生根本信息表 WHERE 班級編號 IN (SELECT 班級編號 FROM DELETED) DELETE FROM 學生根本信息表 WHERE 班級編號 IN (SELECT 班級編號 FROM DELETED)運轉結果如圖8-14所示。圖8-14 修正del_bj觸發(fā)器3運用運用DROP TRIGGER語句刪除觸發(fā)器語

31、句刪除觸發(fā)器移除觸發(fā)器時,與觸發(fā)器有關的信息將從移除觸發(fā)器時,與觸發(fā)器有關的信息將從sysobjects和和syscomments系統(tǒng)表中刪除。可以經(jīng)過刪除觸發(fā)器或刪除表系統(tǒng)表中刪除??梢越?jīng)過刪除觸發(fā)器或刪除表兩種方式移除觸發(fā)器。刪除表時,將除去一切與表相關聯(lián)的觸兩種方式移除觸發(fā)器。刪除表時,將除去一切與表相關聯(lián)的觸發(fā)器。發(fā)器。DROP TRIGGER語句的語法格式為:DROP TRIGGER 觸發(fā)器稱號 ,.n 觸發(fā)器稱號為數(shù)據(jù)庫中現(xiàn)有的觸發(fā)器??梢灾付ㄒ粋€或多個觸發(fā)器稱號來刪除一個或多個觸發(fā)器?!纠?-8】刪除觸發(fā)器del_bj以及insert_xs。在查詢分析器中運轉如下命令:USE X

32、SCJGODROP TRIGGER del_bj , insert_xs運轉結果如圖8-15所示。圖8-15 刪除觸發(fā)器del_bj以及insert_xs本章小結本章小結本章學習了存儲過程與觸發(fā)器的本章學習了存儲過程與觸發(fā)器的相關知識,存儲過程中可以將多相關知識,存儲過程中可以將多條條SQL語句集中在一同完成復雜語句集中在一同完成復雜的功能,從而用戶可以在不具有的功能,從而用戶可以在不具有對數(shù)據(jù)對象訪問的權限下調用這對數(shù)據(jù)對象訪問的權限下調用這些存儲過程完成的特定的操作。些存儲過程完成的特定的操作。觸發(fā)器可以協(xié)助用戶完成數(shù)據(jù)的觸發(fā)器可以協(xié)助用戶完成數(shù)據(jù)的驗證功能,從而可以保證數(shù)據(jù)的驗證功能,從而可以保證數(shù)據(jù)的一致性、完好性。一致性、完好性。練習與上機練習與上機一選擇題一選擇題1下面關于存儲過程的描畫中哪些是正下面關于存儲過程的描畫中哪些是正確的確的 A自定義存儲過程與系統(tǒng)存儲過程稱自定義存儲過程與系統(tǒng)存儲過程稱號可以一樣號可以一樣B存儲過程最多可以支持存儲過程最多可以支持64層的嵌套層的嵌套C命名存儲過程中的標識符時,長度命名存儲過

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論