關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言續(xù)_第1頁
關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言續(xù)_第2頁
關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言續(xù)_第3頁
關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言續(xù)_第4頁
關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言續(xù)_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言續(xù)第1頁,共40頁,2022年,5月20日,7點22分,星期一2視圖:從一個或幾個基本表(或視圖)導(dǎo)出的表。一、建立視圖的優(yōu)點 1、簡化用戶的操作 2、靈活 3、提供一定程度的邏輯獨立性 4、提供安全保護第六節(jié) 視圖第2頁,共40頁,2022年,5月20日,7點22分,星期一3二、定義視圖1、建立視圖 CREATE VIEW (,) AS WITH CHECK OPTION;2、刪除視圖 DROP VIEW 三、查詢視圖 (同表查詢一樣)四、更新視圖 (同表更新一樣)第3頁,共40頁,2022年,5月20日,7點22分,星期一4如果CREATE VIEW語句僅指定了視圖名,省

2、略了組成視圖的各個屬性列名,則隱含該視圖由子查詢中SELECT子句目標(biāo)列中的諸字段組成。在下列三種情況下必須明確指定組成視圖的所有列名: 其中某個目標(biāo)列不是單純的屬性名,而是集函數(shù)或列表達(dá)式 多表連接時選出了幾個同名列作為視圖的字段 需要在視圖中為某個列啟用新的更合適的名稱第4頁,共40頁,2022年,5月20日,7點22分,星期一5例1 建立信息系學(xué)生的視圖。CREATE VIEW IS_Student AS SELECT Sno, Sname, age FROM S WHERE dept=IS; 行列子集視圖:視圖是從單個基本表導(dǎo)出的,并且只是去掉了基本表的某些行和某些列,但保留了碼。第5

3、頁,共40頁,2022年,5月20日,7點22分,星期一6例2 建立信息系學(xué)生的視圖,并要求進(jìn)行修改和插入操作時仍須保證該視圖只有信息系的學(xué)生CREATE VIEW IS_Student AS SELECT Sno, Sname, age FROM S WHERE dept=IS WITH CHECK OPTION;第6頁,共40頁,2022年,5月20日,7點22分,星期一7視圖不僅可以建立在單個基本表上,也可以建立在多個基本表上。例3建立信息系選修了1號課程的學(xué)生的視圖 CREATE VIEW IS_S1(Sno, Sname, Grade) AS SELECT S.Sno, Sname,

4、 Grade FROM S, SC WHERE dept=IS AND S.Sno=SC.Sno AND SC.Cno=1; 第7頁,共40頁,2022年,5月20日,7點22分,星期一8 視圖不僅可以建立在一個或多個基本表上也可以建立在一個或多個已定義好的視圖上,或同時建立在基本表與視圖上。例4建立信息系選修了1號課程且成績在90分以上的學(xué)生的視圖CREATE VIEW IS_S2 AS SELECT Sno, Sname, Grade FROM IS_S1 WHERE Grade=90; 第8頁,共40頁,2022年,5月20日,7點22分,星期一9定義基本表時,為了減少數(shù)據(jù)庫中的冗余數(shù)據(jù)

5、,表中只存放基本數(shù)據(jù),由基本數(shù)據(jù)經(jīng)過各種計算派生出的數(shù)據(jù)一般是不存儲的。但由于視圖中的數(shù)據(jù)并不實際存儲,所以定義視圖時可以根據(jù)應(yīng)用的需要,設(shè)置一些派生屬性列。這些派生屬性由于在基本表中并不實際存在,所以有時也稱他們?yōu)樘摂M列。帶虛擬列的視圖我們稱為帶表達(dá)式的視圖。第9頁,共40頁,2022年,5月20日,7點22分,星期一10例5定義一個反映學(xué)生出生年份的視圖 CREATE VIEW BT_S(Sno, Sname, Sbirth) AS SELECT Sno, Sname, 2010-age FROM S;帶表達(dá)式的視圖第10頁,共40頁,2022年,5月20日,7點22分,星期一11還可以用

