視圖的規(guī)劃與操作課件_第1頁
視圖的規(guī)劃與操作課件_第2頁
視圖的規(guī)劃與操作課件_第3頁
視圖的規(guī)劃與操作課件_第4頁
視圖的規(guī)劃與操作課件_第5頁
已閱讀5頁,還剩107頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

視圖的規(guī)劃與操作6、黃金時代是在我們的前面,而不在我們的后面。7、心急吃不了熱湯圓。8、你可以很有個性,但某些時候請收斂。9、只為成功找方法,不為失敗找借口(蹩腳的工人總是說工具不好)。10、只要下定決心克服恐懼,便幾乎能克服任何恐懼。因為,請記住,除了在腦海中,恐懼無處藏身。--戴爾.卡耐基。視圖的規(guī)劃與操作視圖的規(guī)劃與操作6、黃金時代是在我們的前面,而不在我們的后面。7、心急吃不了熱湯圓。8、你可以很有個性,但某些時候請收斂。9、只為成功找方法,不為失敗找借口(蹩腳的工人總是說工具不好)。10、只要下定決心克服恐懼,便幾乎能克服任何恐懼。因為,請記住,除了在腦海中,恐懼無處藏身。--戴爾.卡耐基。優(yōu)秀精品課件文檔資料SQLServer第9章視圖的規(guī)劃與操作視圖的規(guī)劃與操作6、黃金時代是在我們的前面,而不在我們的后面1視圖的規(guī)劃與操作課件2視圖的規(guī)劃與操作課件3視圖的規(guī)劃與操作課件4視圖的規(guī)劃與操作課件59.1視圖的作用與規(guī)劃視圖是關(guān)系數(shù)據(jù)庫系統(tǒng)提供給用戶以多種角度觀察數(shù)據(jù)庫中數(shù)據(jù)的重要機制。視圖對應(yīng)于三級模式中的外模式(用戶模式),它是從一個或幾個基本表導(dǎo)出的表,由CREATEVIEW命令創(chuàng)建。視圖又稱為虛擬表,因為數(shù)據(jù)庫中存放著視圖的定義及其關(guān)聯(lián)的基本表名等信息,而不存放視圖對應(yīng)的數(shù)據(jù)。視圖一經(jīng)定義,就可以和基本表一樣被查詢、被刪除,但對視圖的更新(增加、刪除、修改)操作則有一定的限制。9.1視圖的作用與規(guī)劃視圖是關(guān)系數(shù)據(jù)庫系統(tǒng)提供給用戶以多69.1.1視圖的作用數(shù)據(jù)庫使用視圖機制主要有以下優(yōu)點:(1)視圖能夠簡化用戶的操作視圖機制使用戶可以將注意力集中在所關(guān)心的數(shù)據(jù)上。(2)視圖使用戶能以多種角度看待同一數(shù)據(jù)視圖機制能使不同崗位、不同職責(zé)、不同需求的用戶按照自己的方式看待同一數(shù)據(jù)(3)視圖為數(shù)據(jù)庫重構(gòu)提供了一定程度的邏輯獨立性。

(4)視圖能夠?qū)C密數(shù)據(jù)提供安全保護對不同的用戶定義不同的視圖,使機密數(shù)據(jù)不出現(xiàn)在不應(yīng)看到這些數(shù)據(jù)的用戶視圖上,這樣視圖機制就自動提供了對機密數(shù)據(jù)的安全保護功能。9.1.1視圖的作用數(shù)據(jù)庫使用視圖機制主要有以下優(yōu)點79.1.2視圖的規(guī)劃在設(shè)計好數(shù)據(jù)庫的全局邏輯結(jié)構(gòu)后,還應(yīng)該根據(jù)局部應(yīng)用的需求,結(jié)合DBMS的特點,設(shè)計局部應(yīng)用的數(shù)據(jù)庫局部邏輯結(jié)構(gòu),即設(shè)計更符合局部用戶需要的用戶視圖。定義數(shù)據(jù)庫全局邏輯結(jié)構(gòu)主要從系統(tǒng)的時間效率、空間效率、易維護等角度出發(fā)。定義用戶局部視圖時可以注重考慮用戶的習(xí)慣與方便。9.1.2視圖的規(guī)劃在設(shè)計好數(shù)據(jù)庫的全局邏輯結(jié)構(gòu)后,還應(yīng)89.1.2視圖的規(guī)劃定義用戶局部視圖時可以主要考慮以下幾個方面:(1)使用更符合用戶習(xí)慣的別名在設(shè)計數(shù)據(jù)庫總體結(jié)構(gòu)時,同一關(guān)系和屬性具有唯一的名字,但是,在局部應(yīng)用中,對同一關(guān)系或?qū)傩?,有自己更加?xí)慣的名字。我們可以用視圖機制在設(shè)計用戶視圖時重新定義某些屬性名,使其與用戶習(xí)慣一致,以方便使用。

(2)可以對不同級別的用戶定義不同的視圖,以保證系統(tǒng)的安全性。

(3)簡化用戶對系統(tǒng)的使用如果某些局部應(yīng)用中經(jīng)常要使用某些很復(fù)雜的查詢,為了方便用戶,可以將這些復(fù)雜查詢定義為視圖,用戶每次只對定義好的視圖進行查詢,大大簡化了用戶的使用。

9.1.2視圖的規(guī)劃定義用戶局部視圖時可以主要考慮以99.2視圖操作

9.2.1創(chuàng)建視圖SQLSERVER提供了使用SSMS和SQL命令兩種方法來創(chuàng)建視圖。在創(chuàng)建或使用視圖時應(yīng)該注意到以下情況:只能在當(dāng)前數(shù)據(jù)庫中創(chuàng)建視圖,在視圖中最多只能引用1024列;如果視圖引用的表被刪除,則當(dāng)使用該視圖時將返回一條錯誤信息,如果創(chuàng)建具有相同的表的結(jié)構(gòu)新表來替代已刪除的表視圖則可以使用,否則必須重新創(chuàng)建視圖;如果視圖中某一列是函數(shù)、數(shù)學(xué)表達式、常量或來自多個表的列名相同,則必須為列定義名字;定義視圖的查詢語句不能包含COMPUTE或COMPUTEBY子句;不能包含ORDERBY子句,除非在SELECT語句的選擇列表中也有一個TOP子句;不能包含INTO關(guān)鍵字;不能引用臨時表或表變量。不能在視圖上創(chuàng)建全文索引、規(guī)則、默認值和after觸發(fā)器;不能在規(guī)則、缺省、觸發(fā)器的定義中引用視圖;不能創(chuàng)建臨時視圖,也不能在臨時表上建立視圖。

