




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
數(shù)據(jù)庫(kù)基礎(chǔ)1任務(wù)十六、索引2任務(wù)十七、視圖項(xiàng)目四3任務(wù)十八、存儲(chǔ)過(guò)程4任務(wù)十九、觸發(fā)器知識(shí)儲(chǔ)備一、索引任務(wù)十六索引索引是根據(jù)表中一列或多列的值按照一定的順序建立的列值與記錄之間的對(duì)應(yīng)關(guān)系,以表列為基礎(chǔ)建立的數(shù)據(jù)庫(kù)對(duì)象。索引加快檢索數(shù)據(jù)行的速度,當(dāng)查閱圖書(shū)的某一章節(jié)內(nèi)容時(shí),為了方便查找,可以選擇目錄索引,快速找到頁(yè)碼。在“學(xué)籍管理”數(shù)據(jù)庫(kù)中,為加快查詢速度,給經(jīng)常使用的表創(chuàng)建索引,并設(shè)置相關(guān)屬性。如果列中有幾個(gè)不同的值,或者表中僅包含幾行值,則不推薦為其創(chuàng)建索引。因?yàn)?,索引在搜索?shù)據(jù)所花的時(shí)間比在表中逐行搜索話的時(shí)間更長(zhǎng)。任務(wù)十六、索引知識(shí)儲(chǔ)備二、索引的類型任務(wù)十六索引(1)唯一索引:不允許兩行具有相同的索引值。也就是說(shuō),對(duì)于表中的任何兩行記錄來(lái)說(shuō),索引鍵的值都是各不相同。若創(chuàng)建了唯一約束,將自動(dòng)創(chuàng)建唯一索引。(2)主鍵索引:為表定義一個(gè)主鍵將自動(dòng)創(chuàng)建主鍵索引,主鍵索引是唯一索引的特殊類型。主鍵索引要求主鍵中的每個(gè)值都是唯一的,并且不能為空。(3)聚集索引(ClusteredIndex):表中各行的物理順序與鍵值的邏輯順序(索引順序)相同,每個(gè)表只能有一個(gè)聚集索引。聚集索引經(jīng)常創(chuàng)建在表中經(jīng)常被搜索到的列或按順序訪問(wèn)的列上,在默認(rèn)情況下,主鍵約束自動(dòng)創(chuàng)建聚集索引。例如漢語(yǔ)字典默認(rèn)按拼音排序,拼音順序較后的字對(duì)應(yīng)的頁(yè)碼也較大。知識(shí)儲(chǔ)備任務(wù)十六索引(4)非聚集索引(NonclusteredIndex):表的物理順序與索引順序不相同的索引。數(shù)據(jù)存儲(chǔ)在一個(gè)位置,索引存儲(chǔ)在另一個(gè)位置,索引中包含指向數(shù)據(jù)存儲(chǔ)位置的指針。例如,漢語(yǔ)字典按筆畫(huà)排序的索引就是非聚集索引,一畫(huà)的字如“乙”對(duì)應(yīng)的頁(yè)碼卻比三畫(huà)的字如“口”對(duì)應(yīng)的頁(yè)碼大。聚集索引和非聚集索引是從索引數(shù)據(jù)存儲(chǔ)的角度來(lái)區(qū)分的;而唯一索引和非唯一索引是從索引值來(lái)區(qū)分的,所以唯一索引和非唯一索引既可以是聚集索引,也可以是非聚集索引,只要列中的數(shù)據(jù)是唯一的,就可以在一張表中創(chuàng)建一個(gè)唯一索引和多個(gè)非聚集索引。知識(shí)儲(chǔ)備三、創(chuàng)建索引任務(wù)十六索引使用TSQL語(yǔ)句創(chuàng)建索引的簡(jiǎn)單語(yǔ)法:CREATE[UNIQUE][CLUSTERED|NONCLUSTERED]INDEXindex_nameONtable_name(column_name…)[WITHFILLFACTOR=x]知識(shí)儲(chǔ)備任務(wù)十六索引其中UNIQUE表示唯一索引,CLUSTERED、NONCLUSTERED表示聚集索引還是非聚集索引,F(xiàn)ILLFACTOR表示填充因子,指定一個(gè)0到100之間的值,該值指示索引頁(yè)填滿的空間所占的百分比,都是可選的。FILLFACTOR的作用是當(dāng)系統(tǒng)新建或重建索引時(shí),在每一個(gè)索引頁(yè)上預(yù)先留出一部分空間,使得系統(tǒng)在新增索引信息時(shí)能夠保持索引內(nèi)容在索引頁(yè)上盡量連續(xù)。值為100時(shí)表示頁(yè)將填滿,所留出的存儲(chǔ)空間量最小,一般用于表數(shù)據(jù)不變的情況下。值越小則數(shù)據(jù)頁(yè)上的空閑空間越大,這樣可以減少在索引增長(zhǎng)過(guò)程中對(duì)數(shù)據(jù)頁(yè)進(jìn)行拆分的需要,但需要更多的存儲(chǔ)空間,一般用于表數(shù)據(jù)容易發(fā)生變化的情況下。使用createindex方法,可以指定索引類型、唯一性等,可以創(chuàng)建聚集索引,也可以創(chuàng)建非聚集索引,既可以在一個(gè)列上創(chuàng)建索引,也可以在兩個(gè)或兩個(gè)以上的列上創(chuàng)建索引。知識(shí)儲(chǔ)備四、修改索引任務(wù)十六索引1.索引重命名語(yǔ)法格式:sp_renameOldName,NewName其中:oldname是原索引名稱;newname是新索引名稱。sp_renameOldName,NewName[,object_type]必須在索引前面加上表名前綴2.重新生成索引ALTERINDEXindex_nameONtable_or_view_nameREBUILD3.禁用索引ALTERINDEXindex_nameONtable_or_view_nameDISABLE知識(shí)儲(chǔ)備任務(wù)十六索引4.刪除索引使用TSQL語(yǔ)句中的DROPINDEX命令可以刪除表中的索引,其語(yǔ)法格式如下:DROPINDEX表名.索引名在刪除索引時(shí),要注意不能使用DROPINDEX語(yǔ)句刪除由主鍵約束或唯一性約束創(chuàng)建的索引。要想刪除這些索引,必須先刪除這些約束。當(dāng)刪除表時(shí),該表全部索引也將被刪除。當(dāng)刪除一個(gè)聚集索引時(shí),該表的全部非聚集索引重新自動(dòng)創(chuàng)建。任務(wù)描述任務(wù)二創(chuàng)建學(xué)生班級(jí)管理數(shù)據(jù)表創(chuàng)建數(shù)據(jù)庫(kù)IndexDB,在數(shù)據(jù)庫(kù)中創(chuàng)建數(shù)據(jù)表“學(xué)生表”,學(xué)生表中包含學(xué)號(hào)、姓名、性別、身份證號(hào)碼、出生日期、手機(jī)、家庭地址和系部字段。項(xiàng)目需要用TSQL語(yǔ)言在“學(xué)生表”中的“姓名”列上創(chuàng)建索引idx_name,在“手機(jī)”列上創(chuàng)建非聚集索引idx_mobilephone。在SSMS中對(duì)“學(xué)生表”中“性別”列上創(chuàng)建聚集索引idx_sex。查看已經(jīng)創(chuàng)建的索引,修改索引idx_mobilephone,刪除idx_sex性別索引。實(shí)訓(xùn)操作任務(wù)十六索引(1)創(chuàng)建數(shù)據(jù)庫(kù)IndexDB,在數(shù)據(jù)庫(kù)中創(chuàng)建數(shù)據(jù)表“學(xué)生表”,學(xué)生表中包含學(xué)號(hào)、姓名、性別、身份證號(hào)碼、出生日期、手機(jī)、家庭地址和系部字段。在學(xué)生表中輸入學(xué)生記錄,如圖16-1所示。(2)在學(xué)生表的“姓名”列上創(chuàng)建索引,該索引名稱為“idx_name”。在查詢編輯器中輸入以下代碼:createindexidx_nameon學(xué)生表(姓名)單擊工具欄上的“執(zhí)行”按鈕,便可完成該索引的創(chuàng)建。執(zhí)行后,在SSMS中展開(kāi)表節(jié)點(diǎn)下的索引,可以看到索引的名稱,如圖16-2所示。實(shí)訓(xùn)操作任務(wù)十六索引實(shí)訓(xùn)操作任務(wù)十六索引實(shí)訓(xùn)操作任務(wù)十六索引(3)在學(xué)生表的“手機(jī)”列上創(chuàng)建一個(gè)唯一、非聚集索引,該索引名稱為“idx_mobilephone”。在查詢編輯器中輸入以下代碼:createuniquenonclusteredindexidx_mobilephoneon學(xué)生表(手機(jī))單擊工具欄上的“執(zhí)行”按鈕,便可完成該索引的創(chuàng)建。執(zhí)行后,在SSMS中展開(kāi)表節(jié)點(diǎn)下的索引,可以看到索引的名稱,如圖16-3所示。實(shí)訓(xùn)操作任務(wù)十六索引(4)在SSMS中創(chuàng)建聚集索引idx_sex,連接到包含默認(rèn)的數(shù)據(jù)庫(kù)的服務(wù)器實(shí)例。在“對(duì)象資源管理器”中,展開(kāi)“服務(wù)器”,展開(kāi)“數(shù)據(jù)庫(kù)”,找到數(shù)據(jù)庫(kù)IndexDB,展開(kāi)“學(xué)生表”節(jié)點(diǎn),右擊“索引”節(jié)點(diǎn),在彈出的菜單中選擇“新建索引”命令,如圖16-4所示。(5)在“新建索引”窗口的“常規(guī)”頁(yè)面,可以配置索引的名稱idx_sex、選擇索引的類型為“聚集”等,如圖16-5所示。(6)單擊“添加”按鈕,彈出“dbo.學(xué)生表”中選擇列的窗口,在窗口中選擇“性別”列的復(fù)選框,如圖16-6所示。實(shí)訓(xùn)操作任務(wù)十六索引實(shí)訓(xùn)操作任務(wù)十六索引實(shí)訓(xùn)操作任務(wù)十六索引實(shí)訓(xùn)操作任務(wù)十六索引實(shí)訓(xùn)操作任務(wù)十六索引(7)單擊“確定”按鈕后,返回“新建索引”窗口,然后再單擊“確定”按鈕。“索引”節(jié)點(diǎn)下便生成了一個(gè)名“idx_sex”的索引,說(shuō)明該索引創(chuàng)建成功,如圖16-7所示。(8)在SSMS中查看索引,在“對(duì)象資源管理器”窗口中,依次展開(kāi)“數(shù)據(jù)庫(kù)IndexDB”,表節(jié)點(diǎn)“學(xué)生表”,展開(kāi)“索引”節(jié)點(diǎn),右鍵單擊需要查看索引信息的索引名稱,例如idx_mobilephone,在彈出的快捷菜單中選擇“屬性”命令,如圖16-8所示。圖168查看索引idx_mobilephone的屬性(9)在打開(kāi)“索引屬性”對(duì)話框中,便可以看到當(dāng)前索引的詳細(xì)信息,如圖16-9所示。(10)也可以展開(kāi)“學(xué)生表”中的“統(tǒng)計(jì)信息”節(jié)點(diǎn),右擊所要查看統(tǒng)計(jì)信息的索引idx_mobilephone,從彈出菜單中選擇“屬性”命令,如圖16-10所示。實(shí)訓(xùn)操作任務(wù)十六索引實(shí)訓(xùn)操作任務(wù)十六索引實(shí)訓(xùn)操作任務(wù)十六索引實(shí)訓(xùn)操作任務(wù)十六索引實(shí)訓(xùn)操作任務(wù)十六索引(11)打開(kāi)“統(tǒng)計(jì)信息屬性”窗口,從“選項(xiàng)頁(yè)”中選擇“詳細(xì)信息”選項(xiàng),顯示當(dāng)前索引的統(tǒng)計(jì)信息,如圖16-11所示。(12)使用系統(tǒng)存儲(chǔ)過(guò)程sp_helpindex可以查看特定表上的索引信息,查看“學(xué)生表”的索引,在新建查詢窗口中,輸入以下代碼:EXECsp_helpindex學(xué)生表執(zhí)行上面語(yǔ)句后,可以看到返回結(jié)果如圖16-12所示。結(jié)果顯示了學(xué)生表上的所有索引的名稱、類型和建立索引的列。實(shí)訓(xùn)操作任務(wù)十六索引(13)修改索引名稱,語(yǔ)法格式為“sp_rename原索引名稱,新索引名稱”。修改索引idx_mobilephone名為idx_phone,在新建查詢窗口中,輸入以下代碼:EXECsp_rename學(xué)生表.idx_mobilephone,idx_phone如圖16-13所示。(14)重新生成索引idx_phone,在新建查詢窗口中,輸入以下代碼:ALTERINDEXidx_phoneON學(xué)生表REBUILD如圖16-14所示。實(shí)訓(xùn)操作任務(wù)十六索引(15)刪除索引,使用DROPINDEX命令可以刪除表中的索引,在新建查詢窗口中,輸入以下代碼:DROPINDEX學(xué)生表.idx_sex如圖16-15所示。(16)刪除索引,可以在SSMS中展開(kāi)索引節(jié)點(diǎn),類似于圖168的操作,單擊需要?jiǎng)h除的索引名稱idx_phone,在彈出的快捷菜單中選擇“刪除”命令,在彈出的刪除對(duì)象窗口,單擊確定,如圖16-16所示。實(shí)訓(xùn)操作任務(wù)十六索引實(shí)訓(xùn)操作任務(wù)十六索引實(shí)訓(xùn)操作任務(wù)十六索引實(shí)訓(xùn)操作任務(wù)十六索引實(shí)訓(xùn)操作任務(wù)十六索引實(shí)訓(xùn)操作任務(wù)十六索引1任務(wù)十六、索引2任務(wù)十七、視圖項(xiàng)目四3任務(wù)十八、存儲(chǔ)過(guò)程4任務(wù)十九、觸發(fā)器知識(shí)儲(chǔ)備一、視圖任務(wù)十七
視圖視圖是一種數(shù)據(jù)庫(kù)對(duì)象,是一個(gè)虛擬的數(shù)據(jù)表,該數(shù)據(jù)表中的數(shù)據(jù)記錄是從一個(gè)或多個(gè)表中進(jìn)行查詢篩選后的結(jié)果。當(dāng)對(duì)視圖中的數(shù)據(jù)進(jìn)行修改時(shí),相應(yīng)的基表數(shù)據(jù)也被修改;若基表的數(shù)據(jù)被修改,視圖中的對(duì)應(yīng)數(shù)據(jù)也會(huì)自動(dòng)修改。視圖可以是一個(gè)數(shù)據(jù)表的一部分,也可以由多個(gè)基表的聯(lián)合;視圖也可以由一個(gè)或多個(gè)其他視圖產(chǎn)生。視圖上的操作和基表類似,但是DBMS對(duì)視圖的更新操作等往往存在一定的限制。視圖簡(jiǎn)化了操作,也提供了數(shù)據(jù)庫(kù)的安全機(jī)制,可以只允許用戶通過(guò)視圖訪問(wèn)數(shù)據(jù),而不允許用戶直接訪問(wèn)基礎(chǔ)表。簡(jiǎn)單地說(shuō),學(xué)生信息的數(shù)據(jù)庫(kù)中有多個(gè)表,學(xué)校各個(gè)部分所關(guān)注的學(xué)生數(shù)據(jù)內(nèi)容是不同的,可以根據(jù)不同的要求,創(chuàng)建用戶所需要的視圖。在“學(xué)籍管理”數(shù)據(jù)庫(kù)中,為簡(jiǎn)化數(shù)據(jù)操作,將經(jīng)常使用的查詢定義為視圖,并對(duì)視圖進(jìn)行相應(yīng)的編輯。任務(wù)十七、視圖知識(shí)儲(chǔ)備二、視圖操作任務(wù)十七
視圖視圖的操作主要包括視圖的創(chuàng)建、修改、刪除和重命名等,其操作可以通過(guò)SQLServer企業(yè)管理器和TransactSQL語(yǔ)句來(lái)實(shí)現(xiàn)。以刪除視圖為例:①在SSMS中刪除視圖的方法,與修改視圖類似,右擊需要?jiǎng)h除視圖名,在彈出的快捷菜單中選擇“刪除”命令,則在打開(kāi)的窗口單擊“確定”按鈕,即可完成刪除操作。②使用TSQL語(yǔ)句刪除視圖,可以使用DROPVIEW語(yǔ)句來(lái)刪除視圖,其語(yǔ)法格式為:DROPVIEW視圖名知識(shí)儲(chǔ)備任務(wù)十七
視圖【例1】刪除Score_View視圖。DROPVIEWScore_View刪除一個(gè)視圖后,雖然它所基于的表和數(shù)據(jù)不會(huì)受到任何影響,但是依賴于該視圖的其他對(duì)象或查詢將會(huì)在執(zhí)行時(shí)出現(xiàn)錯(cuò)誤。知識(shí)儲(chǔ)備三、視圖的應(yīng)用任務(wù)十七
視圖通過(guò)視圖可以完成某些和基礎(chǔ)表相同的一些數(shù)據(jù)操作,如數(shù)據(jù)的查詢、添加、修改和刪除。1.通過(guò)視圖插入表數(shù)據(jù)使用視圖插入數(shù)據(jù)與在基表中插入數(shù)據(jù)一樣,都可以通過(guò)INSERT語(yǔ)句來(lái)實(shí)現(xiàn)。插入數(shù)據(jù)的操作是針對(duì)視圖中的列的插入操作,而不是針對(duì)基表中的所有的列的插入操作。使用INSERT語(yǔ)句進(jìn)行插入操作的視圖必須能夠在基表中插入數(shù)據(jù),否則插入操作會(huì)失敗。對(duì)于由多個(gè)基表連接而成的視圖來(lái)說(shuō),一個(gè)插入操作只能作用于一個(gè)基表上。知識(shí)儲(chǔ)備三、視圖的應(yīng)用任務(wù)十七
視圖2.通過(guò)視圖修改表數(shù)據(jù)語(yǔ)法格式:UPDATE視圖名SET列1=列值1列2=列值2……列n=列值nWHERE邏輯表達(dá)式知識(shí)儲(chǔ)備任務(wù)十七
視圖若通過(guò)視圖修改數(shù)據(jù),視圖必須定義在一個(gè)表上,并且不包括統(tǒng)計(jì)函數(shù),SELECT語(yǔ)句中不包括GROUPBY子句。在視圖中更新數(shù)據(jù)也與在基表中更新數(shù)據(jù)一樣,但是當(dāng)視圖基于多個(gè)基表中的數(shù)據(jù)時(shí),與插入操作一樣,每次更新操作只能更新一個(gè)基表中的數(shù)據(jù)。3.通過(guò)視圖刪除表數(shù)據(jù)通過(guò)視圖刪除數(shù)據(jù)與通過(guò)基表刪除數(shù)據(jù)的方式一樣,在視圖中刪除的數(shù)據(jù)同時(shí)在基表中也被刪除。當(dāng)一個(gè)視圖連接了兩個(gè)以上的基表時(shí),對(duì)數(shù)據(jù)的刪除操作則是不允許的。任務(wù)描述任務(wù)二創(chuàng)建學(xué)生班級(jí)管理數(shù)據(jù)表附加上已有的數(shù)據(jù)庫(kù)SSTS,在數(shù)據(jù)庫(kù)中打開(kāi)數(shù)據(jù)表“學(xué)生表”“課程表”和“選課表”。項(xiàng)目需要在SSMS中創(chuàng)建視圖Score_View,利用TSQL語(yǔ)言創(chuàng)建視圖Score_View_2。查看已經(jīng)創(chuàng)建的視圖,修改視圖Score_View,刪除視圖Score_View。通過(guò)視圖查詢表數(shù)據(jù),通過(guò)視圖添加表數(shù)據(jù),通過(guò)視圖修改數(shù)據(jù),通過(guò)視圖刪除表數(shù)據(jù)。實(shí)訓(xùn)操作任務(wù)十七
視圖(1)在SSMS中創(chuàng)建視圖,在創(chuàng)建視圖前,先附加上前面項(xiàng)目中數(shù)據(jù)庫(kù)SSTS,為后續(xù)的實(shí)訓(xùn)作好準(zhǔn)備。SSTS數(shù)據(jù)庫(kù)有三張表,分別是“學(xué)生表”“課程表”“選課表”,如圖17-1所示。(2)在數(shù)據(jù)庫(kù)SSTS中創(chuàng)建一個(gè)視圖Score_View,基于學(xué)生表、課程表和選課表,要求查詢“數(shù)據(jù)編程與操作”課程的考試成績(jī)大于等于60分的學(xué)生的學(xué)號(hào)、姓名、所屬院系、課程名稱和成績(jī)。在SSMS中,展開(kāi)數(shù)據(jù)庫(kù)SSTS,右擊“視圖”節(jié)點(diǎn),在彈出的快捷菜單中選擇“新建視圖”,如圖17-2所示實(shí)訓(xùn)操作任務(wù)十七
視圖(3)在“添加表”窗口中,選擇學(xué)生表、課程表和選課表3個(gè)表,單擊“添加”按鈕,如圖17-3所示。(4)單擊“關(guān)閉”按鈕,關(guān)閉添加表窗口,在視圖窗口中,顯示了3張表的全部列,在此可以選擇視圖查詢的列,按照查詢要求選擇“學(xué)號(hào)、姓名、系名、課程名和成績(jī)”列。在SQL窗格顯示了兩表的連接語(yǔ)句,表示了這個(gè)視圖包含的數(shù)據(jù)內(nèi)容,如圖17-4所示。(5)在條件窗格中設(shè)置過(guò)濾條件,在“成績(jī)”行的“篩選器”單元格中輸入“>=60”,在“課程名”單元格中輸入“數(shù)據(jù)編程與操作”,單擊執(zhí)行SQL按鈕,在“顯示結(jié)果窗格”中顯示查詢出的結(jié)果集,如圖17-5所示。實(shí)訓(xùn)操作任務(wù)十七
視圖實(shí)訓(xùn)操作任務(wù)十七
視圖實(shí)訓(xùn)操作任務(wù)十七
視圖實(shí)訓(xùn)操作任務(wù)十七
視圖實(shí)訓(xùn)操作任務(wù)十七
視圖實(shí)訓(xùn)操作任務(wù)十七
視圖(6)單擊“保存”按鈕,在彈出的“選擇名稱”窗口中輸入視圖名稱Score_View,單擊“確定”按鈕即可。就可以看到視圖節(jié)點(diǎn)下增加了一個(gè)視圖Score_View,如圖17-6所示。(7)使用TSQL語(yǔ)句創(chuàng)建視圖。簡(jiǎn)單語(yǔ)法結(jié)構(gòu):CREATEVIEW視圖名[是否加密,可選]ASSelect語(yǔ)句下面使用CREATEVIEW語(yǔ)句,創(chuàng)建上述例題中的視圖。創(chuàng)建這個(gè)視圖可以使用如下語(yǔ)句:在新建查詢窗口,輸入以下語(yǔ)句:實(shí)訓(xùn)操作任務(wù)十七
視圖CREATEVIEWScore_View_2ASSELECT學(xué)生表.學(xué)號(hào),學(xué)生表.姓名,學(xué)生表.系名,選課表.成績(jī),課程表.課程名FROM課程表INNERJOIN選課表ON課程表.課程號(hào)=選課表.課程號(hào)INNERJOIN學(xué)生表ON選課表.學(xué)號(hào)=學(xué)生表.學(xué)號(hào)WHERE(選課表.成績(jī)>=60)AND(課程表.課程名=數(shù)控編程與操作)執(zhí)行上面語(yǔ)句后,視圖節(jié)點(diǎn)下增加了一個(gè)視圖Score_View_2,結(jié)果如圖17-7所示。實(shí)訓(xùn)操作任務(wù)十七
視圖(8)使用SELECT語(yǔ)句查詢Score_View_2視圖,在新建查詢窗口,輸入以下語(yǔ)句:select*fromScore_View_2結(jié)果如圖17-8所示。(9)查看視圖,使用select語(yǔ)句查看視圖的內(nèi)容。例如,上例“使用SELECT語(yǔ)句查詢Score_View_2視圖”所示。在SSMS中查看視圖,與查看表類似,展開(kāi)視圖,單擊視圖名,例如Score_View,右擊鼠標(biāo),在彈出的快捷菜單中,選擇“打開(kāi)視圖”,結(jié)果如圖17-9所示。實(shí)訓(xùn)操作任務(wù)十七
視圖(10)用系統(tǒng)存儲(chǔ)過(guò)程sp_help查看視圖,語(yǔ)法格式:sp_help視圖名在新建查詢窗口中,輸入sp_helpScore_View,可以使用系統(tǒng)存儲(chǔ)過(guò)程SP_HELP來(lái)顯示視圖的名稱、擁有者、類型和創(chuàng)建時(shí)間等信息。查看視圖Score_View的基本信息,可以使用如下語(yǔ)句:SP_HELPScore_View執(zhí)行上述語(yǔ)句后,顯示結(jié)果如圖17-10所示。實(shí)訓(xùn)操作任務(wù)十七
視圖(11)使用系統(tǒng)存儲(chǔ)過(guò)程SP_HELPTEXT來(lái)顯示視圖定義的語(yǔ)句,查看視圖Score_View的文本信息,可以使用如下語(yǔ)句:SP_HELPTEXTScore_View執(zhí)行上面語(yǔ)句后,顯示Score_View視圖的文本信息如圖17-11所示。(12)修改視圖,在SSMS中修改視圖,視圖→右擊Score_View,在彈出的快捷菜單中選擇“修改”,保存修改后的視圖,如圖17-12所示。(13)在條件窗格中,查詢課程名為“電機(jī)學(xué)”,成績(jī)小于60分不及格的學(xué)生的學(xué)號(hào)、姓名、系名、課程名和成績(jī)信息,如圖17-13所示。實(shí)訓(xùn)操作任務(wù)十七
視圖實(shí)訓(xùn)操作任務(wù)十七
視圖實(shí)訓(xùn)操作任務(wù)十七
視圖實(shí)訓(xùn)操作任務(wù)十七
視圖實(shí)訓(xùn)操作任務(wù)十七
視圖實(shí)訓(xùn)操作任務(wù)十七
視圖實(shí)訓(xùn)操作任務(wù)十七
視圖實(shí)訓(xùn)操作任務(wù)十七
視圖實(shí)訓(xùn)操作任務(wù)十七
視圖(14)使用TransactSQL語(yǔ)句修改視圖,可以使用ALTERVIEW語(yǔ)句來(lái)修改視圖,其語(yǔ)法格式如下:ALTERVIEW視圖名稱[(字段1,字段2…)]ASSELECT查詢語(yǔ)句[WITHCHECKOPTION]語(yǔ)法與CREATEVIEW語(yǔ)法類似。使用TSQL修改視圖Score_View,查詢課程名為“電機(jī)學(xué)”,成績(jī)小于60分不及格的學(xué)生的學(xué)號(hào)、姓名、系名、課程名和成績(jī)信息,并加密該視圖。實(shí)訓(xùn)操作任務(wù)十七
視圖在新建查詢窗口中,輸入以下代碼,alterviewScore_Viewwithencryptionasselect學(xué)生表.學(xué)號(hào),學(xué)生表.姓名,學(xué)生表.系名,選課表.成績(jī),課程表.課程名from課程表INNERJOIN選課表on課程表.課程號(hào)=選課表.課程號(hào)INNERJOIN學(xué)生表on選課表.學(xué)號(hào)=學(xué)生表.學(xué)號(hào)where(選課表.成績(jī)<60)and(課程表.課程名=電機(jī)學(xué))。如圖17-14所示。實(shí)訓(xùn)操作任務(wù)十七
視圖(15)查看的Score_View視圖已被加密,若用sp_helptext查看視圖文本信息,則返回該視圖被加密的信息。當(dāng)查看被加密的視圖Score_View,會(huì)返回如下信息。對(duì)象‘Score_View’的文本已加密,如圖17-15所示。(16)通過(guò)視圖查詢表數(shù)據(jù),在建立視圖后,可以用類似表的查詢方式查詢視圖數(shù)據(jù)。查詢視圖Score_View_2中的成績(jī)最高的學(xué)生姓名和成績(jī)。實(shí)訓(xùn)操作任務(wù)十七
視圖select姓名,成績(jī)fromScore_View_2where成績(jī)in(selectmax(成績(jī))fromScore_View_2)如圖17-16所示。實(shí)訓(xùn)操作任務(wù)十七
視圖實(shí)訓(xùn)操作任務(wù)十七
視圖實(shí)訓(xùn)操作任務(wù)十七
視圖實(shí)訓(xùn)操作任務(wù)十七
視圖(17)通過(guò)視圖添加表數(shù)據(jù),語(yǔ)法格式:INSERTINTO視圖名VALUES(列值1,列值2,列值3,…,列值n)在視圖student_view中插入一行數(shù)據(jù),增加一個(gè)名為“馮剛”的學(xué)生記錄。插入前視圖student_view的內(nèi)容如圖17-17所示。在新建查詢窗口中輸入以下代碼:insertintostudent_viewvalues(201106035304100532,馮剛,男,機(jī)電工程系,1992-3-18)goselect*fromstudent_view插入后視圖student_view的內(nèi)容如圖17-18所示。實(shí)訓(xùn)操作任務(wù)十七
視圖(19)通過(guò)視圖修改表數(shù)據(jù),語(yǔ)法格式:UPDATE視圖名SET列1=列值1列2=列值2……列n=列值nWHERE邏輯表達(dá)式實(shí)訓(xùn)操作任務(wù)十七
視圖在新建查詢窗口中輸入以下代碼:updatestudent_viewset系名=電氣工程系where姓名=馮剛goselect*fromstudent_viewwhere姓名=馮剛修改后視圖student_view的內(nèi)容如圖17-19所示。實(shí)訓(xùn)操作任務(wù)十七
視圖實(shí)訓(xùn)操作任務(wù)十七
視圖實(shí)訓(xùn)操作任務(wù)十七
視圖實(shí)訓(xùn)操作任務(wù)十七
視圖(20)通過(guò)視圖刪除表數(shù)據(jù),盡管視圖不一定包含基礎(chǔ)表的所有列,但可以通過(guò)視圖刪除基礎(chǔ)表的數(shù)據(jù)行。語(yǔ)法格式:DELETEFROM視圖名WHERE邏輯表達(dá)式在新建查詢窗口中輸入以下代碼:deletestudent_viewwhere姓名=馮剛goselect*fromstudent_view刪除后視圖student_view的內(nèi)容如圖17-20所示。實(shí)訓(xùn)操作任務(wù)十七
視圖1任務(wù)十六、索引2任務(wù)十七、視圖項(xiàng)目四3任務(wù)十八、存儲(chǔ)過(guò)程4任務(wù)十九、觸發(fā)器知識(shí)儲(chǔ)備一、存儲(chǔ)過(guò)程任務(wù)十八
存儲(chǔ)過(guò)程存儲(chǔ)過(guò)程是使用TSQL語(yǔ)言編寫(xiě)的為完成特定的功能的程序,經(jīng)編譯后存儲(chǔ)在數(shù)據(jù)庫(kù)中。存儲(chǔ)過(guò)程也是數(shù)據(jù)庫(kù)對(duì)象,通過(guò)使用存儲(chǔ)過(guò)程提高數(shù)據(jù)庫(kù)的安全性和減少網(wǎng)絡(luò)通信的數(shù)據(jù)量。任務(wù)十八、存儲(chǔ)過(guò)程知識(shí)儲(chǔ)備二、存儲(chǔ)過(guò)程優(yōu)點(diǎn)任務(wù)十八
存儲(chǔ)過(guò)程(1)允許模塊化程序設(shè)計(jì)。(2)執(zhí)行效率高。(3)減少網(wǎng)絡(luò)通信的數(shù)據(jù)量。(4)提高數(shù)據(jù)庫(kù)的安全性。知識(shí)儲(chǔ)備三、存儲(chǔ)過(guò)程分類任務(wù)十八
存儲(chǔ)過(guò)程(1)系統(tǒng)存儲(chǔ)過(guò)程:一般以“sp_”開(kāi)頭,物理意義上系統(tǒng)存儲(chǔ)過(guò)程在Resource數(shù)據(jù)庫(kù)中,邏輯意義上存儲(chǔ)過(guò)程出現(xiàn)在系統(tǒng)數(shù)據(jù)庫(kù)和用戶定義數(shù)據(jù)庫(kù)的sys架構(gòu)中。(2)擴(kuò)展存儲(chǔ)過(guò)程:一般以“xp_”開(kāi)頭,允許用其他語(yǔ)言創(chuàng)建自己的外部存儲(chǔ)過(guò)程,以DLL形式存在。(3)用戶自定義存儲(chǔ)過(guò)程,可以輸入?yún)?shù)、向客戶端返回結(jié)果、消息等。知識(shí)儲(chǔ)備四、創(chuàng)建存儲(chǔ)過(guò)程任務(wù)十八
存儲(chǔ)過(guò)程存儲(chǔ)過(guò)程的創(chuàng)建的簡(jiǎn)單語(yǔ)法如下:createprocedure過(guò)程名[@parameterdata_type]/*定義參數(shù)的類型*/[VARYING][=default][OUTPUT]/*定義參數(shù)的屬性等*/AS執(zhí)行的SQL語(yǔ)句創(chuàng)建存儲(chǔ)過(guò)程知識(shí)儲(chǔ)備任務(wù)十八
存儲(chǔ)過(guò)程1.創(chuàng)建的簡(jiǎn)單存儲(chǔ)過(guò)程(1)在SQLServer管理平臺(tái)中,選擇“資源資源管理器”→“服務(wù)器”→“數(shù)據(jù)庫(kù)(例如ProDB)”→“可編程性”→“存儲(chǔ)過(guò)程”→“新建存儲(chǔ)過(guò)程”選項(xiàng),如圖18-1所示。(2)在文本框中可以輸入創(chuàng)建存儲(chǔ)過(guò)程的TSQL語(yǔ)句,單擊“執(zhí)行”按鈕,即可創(chuàng)建該存儲(chǔ)過(guò)程。(3)存儲(chǔ)過(guò)程的執(zhí)行:exec過(guò)程名。知識(shí)儲(chǔ)備任務(wù)十八
存儲(chǔ)過(guò)程知識(shí)儲(chǔ)備五、查看、修改和刪除存儲(chǔ)過(guò)程任務(wù)十八
存儲(chǔ)過(guò)程1.查看存儲(chǔ)過(guò)程(1)在SSMS中查看存儲(chǔ)過(guò)程,展開(kāi)指定的服務(wù)器和數(shù)據(jù)庫(kù),選擇并依次展開(kāi)“可編程性→存儲(chǔ)過(guò)程”,然后右擊要查看的存儲(chǔ)過(guò)程名稱,從彈出的快捷菜單中,選擇“編寫(xiě)存儲(chǔ)過(guò)程腳本為→CREATE到→新查詢編輯器窗口”,則可以看到存儲(chǔ)過(guò)程的源代碼。如圖18-2所示。知識(shí)儲(chǔ)備任務(wù)十八
存儲(chǔ)過(guò)程(2)使用系統(tǒng)存儲(chǔ)過(guò)程來(lái)查看用戶創(chuàng)建的存儲(chǔ)過(guò)程??晒┦褂玫南到y(tǒng)存儲(chǔ)過(guò)程及其語(yǔ)法形式如下:sp_help,用于顯示存儲(chǔ)過(guò)程的參數(shù)及其數(shù)據(jù)類型,其語(yǔ)法為:sp_helpname,參數(shù)name為要查看的存儲(chǔ)過(guò)程的名稱。sp_helptext,用于顯示存儲(chǔ)過(guò)程的源代碼,其語(yǔ)法為:sp_helptextname,參數(shù)name為要查看的存儲(chǔ)過(guò)程的名稱。sp_stored_procedures,用于返回當(dāng)前數(shù)據(jù)庫(kù)中的存儲(chǔ)過(guò)程列表,其語(yǔ)法為:sp_stored_proceduresname,其中name用于指定返回目錄信息的過(guò)程名。知識(shí)儲(chǔ)備任務(wù)十八
存儲(chǔ)過(guò)程2.修改存儲(chǔ)過(guò)程使用ALTERPROCEDURE語(yǔ)句語(yǔ)法與CREATEPROCEDURE語(yǔ)句類似。ALTERPROCEDUREprocedure_name[WITHENCRYPTION]ASsql語(yǔ)句知識(shí)儲(chǔ)備任務(wù)十八
存儲(chǔ)過(guò)程3.重命名和刪除存儲(chǔ)過(guò)程(1)重命名存儲(chǔ)過(guò)程:修改存儲(chǔ)過(guò)程的名稱可以使用系統(tǒng)存儲(chǔ)過(guò)程sp_rename,其語(yǔ)法形式如下:sp_rename原存儲(chǔ)過(guò)程名稱,新存儲(chǔ)過(guò)程名稱通過(guò)SQLServer管理平臺(tái)也可以修改存儲(chǔ)過(guò)程的名稱。在SQLServer管理平臺(tái)中,右擊要操作的存儲(chǔ)過(guò)程名稱,從彈出的快捷菜單中選擇“重命名”選項(xiàng),當(dāng)存儲(chǔ)過(guò)程名稱變成可輸入狀態(tài)時(shí),就可以直接修改該存儲(chǔ)過(guò)程的名稱。知識(shí)儲(chǔ)備任務(wù)十八
存儲(chǔ)過(guò)程(2)刪除存儲(chǔ)過(guò)程:刪除存儲(chǔ)過(guò)程可以使用DROP命令,DROP命令可以將一個(gè)或者多個(gè)存儲(chǔ)過(guò)程或者存儲(chǔ)過(guò)程組從當(dāng)前數(shù)據(jù)庫(kù)中刪除,其語(yǔ)法形式如下:dropproceduresp_namesp_name為存儲(chǔ)過(guò)程名。利用SQLServer管理平臺(tái)也可以很方便地刪除存儲(chǔ)過(guò)程。在SQLServer管理平臺(tái)中,右擊要?jiǎng)h除的存儲(chǔ)過(guò)程,從彈出的快捷菜單中選擇“刪除”選項(xiàng),則會(huì)彈出除去對(duì)象對(duì)話框,在該對(duì)話框中,單擊“確定”按鈕,即可完成刪除操作。單擊“顯示相關(guān)性”按鈕,則可以在刪除前查看與該存儲(chǔ)過(guò)程有依賴關(guān)系的其他數(shù)據(jù)庫(kù)對(duì)象名稱知識(shí)儲(chǔ)備任務(wù)十八
存儲(chǔ)過(guò)程任務(wù)描述任務(wù)十八
存儲(chǔ)過(guò)程項(xiàng)目需要利用T-SQL語(yǔ)言創(chuàng)建存儲(chǔ)過(guò)程class_pro,創(chuàng)建的帶參數(shù)的存儲(chǔ)過(guò)程class_info,創(chuàng)建的帶通配符參數(shù)的存儲(chǔ)過(guò)程totalcredit。執(zhí)行已經(jīng)創(chuàng)建的存儲(chǔ)過(guò)程,查看已經(jīng)創(chuàng)建的存儲(chǔ)過(guò)程,修改存儲(chǔ)過(guò)程和刪除存儲(chǔ)過(guò)程。實(shí)訓(xùn)操作任務(wù)十八
存儲(chǔ)過(guò)程(1)利用TSQL語(yǔ)言創(chuàng)建存儲(chǔ)過(guò)程class_pro,在創(chuàng)建存儲(chǔ)過(guò)程前,先創(chuàng)建數(shù)據(jù)庫(kù)ProDB,在數(shù)據(jù)庫(kù)中創(chuàng)建表class,為后續(xù)的實(shí)訓(xùn)作好準(zhǔn)備。表class中班級(jí)號(hào)id,班級(jí)名稱classname,總?cè)藬?shù)total。創(chuàng)建一個(gè)帶有SELECT語(yǔ)句的簡(jiǎn)單存儲(chǔ)過(guò)程,該存儲(chǔ)過(guò)程返回所有班級(jí)編號(hào)ID,班級(jí)名稱,學(xué)生總數(shù)total等,該存儲(chǔ)過(guò)程不使用任何參數(shù)。程序清單如下:createprocedureclass_proasselect*fromclass如圖18-3所示。實(shí)訓(xùn)操作任務(wù)十八
存儲(chǔ)過(guò)程實(shí)訓(xùn)操作任務(wù)十八
存儲(chǔ)過(guò)程(2)在新建查詢窗口中輸入:execclass_pro,執(zhí)行結(jié)果如圖18-4所示,顯示表中所有信息,執(zhí)行的結(jié)果與SQL語(yǔ)句完全一致。(3)創(chuàng)建的帶參數(shù)的存儲(chǔ)過(guò)程,查詢指定班級(jí)的學(xué)生數(shù)。程序清單如下:createprocedureclass_info@classidintasselectid,classname,totalfromclasswhereid=@classid實(shí)訓(xùn)操作任務(wù)十八
存儲(chǔ)過(guò)程實(shí)訓(xùn)操作任務(wù)十八
存儲(chǔ)過(guò)程實(shí)訓(xùn)操作任務(wù)十八
存儲(chǔ)過(guò)程(4)在新建查詢窗口中輸入:execclass_info@classid=2009092014,執(zhí)行結(jié)果如圖18-6所示。顯示班級(jí)號(hào)為2009092014的班級(jí)信息。(5)創(chuàng)建的帶通配符參數(shù)的存儲(chǔ)過(guò)程,先在數(shù)據(jù)庫(kù)ProDB創(chuàng)建以下三張表,學(xué)生表S(學(xué)號(hào),姓名,系別),課程表C(課程號(hào),課程名,學(xué)分),選課表SC(學(xué)號(hào),課程號(hào),成績(jī))。創(chuàng)建的帶通配符參數(shù)的存儲(chǔ)過(guò)程,用于計(jì)算指定學(xué)生的總學(xué)分,存儲(chǔ)過(guò)程中使用了一個(gè)輸入?yún)?shù)和一個(gè)輸出參數(shù)。實(shí)訓(xùn)操作任務(wù)十八
存儲(chǔ)過(guò)程程序清單如下:createproceduretotalcredit@namevarchar(20),@totalintoutputasselect@total=sum(學(xué)分)fromS,SC,Cwhere姓名=@nameandS.學(xué)號(hào)=SC.學(xué)號(hào)andC.課程號(hào)=SC.課程號(hào)groupbyS.學(xué)號(hào)。如圖18-7所示。實(shí)訓(xùn)操作任務(wù)十八
存儲(chǔ)過(guò)程(6)在新建查詢窗口中輸入:declare@totalintexectotalcredit張立,@totaloutputselect張立,@total執(zhí)行結(jié)果如圖18-8所示,顯示學(xué)生名為“張立”的總學(xué)分。知識(shí)儲(chǔ)備任務(wù)十八
存儲(chǔ)過(guò)程知識(shí)儲(chǔ)備任務(wù)十八
存儲(chǔ)過(guò)程知識(shí)儲(chǔ)備任務(wù)十八
存儲(chǔ)過(guò)程1任務(wù)十六、索引2任務(wù)十七、視圖項(xiàng)目四3任務(wù)十八、存儲(chǔ)過(guò)程4任務(wù)十九、觸發(fā)器知識(shí)儲(chǔ)備一、觸發(fā)器任務(wù)十九
觸發(fā)器觸發(fā)器是一種特殊的存儲(chǔ)過(guò)程,可以分為DML觸發(fā)器和DDL觸發(fā)器兩大類。DML觸發(fā)器在數(shù)據(jù)庫(kù)中發(fā)生數(shù)據(jù)操作語(yǔ)言DML事件時(shí)將啟用,DDL觸發(fā)器在服務(wù)器或數(shù)據(jù)庫(kù)中發(fā)生數(shù)據(jù)定義語(yǔ)言DDL事件時(shí)將調(diào)用這些觸發(fā)器。DML事件包括在指定表或視圖中修改數(shù)據(jù)的INSERT語(yǔ)句、UPDATE語(yǔ)句或DELETE語(yǔ)句。在表中插入記錄﹑更新記錄或者刪除記錄時(shí),DML觸發(fā)器被自動(dòng)激活。而DDL觸發(fā)器是為了響應(yīng)各種數(shù)據(jù)定義語(yǔ)言DDL事件。DDL事件主要與以關(guān)鍵字CREATE、ALTER和DROP開(kāi)始的語(yǔ)句,執(zhí)行DDL式操作的系統(tǒng)存儲(chǔ)過(guò)程也可以激發(fā)DDL觸發(fā)器。觸發(fā)器可以用來(lái)實(shí)現(xiàn)對(duì)表實(shí)施復(fù)雜的完整性約束。任務(wù)十九、觸發(fā)器知識(shí)儲(chǔ)備二、DML觸發(fā)器的優(yōu)點(diǎn)任務(wù)十九
觸發(fā)器(1)DML觸發(fā)器可通過(guò)數(shù)據(jù)庫(kù)中的相關(guān)表實(shí)現(xiàn)級(jí)聯(lián)更改。(2)DML觸發(fā)器可以防止惡意或錯(cuò)誤的INSERT、UPDATE以及DELETE操作。與CHECK約束不同,DML觸發(fā)器可以引用其他表中的列。知識(shí)儲(chǔ)備三、DML觸發(fā)器創(chuàng)建任務(wù)十九
觸發(fā)器創(chuàng)建觸發(fā)器時(shí)要指定觸發(fā)器名稱、定義觸發(fā)器的表名;觸發(fā)器將何時(shí)激發(fā);激活觸發(fā)器的數(shù)據(jù)修改語(yǔ)句,有效選項(xiàng)為INSERT、UPDATE或DELETE,多個(gè)數(shù)據(jù)修改語(yǔ)句可激活同一個(gè)觸發(fā)器;執(zhí)行觸發(fā)操作的編程語(yǔ)句。DML觸發(fā)器使用deleted和inserted邏輯表。它們?cè)诮Y(jié)構(gòu)上和觸發(fā)器所在的表的結(jié)構(gòu)相同,SQLServer會(huì)自動(dòng)創(chuàng)建和管理這些表。Deleted表用于存儲(chǔ)delete,update語(yǔ)句所影響的行的副本。Inserted表用于存儲(chǔ)Insert或update語(yǔ)句所影響的行的副本。觸發(fā)器可以用TSQL在“新建查詢”里創(chuàng)建,也可以在SSMS中先確定當(dāng)前操作的數(shù)據(jù)庫(kù),再展開(kāi)表節(jié)點(diǎn),在“觸發(fā)器”節(jié)點(diǎn)點(diǎn)擊鼠標(biāo)右鍵,再選擇“新建觸發(fā)器”來(lái)創(chuàng)建。知識(shí)儲(chǔ)備任務(wù)十九
觸發(fā)器(1)使用SQLServer管理平臺(tái)創(chuàng)建觸發(fā)器的過(guò)程如下:在SQLServer管理平臺(tái)中,展開(kāi)指定的服務(wù)器和數(shù)據(jù)庫(kù)項(xiàng),然后展開(kāi)表,選擇并展開(kāi)要在其上創(chuàng)建觸發(fā)器的表,如圖19-1所示。右擊觸發(fā)器選項(xiàng),從彈出的快捷菜單中選擇“新建觸發(fā)器”選項(xiàng),則會(huì)出現(xiàn)觸發(fā)器創(chuàng)建窗口,如圖19-2所示。最后單擊“執(zhí)行”按鈕,即可成功創(chuàng)建觸發(fā)器。(2)使用CREATETRIGGER命令創(chuàng)建DML觸發(fā)器的簡(jiǎn)單語(yǔ)法形式如下:CREATETRIGGER觸發(fā)器名稱ON表FORINSERT、UPDATE或DELETEAST-SQL語(yǔ)句知識(shí)儲(chǔ)備任務(wù)十九
觸發(fā)器知識(shí)儲(chǔ)備任務(wù)十九
觸發(fā)器知識(shí)儲(chǔ)備任務(wù)十九
觸發(fā)器①insert觸發(fā)器。insert觸發(fā)器用于在表中增加數(shù)據(jù)時(shí)使用,該觸發(fā)器會(huì)在完成數(shù)據(jù)變動(dòng)的基礎(chǔ)上做額外的動(dòng)作,完成業(yè)務(wù)操作。②update觸發(fā)器,當(dāng)在一個(gè)有update觸發(fā)器的表中修改記錄時(shí),表中原來(lái)的記錄被移動(dòng)到刪除表中,修改過(guò)的記錄插入到了插入表中,觸發(fā)器可以參考刪除表和插入表以及被修改的表,以確定如何完成數(shù)據(jù)庫(kù)操作。③delete觸發(fā)器。delete觸發(fā)器通常用于兩種情況,第一種情況是為了防止那些確實(shí)需要?jiǎng)h除但會(huì)引起數(shù)據(jù)一致性問(wèn)題的記錄的刪除;第二種情況是執(zhí)行可刪除主記錄的子記錄的級(jí)聯(lián)刪除操作。知識(shí)儲(chǔ)備四、DDL觸發(fā)器的創(chuàng)建和應(yīng)用任務(wù)十九
觸發(fā)器DDL觸發(fā)器一般用于以下目的:①防止對(duì)數(shù)據(jù)庫(kù)架構(gòu)進(jìn)行某些更改。②希望數(shù)據(jù)庫(kù)中發(fā)生某種情況以響應(yīng)數(shù)據(jù)庫(kù)架構(gòu)中的更改。③要記錄數(shù)據(jù)庫(kù)架構(gòu)中的更改或事件。僅在運(yùn)行觸發(fā)DDL觸發(fā)器的DDL語(yǔ)句后,DDL觸發(fā)器才會(huì)激發(fā)。DDL觸發(fā)器無(wú)法作為INSTEADOF觸發(fā)器使用。DDL觸發(fā)器有兩種,一種是作用在當(dāng)前SQLServer服務(wù)器上的,一種是作用在當(dāng)前數(shù)據(jù)庫(kù)中的。這兩種DDL觸發(fā)器在ManagementStudio中所在的位置是不同的,作用在當(dāng)前SQLServer服務(wù)器上的DDL觸發(fā)器所在位置是:“對(duì)象資源管理器”,選擇所在SQLServer服務(wù)器,定位到“服務(wù)器對(duì)象”→“觸發(fā)器”,在“摘要”對(duì)話框里就可以看到所有的作用在當(dāng)前SQLServer服務(wù)器上的DDL觸發(fā)器,如圖19-3所示。知識(shí)儲(chǔ)備任務(wù)十九
觸發(fā)器知識(shí)儲(chǔ)備任務(wù)十九
觸發(fā)器作用在當(dāng)前數(shù)據(jù)庫(kù)中的DDL觸發(fā)器所在位置是:“對(duì)象資源管理器”,選擇所在SQLServer服務(wù)器“數(shù)據(jù)庫(kù)”,所在數(shù)據(jù)庫(kù),定位到“可編程性”→“數(shù)據(jù)庫(kù)觸發(fā)器”,在摘要對(duì)話框里就可以看到所有的當(dāng)前數(shù)據(jù)庫(kù)中的DDL觸發(fā)器。右擊觸發(fā)器,在彈出的快捷菜單中選擇“編寫(xiě)數(shù)據(jù)庫(kù)觸發(fā)器腳本為”→“CREATE到”→“新查詢編輯器對(duì)話框”,然后在新打開(kāi)的“查詢編輯器”對(duì)話框里可以看到該觸發(fā)器的內(nèi)容,如圖19-4所示。也可以用TSQL語(yǔ)句創(chuàng)建DDL觸發(fā)器,創(chuàng)建DDL觸發(fā)器與創(chuàng)建DML觸發(fā)器類似,但要注意創(chuàng)建DDL觸發(fā)器和DML觸發(fā)器的語(yǔ)句區(qū)別知識(shí)儲(chǔ)備任務(wù)十九
觸發(fā)器知識(shí)儲(chǔ)備任務(wù)十九
觸發(fā)器建立DDL觸發(fā)器的簡(jiǎn)單語(yǔ)句如下:CREATETRIGGER觸發(fā)器名ONALLSERVER或DATABASEFOR或AFTER激活DDL觸發(fā)器的事件AS要執(zhí)行的SQL語(yǔ)句其中,ON后面的AllServer是將DDL觸發(fā)器作用到整個(gè)當(dāng)前的服務(wù)器上。如果指定了這個(gè)參數(shù),在當(dāng)前服務(wù)器上的任何一個(gè)數(shù)據(jù)庫(kù)都能激活該觸發(fā)器。ON后面的Database是將DDL觸發(fā)器作用到當(dāng)前數(shù)據(jù)庫(kù),只能在這個(gè)數(shù)據(jù)庫(kù)上激活該觸發(fā)器。DDL觸發(fā)器不能指定的insteadof觸發(fā)器。知識(shí)儲(chǔ)備任務(wù)十九
觸發(fā)器激活DDL觸發(fā)器的事件包括兩種,一種在DDL觸發(fā)器作用在當(dāng)前數(shù)據(jù)庫(kù)情況下可以使用以下事件如:CREATE_TABLE、ALTER_TABLE、DROP_TABLE、CREATE_ROLE、CREATE_USER等。另一種是在DDL觸發(fā)器作用在當(dāng)前服務(wù)器情況下,可以使用以下事件如:CREATE_DATABASE、ALTER_DATABASE、DROP_DATABASE、CREATE_LOGIN等。知識(shí)儲(chǔ)備一、觸發(fā)器任務(wù)十九
觸發(fā)器管理DDL觸發(fā)器與管理DML觸發(fā)器類似,以DDL觸發(fā)器為例。1.查看觸發(fā)器除了在SSMS中查看觸發(fā)器,還可以用系統(tǒng)存儲(chǔ)過(guò)程查看觸發(fā)器。系統(tǒng)存儲(chǔ)過(guò)程sp_help、sp_helptext和sp_depends分別提供有關(guān)觸發(fā)器的不同信息。其具體用途和語(yǔ)法形式如下。(1)help:用于查看觸發(fā)器的一般信息,如觸發(fā)器的名稱、屬性、類型和創(chuàng)建時(shí)間。sp_help‘觸發(fā)器名稱’(2)helptext:用于查看觸發(fā)器的正文信息。sp_helptext‘觸發(fā)器名稱’知識(shí)儲(chǔ)備任務(wù)十九
觸發(fā)器(3)depends:用于查看指定觸發(fā)器所引用的表或者指定的表涉及到的所有觸發(fā)器。sp_depends‘觸發(fā)器名稱’sp_depends‘表名’2.修改DDL觸發(fā)器在SSMS如果要修改DDL觸發(fā)器內(nèi)容,就只能先刪除該觸發(fā)器,再重新建立一個(gè)DDL觸發(fā)器。雖然在ManagementStudio中沒(méi)有直接提供修改DDL觸發(fā)器的對(duì)話框,但在“查詢編輯器”對(duì)話框里依然可以用SQL語(yǔ)句來(lái)進(jìn)行修改,運(yùn)用語(yǔ)句ALTERTRIGGER修改觸發(fā)器。3.刪除DDL觸發(fā)器在SSMS中刪除觸發(fā)器,找到對(duì)應(yīng)的觸發(fā)器,右擊鼠標(biāo),選擇“刪除”即可,如圖19-5所示。另外運(yùn)用語(yǔ)句DROPTRIGGER(TransactSQL)也可刪除觸發(fā)器。4.使用sp_rename命令修改觸發(fā)器的名稱sp_rename命令的語(yǔ)法形式如下:sp_renameoldname,newname知識(shí)儲(chǔ)備任務(wù)十九
觸發(fā)器知識(shí)儲(chǔ)備六、inserted表和deleted表任務(wù)十九
觸發(fā)器觸發(fā)器語(yǔ)句中使用了兩種特殊的表:inserted表和deleted表,inserted表放的是本次insert操作插入的數(shù)據(jù)或本次update操作更新后的數(shù)據(jù)。deleted表放的是本次delete操作刪除的數(shù)據(jù)或本次update操作更新前的數(shù)據(jù)。inserted表和deleted表里的記錄數(shù),該記錄數(shù)取決于是批量插入還是單條插入。若是單條插入,每插入一條觸發(fā)一次insert觸發(fā)器,每次觸發(fā)器里只有一條數(shù)據(jù)。知識(shí)儲(chǔ)備七、for觸發(fā)器和insteadof觸發(fā)器任務(wù)十九
觸發(fā)器For等同于after,也就是在insert、delete或update之后,才執(zhí)行觸發(fā)器里的語(yǔ)句。insteadof等同于代替insert、delete或update操作。雖然,這時(shí)候inserted或deleted兩個(gè)特殊表里有數(shù)據(jù),但是并沒(méi)有對(duì)本表數(shù)據(jù)進(jìn)行insert、delete或update操作,還要在觸發(fā)器里手工進(jìn)行對(duì)本表insert、delete或update的操作。任務(wù)描述任務(wù)十九
觸發(fā)器創(chuàng)建數(shù)據(jù)庫(kù)TriggerTestDB,在數(shù)據(jù)庫(kù)中創(chuàng)建數(shù)據(jù)表“student”,表中包含學(xué)號(hào)、姓名、性別、年齡、系部等字段。項(xiàng)目需要用TSQL語(yǔ)言創(chuàng)建觸發(fā)器DML觸發(fā)器,創(chuàng)建insert觸發(fā)器,創(chuàng)建update觸發(fā)器。創(chuàng)建數(shù)據(jù)庫(kù)DDLTriDB,在數(shù)據(jù)庫(kù)中創(chuàng)建數(shù)據(jù)表“test_table”,創(chuàng)建DDL觸發(fā)器,用于保護(hù)數(shù)據(jù)庫(kù)中的數(shù)據(jù)表不被修改和不被刪除。實(shí)訓(xùn)操作任務(wù)十九
觸發(fā)器(1)建立數(shù)據(jù)庫(kù)TriggerTestDB和數(shù)據(jù)表student,在表中建立insert觸發(fā)器,每當(dāng)記錄增加一條時(shí),輸出信息“成功地插入了一行”。程序的TSQL代碼如下:createdatabaseTriggerTestDBgouseTriggerTestDBcreatetablestudent(Snochar(10)primarykey,Snamenchar(8),Ssexchar(2)check(Ssex=男orSsex=女),Sagesmallint,Sdeptchar(20))實(shí)訓(xùn)操作任務(wù)十九
觸發(fā)器觸發(fā)器創(chuàng)建的代碼如下:createtriggertr_student_insertonstudentforinsertasprint成功地插入了一行在SQLServer2005中創(chuàng)建上例中的觸發(fā)器,如圖19-6所示實(shí)訓(xùn)操作任務(wù)十九
觸發(fā)器(2)現(xiàn)在用TSQL語(yǔ)句向表中添加記錄,如下:insertintostudentvalues(20121201,宋江,男,25,信息工程系)執(zhí)行后,提示“成功地插入了一行”,如圖19-7所示。(3)在學(xué)生表student中已經(jīng)有若干條記錄,其中已經(jīng)有姓名中已經(jīng)存在一名叫“宋江”的學(xué)生。現(xiàn)在創(chuàng)建insert觸發(fā)器,實(shí)現(xiàn)姓名不能重復(fù),若重復(fù),則刪除剛剛插入的記錄。insert觸發(fā)器的代碼如下:實(shí)訓(xùn)操作任務(wù)十九
觸發(fā)器createtriggertr_name_insertonstudentinsteadofinsertasbegindeclare@namechar(10)select@name=inserted.Snamefrominsertedifexists(selectSnamefromstudentwhereSname=@name)begin實(shí)訓(xùn)操作任務(wù)十九
觸發(fā)器——raiserror函數(shù)用來(lái)返回錯(cuò)誤信息,第一個(gè)參數(shù)是錯(cuò)誤信息內(nèi)容,第二個(gè)參數(shù)是指出錯(cuò)誤消息級(jí)別,第三個(gè)參數(shù)是錯(cuò)誤消息的狀態(tài)raiserror(不能插入,姓名重復(fù)!,6,1)——rollback回滾操作rollbacktransactionendelsebegininsertintostudentselectinserted.*frominsertedendend該insert觸發(fā)器建立如圖19-8所示。實(shí)訓(xùn)操作任務(wù)十九
觸發(fā)器實(shí)訓(xùn)操作任務(wù)十九
觸發(fā)器實(shí)訓(xùn)操作任務(wù)十九
觸發(fā)器實(shí)訓(xùn)操作任務(wù)十九
觸發(fā)器(4)檢驗(yàn)tr_name_insert觸發(fā)器,向表中插入一條記錄如下:insertintostudentvalues(20121207,宋江,女,18,動(dòng)漫產(chǎn)業(yè)系)則會(huì)提示“不能插入,姓名重復(fù)!”,并且回滾操作,如圖19-9所示實(shí)訓(xùn)操作任務(wù)十九
觸發(fā)器(5)在student表中建立一個(gè)插入觸發(fā)器,插入學(xué)生記錄時(shí),年齡不能超過(guò)30歲。觸發(fā)器的代碼如下:createtriggertr_age_insertonstudentforinsertasif(selectSagefrominserted)>30beginselect*frominsertedprint學(xué)生年齡不符合要求rollbacktransactionend該insert觸發(fā)器建立如圖19-10所示。實(shí)訓(xùn)操作任務(wù)十九
觸發(fā)器實(shí)訓(xùn)操作任務(wù)十九
觸發(fā)器實(shí)訓(xùn)操作任務(wù)十九
觸發(fā)器(6)檢驗(yàn)tr_age_insert觸發(fā)器,向表中插入一條記錄如下:insertintostudentvalues(20121207,梅青,女,32,信息工程系)則會(huì)提示“學(xué)生年齡不符合要求”,并且回滾操作,如圖19-
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年房地產(chǎn)信托融資模式分析
- 主管工作中的資源配置優(yōu)化計(jì)劃
- 課外輔導(dǎo)合同范本
- 電動(dòng)汽車(chē)與電控技術(shù)的深度融合研究
- 柳桉木坐凳面施工方案
- 路塹控制爆破開(kāi)挖施工方案
- 西南醫(yī)科大學(xué)《影視欄目包裝》2023-2024學(xué)年第二學(xué)期期末試卷
- 煙臺(tái)科技學(xué)院《書(shū)法篆刻》2023-2024學(xué)年第二學(xué)期期末試卷
- 長(zhǎng)江大學(xué)文理學(xué)院《戲劇影視文學(xué)專業(yè)導(dǎo)論與創(chuàng)業(yè)基礎(chǔ)》2023-2024學(xué)年第二學(xué)期期末試卷
- 南京傳媒學(xué)院《日本文化體驗(yàn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 【人教版化學(xué)】必修1 知識(shí)點(diǎn)默寫(xiě)小紙條(答案背誦版)
- 危險(xiǎn)化學(xué)品目錄(2024版)
- 腦卒中-腦卒中的康復(fù)治療
- 疫情統(tǒng)計(jì)學(xué)智慧樹(shù)知到答案2024年浙江大學(xué)
- 浙江省紹興市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會(huì)明細(xì)
- 16萬(wàn)噸_年液化氣綜合利用裝置廢酸環(huán)保綜合利用項(xiàng)目環(huán)境報(bào)告書(shū)
- T∕CAEPI 43-2022 電絮凝法污水處理技術(shù)規(guī)程
- 農(nóng)村商業(yè)銀行合規(guī)風(fēng)險(xiǎn)管理暫行辦法
- 人教版八年級(jí)數(shù)學(xué)第二學(xué)期教學(xué)計(jì)劃+教學(xué)進(jìn)度表
- 油管、套管等規(guī)格對(duì)照表
- IEST-RP-CC0053
評(píng)論
0/150
提交評(píng)論