6、帶有集函數(shù)和GROUP BY子句的查詢來定義視圖。這種視圖稱為分組視圖。例6 將學(xué)生的學(xué)號及他的平均成績定義為一個視圖 CREAT VIEW S_G(Sno, Gavg) AS SELECT Sno, AVG(Grade) FROM SC GROUP BY Sno;第11頁,共40頁,2022年,5月20日,7點22分,星期一12例7將S表中所有女生記錄定義為一個視圖CREATE VIEW F_Student(stdnum,name,sex,age,dept) AS SELECT * FROM S WHERE sex=女;這里視圖F_Student是由子查詢“SELECT *建立的。由于該視圖

7、一旦建立后,S表就構(gòu)成了視圖定義的一部分,如果以后修改了基本表S的結(jié)構(gòu),則S表與F_Student視圖的映像關(guān)系受到破壞,因而該視圖就不能正確工作了。為避免出現(xiàn)這類問題,可以采用下列兩種方法:第12頁,共40頁,2022年,5月20日,7點22分,星期一13建立視圖時明確指明屬性列名,而不是簡單地用SELECT *。即:CREATE VIEW F_Student(stdnum,name,sex,age,dept) AS SELECT Sno, Sname, sex, age, dept FROM S WHERE Ssex=女;在修改基本表之后刪除原來的視圖,然后重建視圖。這是最保險的方法。 第

8、13頁,共40頁,2022年,5月20日,7點22分,星期一142、刪除視圖語句的格式為:DROP VIEW ;一個視圖被刪除后,由此視圖導(dǎo)出的其他視圖也將失效,用戶應(yīng)該使用DROP VIEW語句將他們一一刪除。第14頁,共40頁,2022年,5月20日,7點22分,星期一15例8刪除視圖IS_S1DROP VIEW IS_S1;執(zhí)行此語句后,IS_S1視圖的定義將從數(shù)據(jù)字典中刪除。由IS_S1視圖導(dǎo)出的IS_S2視圖的定義雖仍在數(shù)據(jù)字典中,但該視圖已無法使用了,因此應(yīng)該同時刪除。第15頁,共40頁,2022年,5月20日,7點22分,星期一16三、查詢視圖DBMS執(zhí)行對視圖的查詢時,首先進(jìn)行

9、有效性檢查,檢查查詢涉及的表、視圖等是否在數(shù)據(jù)庫中存在,如果存在,則從數(shù)據(jù)字典中取出查詢涉及的視圖的定義,把定義中的子查詢和用戶對視圖的查詢結(jié)合起來,轉(zhuǎn)換成對基本表的查詢,然后再執(zhí)行這個經(jīng)過修正的查詢。將對視圖的查詢轉(zhuǎn)換為對基本表的查詢的過程稱為視圖的消解(View Resolution)。第16頁,共40頁,2022年,5月20日,7點22分,星期一17例1在信息系學(xué)生的視圖中找出年齡小于20歲的學(xué)生SELECT Sno, ageFROM IS_Student WHERE age20;DBMS執(zhí)行此查詢時,將其與IS_Student視圖定義中的子查詢 SELECT Sno, Sname, a

10、ge FROM S WHERE dept=IS ; 結(jié)合起來,轉(zhuǎn)換成對基本表S的查詢,修正后的查詢語句為 第17頁,共40頁,2022年,5月20日,7點22分,星期一18SELECT Sno, Sage FROM Student WHERE Sdept=IS AND Sage=90S_G的定義為Select sno,avg(grade) from s_c group by sno該轉(zhuǎn)換后得到:第21頁,共40頁,2022年,5月20日,7點22分,星期一22該查詢轉(zhuǎn)換后得到SELECT SNO,AVG(GRADE)FROM S_CWHERE AVG(GRADE)=90這是錯誤的!正確的查詢應(yīng)