9.2視圖操作9.2.1創(chuàng)建視圖101.使用SQLSERVER企業(yè)管理器來創(chuàng)建視圖在SQLSERVER中使用SSMS來創(chuàng)建視圖。步驟如下:①啟動SSMS,登錄到指定的服務(wù)器;②打開要創(chuàng)建視圖的數(shù)據(jù)庫文件夾,選中‘視圖’圖標,此時在右面的窗格中顯示當(dāng)前數(shù)據(jù)庫的所有視圖,右擊圖標,在彈出菜單中選擇‘新建視圖’選項,打開‘新建視圖’對話框。在‘新建視圖’對話框中共有四個區(qū):表區(qū)、列區(qū)SQLscript區(qū)、數(shù)據(jù)結(jié)果區(qū),當(dāng)然剛打開時是空白。1.使用SQLSERVER企業(yè)管理器來創(chuàng)建視圖在SQLS112.Transact-SQL命令創(chuàng)建視圖使用Transact-SQL命令CREATEVIEW創(chuàng)建視圖。語法格式:CREATEVIEW[<database_name>.][<owner>.]view_name[(column[,...n])][WITH<view_attribute>[,...n]]ASselect_statement[WITHCHECKOPTION]<view_attribute>::={ENCRYPTION|SCHEMABINDING|VIEW_METADATA}2.Transact-SQL命令創(chuàng)建視圖使用Transac122.Transact-SQL命令創(chuàng)建視圖參數(shù)說明:(1)view_name:是視圖的名稱。視圖名稱必須符合標識符規(guī)則??梢赃x擇是否指定視圖所有者名稱。(2)Column:是視圖中的列名。只有在下列情況下,才必須命名CREATEVIEW中的列:當(dāng)列是從算術(shù)表達式、函數(shù)或常量派生的,兩個或更多的列可能會具有相同的名稱(通常是因為聯(lián)接),視圖中的某列被賦予了不同于派生來源列的名稱,以便符合用戶習(xí)慣。還可以在SELECT語句中指派列名。如果未指定column,則視圖列與SELECT語句中的列具有相同的名稱。2.Transact-SQL命令創(chuàng)建視圖參數(shù)說明:132.Transact-SQL命令創(chuàng)建視圖(3)AS:是視圖要執(zhí)行的操作。(4)select_statement:是定義視圖的SELECT語句。該語句可以使用多個表或其它視圖。若要從創(chuàng)建視圖的SELECT子句所引用的對象中選擇,必須具有適當(dāng)?shù)臋?quán)限。視圖不必是具體某個表的行和列的簡單子集??梢杂镁哂腥我鈴?fù)雜性的SELECT子句,使用多個表或其它視圖來創(chuàng)建視圖。在索引視圖定義中,SELECT語句必須是單個表的語句或帶有可選聚合的多表JOIN。在select_statement中可以使用函數(shù)。select_statement可使用多個由UNION或UNIONALL分隔的SELECT語句。2.Transact-SQL命令創(chuàng)建視圖(3)AS:是視圖142.Transact-SQL命令創(chuàng)建視圖(5)WITHCHECKOPTION:強制視圖上執(zhí)行的所有數(shù)據(jù)修改語句都必須符合由select_statement設(shè)置的準則。通過視圖修改行時,WITHCHECKOPTION可確保提交修改后,仍可通過視圖看到修改的數(shù)據(jù)。(6)WITHENCRYPTION:表示SQLServer加密包含CREATEVIEW語句文本的系統(tǒng)表列。使用WITHENCRYPTION可防止將視圖作為SQLServer復(fù)制的一部分發(fā)布。(7)SCHEMABINDING:將視圖綁定到架構(gòu)上。(8)VIEW_METADATA:指定為引用視圖的查詢請求瀏覽模式的元數(shù)據(jù)時,SQLServer將向DBLIB、ODBC和OLEDBAPI返回有關(guān)視圖的元數(shù)據(jù)信息,而不是返回基表或表。2.Transact-SQL命令創(chuàng)建視圖(5)WITHC153.視圖創(chuàng)建實例【例9-1】使用簡單的CREATEVIEW下例創(chuàng)建具有簡單SELECT語句的視圖。當(dāng)需要頻繁地查詢列的某種組合時,簡單視圖非常有用。USE教學(xué)管理IFEXISTS(SELECTTABLE_NAMEFROMINFORMATION_SCHEMA.VIEWSWHERETABLE_NAME='courses_VIEW')DROPVIEWcourses_VIEWGOCREATEVIEWcourses_VIEWASSELECTcno,cname,cbname,cedi,cpubFROMcourseGO3.視圖創(chuàng)建實例【例9-1】使用簡單的CREATEVIE16【例9-2】使用WITHENCRYPTION下例使用WITHENCRYPTION選項和內(nèi)置函數(shù),使用函數(shù)時,必須為派生列指定列名。USE教學(xué)管理CREATEVIEWstu_avg(sno,sname,AVG_SCORE)WITHENCRYPTIONASSELECTS.sno,sname,AVG(grade)FROMstudentS,enrollmentEWHERES.sno=E.snoGROUPBYS.sno,snameGOselectc.id,c.textfromsyscommentsc,sysobjectsowherec.id=o.idand='stu_avg'【例9-2】使用WITHENCRYPTION17【例9-3】使用WITHCHECKOPTION下例顯示名為ISonly的視圖,該視圖使得只能對信息學(xué)院的學(xué)生做數(shù)據(jù)修改。USE教學(xué)管理CREATEVIEWISonlyASSELECTsno,sssn,sname,ssex,smtel,scity,smajor,sdepa,sgpaFROMstudentWHEREsdepa='信息學(xué)院'WITHCHECKOPTIONGOinsertintoisonlyvalues('s060501','11111111','張','男','1111','寧波','會計學(xué)','會計學(xué)院',162)【例9-3】使用WITHCHECKOPTION下例顯示名18【例9-4】如果如本章第一節(jié)概述所述,若某一全國連鎖的銷售企業(yè)將銷售數(shù)據(jù)表按照省份進行水平分割,那我們可以使用以下視圖重新裝載表的數(shù)據(jù)。

Createviewsales_tableAsSelect*fromsales_beijingunionSelect*fromsales_tianjinunionSelect*fromsales_shanghai……【例9-4】如果如本章第一節(jié)概述所述,若某一全國連鎖的銷售企199.2.2特殊類型視圖簡介索引視圖:建立唯一聚簇索引的視圖為索引視圖。分區(qū)視圖:分區(qū)視圖是通過對具有相同結(jié)構(gòu)的成員表使用UNIONALL所定義的視圖。信息架構(gòu)視圖:Microsoft提供的用于SQLServer元數(shù)據(jù)的內(nèi)部視圖,這些視圖符合SQL-92標準中的INFORMATION_SCHEMA定義。9.2.2特殊類型視圖簡介索引視圖:建立唯一聚簇索引的201.索引視圖

由于視圖返回的結(jié)果集與具有行列結(jié)構(gòu)的表有著相同的表格形式,并且我們可以在SQL語句中像引用表那樣引用視圖,所以我們常把視圖稱為虛表。

標準視圖的數(shù)據(jù)的物理存放依然是在數(shù)據(jù)庫的基本表中,只是在執(zhí)行引用了視圖的查詢時,SQLServer才把相關(guān)的基本表中的數(shù)據(jù)合并成視圖的邏輯結(jié)構(gòu)。所以,這類視圖也稱做存儲查詢。1.索引視圖 由于視圖返回的結(jié)果集與具有行列結(jié)構(gòu)的表有著21問題:

由于是在執(zhí)行了引用了視圖的查詢時,SQLServer才把相關(guān)的基本表中的數(shù)據(jù)合并成視圖的邏輯結(jié)構(gòu),那么當(dāng)查詢所引用的視圖包含大量的數(shù)據(jù)行或涉及到對大量數(shù)據(jù)行進行合計運算或連接操作,毋庸置疑,動態(tài)地創(chuàng)建視圖結(jié)果集將給系統(tǒng)帶來沉重的負擔(dān),尤其是經(jīng)常引用這種大容量視圖。

如何解決?問題: 由于是在執(zhí)行了引用了視圖的查詢時,SQLServ22索引視圖:建立唯一聚簇索引的視圖稱做索引視圖在視圖上創(chuàng)建索引可存儲創(chuàng)建索引時存在的數(shù)據(jù)。優(yōu)點:查詢優(yōu)化器開始在查詢中使用視圖索引,而不是直接在FROM子句中命名視圖。這樣一來,可從索引視圖檢索數(shù)據(jù)而無需重新編碼,由此帶來的高效率也使現(xiàn)有查詢獲益。缺點:它降低了對視圖基表數(shù)據(jù)的修改操作的速度,且維護索引視圖比維護基礎(chǔ)表的索引更為復(fù)雜。適合情況:非常頻繁地檢索視圖數(shù)據(jù),或很少修改基表數(shù)據(jù)時。索引視圖:建立唯一聚簇索引的視圖稱做索引視圖23在視圖上創(chuàng)建聚集索引之前,該視圖必須滿足下列要求:

1.當(dāng)執(zhí)行CREATEVIEW語句時,ANSI_NULLS和QUOTED_IDENTIFIER選項必須設(shè)置為ON。2.為執(zhí)行所有CREATETABLE語句以創(chuàng)建視圖引用的表,ANSI_NULLS選項必須設(shè)置為ON。3.該視圖所引用的對象僅包括基礎(chǔ)表而不包括其它的視圖;4.視圖引用的所有基表必須與視圖位于同一個數(shù)據(jù)庫中,并且所有者也與視圖相同。在視圖上創(chuàng)建聚集索引之前,該視圖必須滿足下列要求:1.當(dāng)執(zhí)245.必須使用SCHEMABINDING選項創(chuàng)建視圖。SCHEMABINDING將視圖綁定到基礎(chǔ)基表的架構(gòu)。6.如果視圖引用了用戶自定義函數(shù),那么在創(chuàng)建這些用戶自定義函數(shù)時也必須使用SCHEMABINDING選項

;

7.視圖必須以owner.objectname的形式來使用所引用的表或用戶自定義函數(shù);8.視圖中的表達式所引用的所有函數(shù)必須是確定性的。視圖的規(guī)劃與操作課件259.視圖中的SELECT語句不能包含下列T-SQL語法元素*選擇列表不能使用*或table_name.*語法指定列。必須顯式給出列名。*不能在多個視圖列中指定用作簡單表達式的表的列名。*派生表。*行集函數(shù)。*UNION運算符。*子查詢。*外聯(lián)接或自聯(lián)接。*TOP子句。*ORDERBY子句。*DISTINCT關(guān)鍵字。*COUNT(*)(允許COUNT_BIG(*)。)*AVG、MAX、MIN、STDEV、STDEVP、VAR或VARP聚合函數(shù)。9.視圖中的SELECT語句不能包含下列T-SQL語法元素*26注意:

通常而言,可以在視圖上創(chuàng)建多個索引,但是應(yīng)該記住,在視圖上所創(chuàng)建的第一個索引必須是聚簇索引,然后才可以創(chuàng)建其它的非聚簇索引。注意: 通常而言,可以在視圖上創(chuàng)建多個索引,但是應(yīng)該記住,27如果準備為視圖創(chuàng)建索引,在執(zhí)行CREATEINDEX命令以前,您必須確保以下條件:*CREATEINDEX命令的執(zhí)行者必須是視圖的所有者;*在執(zhí)行創(chuàng)建索引命令期間,ANSI_NULLS、 ANSI_PADDING、ANSI_WARNINGS、

ARITHABORT、CONCAT_NULL_YIELDS_NULL、

QUOTED_IDENTIFIERS諸選項應(yīng)被設(shè)置成ON狀態(tài);*NUMERIC_ROUNDABORT選項被設(shè)置為OFF狀態(tài);*視圖不能包括text、ntext、image類型的數(shù)據(jù)列;*如果視圖定義中的SELECT語句指定了一個GROUPBY子句,則唯一聚集索引的鍵只能引用在GROUPBY子句中指定的列。如果準備為視圖創(chuàng)建索引,在執(zhí)行CREATEINDEX命282.分區(qū)視圖

分區(qū)視圖在一個或多個服務(wù)器間水平連接一組成員表中的分區(qū)數(shù)據(jù),使數(shù)據(jù)看起來就象來自一個表。

MicrosoftSQLServer區(qū)分本地分區(qū)視圖和分布式分區(qū)視圖。 在本地分區(qū)視圖中,所有的參與表和視圖駐留在同一個

SQLServer實例上。 在分布式分區(qū)視圖中,至少有一個參與表駐留在不同的(遠程)服務(wù)器上。此外,SQLServer還區(qū)分可更新的分區(qū)視圖和作為基礎(chǔ)表只讀復(fù)本的視圖。

2.分區(qū)視圖 分區(qū)視圖在一個或多個服務(wù)器間水平連接一組成29 在實現(xiàn)分區(qū)視圖之前,必須先水平分割表。原始表被分成若干個較小的成員表。每個成員表包含與原始表相同數(shù)量的列,并且每一列具有與原始表中的相應(yīng)列同樣的特性(如數(shù)據(jù)類型、大小、排序規(guī)則)。 成員表設(shè)計好后,每個表基于鍵值的范圍存儲原始表的一塊水平區(qū)域。鍵值范圍基于分區(qū)列中的數(shù)據(jù)值。

在實現(xiàn)分區(qū)視圖之前,必須先水平分割表。原始表被分成若干個30例如,正在將一個顧客信息

Customer表分區(qū)成三個表。這些表的

CHECK約束為:--OnServer1:CREATETABLECustomer_33(CustomerIDINTPRIMARYKEYCHECK(CustomerIDBETWEEN1AND32999),...--Additionalcolumndefinitions)

例如,正在將一個顧客信息Customer表分區(qū)成三個表。31--OnServer2:CREATETABLECustomer_66(CustomerIDINTPRIMARYKEYCHECK(CustomerIDBETWEEN33000AND65999),...--Additionalcolumndefinitions)

--OnServer3:CREATETABLECustomer_99(CustomerIDINTPRIMARYKEYCHECK(CustomerIDBETWEEN66000AND99999),...--Additionalcolumndefinitions)--OnServer2:32生成分布式分區(qū)視圖的方式

在每一個含有在其它成員服務(wù)器上執(zhí)行分布式查詢所需連接信息的成員服務(wù)器上添加鏈接服務(wù)器定義。這將使得分布式分區(qū)視圖能夠訪問其它服務(wù)器上的數(shù)據(jù)。

生成分布式分區(qū)視圖的方式 在每一個含有在其它成員服務(wù)器上33建以下分布式分區(qū)視圖:

CREATEVIEWCustomersASSELECT*FROM CompanyDatabase.TableOwner.Customers_33UNIONALLSELECT*FROM Server2.CompanyDatabase.TableOwner.Customers_66UNIONALLSELECT*FROM Server3.CompanyDatabase.TableOwner.Customers_99建以下分布式分區(qū)視圖:CREATEVIEWCustom343.信息架構(gòu)視圖

信息架構(gòu)視圖基于SQL-92標準中針對架構(gòu)視圖的定義,這些視圖獨立于系統(tǒng)表,提供了關(guān)于SQLServer元數(shù)據(jù)的內(nèi)部視圖。 信息架構(gòu)視圖的最大優(yōu)點是,即使我們對系統(tǒng)表進行了重要的修改,應(yīng)用程序也可以正常地使用這些視圖進行訪問。因此對于應(yīng)用程序來說,只要是符合SQL-92標準的數(shù)據(jù)庫系統(tǒng),使用信息架構(gòu)視圖總是可以正常工作的。3.信息架構(gòu)視圖 信息架構(gòu)視圖基于SQL-92標準中針對35表9-2常用的信息架構(gòu)視圖(部分)信息架構(gòu)視圖描

述CHECK_CONSTRAINTS返回有關(guān)列或過程參數(shù)的信息,如是否允許空值,是否為計算列等。COLUMN_DOMAIN_USAGE當(dāng)前數(shù)據(jù)庫中每個帶有用戶定義數(shù)據(jù)類型的列在該視圖中占一行。該信息架構(gòu)視圖返回當(dāng)前用戶對其擁有權(quán)限的對象的有關(guān)信息。COLUMN_PRIVILEGES每一個帶有特權(quán)的列在該視圖中占一行,這個特權(quán)是由當(dāng)前數(shù)據(jù)庫中的當(dāng)前用戶授予的,或者授予了當(dāng)前數(shù)據(jù)庫中的當(dāng)前用戶。該信息架構(gòu)視圖返回當(dāng)前用戶對擁有特權(quán)的列的相關(guān)信息。COLUMNS返回當(dāng)前數(shù)據(jù)庫中當(dāng)前用戶可以訪問的所有列及其基本信息。表9-2常用的信息架構(gòu)視圖(部分)36在訪問信息架構(gòu)視圖時,必須同時說明視圖所屬模式,即采用以下語法格式:INFORMATION_SCHEMA.view_name例如,我們要得到某個表有多少列,可以使用以下語句:SELECTCOUNT(*)FROMINFORMATION_SCHEMA.COLUMNSWHERETABLE_NAME='mytable'在訪問信息架構(gòu)視圖時,必須同時說明視圖所屬模式,即采用以下語379.2.3視圖的修改、重命名和刪除

