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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

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

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

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

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

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

7.視圖必須以owner.objectname的形式來使用所引用的表或用戶自定義函數(shù);8.視圖中的表達(dá)式所引用的所有函數(shù)必須是確定性的。視圖的規(guī)劃與操作課件259.視圖中的SELECT語句不能包含下列T-SQL語法元素*選擇列表不能使用*或table_name.*語法指定列。必須顯式給出列名。*不能在多個(gè)視圖列中指定用作簡單表達(dá)式的表的列名。*派生表。*行集函數(shù)。*UNION運(yùn)算符。*子查詢。*外聯(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)建多個(gè)索引,但是應(yīng)該記住,在視圖上所創(chuàng)建的第一個(gè)索引必須是聚簇索引,然后才可以創(chuàng)建其它的非聚簇索引。注意: 通常而言,可以在視圖上創(chuàng)建多個(gè)索引,但是應(yīng)該記住,27如果準(zhǔn)備為視圖創(chuàng)建索引,在執(zhí)行CREATEINDEX命令以前,您必須確保以下條件:*CREATEINDEX命令的執(zhí)行者必須是視圖的所有者;*在執(zhí)行創(chuàng)建索引命令期間,ANSI_NULLS、 ANSI_PADDING、ANSI_WARNINGS、

ARITHABORT、CONCAT_NULL_YIELDS_NULL、

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

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

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

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

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

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

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

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

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

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

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

生成分布式分區(qū)視圖的方式 在每一個(gè)含有在其它成員服務(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標(biāo)準(zhǔn)中針對(duì)架構(gòu)視圖的定義,這些視圖獨(dú)立于系統(tǒng)表,提供了關(guān)于SQLServer元數(shù)據(jù)的內(nèi)部視圖。 信息架構(gòu)視圖的最大優(yōu)點(diǎn)是,即使我們對(duì)系統(tǒng)表進(jìn)行了重要的修改,應(yīng)用程序也可以正常地使用這些視圖進(jìn)行訪問。因此對(duì)于應(yīng)用程序來說,只要是符合SQL-92標(biāo)準(zhǔn)的數(shù)據(jù)庫系統(tǒng),使用信息架構(gòu)視圖總是可以正常工作的。3.信息架構(gòu)視圖 信息架構(gòu)視圖基于SQL-92標(biāo)準(zhǔn)中針對(duì)35表9-2常用的信息架構(gòu)視圖(部分)信息架構(gòu)視圖描

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

1.修改視圖 修改一個(gè)先前創(chuàng)建的視圖的定義,使用ALTERVIEW語句。ALTERVIEW語句不影響相關(guān)的存儲(chǔ)過程或觸發(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中也包含這些選項(xiàng)時(shí),這些選項(xiàng)才有效。如果使用ALTERVIEW更改當(dāng)前正在使用的視圖,SQLServer將在該視圖上放一個(gè)排它架構(gòu)鎖。當(dāng)鎖已授予,并且該視圖沒有活動(dòng)用戶時(shí),SQLServer將從過程緩存中刪除該視圖的所有復(fù)本。引用該視圖的現(xiàn)有計(jì)劃將繼續(xù)保留在緩存中,但當(dāng)喚醒調(diào)用時(shí)將重新編譯。ALTERVIEW可應(yīng)用于索引視圖。然而,ALTERVIEW將無條件地除去視圖上的所有索引。語法格式:參數(shù)說明:39【例9-5】更改視圖

下例創(chuàng)建稱為All_teachers的視圖,該視圖包含全部的教師,并將該視圖的查詢權(quán)授予所有用戶。但是由于該視圖中包含了教師的編號(hào)、身份證號(hào)等個(gè)人信息,需使用ALTERVIEW替換該視圖,不包括編號(hào)、身份證號(hào)等個(gè)人信息,以保護(hù)教師個(gè)人隱私?!纠?-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)存儲(chǔ)過程sp_rename對(duì)已創(chuàng)建的視圖進(jìn)行重命名。語法格式: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)存儲(chǔ)過程sp_rename對(duì)已創(chuàng)建433.刪除視圖

從當(dāng)前數(shù)據(jù)庫中刪除一個(gè)或多個(gè)視圖??蓤?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ù)庫中刪除一個(gè)或多個(gè)視圖。可執(zhí)行DRO449.2.4查詢視圖視圖定義后,用戶就可以象對(duì)基本表一樣對(duì)視圖進(jìn)行查詢了。【例9-8】如果要查詢信息學(xué)院每個(gè)學(xué)生的情況,只要從視圖ISonly查詢即可。

Select*FromISonly9.2.4查詢視圖視圖定義后,用戶就可以象對(duì)基本表一樣45【例9-9】創(chuàng)建信息學(xué)院每個(gè)學(xué)生的成績視圖,包括學(xué)生的學(xué)號(hào)、姓名、所選課程號(hào)、課程名,成績,并進(jìn)行查詢。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é)院每個(gè)學(xué)生的成績視圖,包括學(xué)生的學(xué)號(hào)、469.2.5更新視圖

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

MicrosoftSQLServer以兩種方法增強(qiáng)可更新視圖的類別:

INSTEADOF觸發(fā)器

分區(qū)視圖

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

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

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

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