11、該是SELECT SNO,AVG(GRADE)FROM S_CGROUP BY SNOHAVING AVG(GRADE)=90此類查詢應(yīng)該直接對表進(jìn)行!第22頁,共40頁,2022年,5月20日,7點22分,星期一23四、更新視圖更新視圖包括插入(INSERT)、刪除(DELETE)和修改(UPDATE)三類操作。由于視圖是不實際存儲數(shù)據(jù)的虛表,因此對視圖的更新,最終要轉(zhuǎn)換為對基本表的更新。為防止用戶通過視圖對數(shù)據(jù)進(jìn)行增刪改時,無意或故意操作不屬于視圖范圍內(nèi)的基本表數(shù)據(jù),可在定義視圖時加上WITH CHECK OPTION子句,這樣在視圖上增刪改數(shù)據(jù)時,DBMS會進(jìn)一步檢查視圖定義中的條件,若

12、不滿足條件,則拒絕執(zhí)行該操作。第23頁,共40頁,2022年,5月20日,7點22分,星期一24例1將信息系學(xué)生視圖IS_Student中學(xué)號為95002的學(xué)生姓名改為“劉辰”UPDATE IS_StudentSET Sname=劉辰WHERE Sno=95002; 一般行列子集視圖都是可更新視圖第24頁,共40頁,2022年,5月20日,7點22分,星期一25與查詢視圖類似,DBMS執(zhí)行此語句時,首先進(jìn)行有效性檢查,檢查所涉及的表、視圖等是否在數(shù)據(jù)庫中存在如果存在,則從數(shù)據(jù)字典中取出該語句涉及的視圖的定義,把定義中的子查詢和用戶對視圖的更新操作結(jié)合起來,轉(zhuǎn)換成對基本表的更新執(zhí)行經(jīng)過修正的更新

13、操作。轉(zhuǎn)換后的更新語句為:UPDATE S SET Sname=劉辰 WHERE Sno=95002 AND dept=IS; 第25頁,共40頁,2022年,5月20日,7點22分,星期一26例2向信息系學(xué)生視圖IS_S中插入一個新的學(xué)生記錄,其中學(xué)號為95029,姓名為趙新,年齡為20歲INSERTINTO IS_StudentVALUES(95029, 趙新, 20);DBMS將其轉(zhuǎn)換為對基本表的更新:INSERT INTO S (Sno,Sname,age,dept)VALUES(95029, 趙新, 20, IS); 這里系統(tǒng)自動將系名IS放入VALUES子句中。第26頁,共40頁,

14、2022年,5月20日,7點22分,星期一27例3刪除計算機系學(xué)生視圖CS_S中學(xué)號為95029的記錄DELETEFROM IS_StudentWHERE Sno=95029; DBMS將其轉(zhuǎn)換為對基本表的更新: DELETE FROM SWHERE Sno=95029 AND dept=IS; 第27頁,共40頁,2022年,5月20日,7點22分,星期一28更新的限制 在關(guān)系數(shù)據(jù)庫中,并不是所有的視圖都是可更新的,因為有些視圖的更新不能唯一地有意義地轉(zhuǎn)換成對相應(yīng)基本表的更新。第28頁,共40頁,2022年,5月20日,7點22分,星期一29DB2規(guī)定:1. 若視圖是由兩個以上基本表導(dǎo)出的,

15、則此視圖不允許更新。 2. 若視圖的字段來自字段表達(dá)式或常數(shù),則不允許對此視圖執(zhí)行INSERT和UPDATE操作,但允許執(zhí)行DELETE操作。 3. 若視圖的字段來自集函數(shù),則此視圖不允許更新。 4. 若視圖定義中含有GROUP BY子句,則此視圖不允許更新。 5. 若視圖定義中含有DISTINCT短語,則此視圖不允許更新。第29頁,共40頁,2022年,5月20日,7點22分,星期一306. 若視圖定義中有嵌套查詢,并且內(nèi)層查詢的FROM子句中涉及的表也是導(dǎo)出該視圖的基本表,則此視圖不允許更新。例如將成績在平均成績之上的元組定義成一個視圖GOOD_SC: CREATE VIEW GOOD_S