1.修改視圖 修改一個先前創(chuàng)建的視圖的定義,使用ALTERVIEW語句。ALTERVIEW語句不影響相關(guān)的存儲過程或觸發(fā)器,也不更改權(quán)限。

9.2.3視圖的修改、重命名和刪除1.修改視圖38語法格式:ALTERVIEW[<database_name>.][<owner>.]view_name[(column[,...n])][WITH<view_attribute>[,...n]]ASselect_statement[WITHCHECKOPTION]

<view_attribute>::={ENCRYPTION|SCHEMABINDING|VIEW_METADATA}參數(shù)說明:如果原來的視圖定義是用WITHENCRYPTION或CHECKOPTION創(chuàng)建的,那么只有在ALTERVIEW中也包含這些選項時,這些選項才有效。如果使用ALTERVIEW更改當(dāng)前正在使用的視圖,SQLServer將在該視圖上放一個排它架構(gòu)鎖。當(dāng)鎖已授予,并且該視圖沒有活動用戶時,SQLServer將從過程緩存中刪除該視圖的所有復(fù)本。引用該視圖的現(xiàn)有計劃將繼續(xù)保留在緩存中,但當(dāng)喚醒調(diào)用時將重新編譯。ALTERVIEW可應(yīng)用于索引視圖。然而,ALTERVIEW將無條件地除去視圖上的所有索引。語法格式:參數(shù)說明:39【例9-5】更改視圖

下例創(chuàng)建稱為All_teachers的視圖,該視圖包含全部的教師,并將該視圖的查詢權(quán)授予所有用戶。但是由于該視圖中包含了教師的編號、身份證號等個人信息,需使用ALTERVIEW替換該視圖,不包括編號、身份證號等個人信息,以保護教師個人隱私。【例9-5】更改視圖40--CREATEaVIEWFROMtheteacertablethatcontainsallteachers.CREATEVIEWAll_teacher(tno,tssn,tname,tmtel,tcity,tdepa,trank)ASSELECTtno,tssn,tname,tmtel,tcity,tdepa,trankFROM教學(xué)管理..teacherGO--GrantSELECTpermissionsontheVIEWtopublic.GRANTSELECTONAll_teacherTOpublicGO--CREATEaVIEWFROMtheteac41--TheVIEWneedstobechangedtoexcludethetno,tssn,tcityattributeofallteachersALTERVIEWAll_teacher(tname,tmtel,tdepa,trank)ASSELECTtname,tmtel,tdepa,trankFROM教學(xué)管理..teacherGO--TheVIEWneedstobechange422.視圖重命名

使用系統(tǒng)存儲過程sp_rename對已創(chuàng)建的視圖進行重命名。語法格式:sp_rename[objname=]'object_name',[newname=]'new_name'[,[objtype=]'object_type']【例9-6】將例9-5中稱為All_teacher的視圖重命名。

語法格式:

execsp_rename'All_teacher','All_teacher_view'2.視圖重命名使用系統(tǒng)存儲過程sp_rename對已創(chuàng)建433.刪除視圖

從當(dāng)前數(shù)據(jù)庫中刪除一個或多個視圖??蓤?zhí)行DROPVIEW語句。語法格式:DROPVIEW{View_name}[,...n]【例9-7】下例刪除stu_avg視圖。USE教學(xué)管理IFEXISTS(SELECTTABLE_NAMEFROMINFORMATION_SCHEMA.VIEWSWHERETABLE_NAME='stu_avg')DROPVIEWstu_avgGO3.刪除視圖從當(dāng)前數(shù)據(jù)庫中刪除一個或多個視圖??蓤?zhí)行DRO449.2.4查詢視圖視圖定義后,用戶就可以象對基本表一樣對視圖進行查詢了?!纠?-8】如果要查詢信息學(xué)院每個學(xué)生的情況,只要從視圖ISonly查詢即可。

Select*FromISonly9.2.4查詢視圖視圖定義后,用戶就可以象對基本表一樣45【例9-9】創(chuàng)建信息學(xué)院每個學(xué)生的成績視圖,包括學(xué)生的學(xué)號、姓名、所選課程號、課程名,成績,并進行查詢。USE教學(xué)管理IFEXISTS(SELECTTABLE_NAMEFROMINFORMATION_SCHEMA.VIEWSWHERETABLE_NAME='ISstu_score')DROPVIEWISstu_scoreGOCREATEVIEWISstu_score(sno,sname,cno,cname,grade)ASSELECTS.sno,sname,Co,cname,gradeFROMstudentS,enrollmentE,offeringO,courseCWHERES.sno=E.snoANDE.ono=O.onoANDOo=CoANDsdepa='信息學(xué)院'GO【例9-9】創(chuàng)建信息學(xué)院每個學(xué)生的成績視圖,包括學(xué)生的學(xué)號、469.2.5更新視圖

更新視圖是指通過視圖來插入(INSERT)、刪除(DELETE)和修改(UPDATE)數(shù)據(jù)。由于視圖是不實際存儲數(shù)據(jù)的虛表,因此對視圖的更新,最終要轉(zhuǎn)換為對基本表的更新。

MicrosoftSQLServer以兩種方法增強可更新視圖的類別:

INSTEADOF觸發(fā)器

分區(qū)視圖

9.2.5更新視圖更新視圖是指通過視圖來47

【例9-10】在例9-3中,ISonly是一可更新視圖,但由于視圖使用了withCHECKOPTION選項,只允許更新信息學(xué)院學(xué)生數(shù)據(jù)。下面例子說明,如果沒有withCHECKOPTION選項,則不能保護非視圖數(shù)據(jù)庫被插入、修改和刪除。--首先,創(chuàng)建’會計學(xué)院’學(xué)生視圖,不帶withCHECKOPTION選項

--再用INSERT語句通過ACConly視圖插入一工商管理學(xué)院的學(xué)生

--然后輸入前面不能通過ISonly視圖插入的學(xué)生元組。 【例9-10】在例9-3中,ISonly是一可更新視圖,但48通過視圖對數(shù)據(jù)進行更新與刪除時需要注意到以下幾個問題:(1)不帶withCHECKOPTION選項的視圖,能夠插入非視圖數(shù)據(jù),因為數(shù)據(jù)最終存儲在視圖所引用的基本表,但插入后,不在視圖數(shù)據(jù)集,故無法通過視圖查詢該數(shù)據(jù);(2)執(zhí)行UPDATEDELETE時,所刪除與更新的數(shù)據(jù),必須包含在視圖結(jié)果集中,否則失敗,例子中通過ACConly視圖對‘S060601’學(xué)生數(shù)據(jù)的修改和刪除操作均失??;(3)如果視圖引用多個表時,無法用DELETE命令刪除數(shù)據(jù),若使用UPDATE則應(yīng)與INSERT操作一樣,被更新的列必須屬于同一個表。通過視圖對數(shù)據(jù)進行更新與刪除時需要注意到以下幾個問題:499.3視圖應(yīng)用綜合實例分析

【例9-12】一般學(xué)生信息視圖(視圖1) 由于學(xué)生的一些個人私密信息如:身份證號、出生日期、家庭地址、家庭電話等信息是不能隨便透露的,為保證學(xué)生信息安全,于是為一般用戶創(chuàng)建一般學(xué)生信息視圖如下:

USE教學(xué)管理IFEXISTS(SELECTTABLE_NAMEFROMINFORMATION_SCHEMA.VIEWSWHERETABLE_NAME='G_Stu_VIEW')DROPVIEWG_Stu_VIEWGOCREATEVIEWG_Stu_VIEW(sno,sname,ssex,scity,sdepa,smajor)ASSELECTsno,sname,ssex,scity,sdepa,smajorFROMstudentGO9.3視圖應(yīng)用綜合實例分析【例9-12】一般學(xué)生信息50【例9-13】教師基本信息視圖(視圖2)USE教學(xué)管理IFEXISTS(SELECTTABLE_NAMEFROMINFORMATION_SCHEMA.VIEWSWHERETABLE_NAME='G_T_VIEW')DROPVIEWG_T_VIEWGOCREATEVIEWG_T_VIEW(tno,tname,tsex,tdepa,tmajor,trank,tdegree)ASSELECTtno,tname,tsex,tdepa,tmajor,trank,tdegreeFROMteacerGO【例9-13】教師基本信息視圖(視圖2)51【例9-14】教師及授課信息視圖(視圖3)同樣的道理,為用戶創(chuàng)建教師及授課信息查詢視圖包括教師主講課程以及開課學(xué)期等。USE教學(xué)管理CREATEVIEWG_TC_VIEW(tno,tname,tsex,tdepa,tmajor,trank,tdegree,cname,odate,oterm,otime,otamou,olaca)ASSELECTT.tno,tname,tsex,tdepa,tmajor,trank,tdegree,cname,odate,oterm,otime,otamou,olacaFROMteacerT,offeringO,courseCWHERET.tno=O.tnoANDOo=CoGO【例9-14】教師及授課信息視圖(視圖3)52【例9-15】根據(jù)教學(xué)管理部門對學(xué)生選課管理的需要,建立關(guān)于學(xué)生選課信息的視圖(視圖4)USE教學(xué)管理CREATEVIEWG_SC_VIEW(sno,sname,scometime,sdepa,smajor,sgpa,cno,cname,grade,odate,oterm,otime,otamou,olaca)ASSELECTS.sno,sname,scometime,sdepa,smajor,sgpa,Co,cname,grade,odate,oterm,otime,otamou,olacaFROMstudentT,enrollmentE,offeringO,courseCWHERES.sno=E.snoANDE.ono=O.onoANDOo=CoGO【例9-15】根據(jù)教學(xué)管理部門對學(xué)生選課管理的需要,建立關(guān)于53【例9-16】在G_SC_view視圖的基礎(chǔ)上,創(chuàng)建學(xué)生綜合成績視圖(視圖5)USE教學(xué)管理CREATEVIEWS_SCORE_VIEW(sno,sname,MIN_SCORE,MAX_SCORE,AVG_SCRORE)ASSELECTsno,sname,MIN(grade),MAX(grade),AVG(grade)FROMG_SC_VIEWGROUPBYsno,sname,scometime,sdepa,smajor,sgpaGO【例9-16】在G_SC_view視圖的基礎(chǔ)上,創(chuàng)建學(xué)生綜合54ThankYou!ThankYou!5566、節(jié)制使快樂增加并使享受加強。——德謨克利特

67、今天應(yīng)做的事沒有做,明天再早也是耽誤了?!崴固┞妪R

68、決定一個人的一生,以及整個命運的,只是一瞬之間。——歌德

69、懶人無法享受休息之樂?!伎?/p>

70、浪費時間是一樁大罪過。——盧梭66、節(jié)制使快樂增加并使享受加強。——德謨克利特56視圖的規(guī)劃與操作6、黃金時代是在我們的前面,而不在我們的后面。7、心急吃不了熱湯圓。8、你可以很有個性,但某些時候請收斂。9、只為成功找方法,不為失敗找借口(蹩腳的工人總是說工具不好)。10、只要下定決心克服恐懼,便幾乎能克服任何恐懼。因為,請記住,除了在腦海中,恐懼無處藏身。--戴爾.卡耐基。視圖的規(guī)劃與操作視圖的規(guī)劃與操作6、黃金時代是在我們的前面,而不在我們的后面。7、心急吃不了熱湯圓。8、你可以很有個性,但某些時候請收斂。9、只為成功找方法,不為失敗找借口(蹩腳的工人總是說工具不好)。10、只要下定決心克服恐懼,便幾乎能克服任何恐懼。因為,請記住,除了在腦海中,恐懼無處藏身。--戴爾.卡耐基。優(yōu)秀精品課件文檔資料SQLServer第9章視圖的規(guī)劃與操作視圖的規(guī)劃與操作6、黃金時代是在我們的前面,而不在我們的后面57視圖的規(guī)劃與操作課件58視圖的規(guī)劃與操作課件59視圖的規(guī)劃與操作課件60視圖的規(guī)劃與操作課件619.1視圖的作用與規(guī)劃視圖是關(guān)系數(shù)據(jù)庫系統(tǒng)提供給用戶以多種角度觀察數(shù)據(jù)庫中數(shù)據(jù)的重要機制。視圖對應(yīng)于三級模式中的外模式(用戶模式),它是從一個或幾個基本表導(dǎo)出的表,由CREATEVIEW命令創(chuàng)建。視圖又稱為虛擬表,因為數(shù)據(jù)庫中存放著視圖的定義及其關(guān)聯(lián)的基本表名等信息,而不存放視圖對應(yīng)的數(shù)據(jù)。視圖一經(jīng)定義,就可以和基本表一樣被查詢、被刪除,但對視圖的更新(增加、刪除、修改)操作則有一定的限制。9.1視圖的作用與規(guī)劃視圖是關(guān)系數(shù)據(jù)庫系統(tǒng)提供給用戶以多629.1.1視圖的作用數(shù)據(jù)庫使用視圖機制主要有以下優(yōu)點:(1)視圖能夠簡化用戶的操作視圖機制使用戶可以將注意力集中在所關(guān)心的數(shù)據(jù)上。(2)視圖使用戶能以多種角度看待同一數(shù)據(jù)視圖機制能使不同崗位、不同職責(zé)、不同需求的用戶按照自己的方式看待同一數(shù)據(jù)(3)視圖為數(shù)據(jù)庫重構(gòu)提供了一定程度的邏輯獨立性。

(4)視圖能夠?qū)C密數(shù)據(jù)提供安全保護對不同的用戶定義不同的視圖,使機密數(shù)據(jù)不出現(xiàn)在不應(yīng)看到這些數(shù)據(jù)的用戶視圖上,這樣視圖機制就自動提供了對機密數(shù)據(jù)的安全保護功能。9.1.1視圖的作用數(shù)據(jù)庫使用視圖機制主要有以下優(yōu)點639.1.2視圖的規(guī)劃在設(shè)計好數(shù)據(jù)庫的全局邏輯結(jié)構(gòu)后,還應(yīng)該根據(jù)局部應(yīng)用的需求,結(jié)合DBMS的特點,設(shè)計局部應(yīng)用的數(shù)據(jù)庫局部邏輯結(jié)構(gòu),即設(shè)計更符合局部用戶需要的用戶視圖。定義數(shù)據(jù)庫全局邏輯結(jié)構(gòu)主要從系統(tǒng)的時間效率、空間效率、易維護等角度出發(fā)。定義用戶局部視圖時可以注重考慮用戶的習(xí)慣與方便。9.1.2視圖的規(guī)劃在設(shè)計好數(shù)據(jù)庫的全局邏輯結(jié)構(gòu)后,還應(yīng)649.1.2視圖的規(guī)劃定義用戶局部視圖時可以主要考慮以下幾個方面:(1)使用更符合用戶習(xí)慣的別名在設(shè)計數(shù)據(jù)庫總體結(jié)構(gòu)時,同一關(guān)系和屬性具有唯一的名字,但是,在局部應(yīng)用中,對同一關(guān)系或?qū)傩?,有自己更加?xí)慣的名字。我們可以用視圖機制在設(shè)計用戶視圖時重新定義某些屬性名,使其與用戶習(xí)慣一致,以方便使用。

(2)可以對不同級別的用戶定義不同的視圖,以保證系統(tǒng)的安全性。

