版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
學(xué)習(xí)情景5:數(shù)據(jù)庫(kù)其它對(duì)象
的創(chuàng)建與管理學(xué)習(xí)情景5:數(shù)據(jù)庫(kù)其它對(duì)象
1單元描述數(shù)據(jù)庫(kù)和數(shù)據(jù)表創(chuàng)建完畢,并不表示數(shù)據(jù)庫(kù)的設(shè)計(jì)就結(jié)束了,用戶往往會(huì)對(duì)數(shù)據(jù)庫(kù)有一些特殊的要求,比如:數(shù)據(jù)庫(kù)是否具備數(shù)據(jù)完整性關(guān)系?如何提高數(shù)據(jù)的檢索速度?當(dāng)需要頻繁執(zhí)行某一特殊任務(wù)時(shí),如何避免重復(fù)編寫(xiě)程序代碼?在SQLServer2005中提供了一系列數(shù)據(jù)庫(kù)對(duì)象來(lái)解決類似以上的問(wèn)題。本學(xué)習(xí)情景將重點(diǎn)介紹在SCDB數(shù)據(jù)庫(kù)中創(chuàng)建和管理這些數(shù)據(jù)庫(kù)對(duì)象(約束、索引、視圖、存儲(chǔ)過(guò)程、觸發(fā)器等)來(lái)解決實(shí)際問(wèn)題的過(guò)程。單元描述數(shù)據(jù)庫(kù)和數(shù)據(jù)表創(chuàng)建完畢,并不表示2學(xué)習(xí)目標(biāo)學(xué)會(huì)數(shù)據(jù)完整性的設(shè)計(jì);學(xué)會(huì)索引的創(chuàng)建與管理;學(xué)會(huì)視圖的創(chuàng)建與管理;學(xué)會(huì)存儲(chǔ)過(guò)程的創(chuàng)建與管理;學(xué)會(huì)觸發(fā)器的創(chuàng)建與管理;學(xué)會(huì)游標(biāo)的創(chuàng)建與使用;了解游標(biāo)的使用方法。學(xué)習(xí)目標(biāo)學(xué)會(huì)數(shù)據(jù)完整性的設(shè)計(jì);3項(xiàng)目1:SCDB中數(shù)據(jù)完整性的設(shè)計(jì)【任務(wù)描述】數(shù)據(jù)庫(kù)中的數(shù)據(jù)是從外界輸入的,而數(shù)據(jù)的輸入由于種種原因,會(huì)輸入無(wú)效或錯(cuò)誤的信息。那么保證數(shù)據(jù)正確性、一致性和可靠性,就成了數(shù)據(jù)庫(kù)系統(tǒng)關(guān)注的重要問(wèn)題。SQLServer提供了數(shù)據(jù)完整性的設(shè)計(jì)來(lái)解決以上問(wèn)題,具體可以通過(guò)創(chuàng)建約束、默認(rèn)、規(guī)則、用戶自定義函數(shù)來(lái)解決。項(xiàng)目1:SCDB中數(shù)據(jù)完整性的設(shè)計(jì)【任務(wù)描述】4項(xiàng)目1:SCDB中數(shù)據(jù)完整性的設(shè)計(jì)【任務(wù)目標(biāo)】了解數(shù)據(jù)完整性的基本概念;掌握創(chuàng)建和使用約束來(lái)保證數(shù)據(jù)的完整性;掌握創(chuàng)建、綁定、解綁定和刪除默認(rèn)值的方法;掌握創(chuàng)建、綁定、解綁定和刪除規(guī)則的方法;掌握創(chuàng)建、綁定、使用和刪除用戶自定義完整性的方法。項(xiàng)目1:SCDB中數(shù)據(jù)完整性的設(shè)計(jì)【任務(wù)目標(biāo)】5任務(wù)1了解數(shù)據(jù)完整性的基礎(chǔ)知識(shí)數(shù)據(jù)的完整性是指存儲(chǔ)在數(shù)據(jù)庫(kù)中數(shù)據(jù)的正確性、一致性和可靠性。根據(jù)數(shù)據(jù)的完整性所作用的數(shù)據(jù)庫(kù)對(duì)象和范圍的不同,數(shù)據(jù)的完整性分為實(shí)體完整性、域完整性、參照完整性和用戶定義完整性4種。任務(wù)1了解數(shù)據(jù)完整性的基礎(chǔ)知識(shí)數(shù)據(jù)的完整性6任務(wù)1了解數(shù)據(jù)完整性的基礎(chǔ)知識(shí)1、實(shí)體完整性實(shí)體完整性也可稱表的完整性。它用于保證數(shù)據(jù)庫(kù)中數(shù)據(jù)表的每一個(gè)特定實(shí)體都是唯一的,可以通過(guò)主鍵約束(PRIMARYKEY)、唯一鍵約束(UNIQUE)、索引或標(biāo)識(shí)屬性(IDENTITY)來(lái)實(shí)現(xiàn)。任務(wù)1了解數(shù)據(jù)完整性的基礎(chǔ)知識(shí)1、實(shí)體完整性7任務(wù)1了解數(shù)據(jù)完整性的基礎(chǔ)知識(shí)2、域完整性域完整性也可稱列完整性,用以指定列的數(shù)據(jù)輸入是否具有正確的數(shù)據(jù)類型、格式以及有效的數(shù)據(jù)范圍。任務(wù)1了解數(shù)據(jù)完整性的基礎(chǔ)知識(shí)2、域完整性8任務(wù)1了解數(shù)據(jù)完整性的基礎(chǔ)知識(shí)3、參照完整性參照完整性是保證參照與被參照表中數(shù)據(jù)的一致性。例如,在學(xué)生表Student中有學(xué)生的學(xué)號(hào)StudentID且在選課表SC中也有學(xué)號(hào)StudentID,而且兩個(gè)表的學(xué)號(hào)StudentID值必須一致,如果在輸入過(guò)程中出現(xiàn)錯(cuò)誤且又沒(méi)有被系統(tǒng)檢查出來(lái),那么數(shù)據(jù)之間將會(huì)造成混亂。任務(wù)1了解數(shù)據(jù)完整性的基礎(chǔ)知識(shí)3、參照完整性9任務(wù)1了解數(shù)據(jù)完整性的基礎(chǔ)知識(shí)4、用戶定義完整性用戶定義完整性允許用戶定義不屬于其他任何完整性分類的特定規(guī)則。所有的完整性類型都支持用戶定義完整性。用戶定義的完整性主要通過(guò)使用觸發(fā)器和存儲(chǔ)過(guò)程來(lái)強(qiáng)制實(shí)施完整性。存儲(chǔ)過(guò)程和觸發(fā)器的相關(guān)知識(shí)在后續(xù)任務(wù)中介紹。任務(wù)1了解數(shù)據(jù)完整性的基礎(chǔ)知識(shí)4、用戶定義完整性10任務(wù)2:
約束的實(shí)現(xiàn)1.約束的類型約束是SQLServer強(qiáng)制實(shí)行的應(yīng)用規(guī)則,它通過(guò)限制列、行和表中的數(shù)據(jù)來(lái)保證數(shù)據(jù)的完整性。當(dāng)刪除表時(shí),表所帶的約束也隨之被刪除。
常用的約束包括CHECK約束、PRIMARYKEY約束、FOREIGNKEY約束、UNIQUE約束和DEFAULT約束。任務(wù)2:約束的實(shí)現(xiàn)1.約束的類型11任務(wù)2:
約束的實(shí)現(xiàn)(1)CHECK約束CHECK約束用于限制輸入一列或多列的值的范圍,通過(guò)邏輯表達(dá)式來(lái)判斷數(shù)據(jù)的有效性,也就是一個(gè)列的輸入內(nèi)容必須滿足CHECK約束的條件,否則,數(shù)據(jù)無(wú)法正常輸入,從而強(qiáng)制數(shù)據(jù)的域完整性。任務(wù)2:約束的實(shí)現(xiàn)(1)CHECK約束12任務(wù)2:
約束的實(shí)現(xiàn)(2)DEFAULT約束
若在表中某列定義了DEFAULT約束,用戶在插入新的數(shù)據(jù)行時(shí),如果該列沒(méi)有指定數(shù)據(jù),那么系統(tǒng)將默認(rèn)值賦給該列,當(dāng)然該默認(rèn)值也可以是空值(NULL)。任務(wù)2:約束的實(shí)現(xiàn)(2)DEFAULT約束13任務(wù)2:
約束的實(shí)現(xiàn)(3)PRIMARYKEY約束在表中經(jīng)常有一列或多列的組合,其值能唯一標(biāo)識(shí)表中的每一行。這樣的一列或多列成為表的主鍵(PrimaryKey),通過(guò)它可以強(qiáng)制表的實(shí)體完整性。一個(gè)表只能有一個(gè)主鍵,而且主鍵約束中的列不能為空值。任務(wù)2:約束的實(shí)現(xiàn)(3)PRIMARYKEY約束14任務(wù)2:
約束的實(shí)現(xiàn)(4)FOREIGNKEY約束外健(ForeignKey)是用于建立和加強(qiáng)兩個(gè)表(主表與從表)的一列或多列數(shù)據(jù)之間的連接,當(dāng)添加、修改或刪除數(shù)據(jù)時(shí),通過(guò)參照完整性來(lái)保證它們之間的數(shù)據(jù)的一致性。任務(wù)2:約束的實(shí)現(xiàn)(4)FOREIGNKEY約束15任務(wù)2:
約束的實(shí)現(xiàn)(5)UNIQUE約束UNIQUE約束用于確保表中的兩個(gè)數(shù)據(jù)行在非主鍵中沒(méi)有相同的列值。與PRIMARYKEY'約束類似,UNIQUE約束也強(qiáng)制唯一性,為表中的一列或多列提供實(shí)體完整性。但UNIQUE約束用于非主健的一列或多列組合,且一個(gè)表可以定義多個(gè)UNIQUE約束。另外,UNIQUE約束可以用于定義多列組合,且一個(gè)表可以定義多個(gè)UNIQUE約束,UNIQUE約束可以用于定義允許空值的列;而PRIMAYRKEY約束只能用在唯一列上,且不能為空值。任務(wù)2:約束的實(shí)現(xiàn)(5)UNIQUE約束16任務(wù)2:
約束的實(shí)現(xiàn)2.約束的創(chuàng)建、查看與刪除約束的創(chuàng)建、查看與刪除等操作均可在SQLServerManagementStudio的【對(duì)象資源管理器】面板中進(jìn)行,也可使用Transact-SQL語(yǔ)句進(jìn)行。任務(wù)2:約束的實(shí)現(xiàn)2.約束的創(chuàng)建、查看與刪除17任務(wù)2:
約束的實(shí)現(xiàn)(1)CHECK約束的創(chuàng)建、查看和刪除【例】在學(xué)生表(Student)中定義學(xué)生的性別Sex列只能是“男”或“女”,從而避免用戶輸入其他的值。要解決此問(wèn)題,需要用到CHECK約束,使學(xué)生性別列的值只有“男”或“女”兩種可能,如果用戶輸入其他值,系統(tǒng)均提示用戶輸入無(wú)效。任務(wù)2:約束的實(shí)現(xiàn)(1)CHECK約束的創(chuàng)建、查看和刪除18任務(wù)2:
約束的實(shí)現(xiàn)①在SQLServerManagementStudio的【對(duì)象資源管理器】中選取【數(shù)據(jù)庫(kù)】選項(xiàng)下的SCDB數(shù)據(jù)庫(kù)。②展開(kāi)數(shù)據(jù)庫(kù)SCDB,并展開(kāi)數(shù)據(jù)庫(kù)SCDB目錄下的【表】,右擊“dbo.Student”選項(xiàng),在彈出的快捷菜單中,選擇【設(shè)計(jì)(G)】命令,打開(kāi)【設(shè)計(jì)表】窗口,選中“Sex”,然后,單擊【菜單欄】中的【表設(shè)計(jì)器】窗口工具欄上的【CHECK約束】命令,如圖所示;或者將鼠標(biāo)放在列“Sex”上,右擊鼠標(biāo),在彈出的快捷菜單中,選擇【CHECK約束】命令,如圖所示。任務(wù)2:約束的實(shí)現(xiàn)①在SQLServerManagem19任務(wù)2:
約束的實(shí)現(xiàn)③在彈出的【CHECK約束】窗口中單擊【添加】按鈕,如圖所示。④單擊“表達(dá)式”后面的
按鈕,進(jìn)入如圖所示的CHECK約束表達(dá)式的界面,在“表達(dá)式”文本框中輸入約束表達(dá)式“Sex='男'ORSex='女',如圖所示。然后,單擊“確定”按鈕。任務(wù)2:約束的實(shí)現(xiàn)③在彈出的【CHECK約束】窗口中單擊【20任務(wù)2:
約束的實(shí)現(xiàn)⑤在【設(shè)計(jì)表】窗口單擊
(【保存】),即完成了創(chuàng)建并保存CHECK約束的操作。以后用戶輸入數(shù)據(jù)時(shí),若輸入性別不是“男”或“女”,系統(tǒng)將報(bào)告輸入無(wú)效。
要想刪除上面創(chuàng)建的CHECK約束,選擇該約束,右擊鼠標(biāo),在彈出的菜單中選擇【刪除】命令,如圖所示,然后單擊“關(guān)閉”按鈕,即可刪除CHECK約束。任務(wù)2:約束的實(shí)現(xiàn)⑤在【設(shè)計(jì)表】窗口單擊(【保存】),即21任務(wù)2:
約束的實(shí)現(xiàn)【例】使用Transact-SQL語(yǔ)句為學(xué)生表Student創(chuàng)建CHECK約束。在SQLServerManagementStudio查詢編輯器中運(yùn)行以下代碼:USESCDBGOALTERTABLEStudentADDCONSTRAINTCK_StudentCHECK(sex='男'orsex='女')GO任務(wù)2:約束的實(shí)現(xiàn)【例】使用Transact-SQL語(yǔ)句為22任務(wù)2:
約束的實(shí)現(xiàn)刪除CHECK約束的語(yǔ)句格式如下:DROPCONSTRAINTCHECKconstraint_name【例】刪除創(chuàng)建的約束CK_Student。
USESCDBGOALTERTABLEStudentDROPCONSTRAINTCK_StudentGO任務(wù)2:約束的實(shí)現(xiàn)刪除CHECK約束的語(yǔ)句格式如下:23任務(wù)3:默認(rèn)值的實(shí)現(xiàn)1.默認(rèn)值的概念與在約束中介紹的DEFAULT約束類似,使用默認(rèn)值也可以實(shí)現(xiàn)當(dāng)用戶在向數(shù)據(jù)庫(kù)表中插入新紀(jì)錄時(shí),如果沒(méi)有給出某列的輸入值,則有系統(tǒng)自動(dòng)為該列輸入默認(rèn)值的功能。默認(rèn)值可以是常量、內(nèi)置函數(shù)或數(shù)學(xué)表達(dá)式。任務(wù)3:默認(rèn)值的實(shí)現(xiàn)1.默認(rèn)值的概念24任務(wù)3:默認(rèn)值的實(shí)現(xiàn)2.創(chuàng)建默認(rèn)值
通常創(chuàng)建并使用默認(rèn)值的步驟為:
①創(chuàng)建一個(gè)默認(rèn)值對(duì)象。
創(chuàng)建默認(rèn)的命令如下:CREATEDEFAULTdefault_nameASconstraint_expression任務(wù)3:默認(rèn)值的實(shí)現(xiàn)2.創(chuàng)建默認(rèn)值25任務(wù)3:默認(rèn)值的實(shí)現(xiàn)②將其捆綁到列或用戶自定義數(shù)據(jù)類型上。綁定默認(rèn)值的命令如下:EXECsp_bindefaultdefault_name,'table_name.[column_name]'任務(wù)3:默認(rèn)值的實(shí)現(xiàn)②將其捆綁到列或用戶自定義數(shù)據(jù)類型上。26任務(wù)3:默認(rèn)值的實(shí)現(xiàn)3.刪除默認(rèn)值通常刪除默認(rèn)值的步驟為:①解除默認(rèn)值捆綁的列或用戶自定義數(shù)據(jù)類型。解除綁定默認(rèn)值的命令如下:EXECsp_unbindefault'table_name.column_name'②刪除該默認(rèn)值。具體的命令語(yǔ)句如下:DROPDEFAULTdefault_name任務(wù)3:默認(rèn)值的實(shí)現(xiàn)3.刪除默認(rèn)值27任務(wù)4:規(guī)則的實(shí)現(xiàn)1.規(guī)則的概念規(guī)則也是實(shí)現(xiàn)數(shù)據(jù)完整性的方法之一,其作用與CHECK約束的部分功能相同。規(guī)則可以被綁定到一個(gè)列或者用戶定義數(shù)據(jù)類型上,它提供了一種加強(qiáng)列或用戶定義數(shù)據(jù)類型域約束的機(jī)制。當(dāng)其被綁定到列或用戶定義的數(shù)據(jù)類型上時(shí),用來(lái)指定允許輸入到列中的數(shù)據(jù),即當(dāng)用戶向表中插入數(shù)據(jù)時(shí),用來(lái)指定該列接受數(shù)據(jù)值的范圍。同時(shí),規(guī)則與默認(rèn)一樣在數(shù)據(jù)庫(kù)中只需要定義一次,就可以被多次應(yīng)用。任務(wù)4:規(guī)則的實(shí)現(xiàn)1.規(guī)則的概念28任務(wù)4:規(guī)則的實(shí)現(xiàn)2.創(chuàng)建規(guī)則和默認(rèn)值類似,規(guī)則創(chuàng)建后,需要將其捆綁到列上或用戶自定義數(shù)據(jù)類型上。創(chuàng)建規(guī)則的命令如下:CREATERULErule_nameASconstraint_expression捆綁規(guī)則的命令語(yǔ)句如下:EXECsp_bindrulerule_name,'
table_name.[column_name]'任務(wù)4:規(guī)則的實(shí)現(xiàn)2.創(chuàng)建規(guī)則29任務(wù)4:規(guī)則的實(shí)現(xiàn)如果在列或數(shù)據(jù)類型上已經(jīng)捆綁了規(guī)則,那么當(dāng)再次向它們捆綁規(guī)則時(shí),舊規(guī)則將自動(dòng)被新規(guī)則覆蓋,而不會(huì)捆綁多條規(guī)則。捆綁規(guī)則可以使用系統(tǒng)存儲(chǔ)過(guò)程sp_bindrule,解除規(guī)則的相關(guān)綁定可以使用系統(tǒng)存儲(chǔ)過(guò)程sp_unbindrule。任務(wù)4:規(guī)則的實(shí)現(xiàn)如果在列或數(shù)據(jù)類30任務(wù)4:規(guī)則的實(shí)現(xiàn)3.刪除規(guī)則①解除規(guī)則捆綁的列或用戶自定義數(shù)據(jù)類型。解除綁定默認(rèn)值的命令如下:EXECsp_unbindrule'table_name.column_name'②刪除該規(guī)則。具體的命令語(yǔ)句如下:DROPRulerule_name任務(wù)4:規(guī)則的實(shí)現(xiàn)3.刪除規(guī)則31任務(wù)5:用戶自定義函數(shù)的實(shí)現(xiàn)1.用戶自定義函數(shù)為了擴(kuò)展T-SQL的編程能力,SQLServer2005除了提供的內(nèi)部函數(shù)外,還允許用戶自定義函數(shù)。用戶可以使用CREATEFUNCTION語(yǔ)句編寫(xiě)自已的函數(shù),以滿足特殊需要。用戶自定義函數(shù)可用傳遞一個(gè)或多個(gè)參數(shù),并返回一個(gè)簡(jiǎn)單的數(shù)值。任務(wù)5:用戶自定義函數(shù)的實(shí)現(xiàn)1.用戶自定義函數(shù)32任務(wù)5:用戶自定義函數(shù)的實(shí)現(xiàn)(1)創(chuàng)建標(biāo)量用戶自定義函數(shù)標(biāo)量用戶自定義函數(shù)返回一個(gè)簡(jiǎn)單的數(shù)值,如int、char、decimal等,但禁止使用text、ntext、image、cursor和timestamp作為返回的參數(shù)。
該函數(shù)的函數(shù)體被封裝在以BEGIN語(yǔ)句開(kāi)始,END語(yǔ)句結(jié)束的范圍內(nèi)。任務(wù)5:用戶自定義函數(shù)的實(shí)現(xiàn)(1)創(chuàng)建標(biāo)量用戶自定義函數(shù)33任務(wù)5:用戶自定義函數(shù)的實(shí)現(xiàn)其語(yǔ)法格式如下:CREATEFUNCTION[owner_name].function_name(@parameter_namescalar_parameter_data_type)RETURNscalar_return_data_type[AS]BEGINFUNCTION_bodyRETURNscalar_expressionEND任務(wù)5:用戶自定義函數(shù)的實(shí)現(xiàn)其語(yǔ)法格式如下:34任務(wù)5:用戶自定義函數(shù)的實(shí)現(xiàn)【例】創(chuàng)建一個(gè)自定義函數(shù),返回特定課程的平均成績(jī)。USESCDBGOCREATEFUNCTIONAvgGrade_SC(@CourseIDVarchar(20))RETURNSFLOATASBEGINDECLARE@AVG_GradeFLOATSET@AVG_Grade=(SELECTAVG(Grade)FROMSCWHERECourseID=@CourseID)RETURN@AVG_GradeEND任務(wù)5:用戶自定義函數(shù)的實(shí)現(xiàn)【例】創(chuàng)建一個(gè)自定義函數(shù),返回35任務(wù)5:用戶自定義函數(shù)的實(shí)現(xiàn)(2)創(chuàng)建直接表值用戶定義函數(shù)表值函數(shù)返回一個(gè)Table型數(shù)據(jù),對(duì)直接表值用戶定義函數(shù)而言,返回的結(jié)果只是一系列表值,沒(méi)有明確的函數(shù)體。該表是SELECT語(yǔ)句的結(jié)果集。其語(yǔ)法格式為:CREATEFUNCTION[owner_name].function_name(@parameter_namescalar_parameter_data_type)RETURNTABLE[AS]RETURN[(select_statement)]任務(wù)5:用戶自定義函數(shù)的實(shí)現(xiàn)(2)創(chuàng)建直接表值用戶定義函數(shù)36任務(wù)5:用戶自定義函數(shù)的實(shí)現(xiàn)【例】創(chuàng)建一個(gè)函數(shù),要求返回屬于同一個(gè)班級(jí)的學(xué)生的基本信息。在SQLServerManagementStudio查詢編輯器中運(yùn)行以下代碼:USESCDBGOCREATEFUNCTION學(xué)生信息(@班級(jí)號(hào)Varchar(20))RETURNSTABLEASRETURN(SELECT*FROMStudentWHEREClassID=@班級(jí)號(hào))任務(wù)5:用戶自定義函數(shù)的實(shí)現(xiàn)【例】創(chuàng)建一個(gè)函數(shù),要求返回屬37項(xiàng)目2:SCDB中索引的創(chuàng)建與管理【任務(wù)描述】數(shù)據(jù)庫(kù)中的索引與書(shū)籍中的目錄類似,在一本書(shū)中,利用目錄可以快速查找到所需要的信息,無(wú)須閱讀整本書(shū),在數(shù)據(jù)庫(kù)中,索引使數(shù)據(jù)庫(kù)程序無(wú)須對(duì)整個(gè)表進(jìn)行掃描,就可以在其中找到所需要的數(shù)據(jù)。當(dāng)創(chuàng)建數(shù)據(jù)庫(kù)并優(yōu)化其性能時(shí),應(yīng)該為數(shù)據(jù)查詢所使用表的列創(chuàng)建索引,建立索引后,SQLServer2005會(huì)根據(jù)索引的有序排列,通過(guò)高效的查找算法找到相關(guān)數(shù)據(jù)。因此,對(duì)表建立索引,可以加快數(shù)據(jù)的查詢速度和減少系統(tǒng)的響應(yīng)時(shí)間。項(xiàng)目2:SCDB中索引的創(chuàng)建與管理【任務(wù)描述】38項(xiàng)目2:SCDB中索引的創(chuàng)建與管理【任務(wù)目標(biāo)】
了解索引的基礎(chǔ)知識(shí);掌握創(chuàng)建索引的方法;學(xué)會(huì)管理和維護(hù)索引。項(xiàng)目2:SCDB中索引的創(chuàng)建與管理【任務(wù)目標(biāo)】39任務(wù)1:了解索引的基礎(chǔ)知識(shí)1.索引概述索引與目錄類似,如果想快速查找而不是逐頁(yè)查找指定的內(nèi)容,可以通過(guò)目錄中章節(jié)的頁(yè)號(hào)找到其對(duì)應(yīng)的內(nèi)容。類似地,索引通過(guò)記錄表中的關(guān)鍵值指向表中的記錄,這樣數(shù)據(jù)庫(kù)引擎就不用掃描整個(gè)表而定位到相關(guān)的記錄。任務(wù)1:了解索引的基礎(chǔ)知識(shí)1.索引概述40任務(wù)1:了解索引的基礎(chǔ)知識(shí)1.索引概述
SQLServer中一個(gè)表的存儲(chǔ)是由數(shù)據(jù)頁(yè)和索引頁(yè)兩個(gè)部分組成的。數(shù)據(jù)頁(yè)用來(lái)存放除了文本和圖像數(shù)據(jù)以外的所有與表的某一行相關(guān)的數(shù)據(jù),索引頁(yè)包含組成特定索引的列中的數(shù)據(jù)。任務(wù)1:了解索引的基礎(chǔ)知識(shí)1.索引概述41任務(wù)1:了解索引的基礎(chǔ)知識(shí)2.索引的作用索引是以表列為基礎(chǔ)的數(shù)據(jù)庫(kù)對(duì)象,它保存著表中排序的索引列,并且記錄了索引列在數(shù)據(jù)表中的物理存儲(chǔ)位置,實(shí)現(xiàn)了表中數(shù)據(jù)的邏輯排序,其主要目的是提高SQLServer系統(tǒng)的性能,加快數(shù)據(jù)的查詢速度和減少系統(tǒng)的響應(yīng)時(shí)間。任務(wù)1:了解索引的基礎(chǔ)知識(shí)2.索引的作用42任務(wù)1:了解索引的基礎(chǔ)知識(shí)3.建立索引的原則一般來(lái)說(shuō),適合在這些列上創(chuàng)建索引:(1)在經(jīng)常需要搜索的列上創(chuàng)建索引,可以加快搜索的速度。(2)在作為主鍵的列上創(chuàng)建索引,強(qiáng)制該列的唯一性和組織表中數(shù)據(jù)的排列結(jié)構(gòu)。(3)在經(jīng)常用在連接的列上創(chuàng)建索引,這些列主要是一些外鍵,可以加快連接的速度。(4)在經(jīng)常使用在WHERE子句中的列上創(chuàng)建索引,加快條件的判斷速度。(5)在經(jīng)常需要排序的列上創(chuàng)建索引,因?yàn)樗饕呀?jīng)排序,這樣查詢可以利用索引的排序,加快排序查詢時(shí)間。(6)在經(jīng)常需要根據(jù)范圍進(jìn)行搜索的列上創(chuàng)建索引,因?yàn)樗饕呀?jīng)排序,其指定的范圍是連續(xù)的。任務(wù)1:了解索引的基礎(chǔ)知識(shí)3.建立索引的原則43任務(wù)1:了解索引的基礎(chǔ)知識(shí)4.索引的分類在MicrosoftSQLServer2005系統(tǒng)中,有兩種基本類型的索引:聚集索引和非聚集索引。除此之外,還有唯一索引、包含索引、索引視圖、全文索引、XML索引等。任務(wù)1:了解索引的基礎(chǔ)知識(shí)4.索引的分類44任務(wù)1:了解索引的基礎(chǔ)知識(shí)(1)聚集索引索引的結(jié)構(gòu)是樹(shù)狀結(jié)構(gòu),樹(shù)的頂部稱為葉級(jí),樹(shù)的其他部分稱為非葉級(jí),樹(shù)的根部在非葉級(jí)中。同樣,聚集索引的葉級(jí)和非葉級(jí)構(gòu)成了一個(gè)樹(shù)狀結(jié)構(gòu)。在聚集索引中,表中的數(shù)據(jù)所在的數(shù)據(jù)頁(yè)就是聚集索引的葉級(jí),在葉級(jí)之外的索引頁(yè)是非葉級(jí),如圖所示。任務(wù)1:了解索引的基礎(chǔ)知識(shí)(1)聚集索引45任務(wù)1:了解索引的基礎(chǔ)知識(shí)聚集索引在使用中具有以下特點(diǎn):①每一個(gè)表只能有一個(gè)聚集索引,因?yàn)楸碇袛?shù)據(jù)的物理順序只有一個(gè)。②表中行的物理順序和索引中行的物理順序是相同的,在創(chuàng)建任何非聚集索引之前創(chuàng)建聚集索引,這是因?yàn)榫奂饕淖兞吮碇行械奈锢眄樞?,?shù)據(jù)行按照一定的順序排列,并目自動(dòng)維護(hù)這個(gè)順序。③聚集索引的平均大小大約是數(shù)據(jù)表的百分之五,但是,實(shí)際的聚集索引的大小常常根據(jù)索引列的大小變化而變化。④在索引的創(chuàng)建過(guò)程中,SQLServer臨時(shí)使用當(dāng)前數(shù)據(jù)庫(kù)的磁盤(pán)空間,當(dāng)創(chuàng)建聚集索引時(shí),需要120%的表空間的大小,因此,一定要保證有足夠的空間來(lái)創(chuàng)建聚集索引。任務(wù)1:了解索引的基礎(chǔ)知識(shí)聚集索引在使用中具有以下特點(diǎn):46任務(wù)1:了解索引的基礎(chǔ)知識(shí)(2)非聚集索引非聚集索引具有與表的數(shù)據(jù)完全分離的結(jié)構(gòu)。使用非聚集索引不用將物理數(shù)據(jù)頁(yè)中的數(shù)據(jù)按列排序。
非聚集索引表示行的邏輯順序。在非聚集索引中,葉級(jí)沒(méi)有包含數(shù)據(jù)行,如圖所示。任務(wù)1:了解索引的基礎(chǔ)知識(shí)(2)非聚集索引47任務(wù)1:了解索引的基礎(chǔ)知識(shí)(3)唯一索引唯一索引確保索引鍵不包含重復(fù)的值,因此,表或視圖中的每一行在某種程度上是唯一的。例如,如果在表中的“姓名”字段上創(chuàng)建了唯一索引,則以后輸入的姓名將不能同名。創(chuàng)建PRIMARYKEY或UNIQUE約束會(huì)在表中指定的列上自動(dòng)創(chuàng)建唯一索引。聚集索引和非聚集索引都可以是唯一索引。任務(wù)1:了解索引的基礎(chǔ)知識(shí)(3)唯一索引48任務(wù)2:創(chuàng)建索引1、在【對(duì)象資源管理器】中創(chuàng)建索引【例】在SCDB數(shù)據(jù)庫(kù)中的Student表上創(chuàng)建基于Name列,名為Student_index的不唯一、非聚集索引。(1)在SQLServerManagementStudio的【對(duì)象資源管理器】面板中,選擇要?jiǎng)?chuàng)建索引的表Student,然后展開(kāi)Student表前面的“+”號(hào),選中【索引】選項(xiàng)右擊,在彈出的快捷菜單中選擇“新建索引”命令,如圖所示。(2)選擇【新建索引】命令,進(jìn)入如圖5.34所示的【新建索引】窗口,在該窗口中列出了Student表上要建立的索引,包含其名稱、是不是聚集索引、是否設(shè)置唯一索引等。輸入索引名稱為“Student_index”,選擇【非聚集】選項(xiàng)。任務(wù)2:創(chuàng)建索引1、在【對(duì)象資源管理器】中創(chuàng)建索引49任務(wù)2:創(chuàng)建索引(3)單擊【添加】按鈕進(jìn)入如圖所示的界面,在列表中選擇需要?jiǎng)?chuàng)建索引的Name列(對(duì)于復(fù)合索引,可以選擇多個(gè)組合列)。(4)單擊【確定】按鈕,SQLServer將完成索引的創(chuàng)建。任務(wù)2:創(chuàng)建索引(3)單擊【添加】按鈕進(jìn)入50任務(wù)2:創(chuàng)建索引2.使用Transact-SQL語(yǔ)句創(chuàng)建索引創(chuàng)建索引使用CREATEINDEX語(yǔ)句。其語(yǔ)法如下:CREATE[UNIQUE][CLUSTERED|NONCLUSTERED]INDEXindex_nameON{table_name|view_name}([column1[ASC|DESC],column2[ASC|DESC],…]|[express])[TABLESPACEtablespace_name][PCTFREEn1][STORAGE(INITIALn2)][NOLOGGING][NOLINE][NOSORT];任務(wù)2:創(chuàng)建索引2.使用Transact-SQL語(yǔ)句創(chuàng)51任務(wù)3:
查看索引信息1.在【對(duì)象資源管理器】中查看索引信息在SQLServerManagementStudio的【對(duì)象資源管理器】面板中,使用與創(chuàng)建索引同樣的方法,打開(kāi)如下圖所示的快捷菜單,選擇“屬性”命令,即可看到該索引對(duì)應(yīng)的信息。任務(wù)3:查看索引信息1.在【對(duì)象資源管理器】中查看索引信52任務(wù)3:
查看索引信息2.使用系統(tǒng)存儲(chǔ)過(guò)程sp_helpindex查看指定表的索引信息【例】使用系統(tǒng)存儲(chǔ)過(guò)程sp_helpindex查看SCDB數(shù)據(jù)庫(kù)中Student表的索引信息。在SQLServerManagementStudio查詢編輯器中運(yùn)行如下命令:USESCDBGOEXECsp_helpindexStudentGO任務(wù)3:查看索引信息2.使用系統(tǒng)存儲(chǔ)過(guò)程sp_helpin53任務(wù)4:重命名索引1.在【對(duì)象資源管理器】中重命名索引在SQLServerManagementStudio的【對(duì)象資源管理器】面板中,使用與創(chuàng)建索引同樣的方法,打開(kāi)如下圖所示的快捷菜單,選擇“重命名”命令,然后直接輸入新名即可。任務(wù)4:重命名索引1.在【對(duì)象資源管理器】中重命名索引54任務(wù)4:重命名索引2.通過(guò)Transact-SQL語(yǔ)句來(lái)實(shí)現(xiàn),更改索引名稱的命令格式如下:EXECsp_renametable_nameold_index_name,new_index_name其中:Table_name:索引所在的表名稱。Old_Index_name:要重新命名的索引的名稱。New_Index_name:新的索引名稱。任務(wù)4:重命名索引2.通過(guò)Transact-SQL語(yǔ)句來(lái)55任務(wù)5:刪除索引1.在【對(duì)象資源管理器】中刪除索引在SQLServerManagementStudio的【對(duì)象資源管理器】面板中展開(kāi)SCDB數(shù)據(jù)庫(kù),單擊【表】選項(xiàng)展開(kāi)Student表,再展開(kāi)【索引】前面的“+”號(hào),選中索引名為Student_index的索引,在彈出的快捷菜單中選擇【刪除】命令,進(jìn)入如圖所示的窗口,單擊【確定】按鈕,即可刪除該索引。任務(wù)5:刪除索引1.在【對(duì)象資源管理器】中刪除索引562.使用Transact-SQL語(yǔ)句刪除索引使用Transact-SQL語(yǔ)句刪除索引的語(yǔ)法格式如下:DROPINDEXTable_name,index_name[,Table_name,index_name…]其中:Table_name:索引所在的表名稱。Index_name:要?jiǎng)h除的索引的名稱。2.使用Transact-SQL語(yǔ)句刪除索引57項(xiàng)目3:SCDB中視圖的創(chuàng)建與管理【任務(wù)描述】視圖(View)作為一種數(shù)據(jù)庫(kù)對(duì)象,為用戶提供了一個(gè)可以檢索數(shù)據(jù)表中的數(shù)據(jù)的方式。用戶通過(guò)視圖來(lái)瀏覽數(shù)據(jù)表中感興趣的部分或全部數(shù)據(jù),而數(shù)據(jù)的物理存儲(chǔ)位置仍然在表中?!救蝿?wù)目標(biāo)】了解視圖的基本概念、作用和特點(diǎn);掌握創(chuàng)建、修改和刪除視圖的方法并能靈活運(yùn)用視圖來(lái)簡(jiǎn)化表,及簡(jiǎn)化數(shù)據(jù)的查詢。項(xiàng)目3:SCDB中視圖的創(chuàng)建與管理【任務(wù)描述】58任務(wù)1:了解視圖的基礎(chǔ)知識(shí)1.視圖的概念視圖是一個(gè)虛擬表,并不表示任何物理數(shù)據(jù),只是用來(lái)查看數(shù)據(jù)的窗口而已。視圖與真正的表很類似,也是由一組命名的列和數(shù)據(jù)行所組成,其內(nèi)容由查詢所定義。但是視圖并不是以一組數(shù)據(jù)的形式存儲(chǔ)在數(shù)據(jù)庫(kù)中,數(shù)據(jù)庫(kù)中只存儲(chǔ)視圖的定義,而不存儲(chǔ)視圖對(duì)應(yīng)的數(shù)據(jù),這些數(shù)據(jù)仍存儲(chǔ)在導(dǎo)出視圖的基本表中。當(dāng)基本表中的數(shù)據(jù)發(fā)生變化時(shí),從視圖中查詢出來(lái)的數(shù)據(jù)也隨之改變。任務(wù)1:了解視圖的基礎(chǔ)知識(shí)1.視圖的概念59任務(wù)1:了解視圖的基礎(chǔ)知識(shí)2.使用視圖的優(yōu)點(diǎn)和缺點(diǎn)
(1)使用視圖的優(yōu)點(diǎn)數(shù)據(jù)保密。對(duì)不同的用戶定義不同的視圖,使用戶只能看到與自己有關(guān)的數(shù)據(jù)。簡(jiǎn)化查詢操作。為復(fù)雜的查詢建立一個(gè)視圖,用戶不必輸入復(fù)雜的查詢語(yǔ)句,只需針對(duì)此視圖做簡(jiǎn)單的查詢即可。保證數(shù)據(jù)的邏輯獨(dú)立性。對(duì)于視圖的操作,例如,查詢只依賴于視圖的定義,當(dāng)構(gòu)成視圖的基本表需要修改時(shí),只需要修改視圖定義中的子查詢部分,而基于視圖的查詢不用改變。任務(wù)1:了解視圖的基礎(chǔ)知識(shí)2.使用視圖的優(yōu)點(diǎn)和缺點(diǎn)60任務(wù)1:了解視圖的基礎(chǔ)知識(shí)(2)使用視圖的缺點(diǎn)
當(dāng)更新視圖中的數(shù)據(jù)時(shí),實(shí)際上是對(duì)基本表的數(shù)據(jù)進(jìn)行更新。事實(shí)上,當(dāng)從視圖中插入或者刪除時(shí),情況也是這樣。然而,某些視圖是不能更新數(shù)據(jù)的,這些視圖有如下的特征:有UNION等集合操作符的視圖。有GROUPBY子句的視圖。有諸如AVG,SUM或者M(jìn)AX等函數(shù)的視圖。使用DISTINCT關(guān)鍵字的視圖。連接表的視圖(其中有一些例外)。任務(wù)1:了解視圖的基礎(chǔ)知識(shí)(2)使用視圖的缺點(diǎn)61任務(wù)2:創(chuàng)建視圖1.在【對(duì)象資源管理器】中創(chuàng)建視圖【例】利用【對(duì)象資源管理器】在SCDB數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)名為V_Student的視圖,該視圖僅查看Student表中來(lái)自“荊門(mén)”的學(xué)生的基本信息。(1)啟動(dòng)SQLServerManagementStudio,在【對(duì)象資源管理器】的樹(shù)型目錄中,找到SCDB,展開(kāi)該數(shù)據(jù)庫(kù)。(2)選擇【視圖】,按一下鼠標(biāo)右鍵,在彈出的快捷菜單中選擇【新建視圖】命令,出現(xiàn)如圖所示。任務(wù)2:創(chuàng)建視圖1.在【對(duì)象資源管理器】中創(chuàng)建視圖62任務(wù)2:創(chuàng)建視圖(3)在彈出的【添加表】對(duì)話框選擇Student表,點(diǎn)擊【添加】按鈕,然后點(diǎn)擊【關(guān)閉】按鈕關(guān)閉【添加表】對(duì)話框,如圖所示。(4)在如圖所示的對(duì)話框的代碼編輯窗格編輯代碼。(5)點(diǎn)擊工具欄的
,彈出如圖所示的視圖保存對(duì)話框,輸入視圖的名稱“V_Student”,點(diǎn)擊【確定】按鈕,即完成視圖的創(chuàng)建。任務(wù)2:創(chuàng)建視圖(3)在彈出的【添加表】對(duì)話框選擇Stude63任務(wù)2:創(chuàng)建視圖2.使用Transact-SQL語(yǔ)句創(chuàng)建視圖基本語(yǔ)法如下:CREATEVIEWview_name[WITHENCRYPTION]ASselect_statement其中,WITHENCRYPTION子句表示對(duì)視圖加密。任務(wù)2:創(chuàng)建視圖2.使用Transact-SQL語(yǔ)句創(chuàng)建視圖64任務(wù)3:顯示視圖的信息1.在【對(duì)象資源管理器】中顯示視圖的信息【例5.29】在SQLServerManagementStudio窗口中查看和修改視圖V_Student的定義信息。(1)在【對(duì)象資源管理器】面板中展開(kāi)【數(shù)據(jù)庫(kù)】選項(xiàng),然后展開(kāi)【SCDB】選項(xiàng)。(2)展開(kāi)【視圖】選項(xiàng),在視圖列表中可以見(jiàn)到名為V_Student的視圖。如果沒(méi)有看到,單擊“刷新”按鈕,刷新一次。(3)右擊V_Student視圖,在彈出的快捷菜單中選擇【設(shè)計(jì)】命令打開(kāi)如圖所示窗口,可以在該對(duì)話框中直接對(duì)視圖的定義進(jìn)行修改。任務(wù)3:顯示視圖的信息1.在【對(duì)象資源管理器】中顯示視圖的65任務(wù)3:顯示視圖的信息2.通過(guò)執(zhí)行系統(tǒng)存儲(chǔ)過(guò)程sp_helptext查看視圖的信息【例】通過(guò)執(zhí)行系統(tǒng)存儲(chǔ)過(guò)程sp_helptext查看視圖V_Student2的定義信息。在SQLServerManagementStudio查詢編輯器中運(yùn)行如下命令:USESCDBGOsp_helptext'V_Student2'任務(wù)3:顯示視圖的信息2.通過(guò)執(zhí)行系統(tǒng)存儲(chǔ)過(guò)程sp_help66任務(wù)4:重命名視圖【例】將視圖V_Student2重新命名為V_Stu2。(1)在【對(duì)象資源管理器】面板中展開(kāi)【數(shù)據(jù)庫(kù)】選項(xiàng),然后展開(kāi)【SCDB】選項(xiàng)。(2)展開(kāi)【視圖】選項(xiàng),在視圖列表中選擇名為V_Student2的視圖,右擊鼠標(biāo)在彈出的菜單中選擇【重命名】,如圖所示,然后將視圖V_Student2重新命名為V_Stu2。任務(wù)4:重命名視圖【例】將視圖V_Student2重新命名為67任務(wù)4:重命名視圖【例】將視圖V_Stu2重新命名為V_Student2。在SQLServerManagementStudio查詢編輯器中運(yùn)行如下命令:USESCDBGOEXECsp_rename'V_Stu2','V_Student2'任務(wù)4:重命名視圖【例】將視圖V_Stu2重新命名為V_St68任務(wù)5:視圖的修改和刪除1.視圖的修改視圖的修改是由ALTER語(yǔ)句來(lái)完成的,基本語(yǔ)法如下:ALTERVIEWview_name[WITHENCRYPTION]ASSelect_statement任務(wù)5:視圖的修改和刪除1.視圖的修改69任務(wù)5:視圖的修改和刪除2.視圖的刪除
視圖的刪除是通過(guò)DROP語(yǔ)句來(lái)實(shí)現(xiàn)的?!纠渴褂肨ransact-SQL語(yǔ)句刪除視圖V_Student。
在SQLServerManagementStudio查詢編輯器中運(yùn)行如下命令:USESCDBGODROPV_StudentGO任務(wù)5:視圖的修改和刪除2.視圖的刪除70項(xiàng)目:4SCDB中存儲(chǔ)過(guò)程的創(chuàng)建與管理【任務(wù)描述】當(dāng)用戶使用一串Transact-SQL語(yǔ)句訪問(wèn)服務(wù)器上的數(shù)據(jù)時(shí),首先將Transact-SQL語(yǔ)句發(fā)送到服務(wù)器,由服務(wù)器編譯Transact-SQL語(yǔ)句,并進(jìn)行優(yōu)化產(chǎn)生查詢的執(zhí)行計(jì)劃,之后數(shù)據(jù)庫(kù)引擎執(zhí)行查詢計(jì)劃,最終將執(zhí)行結(jié)果發(fā)回客戶程序。每當(dāng)執(zhí)行一段Transact-SQL語(yǔ)句時(shí),都要重復(fù)以上操作。是否可以免去以上重復(fù)操作,而是將用戶經(jīng)常執(zhí)行的可以實(shí)現(xiàn)某種特殊功能的代碼看成一個(gè)集合,當(dāng)用戶需要使用這段代碼時(shí)直接調(diào)用呢?SQLServer提供了存儲(chǔ)過(guò)程這一數(shù)據(jù)庫(kù)對(duì)象來(lái)解決以上問(wèn)題。項(xiàng)目:4SCDB中存儲(chǔ)過(guò)程的創(chuàng)建與管理【任務(wù)描述】71項(xiàng)目:4SCDB中存儲(chǔ)過(guò)程的創(chuàng)建與管理【任務(wù)目標(biāo)】了解存儲(chǔ)過(guò)程的基本概念和作用;了解存儲(chǔ)過(guò)程的分類;學(xué)會(huì)創(chuàng)建和執(zhí)行存儲(chǔ)過(guò)程的方法;學(xué)會(huì)管理和維護(hù)存儲(chǔ)過(guò)程;掌握存儲(chǔ)過(guò)程的重編譯處理;學(xué)會(huì)系統(tǒng)存儲(chǔ)過(guò)程和擴(kuò)展存儲(chǔ)過(guò)程的調(diào)用。項(xiàng)目:4SCDB中存儲(chǔ)過(guò)程的創(chuàng)建與管理【任務(wù)目標(biāo)】72任務(wù)1:了解存儲(chǔ)過(guò)程的基礎(chǔ)知識(shí)1.存儲(chǔ)過(guò)程的基本概念存儲(chǔ)過(guò)程是在數(shù)據(jù)庫(kù)服務(wù)器端執(zhí)行的一組Transact-SQL語(yǔ)句的集合,經(jīng)編譯后存放在數(shù)據(jù)庫(kù)服務(wù)器中。它能夠向用戶返返回?cái)?shù)據(jù)、向數(shù)據(jù)庫(kù)表中寫(xiě)入和修改數(shù)據(jù),還可以執(zhí)行系統(tǒng)函數(shù)和管理操作。用戶在編程過(guò)程中只需要給出存儲(chǔ)過(guò)程的名稱和必需的參數(shù),就可以方便地調(diào)用它們。任務(wù)1:了解存儲(chǔ)過(guò)程的基礎(chǔ)知識(shí)1.存儲(chǔ)過(guò)程的基本概念73任務(wù)1:了解存儲(chǔ)過(guò)程的基礎(chǔ)知識(shí)2.存儲(chǔ)過(guò)程的特點(diǎn)可以將存儲(chǔ)過(guò)程的特點(diǎn)歸納如下:(1)能夠在單個(gè)存儲(chǔ)過(guò)程中執(zhí)行一系列的Transact-SQL語(yǔ)句,也能夠在一個(gè)存儲(chǔ)過(guò)程中調(diào)用其他的存儲(chǔ)過(guò)程。(2)存儲(chǔ)過(guò)程是保存在服務(wù)器端的已經(jīng)編譯的Transact-SQL語(yǔ)句,因此比一般的Transact-SQL語(yǔ)句執(zhí)行速度快,同時(shí)減少了網(wǎng)絡(luò)流量,節(jié)省大量時(shí)間和數(shù)據(jù)量。(3)存儲(chǔ)過(guò)程可以使用控制流語(yǔ)句和變量,大大增強(qiáng)了SQL的功能。(4)存儲(chǔ)過(guò)程在提交前會(huì)自動(dòng)檢查語(yǔ)法,避免了一些不必要錯(cuò)誤的出現(xiàn)。(5)存儲(chǔ)過(guò)程是管理員放在服務(wù)器端的Transact-SQL語(yǔ)句,可以設(shè)置用戶對(duì)存儲(chǔ)過(guò)程的使用權(quán)限,從而保證了數(shù)據(jù)庫(kù)訪問(wèn)的安全性。任務(wù)1:了解存儲(chǔ)過(guò)程的基礎(chǔ)知識(shí)2.存儲(chǔ)過(guò)程的特點(diǎn)74任務(wù)1:了解存儲(chǔ)過(guò)程的基礎(chǔ)知識(shí)3.存儲(chǔ)過(guò)程的分類
SQLServer2005提供了三種存儲(chǔ)過(guò)程:用戶自定義存儲(chǔ)過(guò)程、系統(tǒng)存儲(chǔ)過(guò)程和擴(kuò)展存儲(chǔ)過(guò)程。(1)用戶自定義存儲(chǔ)過(guò)程用戶自定義存儲(chǔ)過(guò)程也就是用戶自行創(chuàng)建并存儲(chǔ)在用戶數(shù)據(jù)庫(kù)中的存儲(chǔ)過(guò)程,它用于完成用戶指定的某一特定功能(如查詢用戶所需的數(shù)據(jù)信息)。任務(wù)1:了解存儲(chǔ)過(guò)程的基礎(chǔ)知識(shí)3.存儲(chǔ)過(guò)程的分類75任務(wù)1:了解存儲(chǔ)過(guò)程的基礎(chǔ)知識(shí)(2)系統(tǒng)存儲(chǔ)過(guò)程SQLServer2005不僅提供用戶自定義存儲(chǔ)過(guò)程的功能,而且也提供許多可作為工具使用的系統(tǒng)存儲(chǔ)過(guò)程。系統(tǒng)存儲(chǔ)過(guò)程通常使用“sp_”為前綴,主要用于管理SQLServer和顯示有關(guān)數(shù)據(jù)庫(kù)及用戶的信息。(3)擴(kuò)展存儲(chǔ)過(guò)程擴(kuò)展存儲(chǔ)過(guò)程(ExtendedStoredProcedures)是用戶可以使用外部程序語(yǔ)言編寫(xiě)的存儲(chǔ)過(guò)程。任務(wù)1:了解存儲(chǔ)過(guò)程的基礎(chǔ)知識(shí)(2)系統(tǒng)存儲(chǔ)過(guò)程76任務(wù)2:創(chuàng)建和執(zhí)行存儲(chǔ)過(guò)程1.創(chuàng)建和執(zhí)行簡(jiǎn)單存儲(chǔ)過(guò)程(1)創(chuàng)建存儲(chǔ)過(guò)程的SQL語(yǔ)法格式如下:CREATEPROCEDUREprocedure_name[WITHENCRYPTION][WITHRECOMPILE]ASSq1_statement任務(wù)2:創(chuàng)建和執(zhí)行存儲(chǔ)過(guò)程1.創(chuàng)建和執(zhí)行簡(jiǎn)單存儲(chǔ)過(guò)程77任務(wù)2:創(chuàng)建和執(zhí)行存儲(chǔ)過(guò)程(2)執(zhí)行存儲(chǔ)過(guò)程在存儲(chǔ)過(guò)程創(chuàng)建成功后,用戶可以執(zhí)行存儲(chǔ)過(guò)程來(lái)檢查存儲(chǔ)過(guò)程的返回結(jié)果。執(zhí)行存儲(chǔ)過(guò)程主要有兩種方法,一是在SQLServerManagementStudio的查詢編輯器中運(yùn)用Transact-SQL語(yǔ)句執(zhí)行;二是在SQLServerManagementStudio的對(duì)象資源管理器中直接用鼠標(biāo)操作執(zhí)行存儲(chǔ)過(guò)程。任務(wù)2:創(chuàng)建和執(zhí)行存儲(chǔ)過(guò)程(2)執(zhí)行存儲(chǔ)過(guò)程78任務(wù)2:創(chuàng)建和執(zhí)行存儲(chǔ)過(guò)程在SQLServerManagementStudio查詢編輯器中執(zhí)行存儲(chǔ)過(guò)程的操作步驟如下:打開(kāi)SQLServerManagementStudio查詢編輯器;在SQLServerManagementStudio查詢編輯器中輸入執(zhí)行存儲(chǔ)過(guò)程的Transact-SQL語(yǔ)句,然后單擊執(zhí)行。執(zhí)行存儲(chǔ)過(guò)程的Transact-SQL語(yǔ)句基本語(yǔ)法如下:EXECprocedure_name任務(wù)2:創(chuàng)建和執(zhí)行存儲(chǔ)過(guò)程在SQLSer79任務(wù)3:修改存儲(chǔ)過(guò)程1.使用Transact-SQL語(yǔ)句修改存儲(chǔ)過(guò)程修改存儲(chǔ)過(guò)程是由ALTER語(yǔ)句來(lái)完成的,其語(yǔ)法如下:ALTERPROCEDUREprocedure_name[WITHENCRYPTION][WITHRECOMPILE]ASSql_statement任務(wù)3:修改存儲(chǔ)過(guò)程1.使用Transact-SQL語(yǔ)句修80任務(wù)3:修改存儲(chǔ)過(guò)程2.在【對(duì)象資源管理器】面板中修改存儲(chǔ)過(guò)程通過(guò)SQLServerManagementStudio中的【對(duì)象資源管理器】來(lái)修改存儲(chǔ)過(guò)程的具體步驟如下:⑴展開(kāi)SQLServerManagementStudio【對(duì)象資源管理器】中的【數(shù)據(jù)庫(kù)】選項(xiàng),然后展開(kāi)【可編程性】選項(xiàng),如圖所示。⑵展開(kāi)【存儲(chǔ)過(guò)程】選項(xiàng),選中要進(jìn)行修改的存儲(chǔ)過(guò)程,右擊鼠標(biāo),在彈出的菜單中選擇【修改】命令,如圖所示。⑶在彈出的修改存儲(chǔ)過(guò)程窗口中,直接修改該存儲(chǔ)過(guò)程,修改完畢,保存即可。任務(wù)3:修改存儲(chǔ)過(guò)程2.在【對(duì)象資源管理器】面板中修改存儲(chǔ)81任務(wù)4:重命名存儲(chǔ)過(guò)程重命名存儲(chǔ)過(guò)程的具體步驟:①在SQLServerManagementStudio窗口中打開(kāi)【對(duì)象資源管理器】面板,并展開(kāi)數(shù)據(jù)庫(kù)“SCDB”選項(xiàng)。②展開(kāi)【可編程性】選項(xiàng),選擇【存儲(chǔ)過(guò)程】選項(xiàng)。在存儲(chǔ)過(guò)程詳細(xì)列表中,選中存儲(chǔ)過(guò)程db.p_Student2,右擊鼠標(biāo),在彈出的快捷菜單中,選擇【重命名】命令,如圖所示。③輸入存儲(chǔ)過(guò)程的新名稱即可。任務(wù)4:重命名存儲(chǔ)過(guò)程重命名存儲(chǔ)過(guò)程的具體步驟:82任務(wù)5:刪除存儲(chǔ)過(guò)程存儲(chǔ)過(guò)程的刪除常用的方法有兩種,一種是使用Transact-SQL語(yǔ)句來(lái)刪除;另一種是使用SQLServerManagementStudio中的【對(duì)象資源管理器】來(lái)進(jìn)行刪除。1.通過(guò)Transact-SQL語(yǔ)句刪除存儲(chǔ)過(guò)程存儲(chǔ)過(guò)程的刪除是通過(guò)DROP語(yǔ)句來(lái)實(shí)現(xiàn)的。任務(wù)5:刪除存儲(chǔ)過(guò)程存儲(chǔ)過(guò)程的刪除常用的83任務(wù)5:刪除存儲(chǔ)過(guò)程2.使用【對(duì)象資源管理器】刪除存儲(chǔ)過(guò)程以使用SQLServerManagementStudio窗口來(lái)刪除存儲(chǔ)過(guò)程p_StudentNum為例,講述在【對(duì)象資源管理器】中刪除存儲(chǔ)過(guò)程的步驟如下:(1)在SQLServerManagementStudio窗口中打開(kāi)【對(duì)象資源管理器】面板,展開(kāi)SCDB選項(xiàng)。(2)展開(kāi)【可編程性】選項(xiàng),右擊【存儲(chǔ)過(guò)程】選項(xiàng),展開(kāi)【存儲(chǔ)過(guò)程】,選中dbo.p_StudentNum,單擊鼠標(biāo)右鍵,在彈出的快捷菜單中,選擇【刪除】命令即可,如圖所示。任務(wù)5:刪除存儲(chǔ)過(guò)程2.使用【對(duì)象資源管理器】刪除存儲(chǔ)過(guò)程84項(xiàng)目5SCDB中觸發(fā)器的創(chuàng)建與管理【任務(wù)描述】觸發(fā)器是一種特殊的存儲(chǔ)過(guò)程,在滿足某種特定條件時(shí),觸發(fā)器可以自動(dòng)執(zhí)行,完成各種復(fù)雜的任務(wù)。觸發(fā)器通常用于實(shí)現(xiàn)強(qiáng)制業(yè)務(wù)規(guī)則和數(shù)據(jù)完整性?!救蝿?wù)目標(biāo)】了解觸發(fā)器的概念;學(xué)會(huì)創(chuàng)建觸發(fā)器的方法;掌握觸發(fā)器的管理和維護(hù)。項(xiàng)目5SCDB中觸發(fā)器的創(chuàng)建與管理【任務(wù)描述】85任務(wù)1:了解觸發(fā)器的基礎(chǔ)知識(shí)觸發(fā)器是一種特殊類型的存儲(chǔ)過(guò)程。存儲(chǔ)過(guò)程是通過(guò)存儲(chǔ)過(guò)程名被調(diào)用執(zhí)行的,而觸發(fā)器主要是通過(guò)事件觸發(fā)而被執(zhí)行的。觸發(fā)器(Trigger)不僅能實(shí)現(xiàn)完整性規(guī)則,而且能保證一些較復(fù)雜業(yè)務(wù)規(guī)則的實(shí)施。所謂觸發(fā)器就是一類由事件驅(qū)動(dòng)的特殊過(guò)程,一旦由某個(gè)用戶定義,任何用戶對(duì)該觸發(fā)器指定的數(shù)據(jù)進(jìn)行增加、刪除或修改操作時(shí),系統(tǒng)將自動(dòng)激活相應(yīng)的觸發(fā)器,在核心層進(jìn)行集中的完整性控制。任務(wù)1:了解觸發(fā)器的基礎(chǔ)知識(shí)觸發(fā)器是86任務(wù)1:了解觸發(fā)器的基礎(chǔ)知識(shí)2.觸發(fā)器的優(yōu)點(diǎn)(1)強(qiáng)制比CHECK約束更復(fù)雜的數(shù)據(jù)的完整性;(2)使用自定義的錯(cuò)誤提示信息;(3)實(shí)現(xiàn)數(shù)據(jù)庫(kù)中多張表的級(jí)聯(lián)修改;(4)比較數(shù)據(jù)庫(kù)修改前后數(shù)據(jù)的狀態(tài);(5)維護(hù)規(guī)范化數(shù)據(jù)。任務(wù)1:了解觸發(fā)器的基礎(chǔ)知識(shí)2.觸發(fā)器的優(yōu)點(diǎn)87任務(wù)2:
創(chuàng)建觸發(fā)器使用CREATETRIGGER命令創(chuàng)建觸發(fā)器,其基本語(yǔ)法如下:CREATETRIGGERtrigger_nameON{table|view}{FOR|AFTER|INSTEADOF}{[INSERT][,][UPDATE][,][DELETE]}[WITHENCRYPTION]ASIFUPDATE(column_name)[{and|or}UPDATE(column_name)…]sql_statement任務(wù)2:創(chuàng)建觸發(fā)器使用CREATETRIGGER命令創(chuàng)建88任務(wù)2:
創(chuàng)建觸發(fā)器【例】在SCDB數(shù)據(jù)庫(kù)的Student表上創(chuàng)建一個(gè)Student_trigger1的觸發(fā)器,當(dāng)執(zhí)行INSERT操作時(shí),將顯示一條“數(shù)據(jù)插入成功!”的消息。在SQLServerManagementStudio查詢編輯器中運(yùn)行如下命令:USESCDBGOCREATETRIGGERStudent_trigger1ONStudentFORINSERTASPRINT'數(shù)據(jù)插入成功!'GO任務(wù)2:創(chuàng)建觸發(fā)器【例】在SCDB數(shù)據(jù)庫(kù)的Student表89任務(wù)3:管理觸發(fā)器1.查看觸發(fā)器信息(1)使用系統(tǒng)存儲(chǔ)過(guò)程查看觸發(fā)器信息
系統(tǒng)存儲(chǔ)過(guò)程sp_help、sp_helptext、sp_depends和sp_helptrigger分別提供有關(guān)觸發(fā)器的不同信息。(2)使用系統(tǒng)表查看觸發(fā)器信息用戶可以通過(guò)查詢系統(tǒng)表sysobjects得到觸發(fā)器的相關(guān)信息。任務(wù)3:管理觸發(fā)器1.查看觸發(fā)器信息90任務(wù)3:管理觸發(fā)器2.修改觸發(fā)器(1)重命名觸發(fā)器使用sp_rename命令修改觸發(fā)器的名字,其語(yǔ)法格式為:EXECsp_renameoldname.newname其中,oldname:指觸發(fā)器原來(lái)的名稱,newname:指觸發(fā)器的新名稱。任務(wù)3:管理觸發(fā)器2.修改觸發(fā)器91任務(wù)3:管理觸發(fā)器2.修改觸發(fā)器(2)修改觸發(fā)器定義修改觸發(fā)器的具體語(yǔ)法如下:ALTERTRIGGERtrigger_nameON[table|view]{FOR[AFTER|INSTEADOF]}{[INSERT][,][UPDATE][,][DELETE]}[WITHENCRYPTION]ASIFUPDATE(cotumn_name)[{and|or}UPDATE(column_name)…]sql_statesment任務(wù)3:管理觸發(fā)器2.修改觸發(fā)器92任務(wù)3:管理觸發(fā)器3.禁止和啟動(dòng)觸發(fā)器禁用和啟用觸發(fā)器的語(yǔ)法如下:ALTERTABLEtable_name{ENABLE|DISABLE}TRIGGER{ALL|trigger_name[,…n]}任務(wù)3:管理觸發(fā)器3.禁止和啟動(dòng)觸發(fā)器93任務(wù)3:管理觸發(fā)器4.刪除觸發(fā)器(1)使用命令DRDPTRIGGER刪除指定的觸發(fā)器,具體語(yǔ)法形式如下:DROPTRIGGERtrigger_name(2)在【對(duì)象資料管理器】面板中刪除觸發(fā)器按照前面介紹的方法找到相應(yīng)的觸發(fā)器并右擊鼠標(biāo),在彈出的快捷菜單中,選擇【刪除】命令即可。(3)刪除觸發(fā)器所在的表時(shí),SQLserver2005將自動(dòng)刪除與該表相關(guān)的觸發(fā)器。任務(wù)3:管理觸發(fā)器4.刪除觸發(fā)器94項(xiàng)目6SCDB中游標(biāo)的使用【任務(wù)描述】由SELECT語(yǔ)句查詢的結(jié)果是一個(gè)記錄集,即由若干條記錄組成的一個(gè)完整的單元。在實(shí)際應(yīng)用中常常需要從這種記錄集中逐行逐條的進(jìn)行訪問(wèn)。如:在統(tǒng)計(jì)某班某課學(xué)生成績(jī)分布的查詢結(jié)果集中,用戶往往希望逐行訪問(wèn)記錄,以便知道每個(gè)同學(xué)這門(mén)課的成績(jī)是多少,據(jù)此判斷成績(jī)是優(yōu)、良、中、及格還是不及格。使用游標(biāo)便可解決這類問(wèn)題。項(xiàng)目6SCDB中游標(biāo)的使用【任務(wù)描述】95項(xiàng)目6SCDB中游標(biāo)的使用【任務(wù)目標(biāo)】了解游標(biāo)的概念及其操作,了解常用游標(biāo)的類型、使用游標(biāo)的步驟,掌握游標(biāo)的打開(kāi)方法,學(xué)會(huì)利用游標(biāo)提取數(shù)據(jù)、修改數(shù)據(jù)和刪除數(shù)據(jù),掌握游標(biāo)關(guān)閉及釋放方法。項(xiàng)目6SCDB中游標(biāo)的使用【任務(wù)目標(biāo)】96任務(wù)1:了解游標(biāo)的基礎(chǔ)知識(shí)1.游標(biāo)的定義游標(biāo)(Cursor)是允許用戶能夠從SELECT語(yǔ)句查詢的結(jié)果集中,逐條逐行地訪問(wèn)記錄,用戶可以按照自己的意愿逐行地顯示、修改或刪除這些記錄的數(shù)據(jù)訪問(wèn)處理機(jī)制。游標(biāo)可以理解為數(shù)據(jù)表記錄逐行訪問(wèn)(移動(dòng)當(dāng)前記錄和在當(dāng)前記錄上進(jìn)行訪問(wèn))的位置指針。任務(wù)1:了解游標(biāo)的基礎(chǔ)知識(shí)1.游標(biāo)的定義97任務(wù)1:了解游標(biāo)的基礎(chǔ)知識(shí)1.游標(biāo)的定義游標(biāo)是一個(gè)與Transact-SQL的SELECT語(yǔ)句相關(guān)聯(lián)的符號(hào)名,它使用戶可逐行訪問(wèn)由SQLServer返回的結(jié)果集。游標(biāo)包括以下兩個(gè)部分:(1)游標(biāo)結(jié)果集(CursorResultSet):由定義該游標(biāo)的SELECT語(yǔ)句返回的行集合。(2)游標(biāo)位置(CursorFasitian):指向這個(gè)行集合某一行的當(dāng)前指針。任務(wù)1:了解游標(biāo)的基礎(chǔ)知識(shí)1.游標(biāo)的定義98任務(wù)1:了解游標(biāo)的基礎(chǔ)知識(shí)2.游標(biāo)的優(yōu)點(diǎn)從游標(biāo)定義上可以得到游標(biāo)的優(yōu)點(diǎn),這些優(yōu)點(diǎn)使游標(biāo)在實(shí)際應(yīng)用中發(fā)揮了重要的作用:(1)允許程序?qū)τ刹樵冋Z(yǔ)句SELECT返回的行集合中的每一行執(zhí)行相同或不同的操作,而不是對(duì)整個(gè)行集合執(zhí)行同一個(gè)操作。(2)提供對(duì)基于游標(biāo)位置的表中的行進(jìn)行刪除和更新的能力。(3)游標(biāo)實(shí)際上是作為面向集合的數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)和面向行的程序設(shè)計(jì)之間的橋梁。任務(wù)1:了解游標(biāo)的基礎(chǔ)知識(shí)2.游標(biāo)的優(yōu)點(diǎn)99任務(wù)1:了解游標(biāo)的基礎(chǔ)知識(shí)3.聲明游標(biāo)聲明游標(biāo)的語(yǔ)法形式為:DECLAREcursor_nameCURSORFORselect_statement[FOR{READONLY|UPDATE[OFcolumn_name_list[,…]]}]任務(wù)1:了解游標(biāo)的基礎(chǔ)知識(shí)3.聲明游標(biāo)100任務(wù)2:
使用游標(biāo)1.打開(kāi)游標(biāo)可使用OPEN語(yǔ)句打開(kāi)游標(biāo),語(yǔ)法格式如下:OPEN{[GLOBAL]cursor_name|@cursor_variable_name}任務(wù)2:使用游標(biāo)1.打開(kāi)游標(biāo)101任務(wù)2:
使用游標(biāo)2.讀取游標(biāo)中的數(shù)據(jù)一旦游標(biāo)被打開(kāi),就可以從該游標(biāo)集合中讀取數(shù)據(jù)了。從游標(biāo)中得到一行數(shù)據(jù)的操作稱為一個(gè)FETCH。該FETCH操作包含如下操作:FETCHFIRST:獲取游標(biāo)中的第一行數(shù)據(jù)。如果在打開(kāi)游標(biāo)之后第一次執(zhí)行該操作,則將獲取游標(biāo)中的第一行數(shù)據(jù)。FETCHNEXT:獲取下一行數(shù)據(jù)。如果在打開(kāi)游標(biāo)之后第一次執(zhí)行該操作,則將獲取游標(biāo)中的第一行數(shù)據(jù)。FETCHPRIOR:獲取上一行數(shù)據(jù)。如果在打開(kāi)游標(biāo)之后第一次執(zhí)行該操作,則得不到任何數(shù)據(jù)。FETCHLAST:獲取游標(biāo)中最后行數(shù)據(jù)。如果在打開(kāi)游標(biāo)之后第一次執(zhí)行該操作,則將獲取游標(biāo)中的最后一行數(shù)據(jù)。FETCHABSOLUTEn:如果n是一個(gè)正整數(shù),則該操作會(huì)獲取游標(biāo)中從第一行開(kāi)始的n行數(shù)據(jù);如果n是一個(gè)負(fù)整數(shù),那么該操作會(huì)獲取游標(biāo)中從末尾行向前數(shù)的n行數(shù)據(jù)。如果n是0則不會(huì)獲取數(shù)據(jù)。FETCHRELATIVEn:相對(duì)上一個(gè)被獲取的行而言,該操作將獲取該行前面或者后面的n行數(shù)據(jù)。如果n是正數(shù),則獲取該行之后的n行數(shù)據(jù)。如果n是負(fù)數(shù),則獲取該行之前的n行數(shù)據(jù)。如果n的值是0,則再次獲取該行的數(shù)據(jù)。任務(wù)2:使用游標(biāo)2.讀取游標(biāo)中的數(shù)據(jù)102任務(wù)2:
使用游標(biāo)3.使用游標(biāo)修改數(shù)據(jù)游標(biāo)不僅能夠讀取表中的數(shù)據(jù),同時(shí)還可修改(更新和刪除)表中的行。SQLServer提供了WHERECURRENTOFcursor_name子句對(duì)游標(biāo)集合中的當(dāng)前行進(jìn)行更新和刪除操作,下面用一個(gè)實(shí)例來(lái)說(shuō)明如何使用該WHERE子句修改表中的內(nèi)容:【例5.65】利用游標(biāo)Student_cursor2,刪除表Student中的數(shù)據(jù)。在SQLServerManagementStudio查詢編輯器中運(yùn)行如下代碼。任務(wù)2:使用游標(biāo)3.使用游標(biāo)修改數(shù)據(jù)103學(xué)習(xí)情景5:數(shù)據(jù)庫(kù)其它對(duì)象
的創(chuàng)建與管理學(xué)習(xí)情景5:數(shù)據(jù)庫(kù)其它對(duì)象
104單元描述數(shù)據(jù)庫(kù)和數(shù)據(jù)表創(chuàng)建完畢,并不表示數(shù)據(jù)庫(kù)的設(shè)計(jì)就結(jié)束了,用戶往往會(huì)對(duì)數(shù)據(jù)庫(kù)有一些特殊的要求,比如:數(shù)據(jù)庫(kù)是否具備數(shù)據(jù)完整性關(guān)系?如何提高數(shù)據(jù)的檢索速度?當(dāng)需要頻繁執(zhí)行某一特殊任務(wù)時(shí),如何避免重復(fù)編寫(xiě)程序代碼?在SQLServer2005中提供了一系列數(shù)據(jù)庫(kù)對(duì)象來(lái)解決類似以上的問(wèn)題。本學(xué)習(xí)情景將重點(diǎn)介紹在SCDB數(shù)據(jù)庫(kù)中創(chuàng)建和管理這些數(shù)據(jù)庫(kù)對(duì)象(約束、索引、視圖、存儲(chǔ)過(guò)程、觸發(fā)器等)來(lái)解決實(shí)際問(wèn)題的過(guò)程。單元描述數(shù)據(jù)庫(kù)和數(shù)據(jù)表創(chuàng)建完畢,并不表示105學(xué)習(xí)目標(biāo)學(xué)會(huì)數(shù)據(jù)完整性的設(shè)計(jì);學(xué)會(huì)索引的創(chuàng)建與管理;學(xué)會(huì)視圖的創(chuàng)建與管理;學(xué)會(huì)存儲(chǔ)過(guò)程的創(chuàng)建與管理;學(xué)會(huì)觸發(fā)器的創(chuàng)建與管理;學(xué)會(huì)游標(biāo)的創(chuàng)建與使用;了解游標(biāo)的使用方法。學(xué)習(xí)目標(biāo)學(xué)會(huì)數(shù)據(jù)完整性的設(shè)計(jì);106項(xiàng)目1:SCDB中數(shù)據(jù)完整性的設(shè)計(jì)【任務(wù)描述】數(shù)據(jù)庫(kù)中的數(shù)據(jù)是從外界輸入的,而數(shù)據(jù)的輸入由于種種原因,會(huì)輸入無(wú)效或錯(cuò)誤的信息。那么保證數(shù)據(jù)正確性、一致性和可靠性,就成了數(shù)據(jù)庫(kù)系統(tǒng)關(guān)注的重要問(wèn)題。SQLServer提供了數(shù)據(jù)完整性的設(shè)計(jì)來(lái)解決以上問(wèn)題,具體可以通過(guò)創(chuàng)建約束、默認(rèn)、規(guī)則、用戶自定義函數(shù)來(lái)解決。項(xiàng)目1:SCDB中數(shù)據(jù)完整性的設(shè)計(jì)【任務(wù)描述】107項(xiàng)目1:SCDB中數(shù)據(jù)完整性的設(shè)計(jì)【任務(wù)目標(biāo)】了解數(shù)據(jù)完整性的基本概念;掌握創(chuàng)建和使用約束來(lái)保證數(shù)據(jù)的完整性;掌握創(chuàng)建、綁定、解綁定和刪除默認(rèn)值的方法;掌握創(chuàng)建、綁定、解綁定和刪除規(guī)則的方法;掌握創(chuàng)建、綁定、使用和刪除用戶自定義完整性的方法。項(xiàng)目1:SCDB中數(shù)據(jù)完整性的設(shè)計(jì)【任務(wù)目標(biāo)】108任務(wù)1了解數(shù)據(jù)完整性的基礎(chǔ)知識(shí)數(shù)據(jù)的完整性是指存儲(chǔ)在數(shù)據(jù)庫(kù)中數(shù)據(jù)的正確性、一致性和可靠性。根據(jù)數(shù)據(jù)的完整性所作用的數(shù)據(jù)庫(kù)對(duì)象和范圍的不同,數(shù)據(jù)的完整性分為實(shí)體完整性、域完整性、參照完整性和用戶定義完整性4種。任務(wù)1了解數(shù)據(jù)完整性的基礎(chǔ)知識(shí)數(shù)據(jù)的完整性109任務(wù)1了解數(shù)據(jù)完整性的基礎(chǔ)知識(shí)1、實(shí)體完整性實(shí)體完整性也可稱表的完整性。它用于保證數(shù)據(jù)庫(kù)中數(shù)據(jù)表的每一個(gè)特定實(shí)體都是唯一的,可以通過(guò)主鍵約束(PRIMARYKEY)、唯一鍵約束(UNIQUE)、索引或標(biāo)識(shí)屬性(IDENTITY)來(lái)實(shí)現(xiàn)。任務(wù)1了解數(shù)據(jù)完整性的基礎(chǔ)知識(shí)1、實(shí)體完整性110任務(wù)1了解數(shù)據(jù)完整性的基礎(chǔ)知識(shí)2、域完整性域完整性也可稱列完整性,用以指定列的數(shù)據(jù)輸入是否具有正確的數(shù)據(jù)類型、格式以及有效的數(shù)據(jù)范圍。任務(wù)1了解數(shù)據(jù)完整性的基礎(chǔ)知識(shí)2、域完整性111任務(wù)1了解數(shù)據(jù)完整性的基礎(chǔ)知識(shí)3、參照完整性參照完整性是保證參照與被參照表中數(shù)據(jù)的一致性。例如,在學(xué)生表Student中有學(xué)生的學(xué)號(hào)StudentID且在選課表SC中也有學(xué)號(hào)StudentID,而且兩個(gè)表的學(xué)號(hào)StudentID值必須一致,如果在輸入過(guò)程中出現(xiàn)錯(cuò)誤且又沒(méi)有被系統(tǒng)檢查出來(lái),那么數(shù)據(jù)之間將會(huì)造成混亂。任務(wù)1了解數(shù)據(jù)完整性的基礎(chǔ)知識(shí)3、參照完整性112任務(wù)1了解數(shù)據(jù)完整性的基礎(chǔ)知識(shí)4、用戶定義完整性用戶定義完整性允許用戶定義不屬于其他任何完整性分類的特定規(guī)則。所有的完整性類型都支持用戶定義完整性。用戶定義的完整性主要通過(guò)使用觸發(fā)器和存儲(chǔ)過(guò)程來(lái)強(qiáng)制實(shí)施完整性。存儲(chǔ)過(guò)程和觸發(fā)器的相關(guān)知識(shí)在后續(xù)任務(wù)中介紹。任務(wù)1了解數(shù)據(jù)完整性的基礎(chǔ)知識(shí)4、用戶定義完整性113任務(wù)2:
約束的實(shí)現(xiàn)1.約束的類型約束是SQLServer強(qiáng)制實(shí)行的應(yīng)用規(guī)則,它通過(guò)限制列、行和表中的數(shù)據(jù)來(lái)保證數(shù)據(jù)的完整性。當(dāng)刪除表時(shí),表所帶的約束也隨之被刪除。
常用的約束包括CHECK約束、PRIMARYKEY約束、FOREIGNKEY約束、UNIQUE約束和DEFAULT約束。任務(wù)2:約束的實(shí)現(xiàn)1.約束的類型114任務(wù)2:
約束的實(shí)現(xiàn)(1)CHECK約束CHECK約束用于限制輸入一列或多列的值的范圍,通過(guò)邏輯表達(dá)式來(lái)判斷數(shù)據(jù)的有效性,也就是一個(gè)列的輸入內(nèi)容必須滿足CHECK約束的條件,否則,數(shù)據(jù)無(wú)法正常輸入,從而強(qiáng)制數(shù)據(jù)的域完整性。任務(wù)2:約束的實(shí)現(xiàn)(1)CHECK約束115任務(wù)2:
約束的實(shí)現(xiàn)(2)DEFAULT約束
若在表中某列定義了DEFAULT約束,用戶在插入新的數(shù)據(jù)行時(shí),如果該列沒(méi)有指定數(shù)據(jù),那么系統(tǒng)將默認(rèn)值賦給該列,當(dāng)然該默認(rèn)值也可以是空值(NULL)。任務(wù)2:約束的實(shí)現(xiàn)(2)DEFAULT約束116任務(wù)2:
約束的實(shí)現(xiàn)(3)PRIMARYKEY約束在表中經(jīng)常有一列或多列的組合,其值能唯一標(biāo)識(shí)表中的每一行。這樣的一列或多列成為表的主鍵(PrimaryKey),通過(guò)它可以強(qiáng)制表的實(shí)體完整性。一個(gè)表只能有一個(gè)主鍵,而且主鍵約束中的列不能為空值。任務(wù)2:約束的實(shí)現(xiàn)(3)PRIMARYKEY約束117任務(wù)2:
約束的實(shí)現(xiàn)(4)FOREIGNKEY約束外健(ForeignKey)是用于建立和加強(qiáng)兩個(gè)表(主表與從表)的一列或多列數(shù)據(jù)之間的連接,當(dāng)添加、修改或刪除數(shù)據(jù)時(shí),通過(guò)參照完整性來(lái)保證它們之間的數(shù)據(jù)的一致性。任務(wù)2:約束的實(shí)現(xiàn)(4)FOREIGNKEY約束118任務(wù)2:
約束的實(shí)現(xiàn)(5)UNIQUE約束UNIQUE約束用于確保表中的兩個(gè)數(shù)據(jù)行在非主鍵中沒(méi)有相同的列值。與PRIMARYKEY'約束類似,UNIQUE約束也強(qiáng)制唯一性,為表中的一列或多列提供實(shí)體完整性。但UNIQUE約束用于非主健的一列或多列組合,且一個(gè)表可以定義多個(gè)UNIQUE約束。另外,UNIQUE約束可以用于定義多列組合,且一個(gè)表可以定義多個(gè)UNIQUE約束,UNIQUE約束可以用于定義允許空值的列;而PRIMAYRKEY約束只能用在唯一列上,且不能為空值。任務(wù)2:約束的實(shí)現(xiàn)(5)UNIQUE約束119任務(wù)2:
約束的實(shí)現(xiàn)2.約束的創(chuàng)建、查看與刪除約束的創(chuàng)建、查看與刪除等操作均可在SQLServerManagementStudio的【對(duì)象資源管理器】面板中進(jìn)行,也可使用Transact-SQL語(yǔ)句進(jìn)行。任務(wù)2:約束的實(shí)現(xiàn)2.約束的創(chuàng)建、查看與刪除120任務(wù)2:
約束的實(shí)現(xiàn)(1)CHECK約束的創(chuàng)建、查看和刪除【例】在學(xué)生表(Student)中定義學(xué)生的性別Sex列只能是“男”或“女”,從而避免用戶輸入其他的值。要解決此問(wèn)題,需要用到CHECK約束,使學(xué)生性別列的值只有“男”或“女”兩種可能,如果用戶輸入其他值,系統(tǒng)均提示用戶輸入無(wú)效。任務(wù)2:約束的實(shí)現(xiàn)(1)CHECK約束的創(chuàng)建、查看和刪除121任務(wù)2:
約束的實(shí)現(xiàn)①在SQLServerManagementStudio的【對(duì)象資源管理器】中選取【數(shù)據(jù)庫(kù)】選項(xiàng)下的SCDB數(shù)據(jù)庫(kù)。②展開(kāi)數(shù)據(jù)庫(kù)SCDB,并展開(kāi)數(shù)據(jù)庫(kù)SCDB目錄下的【表】,右擊“dbo.Student”選項(xiàng),在彈出的快捷菜單中,選擇【設(shè)計(jì)(G)】命令,打開(kāi)【設(shè)計(jì)表】窗口,選中“Sex”,然后,單擊【菜單欄】中的【表設(shè)計(jì)器】窗口工具欄上的【CHECK約束】命令,如圖所示;或者將鼠標(biāo)放在列“Sex”上,右擊鼠標(biāo),在彈出的快捷菜單中,選擇【CHECK約束】命令,如圖所示。任務(wù)2:約束的實(shí)現(xiàn)①在SQLServerManagem122任務(wù)2:
約束的實(shí)現(xiàn)③在彈出的【CHECK約束】窗口中單擊【添加】按鈕,如圖所示。④單擊“表達(dá)式”后面的
按鈕,進(jìn)入如圖所示的CHECK約束表達(dá)式的界面,在“表達(dá)式”文本框中輸入約束表達(dá)式“Sex='男'ORSex='女',如圖所示。然后,單擊“確定”按鈕。任務(wù)2:約束的實(shí)現(xiàn)③在彈出的【CHECK約束】窗口中單擊【123任務(wù)2:
約束的實(shí)現(xiàn)⑤在【設(shè)計(jì)表】窗口單擊
(【保存】),即完成了創(chuàng)建并保存CHECK約束的操作。以后用戶輸入數(shù)據(jù)時(shí),若輸入性別不是“男”或“女”,系統(tǒng)將報(bào)告輸入無(wú)效。
要想刪除上面創(chuàng)建的CHECK約束,選擇該約束,右擊鼠標(biāo),在彈出的菜單中選擇【刪除】命令,如圖所示,然后單擊“關(guān)閉”按鈕,即可刪除CHECK約束。任務(wù)2:約束的實(shí)現(xiàn)⑤在【設(shè)計(jì)表】窗口單擊(【保存】),即124任務(wù)2:
約束的實(shí)現(xiàn)【例】使用Transact-SQL語(yǔ)句為學(xué)生表Student創(chuàng)建CHECK約束。在SQLServerManagementStudio查詢編輯器中運(yùn)行以下代碼:U
溫馨提示
- 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年金鄉(xiāng)縣招教考試備考題庫(kù)附答案解析
- 2024年鄭州醫(yī)藥健康職業(yè)學(xué)院馬克思主義基本原理概論期末考試題附答案解析(必刷)
- 2024年溫州理工學(xué)院馬克思主義基本原理概論期末考試題帶答案解析(必刷)
- 2025年?yáng)|安縣幼兒園教師招教考試備考題庫(kù)含答案解析(必刷)
- 2025年扎蘭屯職業(yè)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性考試題庫(kù)帶答案解析
- 2025年武漢工程科技學(xué)院馬克思主義基本原理概論期末考試模擬題及答案解析(奪冠)
- 2025年巨野縣招教考試備考題庫(kù)附答案解析
- 2025年淮南職業(yè)技術(shù)學(xué)院馬克思主義基本原理概論期末考試模擬題附答案解析(必刷)
- 2024年陽(yáng)城縣招教考試備考題庫(kù)附答案解析(奪冠)
- 2025年豫北醫(yī)學(xué)院馬克思主義基本原理概論期末考試模擬題帶答案解析(奪冠)
- 挖機(jī)、裝載機(jī)三級(jí)安全教育試卷(附答案)
- 人機(jī)共智?創(chuàng)變未來(lái):千夢(mèng)引擎AI內(nèi)容營(yíng)銷白皮書(shū)
- 2026年及未來(lái)5年市場(chǎng)數(shù)據(jù)中國(guó)帶電作業(yè)機(jī)器人行業(yè)市場(chǎng)需求預(yù)測(cè)及投資規(guī)劃建議報(bào)告
- 2026年杭州職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)附答案解析
- 四川省瀘州市2025-2026學(xué)年高一上學(xué)期期末質(zhì)量監(jiān)測(cè)數(shù)學(xué)試題(含答案)
- 北京市豐臺(tái)區(qū)2026屆(年)高三年級(jí)(上)學(xué)期期末考試英語(yǔ)試題卷+答案
- 合伙公司退股協(xié)議書(shū)
- Ozon培訓(xùn)課件教學(xué)課件
- 2025年民航概論試題及答案判斷
- 2023-2025年浙江中考數(shù)學(xué)試題分類匯編:概率與統(tǒng)計(jì)(解析版)
- GB/T 10046-2008銀釬料
評(píng)論
0/150
提交評(píng)論