數(shù)據(jù)庫系統(tǒng)原理 第5章_第1頁
數(shù)據(jù)庫系統(tǒng)原理 第5章_第2頁
數(shù)據(jù)庫系統(tǒng)原理 第5章_第3頁
數(shù)據(jù)庫系統(tǒng)原理 第5章_第4頁
數(shù)據(jù)庫系統(tǒng)原理 第5章_第5頁
已閱讀5頁,還剩21頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、視圖是由一個或多個基本表導(dǎo)出的表,其內(nèi)容由子查詢定義。在數(shù)據(jù)庫中只存儲視圖的定義,不存儲數(shù)據(jù),在引用時,由基本表中的數(shù)據(jù)動態(tài)生成。對視圖的操作,都轉(zhuǎn)換成對基本表的操作。第5章 數(shù)據(jù)庫的視圖P895.1 視圖的定義5.1.1 視圖的概念1(1)可簡化用戶的操作(2)可提供一定程度的邏輯數(shù)據(jù)獨立性(3)對重要數(shù)據(jù)提供安全保護(hù)5.1.2 視圖的作用 P89 2SQL語言用CREATE VIEW命令建立視圖,其一般格式為:CREATE VIEW (,)AS WITH CHECK OPTION 其中,子查詢可以是任意復(fù)雜的SELECT語句,但通常不允許含有ORDER BY子句和DISTINCT短語。 W

2、ITH CHECK OPTION表示對視圖進(jìn)行UPDATE,INSERT和DELETE操作時要保證更新、插入或刪除的行滿足視圖定義中的謂詞條件(即子查詢中的條件表達(dá)式)。 5.2 創(chuàng)建視圖 P905.2.1 使用SQL語句創(chuàng)建視圖3組成視圖的屬性列名或者全部省略或者全部指定,如果省略了視圖的各個屬性列名,則隱含該視圖由子查詢中SELECT子句目標(biāo)列中的諸字段組成。但在下列三種情況下必須明確指定組成視圖的所有列名:某個目標(biāo)列不是單純的屬性名,而是聚集函數(shù)或列表達(dá)式;多表連接時選出了幾個同名列作為視圖的字段;需要在視圖中為某個列啟用新的名字。4例1: 建立信息系學(xué)生的視圖,并要求進(jìn)行修改和插入操作

3、時仍需保證該視圖只有信息系的學(xué)生。CREATE VIEW IS_S1 AS SELECT SNO,SNAME,AGE FROM S WHERE SDEPT=IS WITH CHECK OPTION GO加上了WITH CHECK OPTION子句,以后對該視圖進(jìn)行插入、修改和刪除操作時,RDBMS會自動加上SDEPT=IS的條件。 5 若一個視圖是從單個基本表導(dǎo)出的,并且只是去掉了基本表的某些行和某些列,但保留了主碼,我們稱這類視圖為行列子集視圖。 視圖不僅可以建立在單個基本表上,也可以建立在多個基本表上。 6 例2: 建立信息系選修了1號課程的學(xué)生的視圖。 CREATE VIEW IS_S2

4、(SNO,SNAME,GRADE) AS SELECT S.SNO,SNAME,GRADE FROM S JOIN SC ON S.SNO=SC.SNO WHERE SDEPT=IS AND SC.CNO=1 GO 由于視圖IS_S2的屬性列中包含了S表與SC表的同名列SNO,所以必須在視圖名后面明確說明視圖的各個屬性列名。 7 視圖不僅可以建立在一個或多個基本表上,也可以建立在一個或多個已定義好的視圖上,或建立在基本表與視圖上。P91例5.2 8操作步驟:(1)打開Microsoft SQL Server Management Studio窗口,展開相關(guān)數(shù)據(jù)庫,右擊“視圖”節(jié)點,選擇單擊“新

5、建視圖”命令。(2)在“添加表”對話框中,會出現(xiàn)“表”、“視圖”等選項,選擇“表”選項卡,再選擇相關(guān)的表。(3)單擊“添加”按鍵,完成后關(guān)閉“添加表”。P92圖5.2(4)在視圖窗口的“關(guān)系圖”窗格中顯示上面指定的表的全部信息,選擇需要的列,對應(yīng)在“條件”窗格中列出了選擇的列,并顯示相關(guān)表的連接語句。P93圖5.3(5)單擊“保存”按鈕,在彈出的“選擇名稱”對話框中輸入視圖的名稱,并單擊“確定”按鈕。例3:建立視圖界面操作5.2.2 使用圖形化界面創(chuàng)建視圖 P91 9視圖定義后,就可以像對待基本表一樣對視圖進(jìn)行查詢(SELECT)操作。 先進(jìn)行有效性檢查,查看用到的視圖和表是否存在。檢查有效后

6、,取出視圖的定義 ,把定義中的子查詢和當(dāng)前要執(zhí)行的查詢結(jié)合起來,轉(zhuǎn)化成等價的對基本表的查詢,然后再執(zhí)行查詢操作。5.3 查詢視圖 P93 10例4:查詢信息學(xué)生年齡大于19的學(xué)生信息。 USE JWGLSELECT *FROM IS_S1WHERE AGE19GO11但對視圖中的元組進(jìn)行更新操作就不一樣了。這是由于視圖是不實際存儲數(shù)據(jù)的虛表,對視圖的更新最終要轉(zhuǎn)換為對基本表的更新。所以對視圖的更新操作是有限制的,并不是所有的視圖都能進(jìn)行更新。5.4 更新視圖 P9412對于視圖元組的更新操作(INSERT、DELETE、UPDATA),有以下限制:(1) 如果一個視圖是從多個基本表使用聯(lián)接操作