(3)簡化用戶對系統(tǒng)的使用如果某些局部應(yīng)用中經(jīng)常要使用某些很復(fù)雜的查詢,為了方便用戶,可以將這些復(fù)雜查詢定義為視圖,用戶每次只對定義好的視圖進行查詢,大大簡化了用戶的使用。

9.1.2視圖的規(guī)劃定義用戶局部視圖時可以主要考慮以659.2視圖操作

9.2.1創(chuàng)建視圖SQLSERVER提供了使用SSMS和SQL命令兩種方法來創(chuàng)建視圖。在創(chuàng)建或使用視圖時應(yīng)該注意到以下情況:只能在當(dāng)前數(shù)據(jù)庫中創(chuàng)建視圖,在視圖中最多只能引用1024列;如果視圖引用的表被刪除,則當(dāng)使用該視圖時將返回一條錯誤信息,如果創(chuàng)建具有相同的表的結(jié)構(gòu)新表來替代已刪除的表視圖則可以使用,否則必須重新創(chuàng)建視圖;如果視圖中某一列是函數(shù)、數(shù)學(xué)表達式、常量或來自多個表的列名相同,則必須為列定義名字;定義視圖的查詢語句不能包含COMPUTE或COMPUTEBY子句;不能包含ORDERBY子句,除非在SELECT語句的選擇列表中也有一個TOP子句;不能包含INTO關(guān)鍵字;不能引用臨時表或表變量。不能在視圖上創(chuàng)建全文索引、規(guī)則、默認值和after觸發(fā)器;不能在規(guī)則、缺省、觸發(fā)器的定義中引用視圖;不能創(chuàng)建臨時視圖,也不能在臨時表上建立視圖。

9.2視圖操作9.2.1創(chuàng)建視圖661.使用SQLSERVER企業(yè)管理器來創(chuàng)建視圖在SQLSERVER中使用SSMS來創(chuàng)建視圖。步驟如下:①啟動SSMS,登錄到指定的服務(wù)器;②打開要創(chuàng)建視圖的數(shù)據(jù)庫文件夾,選中‘視圖’圖標,此時在右面的窗格中顯示當(dāng)前數(shù)據(jù)庫的所有視圖,右擊圖標,在彈出菜單中選擇‘新建視圖’選項,打開‘新建視圖’對話框。在‘新建視圖’對話框中共有四個區(qū):表區(qū)、列區(qū)SQLscript區(qū)、數(shù)據(jù)結(jié)果區(qū),當(dāng)然剛打開時是空白。1.使用SQLSERVER企業(yè)管理器來創(chuàng)建視圖在SQLS672.Transact-SQL命令創(chuàng)建視圖使用Transact-SQL命令CREATEVIEW創(chuàng)建視圖。語法格式:CREATEVIEW[<database_name>.][<owner>.]view_name[(column[,...n])][WITH<view_attribute>[,...n]]ASselect_statement[WITHCHECKOPTION]<view_attribute>::={ENCRYPTION|SCHEMABINDING|VIEW_METADATA}2.Transact-SQL命令創(chuàng)建視圖使用Transac682.Transact-SQL命令創(chuàng)建視圖參數(shù)說明:(1)view_name:是視圖的名稱。視圖名稱必須符合標識符規(guī)則??梢赃x擇是否指定視圖所有者名稱。(2)Column:是視圖中的列名。只有在下列情況下,才必須命名CREATEVIEW中的列:當(dāng)列是從算術(shù)表達式、函數(shù)或常量派生的,兩個或更多的列可能會具有相同的名稱(通常是因為聯(lián)接),視圖中的某列被賦予了不同于派生來源列的名稱,以便符合用戶習(xí)慣。還可以在SELECT語句中指派列名。如果未指定column,則視圖列與SELECT語句中的列具有相同的名稱。2.Transact-SQL命令創(chuàng)建視圖參數(shù)說明:692.Transact-SQL命令創(chuàng)建視圖(3)AS:是視圖要執(zhí)行的操作。(4)select_statement:是定義視圖的SELECT語句。該語句可以使用多個表或其它視圖。若要從創(chuàng)建視圖的SELECT子句所引用的對象中選擇,必須具有適當(dāng)?shù)臋?quán)限。視圖不必是具體某個表的行和列的簡單子集??梢杂镁哂腥我鈴?fù)雜性的SELECT子句,使用多個表或其它視圖來創(chuàng)建視圖。在索引視圖定義中,SELECT語句必須是單個表的語句或帶有可選聚合的多表JOIN。在select_statement中可以使用函數(shù)。select_statement可使用多個由UNION或UNIONALL分隔的SELECT語句。2.Transact-SQL命令創(chuàng)建視圖(3)AS:是視圖702.Transact-SQL命令創(chuàng)建視圖(5)WITHCHECKOPTION:強制視圖上執(zhí)行的所有數(shù)據(jù)修改語句都必須符合由select_statement設(shè)置的準則。通過視圖修改行時,WITHCHECKOPTION可確保提交修改后,仍可通過視圖看到修改的數(shù)據(jù)。(6)WITHENCRYPTION:表示SQLServer加密包含CREATEVIEW語句文本的系統(tǒng)表列。使用WITHENCRYPTION可防止將視圖作為SQLServer復(fù)制的一部分發(fā)布。(7)SCHEMABINDING:將視圖綁定到架構(gòu)上。(8)VIEW_METADATA:指定為引用視圖的查詢請求瀏覽模式的元數(shù)據(jù)時,SQLServer將向DBLIB、ODBC和OLEDBAPI返回有關(guān)視圖的元數(shù)據(jù)信息,而不是返回基表或表。2.Transact-SQL命令創(chuàng)建視圖(5)WITHC713.視圖創(chuàng)建實例【例9-1】使用簡單的CREATEVIEW下例創(chuàng)建具有簡單SELECT語句的視圖。當(dāng)需要頻繁地查詢列的某種組合時,簡單視圖非常有用。USE教學(xué)管理IFEXISTS(SELECTTABLE_NAMEFROMINFORMATION_SCHEMA.VIEWSWHERETABLE_NAME='courses_VIEW')DROPVIEWcourses_VIEWGOCREATEVIEWcourses_VIEWASSELECTcno,cname,cbname,cedi,cpubFROMcourseGO3.視圖創(chuàng)建實例【例9-1】使用簡單的CREATEVIE72【例9-2】使用WITHENCRYPTION下例使用WITHENCRYPTION選項和內(nèi)置函數(shù),使用函數(shù)時,必須為派生列指定列名。USE教學(xué)管理CREATEVIEWstu_avg(sno,sname,AVG_SCORE)WITHENCRYPTIONASSELECTS.sno,sname,AVG(grade)FROMstudentS,enrollmentEWHERES.sno=E.snoGROUPBYS.sno,snameGOselectc.id,c.textfromsyscommentsc,sysobjectsowherec.id=o.idand='stu_avg'【例9-2】使用WITHENCRYPTION73【例9-3】使用WITHCHECKOPTION下例顯示名為ISonly的視圖,該視圖使得只能對信息學(xué)院的學(xué)生做數(shù)據(jù)修改。USE教學(xué)管理CREATEVIEWISonlyASSELECTsno,sssn,sname,ssex,smtel,scity,smajor,sdepa,sgpaFROMstudentWHEREsdepa='信息學(xué)院'WITHCHECKOPTIONGOinsertintoisonlyvalues('s060501','11111111','張','男','1111','寧波','會計學(xué)','會計學(xué)院',162)【例9-3】使用WITHCHECKOPTION下例顯示名74【例9-4】如果如本章第一節(jié)概述所述,若某一全國連鎖的銷售企業(yè)將銷售數(shù)據(jù)表按照省份進行水平分割,那我們可以使用以下視圖重新裝載表的數(shù)據(jù)。

