《SQLServer數(shù)據(jù)庫應(yīng)用基礎(chǔ)教程》第七章視圖及其應(yīng)用_第1頁
《SQLServer數(shù)據(jù)庫應(yīng)用基礎(chǔ)教程》第七章視圖及其應(yīng)用_第2頁
《SQLServer數(shù)據(jù)庫應(yīng)用基礎(chǔ)教程》第七章視圖及其應(yīng)用_第3頁
《SQLServer數(shù)據(jù)庫應(yīng)用基礎(chǔ)教程》第七章視圖及其應(yīng)用_第4頁
《SQLServer數(shù)據(jù)庫應(yīng)用基礎(chǔ)教程》第七章視圖及其應(yīng)用_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第七章視圖及其應(yīng)用17.1視圖概述7.1.1視圖的基本概念

數(shù)據(jù)視圖是另一種在一個或多個數(shù)據(jù)表上觀察數(shù)據(jù)的途徑,可以把數(shù)據(jù)視圖看作是一個能把焦點定在用戶感興趣的數(shù)據(jù)上的監(jiān)視器,用戶看到的是實時數(shù)據(jù)2視圖的核心實際上僅僅是一個存儲的查詢??赏ㄟ^視圖訪問的數(shù)據(jù)不作為獨特的對象存儲在數(shù)據(jù)庫內(nèi)。數(shù)據(jù)庫內(nèi)存儲的是SELECT語句。SELECT語句的結(jié)果集構(gòu)成視圖所返回的虛擬表。用戶可以在T-SQL語句中通過引用視圖名稱來使用虛擬表。3在視圖中查詢的表被稱為“基表”,視圖常見的示例有:基表的行和列的子集兩個或多個基表的連接兩個或多個基表的聯(lián)合基表和另一個視圖或視圖的子集的組合基表的統(tǒng)計概要45例:假設(shè)教務(wù)科現(xiàn)在需要為各授課教師提供瀏覽所有選自己課的同學(xué)各年的學(xué)習(xí)成績的服務(wù)。

我們可以將各同學(xué)的各科成績記錄在一張表內(nèi),如表stud_score,為各授課老師建立其所授課的各學(xué)生成績組成的視圖comp_score6useMy_DB1goCREATEVIEWcomp_scoreASSELECTyear,stud_id,comp_scoreFROMstud_score

當計算機老師需要瀏覽所有選自己課的同學(xué)各年的學(xué)習(xí)成績:SELECT*FROMcomp_score77.1.2使用視圖的優(yōu)點和缺點隱蔽數(shù)據(jù)庫的復(fù)雜性視圖隱蔽了數(shù)據(jù)庫設(shè)計的復(fù)雜性,使得開發(fā)者可在不影響用戶使用數(shù)據(jù)庫的情況下改變數(shù)據(jù)庫內(nèi)容82.控制用戶提取數(shù)據(jù)

通過將某些不需要的、敏感的或不適當?shù)臄?shù)據(jù)控制在視圖之外,可以實現(xiàn)為用戶定制其個人所使用的表。視圖還可隱蔽復(fù)雜的查詢,包括對異構(gòu)數(shù)據(jù)的分別查詢,用戶只需查詢視圖而不用編寫復(fù)雜的查詢或執(zhí)行命令93.簡化數(shù)據(jù)庫用戶管理建立視圖以后,還可起到保護數(shù)據(jù)庫基表的作用,如使用GRANT和REVOKE命令為各種用戶授予在視圖上的操作權(quán)限,而取消其在表上的操作權(quán)限,這樣,用戶就只能查詢和修改其所能見到的數(shù)據(jù),從而實現(xiàn)了對底層基表設(shè)計結(jié)構(gòu)的保護104.改進性能

通過在視圖中存儲復(fù)雜查詢的運算結(jié)果并為其他查詢提供這些摘要性的結(jié)果使數(shù)據(jù)庫的性能得到提高11缺點:對修改的限制。如要修改視圖的某些行,系統(tǒng)要將此修改轉(zhuǎn)換為對基表某些行的修改,若對復(fù)雜的視圖或存在嵌套關(guān)系的視圖進行修改,可能由于所有權(quán)鏈遭破壞而無法修改127.2創(chuàng)建視圖CREATE

VIEW[<database_name>.][<owner>.]view_name

[(column[,...n])]

[WITHENCRYPTION]

AS

select_statement

[WITHCHECKOPTION]13例:使用函數(shù)avg()對視圖進行定義在使用函數(shù)時,派生列必須在CREATE

VIEW語句中包括一個列名average。本例使用的數(shù)據(jù)庫是在以前我們創(chuàng)建的My_DB1范例數(shù)據(jù)庫,操作的表為表stud_score14useMy_DB1GoCREATE