7、導(dǎo)出的,那么不允許對這個視圖執(zhí)行更新操作。(2) 如果在導(dǎo)出視圖的過程中,使用了分組和聚集函數(shù)操作,也不允許對這個視圖執(zhí)行更新操作。(3)如果在視圖定義中使用了DISTINCT短語或GROUP BY子句,則不允許對該視圖進(jìn)行更新操作。(4)如果視圖列的值為表達(dá)式或常數(shù),則不允許對該視圖進(jìn)行更新操作。行列子集視圖是可以執(zhí)行更新操作的。在SQL2中,允許更新的視圖在定義時,必須加上“WITH CHECK OPTION”短語。 131、插入數(shù)據(jù)(INSERT語句)例5: 向信息系學(xué)生視圖IS_S1中插入一個新的學(xué)生記錄,其中學(xué)號為200915129,姓名為趙新,年齡為20歲。 INSERT INTO

8、 IS_S1 VALUES(200915129,趙新,20)消息550,級別16,狀態(tài)1,第1 行試圖進(jìn)行的插入或更新已失敗,原因是目標(biāo)視圖或者目標(biāo)視圖所跨越的某一視圖指定了WITH CHECK OPTION,而該操作的一個或多個結(jié)果行又不符合CHECK OPTION 約束的條件。語句已終止。如果在建視圖時沒有選擇WITH CHECK OPTION就可又插入5.4.1 使用SQL語句更新視圖 P94 142、更新數(shù)據(jù)(UPDATE語句)例6: 將信息系學(xué)生視圖IS_S1中學(xué)號為200915122的學(xué)生姓名改為“劉辰”。 UPDATE IS_S1 SET SNAME=劉辰 WHERE SNO=2

9、00915122 轉(zhuǎn)換后的更新語句為: UPDATE S SET SNAME=劉辰 WHERE SNO=200915122 AND SDEPT=IS153、刪除數(shù)據(jù)(DELETE語句)例7: 刪除信息系學(xué)生視圖IS_S中學(xué)號為200915129的記錄。 DELETE FROM IS_S1 WHERE SNO=200915129;轉(zhuǎn)換為對基本表的更新: DELETE FROM S WHERE SNO=200915129 AND SDEPT=IS;在關(guān)系數(shù)據(jù)庫中,有些視圖是不可以更新的,其原因是這些視圖的更新不能唯一地有意義地轉(zhuǎn)換成對相應(yīng)基本表的更新??聪旅胬}。 16 例8: 將學(xué)生的學(xué)號及他的

10、平均成績定義為一個視圖。 CREATE VIEW S_G(SNO,GAVG) AS SELECT SNO,AVG(GRADE) FROM SC GROUP BY SNO如果想把視圖S_G中學(xué)號為200915121的學(xué)生的平均成績改成90分,SQL語句如下: UPDATE S_G SET GAVG=90 WHERE SNO=200915121視圖或函數(shù)S_G 不可更新,因為它包含聚合。17但這個對視圖的更新是無法轉(zhuǎn)換成對基本表SC的更新的,因為系統(tǒng)無法修改各科成 績,以使平均成績成為90。所以S_G視圖是不可更新的。一般地,行列子集視圖是可更新的。除行列子集視圖外,還有些視圖理論上是可更新的,但

11、它們的確切特征還是尚待研究的課題。還有些視圖從理論上就是不可更新的。 18操作步驟:(P95圖5.6,P96圖5.7圖5.8)(1)展開相關(guān)數(shù)據(jù)庫中的視圖,找到要更新的數(shù)據(jù)視圖,右擊并選擇“打開視圖”。(2)在出現(xiàn)的表格窗口中插入數(shù)據(jù),插入完成后,系統(tǒng)自動檢查插入的數(shù)據(jù)是否滿足要求,滿足則更新到基本表,否則提示插入失敗。(3)對已經(jīng)存在的數(shù)據(jù)進(jìn)行更新時,在打開的視圖表格中,找到需要更新的數(shù)據(jù)項進(jìn)行修改。(4)需要刪除視圖中的記錄時,在打開的視圖表格中單擊需要刪除的行,右擊并在快捷菜單中單擊“刪除”命令。5.4.2 使用圖形化界面更新視圖 P95 19語法格式:ALTER VIEW (,)AS

12、WITH CHECK OPTION5.5 修改視圖定義 P96 5.5.1 使用SQL語句修改視圖的定義 20例9: 修改信息系學(xué)生的視圖,并要求年齡大于20.ALTER VIEW IS_S1 AS SELECT * FROM S WHERE SDEPT=IS AND AGE20 WITH CHECK OPTION21操作步驟:(1)展開指定的數(shù)據(jù)庫中的相關(guān)視圖,右擊并在快捷菜單中選擇“修改”命令。(2)在出現(xiàn)的窗口中進(jìn)行相關(guān)修改。例:上例中,在窗口中增加一個限制條件,將年齡限制20以上.5.5.2 使用圖形界面修改視圖的定義P97 22 該語句的一般格式為: DROP VIEW CASCADE; 視圖刪除后,視圖的定義將從數(shù)據(jù)字典中被刪除。如果該視圖上還導(dǎo)出了其他視圖,則使用CASCADE級聯(lián)刪除語句,就可以把該視圖和由它導(dǎo)出的所有視圖一起刪除。 基本表刪除后,由該基本表導(dǎo)出的所有視圖(定義)沒有被刪除,但均已無法使用了。刪除

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論