Createviewsales_tableAsSelect*fromsales_beijingunionSelect*fromsales_tianjinunionSelect*fromsales_shanghai……【例9-4】如果如本章第一節(jié)概述所述,若某一全國連鎖的銷售企759.2.2特殊類型視圖簡介索引視圖:建立唯一聚簇索引的視圖為索引視圖。分區(qū)視圖:分區(qū)視圖是通過對具有相同結(jié)構(gòu)的成員表使用UNIONALL所定義的視圖。信息架構(gòu)視圖:Microsoft提供的用于SQLServer元數(shù)據(jù)的內(nèi)部視圖,這些視圖符合SQL-92標準中的INFORMATION_SCHEMA定義。9.2.2特殊類型視圖簡介索引視圖:建立唯一聚簇索引的761.索引視圖

由于視圖返回的結(jié)果集與具有行列結(jié)構(gòu)的表有著相同的表格形式,并且我們可以在SQL語句中像引用表那樣引用視圖,所以我們常把視圖稱為虛表。

標準視圖的數(shù)據(jù)的物理存放依然是在數(shù)據(jù)庫的基本表中,只是在執(zhí)行引用了視圖的查詢時,SQLServer才把相關(guān)的基本表中的數(shù)據(jù)合并成視圖的邏輯結(jié)構(gòu)。所以,這類視圖也稱做存儲查詢。1.索引視圖 由于視圖返回的結(jié)果集與具有行列結(jié)構(gòu)的表有著77問題:

由于是在執(zhí)行了引用了視圖的查詢時,SQLServer才把相關(guān)的基本表中的數(shù)據(jù)合并成視圖的邏輯結(jié)構(gòu),那么當(dāng)查詢所引用的視圖包含大量的數(shù)據(jù)行或涉及到對大量數(shù)據(jù)行進行合計運算或連接操作,毋庸置疑,動態(tài)地創(chuàng)建視圖結(jié)果集將給系統(tǒng)帶來沉重的負擔(dān),尤其是經(jīng)常引用這種大容量視圖。

如何解決?問題: 由于是在執(zhí)行了引用了視圖的查詢時,SQLServ78索引視圖:建立唯一聚簇索引的視圖稱做索引視圖在視圖上創(chuàng)建索引可存儲創(chuàng)建索引時存在的數(shù)據(jù)。優(yōu)點:查詢優(yōu)化器開始在查詢中使用視圖索引,而不是直接在FROM子句中命名視圖。這樣一來,可從索引視圖檢索數(shù)據(jù)而無需重新編碼,由此帶來的高效率也使現(xiàn)有查詢獲益。缺點:它降低了對視圖基表數(shù)據(jù)的修改操作的速度,且維護索引視圖比維護基礎(chǔ)表的索引更為復(fù)雜。適合情況:非常頻繁地檢索視圖數(shù)據(jù),或很少修改基表數(shù)據(jù)時。索引視圖:建立唯一聚簇索引的視圖稱做索引視圖79在視圖上創(chuàng)建聚集索引之前,該視圖必須滿足下列要求:

1.當(dāng)執(zhí)行CREATEVIEW語句時,ANSI_NULLS和QUOTED_IDENTIFIER選項必須設(shè)置為ON。2.為執(zhí)行所有CREATETABLE語句以創(chuàng)建視圖引用的表,ANSI_NULLS選項必須設(shè)置為ON。3.該視圖所引用的對象僅包括基礎(chǔ)表而不包括其它的視圖;4.視圖引用的所有基表必須與視圖位于同一個數(shù)據(jù)庫中,并且所有者也與視圖相同。在視圖上創(chuàng)建聚集索引之前,該視圖必須滿足下列要求:1.當(dāng)執(zhí)805.必須使用SCHEMABINDING選項創(chuàng)建視圖。SCHEMABINDING將視圖綁定到基礎(chǔ)基表的架構(gòu)。6.如果視圖引用了用戶自定義函數(shù),那么在創(chuàng)建這些用戶自定義函數(shù)時也必須使用SCHEMABINDING選項

;

7.視圖必須以owner.objectname的形式來使用所引用的表或用戶自定義函數(shù);8.視圖中的表達式所引用的所有函數(shù)必須是確定性的。視圖的規(guī)劃與操作課件819.視圖中的SELECT語句不能包含下列T-SQL語法元素*選擇列表不能使用*或table_name.*語法指定列。必須顯式給出列名。*不能在多個視圖列中指定用作簡單表達式的表的列名。*派生表。*行集函數(shù)。*UNION運算符。*子查詢。*外聯(lián)接或自聯(lián)接。*TOP子句。*ORDERBY子句。*DISTINCT關(guān)鍵字。*COUNT(*)(允許COUNT_BIG(*)。)*AVG、MAX、MIN、STDEV、STDEVP、VAR或VARP聚合函數(shù)。9.視圖中的SELECT語句不能包含下列T-SQL語法元素*82注意:

通常而言,可以在視圖上創(chuàng)建多個索引,但是應(yīng)該記住,在視圖上所創(chuàng)建的第一個索引必須是聚簇索引,然后才可以創(chuàng)建其它的非聚簇索引。注意: 通常而言,可以在視圖上創(chuàng)建多個索引,但是應(yīng)該記住,83如果準備為視圖創(chuàng)建索引,在執(zhí)行CREATEINDEX命令以前,您必須確保以下條件:*CREATEINDEX命令的執(zhí)行者必須是視圖的所有者;*在執(zhí)行創(chuàng)建索引命令期間,ANSI_NULLS、 ANSI_PADDING、ANSI_WARNINGS、

ARITHABORT、CONCAT_NULL_YIELDS_NULL、

QUOTED_IDENTIFIERS諸選項應(yīng)被設(shè)置成ON狀態(tài);*NUMERIC_ROUNDABORT選項被設(shè)置為OFF狀態(tài);*視圖不能包括text、ntext、image類型的數(shù)據(jù)列;*如果視圖定義中的SELECT語句指定了一個GROUPBY子句,則唯一聚集索引的鍵只能引用在GROUPBY子句中指定的列。如果準備為視圖創(chuàng)建索引,在執(zhí)行CREATEINDEX命842.分區(qū)視圖

分區(qū)視圖在一個或多個服務(wù)器間水平連接一組成員表中的分區(qū)數(shù)據(jù),使數(shù)據(jù)看起來就象來自一個表。

MicrosoftSQLServer區(qū)分本地分區(qū)視圖和分布式分區(qū)視圖。 在本地分區(qū)視圖中,所有的參與表和視圖駐留在同一個

SQLServer實例上。 在分布式分區(qū)視圖中,至少有一個參與表駐留在不同的(遠程)服務(wù)器上。此外,SQLServer還區(qū)分可更新的分區(qū)視圖和作為基礎(chǔ)表只讀復(fù)本的視圖。

2.分區(qū)視圖 分區(qū)視圖在一個或多個服務(wù)器間水平連接一組成85 在實現(xiàn)分區(qū)視圖之前,必須先水平分割表。原始表被分成若干個較小的成員表。每個成員表包含與原始表相同數(shù)量的列,并且每一列具有與原始表中的相應(yīng)列同樣的特性(如數(shù)據(jù)類型、大小、排序規(guī)則)。 成員表設(shè)計好后,每個表基于鍵值的范圍存儲原始表的一塊水平區(qū)域。鍵值范圍基于分區(qū)列中的數(shù)據(jù)值。

在實現(xiàn)分區(qū)視圖之前,必須先水平分割表。原始表被分成若干個86例如,正在將一個顧客信息

Customer表分區(qū)成三個表。這些表的

CHECK約束為:--OnServer1:CREATETABLECustomer_33(CustomerIDINTPRIMARYKEYCHECK(CustomerIDBETWEEN1AND32999),...--Additionalcolumndefinitions)

例如,正在將一個顧客信息Customer表分區(qū)成三個表。87--OnServer2:CREATETABLECustomer_66(CustomerIDINTPRIMARYKEYCHECK(CustomerIDBETWEEN33000AND65999),...--Additionalcolumndefinitions)