16、C AS SELECT Sno, Cno, Grade FROM SC WHERE Grade (SELECT AVG(Grade) FROM SC); 導(dǎo)出視圖GOOD_SC的基本表是SC,內(nèi)層查詢中涉及的表也是SC,所以視圖GOOD_SC是不允許更新的。 7. 一個不允許更新的視圖上定義的視圖也不允許更新。 第30頁,共40頁,2022年,5月20日,7點22分,星期一31視圖的優(yōu)點視圖能夠簡化用戶的操作視圖使用戶能以多種角度看待同一數(shù)據(jù)視圖對重構(gòu)數(shù)據(jù)庫提供了一定程度的邏輯獨立性視圖能夠?qū)C密數(shù)據(jù)提供安全保護第31頁,共40頁,2022年,5月20日,7點22分,星期一32數(shù)據(jù)控制 對象

17、對象類型 操作權(quán)限 屬性列 TABLE SELECT, INSERT, UPDATE, DELETE, ALL PRIVILEGES 視 圖 TABLE SELECT, INSERT, UPDATE, DELETE, ALL PRIVILEGES 基本表 TABLE SELECT, INSERT, UPDATE, DELETE, ALTER, INDEX, ALL PRIVILEGES 數(shù)據(jù)庫 DATA BASE CREATE TABLE,ALTER TABLE 第32頁,共40頁,2022年,5月20日,7點22分,星期一33一、授權(quán)GRANT , ON TO , WITH GRANT OP

18、TION;二、收回權(quán)限REVOKE , ON FROM ,第33頁,共40頁,2022年,5月20日,7點22分,星期一34例1把查詢S 表權(quán)限授給用戶U1 GRANT SELECT ON TABLE S TO U1; 例2把對S表和C表的全部權(quán)限授予用戶U2和U3 GRANT ALL PRIVILEGES ON TABLE S , C TO U2, U3; 例3把對表SC的查詢權(quán)限授予所有用戶 GRANT SELECT ON TABLE SC TO PUBLIC; 在sql server2000中不需要對象類型table只需對象名sc第34頁,共40頁,2022年,5月20日,7點22分,星

19、期一35例4把查詢S 表和修改學(xué)生學(xué)號的權(quán)限授給用戶U4這里實際上要授予U4用戶的是對基本表S 的SELECT權(quán)限和對屬性列Sno的UPDATE權(quán)限。授予關(guān)于屬性列的權(quán)限時必須明確指出相應(yīng)屬性列名。完成本授權(quán)操作的SQL語句為:GRANT UPDATE(Sno), SELECT ON TABLE S TO U4;第35頁,共40頁,2022年,5月20日,7點22分,星期一36例5把對表SC的INSERT權(quán)限授予U5用戶,并允許他再將此權(quán)限授予其他用戶 GRANT INSERT ON TABLE SC TO U5 WITH GRANT OPTION;U5可以將此權(quán)限授予U6:GRANT INSERT ON TABLE SC TO U6 WITH GRANT OPTION;同樣,U6還可以將此權(quán)限授予U7:GRANT INSERT ON TABLE SC TO U7;第36頁,共40頁,2022年,5月20日,7點22分,星期一37例6DBA把在數(shù)據(jù)庫S_C中建立表的權(quán)限授予用戶U8GRANT CREATE TABLE ON DATABASE STU TO U8;例7把用戶U4修改學(xué)生學(xué)號的權(quán)限收回REVO

溫馨提示

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

評論

0/150

提交評論