【例9-12】一般學(xué)生信息視圖(視圖1) 由于學(xué)生的一些個(gè)人私密信息如:身份證號(hào)、出生日期、家庭地址、家庭電話等信息是不能隨便透露的,為保證學(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)用綜合實(shí)例分析【例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é)管理部門對(duì)學(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é)管理部門對(duì)學(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é)制使快樂增加并使享受加強(qiáng)。——德謨克利特

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

68、決定一個(gè)人的一生,以及整個(gè)命運(yùn)的,只是一瞬之間。——歌德

69、懶人無法享受休息之樂。——拉布克

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

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

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

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

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

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

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

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

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

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

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

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

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

;

7.視圖必須以owner.objectname的形式來使用所引用的表或用戶自定義函數(shù);8.視圖中的表達(dá)式所引用的所有函數(shù)必須是確定性的。視圖的規(guī)劃與操作課件819.視圖中的SELECT語句不能包含下列T-SQL語法元素*選擇列表不能使用*或table_name.*語法指定列。必須顯式給出列名。*不能在多個(gè)視圖列中指定用作簡單表達(dá)式的表的列名。*派生表。*行集函數(shù)。*UNION運(yùn)算符。*子查詢。*外聯(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)建多個(gè)索引,但是應(yīng)該記住,在視圖上所創(chuàng)建的第一個(gè)索引必須是聚簇索引,然后才可以創(chuàng)建其它的非聚簇索引。注意: 通常而言,可以在視圖上創(chuàng)建多個(gè)索引,但是應(yīng)該記住,83如果準(zhǔn)備為視圖創(chuàng)建索引,在執(zhí)行CREATEINDEX命令以前,您必須確保以下條件:*CREATEINDEX命令的執(zhí)行者必須是視圖的所有者;*在執(zhí)行創(chuàng)建索引命令期間,ANSI_NULLS、 ANSI_PADDING、ANSI_WARNINGS、

ARITHABORT、CONCAT_NULL_YIELDS_NULL、

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

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

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

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

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

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

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

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

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

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

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

生成分布式分區(qū)視圖的方式 在每一個(gè)含有在其它成員服務(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標(biāo)準(zhǔn)中針對(duì)架構(gòu)視圖的定義,這些視圖獨(dú)立于系統(tǒng)表,提供了關(guān)于SQLServer元數(shù)據(jù)的內(nèi)部視圖。 信息架構(gòu)視圖的最大優(yōu)點(diǎn)是,即使我們對(duì)系統(tǒng)表進(jìn)行了重要的修改,應(yīng)用程序也可以正常地使用這些視圖進(jìn)行訪問。因此對(duì)于應(yīng)用程序來說,只要是符合SQL-92標(biāo)準(zhǔn)的數(shù)據(jù)庫系統(tǒng),使用信息架構(gòu)視圖總是可以正常工作的。3.信息架構(gòu)視圖 信息架構(gòu)視圖基于SQL-92標(biāo)準(zhǔn)中針對(duì)91表9-2常用的信息架構(gòu)視圖(部分)信息架構(gòu)視圖描

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

1.修改視圖 修改一個(gè)先前創(chuàng)建的視圖的定義,使用ALTERVIEW語句。ALTERVIEW語句不影響相關(guān)的存儲(chǔ)過程或觸發(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中也包含這些選項(xiàng)時(shí),這些選項(xiàng)才有效。如果使用ALTERVIEW更改當(dāng)前正在使用的視圖,SQLServer將在該視圖上放一個(gè)排它架構(gòu)鎖。當(dāng)鎖已授予,并且該視圖沒有活動(dòng)用戶時(shí),SQLServer將從過程緩存中刪除該視圖的所有復(fù)本。引用該視圖的現(xiàn)有計(jì)劃將繼續(xù)保留在緩存中,但當(dāng)喚醒調(diào)用時(shí)將重新編譯。ALTERVIEW可應(yīng)用于索引視圖。然而,ALTERVIEW將無條件地除去視圖上的所有索引。語法格式:參數(shù)說明:95【例9-5】更改視圖

下例創(chuàng)建稱為All_teachers的視圖,該視圖包含全部的教師,并將該視圖的查詢權(quán)授予所有用戶。但是由于該視圖中包含了教師的編號(hào)、身份證號(hào)等個(gè)人信息,需使用ALTERVIEW替換該視圖,不包括編號(hào)、身份證號(hào)等個(gè)人信息,以保護(hù)教師個(gè)人隱私?!纠?-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)存儲(chǔ)過程sp_rename對(duì)已創(chuàng)建的視圖進(jìn)行重命名。語法格式: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)存儲(chǔ)過程sp_rename對(duì)已創(chuàng)建993.刪除視圖

從當(dāng)前數(shù)據(jù)庫中刪除一個(gè)或多個(gè)視圖??蓤?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ù)庫中刪除一個(gè)或多個(gè)視圖。可執(zhí)行DRO1009.2.4查詢視圖視圖定義后,用戶就可以象對(duì)基本表一樣對(duì)視圖進(jìn)行查詢了。【例9-8】如果要查詢信息學(xué)院每個(gè)學(xué)生的情況,只要從視圖ISonly查詢即可。

Select*FromISonly9.2.4查詢視圖視圖定義后,用戶就可以象對(duì)基本表一樣101【例9-9】創(chuàng)建信息學(xué)院每個(gè)學(xué)生的成績視圖,包括學(xué)生的學(xué)號(hào)、姓名、所選課程號(hào)、課程名,成績,并進(jìn)行查詢。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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論