--OnServer3:CREATETABLECustomer_99(CustomerIDINTPRIMARYKEYCHECK(CustomerIDBETWEEN66000AND99999),...--Additionalcolumndefinitions)--OnServer2:88生成分布式分區(qū)視圖的方式

在每一個含有在其它成員服務(wù)器上執(zhí)行分布式查詢所需連接信息的成員服務(wù)器上添加鏈接服務(wù)器定義。這將使得分布式分區(qū)視圖能夠訪問其它服務(wù)器上的數(shù)據(jù)。

生成分布式分區(qū)視圖的方式 在每一個含有在其它成員服務(wù)器上89建以下分布式分區(qū)視圖:

CREATEVIEWCustomersASSELECT*FROM CompanyDatabase.TableOwner.Customers_33UNIONALLSELECT*FROM Server2.CompanyDatabase.TableOwner.Customers_66UNIONALLSELECT*FROM Server3.CompanyDatabase.TableOwner.Customers_99建以下分布式分區(qū)視圖:CREATEVIEWCustom903.信息架構(gòu)視圖

信息架構(gòu)視圖基于SQL-92標準中針對架構(gòu)視圖的定義,這些視圖獨立于系統(tǒng)表,提供了關(guān)于SQLServer元數(shù)據(jù)的內(nèi)部視圖。 信息架構(gòu)視圖的最大優(yōu)點是,即使我們對系統(tǒng)表進行了重要的修改,應(yīng)用程序也可以正常地使用這些視圖進行訪問。因此對于應(yīng)用程序來說,只要是符合SQL-92標準的數(shù)據(jù)庫系統(tǒng),使用信息架構(gòu)視圖總是可以正常工作的。3.信息架構(gòu)視圖 信息架構(gòu)視圖基于SQL-92標準中針對91表9-2常用的信息架構(gòu)視圖(部分)信息架構(gòu)視圖描

述CHECK_CONSTRAINTS返回有關(guān)列或過程參數(shù)的信息,如是否允許空值,是否為計算列等。COLUMN_DOMAIN_USAGE當(dāng)前數(shù)據(jù)庫中每個帶有用戶定義數(shù)據(jù)類型的列在該視圖中占一行。該信息架構(gòu)視圖返回當(dāng)前用戶對其擁有權(quán)限的對象的有關(guān)信息。COLUMN_PRIVILEGES每一個帶有特權(quán)的列在該視圖中占一行,這個特權(quán)是由當(dāng)前數(shù)據(jù)庫中的當(dāng)前用戶授予的,或者授予了當(dāng)前數(shù)據(jù)庫中的當(dāng)前用戶。該信息架構(gòu)視圖返回當(dāng)前用戶對擁有特權(quán)的列的相關(guān)信息。COLUMNS返回當(dāng)前數(shù)據(jù)庫中當(dāng)前用戶可以訪問的所有列及其基本信息。表9-2常用的信息架構(gòu)視圖(部分)92在訪問信息架構(gòu)視圖時,必須同時說明視圖所屬模式,即采用以下語法格式:INFORMATION_SCHEMA.view_name例如,我們要得到某個表有多少列,可以使用以下語句:SELECTCOUNT(*)FROMINFORMATION_SCHEMA.COLUMNSWHERETABLE_NAME='mytable'在訪問信息架構(gòu)視圖時,必須同時說明視圖所屬模式,即采用以下語939.2.3視圖的修改、重命名和刪除

1.修改視圖 修改一個先前創(chuàng)建的視圖的定義,使用ALTERVIEW語句。ALTERVIEW語句不影響相關(guān)的存儲過程或觸發(fā)器,也不更改權(quán)限。

9.2.3視圖的修改、重命名和刪除1.修改視圖94語法格式:ALTERVIEW[<database_name>.][<owner>.]view_name[(column[,...n])][WITH<view_attribute>[,...n]]ASselect_statement[WITHCHECKOPTION]

<view_attribute>::={ENCRYPTION|SCHEMABINDING|VIEW_METADATA}參數(shù)說明:如果原來的視圖定義是用WITHENCRYPTION或CHECKOPTION創(chuàng)建的,那么只有在ALTERVIEW中也包含這些選項時,這些選項才有效。如果使用ALTERVIEW更改當(dāng)前正在使用的視圖,SQLServer將在該視圖上放一個排它架構(gòu)鎖。當(dāng)鎖已授予,并且該視圖沒有活動用戶時,SQLServer將從過程緩存中刪除該視圖的所有復(fù)本。引用該視圖的現(xiàn)有計劃將繼續(xù)保留在緩存中,但當(dāng)喚醒調(diào)用時將重新編譯。ALTERVIEW可應(yīng)用于索引視圖。然而,ALTERVIEW將無條件地除去視圖上的所有索引。語法格式:參數(shù)說明:95【例9-5】更改視圖

下例創(chuàng)建稱為All_teachers的視圖,該視圖包含全部的教師,并將該視圖的查詢權(quán)授予所有用戶。但是由于該視圖中包含了教師的編號、身份證號等個人信息,需使用ALTERVIEW替換該視圖,不包括編號、身份證號等個人信息,以保護教師個人隱私。【例9-5】更改視圖96--CREATEaVIEWFROMtheteacertablethatcontainsallteachers.CREATEVIEWAll_teacher(tno,tssn,tname,tmtel,tcity,tdepa,trank)ASSELECTtno,tssn,tname,tmtel,tcity,tdepa,trankFROM教學(xué)管理..teacherGO--GrantSELECTpermissionsontheVIEWtopublic.GRANTSELECTONAll_teacherTOpublicGO--CREATEaVIEWFROMtheteac97--TheVIEWneedstobechangedtoexcludethetno,tssn,tcityattributeofallteachersALTERVIEWAll_teacher(tname,tmtel,tdepa,trank)ASSELECTtname,tmtel,tdepa,trankFROM教學(xué)管理..teacherGO--TheVIEWneedstobechange982.視圖重命名

使用系統(tǒng)存儲過程sp_rename對已創(chuàng)建的視圖進行重命名。語法格式:sp_rename[objname=]'object_name',[newname=]'new_name'[,[objtype=]'object_type']【例9-6】將例9-5中稱為All_teacher的視圖重命名。

語法格式:

execsp_rename'All_teacher','All_teacher_view'2.視圖重命名使用系統(tǒng)存儲過程sp_rename對已創(chuàng)建993.刪除視圖

從當(dāng)前數(shù)據(jù)庫中刪除一個或多個視圖。可執(zhí)行DROPVIEW語句。語法格式:DROPVIEW{View_name}[,...n]【例9-7】下例刪除stu_avg視圖。USE教學(xué)管理IFEXISTS(SELECTTABLE_NAMEFROMINFORMATION_SCHEMA.VIEWSWHERETABLE_NAME='stu_avg')DROPVIEWstu_avgGO3.刪除視圖從當(dāng)前數(shù)據(jù)庫中刪除一個或多個視圖。可執(zhí)行DRO1009.2.4查詢視圖視圖定義后,用戶就可以象對基本表一樣對視圖進行查詢了?!纠?-8】如果要查詢信息學(xué)院每個學(xué)生的情況,只要從視圖ISonly查詢即可。

Select*FromISonly9.2.4查詢視圖視圖定義后,用戶就可以象對基本表一樣101【例9-9】創(chuàng)建信息學(xué)院每個學(xué)生的成績視圖,包括學(xué)生的學(xué)號、姓名、所選課程號、課程名,成績,并進行查詢。USE教學(xué)管理IFEXISTS(SELECTTABLE_NAMEFROMINFORMATION_SCHEMA.VIEWSWHERETABLE_NAME='ISstu_score')DROPVIEWISstu_scoreGOCREATEVIEWISstu_score(sno,sname,cno,cname,grade)ASSELECTS.sno,sname,Co,cname,gradeFROMstudentS,enrollmentE,offeringO,courseCWHERES.sno=E.snoANDE.ono=O.onoANDOo

溫馨提示

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

評論

0/150

提交評論