VIEWscore_view(year,average)

AS

SELECTyear,avg(comp_score)FROMstud_scoreGROUPBYyear下面語句獲得新建視圖的信息:SELECT*FROMscore_view15視圖定義信息查詢使用圖形化界面16通過執(zhí)行系統(tǒng)存儲過程查看視圖的定義信息EXECsp_helptext

objname

需查看的視圖名稱1718可運行sp_depends獲得視圖對象的參照對象和字段:EXECsp_dependsobjname

表score_view所參照的字段19

SQLServer還提供了信息計劃視圖,可以查詢數(shù)據(jù)庫中定義的所有視圖select*frominformation_schema.views

20My_DB1上所定義的所有視圖的所有者,名稱,視圖定義以及一些其他信息21例:應(yīng)用WITH

ENCRYPTION子句創(chuàng)建加密視圖my_view2(類似第一個例子)usepubsgoCREATE

VIEW

my_view2WITH

ENCRYPTION

ASSELECTau_id,phone,job_id,job_desc

FROMauthors,jobsWHEREau_idLIKE'1%'ANDjob_descLIKE'N%'22通過使用WITHENCRYPTION

子句,用戶無法瀏覽視圖my_view2的定義。通過sp_helptext,用戶可看到系統(tǒng)確實對視圖my_view2進行了加密:EXECsp_helptextmy_view2

上述命令運行結(jié)果返回“對象備注已加密”的信息237.3視圖的修改和刪除

7.3.1視圖的修改

與數(shù)據(jù)庫中表的修改一樣,視圖的修改也是由ALERT來語句完成24ALTER

VIEW[<database_name>.][<owner>.]view_name[(column[,...n])]

[WITH

ENCRYPTION]

AS

select_statement

[WITH

CHECK

OPTION]25例:修改上例創(chuàng)建的視圖my_view2,將該視圖中的記錄必須滿足字段job_desc的第一個字符為‘N’的條件,改為滿足字段job_desc的第一個字符為’M’的條件ALTER

VIEWmy_view2ASSELECT

au_id,phone,job_id,job_desc

FROMauthors,jobsWHEREau_idLIKE'1%'ANDjob_descLIKE'M%'26通過查看修改后的新視圖中的記錄集來查看視圖修改的結(jié)果修改后的視圖未定義加密語句,可執(zhí)行sp_helptext查看修改后的視圖定義277.3.2視圖的刪除

視圖的刪除類似于表的刪除,可通過DROP子句來實現(xiàn)DROPVIEWdbo.my_view2

287.4通過視圖修改數(shù)據(jù)

視圖顯示的是一個或多個基表上的查詢結(jié)果集,并不能維護獨立的數(shù)據(jù)庫數(shù)據(jù)復(fù)制29通過視圖修改數(shù)據(jù)應(yīng)注意如下問題1.1.在視圖中不能修改含有計算結(jié)果的列,因為它們是通過計算得出的,它的維護權(quán)是特定的計算表達式不是用戶30在視圖中修改的列必須是該視圖在表中所參照的列如:在pubs庫中創(chuàng)建視圖my_view1,其上參照了表authors中的au_id,phone兩列,那么通過my_view1對表authors的修改也將被限制在這兩列上

313.不能影響多于一個的基表

向視圖my_view1中插入一行數(shù)據(jù)

INSERT

my_view1values('998-72-3675','408496-7223','3','NewHire-Jobnotspecified')返回信息“視圖或函數(shù)'my_view1'不可更新,因為修改會影響多個基表”32這個原因就在于視圖my_view1是建立在authors和jobs兩張表之上的,對該視圖的插入操作將影響到多張基表,所以造成了錯誤334.如果某一視圖在定義中指定了WITH

CHECKOPTION選項,則進行數(shù)據(jù)修改時將進行驗證例:在pubs庫上創(chuàng)建含有WITH

CHECK

OPTION的新視圖my_view3,然后通過WITH

CHECK

OPTION子句將強制對視圖所作的所有修改都滿足定義視圖的select_statement中指定的條件34CREATEVIEWmy_view3ASSELECT

au_id,au_lname,au_fnameFROMauthorsWHERE

au_lname='Ringer'WITHCHECKOPTION35通過查詢語句視圖中的信息36通過UPDATE子句可對視圖進行更新,例如要在視圖my_view3中將id為998-72-3567的作者的姓fname由原來的“Albert”改為“Alberts”,命令如下:UPDATEmy_view3SETau_fname='Alberts'WHEREau_fname='Albert'37重新查詢視圖可看到更新后的結(jié)果38值得注意的是,若對數(shù)據(jù)的修改不滿足某個定義有WITH

CHECK

OPTION選項視圖的select_stataments中指明的條件,

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論