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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

關系數(shù)據(jù)庫標準語言續(xù)第一頁,共四十頁,2022年,8月28日2視圖:從一個或幾個基本表(或視圖)導出的表。一、建立視圖的優(yōu)點

1、簡化用戶的操作

2、靈活

3、提供一定程度的邏輯獨立性

4、提供安全保護第六節(jié)視圖第二頁,共四十頁,2022年,8月28日3二、定義視圖1、建立視圖

CREATEVIEW<視圖名>[(<列名>[,<列名>]…)]AS<子查詢>[WITHCHECKOPTION];2、刪除視圖

DROPVIEW<視圖名>三、查詢視圖(同表查詢一樣)四、更新視圖(同表更新一樣)第三頁,共四十頁,2022年,8月28日4如果CREATEVIEW語句僅指定了視圖名,省略了組成視圖的各個屬性列名,則隱含該視圖由子查詢中SELECT子句目標列中的諸字段組成。在下列三種情況下必須明確指定組成視圖的所有列名:其中某個目標列不是單純的屬性名,而是集函數(shù)或列表達式多表連接時選出了幾個同名列作為視圖的字段需要在視圖中為某個列啟用新的更合適的名稱第四頁,共四十頁,2022年,8月28日5例1建立信息系學生的視圖。

CREATEVIEWIS_Student

AS

SELECTSno,Sname,age

FROMS

WHEREdept='IS';

行列子集視圖:視圖是從單個基本表導出的,并且只是去掉了基本表的某些行和某些列,但保留了碼。第五頁,共四十頁,2022年,8月28日6例2建立信息系學生的視圖,并要求進行修改和插入操作時仍須保證該視圖只有信息系的學生

CREATEVIEWIS_Student

AS

SELECTSno,Sname,age

FROMS

WHEREdept='IS'

WITHCHECKOPTION;第六頁,共四十頁,2022年,8月28日7視圖不僅可以建立在單個基本表上,也可以建立在多個基本表上。例3建立信息系選修了1號課程的學生的視圖

CREATEVIEWIS_S1(Sno,Sname,Grade)

AS

SELECTS.Sno,Sname,Grade

FROMS,SC

WHEREdept='IS' AND

S.Sno=SC.Sno AND

SC.Cno='1';第七頁,共四十頁,2022年,8月28日8

視圖不僅可以建立在一個或多個基本表上也可以建立在一個或多個已定義好的視圖上,或同時建立在基本表與視圖上。例4建立信息系選修了1號課程且成績在90分以上的學生的視圖CREATEVIEWIS_S2

AS

SELECTSno,Sname,Grade

FROMIS_S1

WHEREGrade>=90;第八頁,共四十頁,2022年,8月28日9定義基本表時,為了減少數(shù)據(jù)庫中的冗余數(shù)據(jù),表中只存放基本數(shù)據(jù),由基本數(shù)據(jù)經(jīng)過各種計算派生出的數(shù)據(jù)一般是不存儲的。但由于視圖中的數(shù)據(jù)并不實際存儲,所以定義視圖時可以根據(jù)應用的需要,設置一些派生屬性列。這些派生屬性由于在基本表中并不實際存在,所以有時也稱他們?yōu)樘摂M列。帶虛擬列的視圖我們稱為帶表達式的視圖。第九頁,共四十頁,2022年,8月28日10例5定義一個反映學生出生年份的視圖

CREATEVIEWBT_S(Sno,Sname,Sbirth)

AS SELECTSno,Sname,2010-age

FROMS;帶表達式的視圖第十頁,共四十頁,2022年,8月28日11還可以用帶有集函數(shù)和GROUPBY子句的查詢來定義視圖。這種視圖稱為分組視圖。例6將學生的學號及他的平均成績定義為一個視圖

CREATVIEWS_G(Sno,Gavg)

AS SELECTSno,AVG(Grade)

FROMSC

GROUPBYSno;第十一頁,共四十頁,2022年,8月28日12例7將S表中所有女生記錄定義為一個視圖CREATEVIEWF_Student(stdnum,name,sex,age,dept)

AS SELECT*

FROMS

WHEREsex=‘女’;這里視圖F_Student是由子查詢“SELECT*"建立的。由于該視圖一旦建立后,S表就構成了視圖定義的一部分,如果以后修改了基本表S的結構,則S表與F_Student視圖的映像關系受到破壞,因而該視圖就不能正確工作了。為避免出現(xiàn)這類問題,可以采用下列兩種方法:第十二頁,共四十頁,2022年,8月28日13建立視圖時明確指明屬性列名,而不是簡單地用SELECT*。即:

CREATEVIEWF_Student(stdnum,name,sex,age,dept)

AS SELECTSno,Sname,sex,age,dept

FROMS

WHERESsex=‘女’;在修改基本表之后刪除原來的視圖,然后重建視圖。這是最保險的方法。

第十三頁,共四十頁,2022年,8月28日142、刪除視圖語句的格式為:

DROPVIEW<視圖名>;

一個視圖被刪除后,由此視圖導出的其他視圖也將失效,用戶應該使用DROPVIEW語句將他們一一刪除。第十四頁,共四十頁,2022年,8月28日15例8刪除視圖IS_S1 DROPVIEWIS_S1;執(zhí)行此語句后,IS_S1視圖的定義將從數(shù)據(jù)字典中刪除。由IS_S1視圖導出的IS_S2視圖的定義雖仍在數(shù)據(jù)字典中,但該視圖已無法使用了,因此應該同時刪除。第十五頁,共四十頁,2022年,8月28日16三、查詢視圖DBMS執(zhí)行對視圖的查詢時,首先進行有效性檢查,檢查查詢涉及的表、視圖等是否在數(shù)據(jù)庫中存在,如果存在,則從數(shù)據(jù)字典中取出查詢涉及的視圖的定義,把定義中的子查詢和用戶對視圖的查詢結合起來,轉換成對基本表的查詢,然后再執(zhí)行這個經(jīng)過修正的查詢。將對視圖的查詢轉換為對基本表的查詢的過程稱為視圖的消解(ViewResolution)。第十六頁,共四十頁,2022年,8月28日17例1在信息系學生的視圖中找出年齡小于20歲的學生

SELECTSno,age

FROMIS_Student

WHEREage<20;DBMS執(zhí)行此查詢時,將其與IS_Student視圖定義中的子查詢

SELECTSno,Sname,age

FROMS

WHEREdept="IS";

結合起來,轉換成對基本表S的查詢,修正后的查詢語句為

第十七頁,共四十頁,2022年,8月28日18SELECTSno,Sage

FROMStudent

WHERESdept="IS"ANDSage<20;

第十八頁,共四十頁,2022年,8月28日19

視圖是定義在基本上的虛表,它可以和其他基本表一起使用,實現(xiàn)連接查詢或嵌套查詢。這也就是說,在關系數(shù)據(jù)庫的三級模式結構中,外模式不僅包括視圖,而且還可以包括一些基本表。第十九頁,共四十頁,2022年,8月28日20例2查詢信息系選修了1號課程的學生

SELECTSno,Sname

FROMIS_Student,SC

WHEREIS_Student.Sno=SC.SnoAND

SC.Cno=‘1’;

本查詢涉及虛表IS_Student和基本表SC,通過這兩個表的連接來完成用戶請求。第二十頁,共四十頁,2022年,8月28日21在一般情況下,視圖查詢的轉換是直截了當?shù)?。但有些情況下,這種轉換不能直接進行,查詢時就會出問題在S_G視圖中查詢平均成績在90分以上的學生學號和平均成績Select*fromS_Gwheregavg>=90S_G的定義為Selectsno,avg(grade)froms_cgroupbysno該轉換后得到:第二十一頁,共四十頁,2022年,8月28日22該查詢轉換后得到SELECTSNO,AVG(GRADE)FROMS_CWHEREAVG(GRADE)>=90這是錯誤的?。?!正確的查詢應該是SELECTSNO,AVG(GRADE)FROMS_CGROUPBYSNOHAVINGAVG(GRADE)>=90此類查詢應該直接對表進行!第二十二頁,共四十頁,2022年,8月28日23四、更新視圖更新視圖包括插入(INSERT)、刪除(DELETE)和修改(UPDATE)三類操作。由于視圖是不實際存儲數(shù)據(jù)的虛表,因此對視圖的更新,最終要轉換為對基本表的更新。為防止用戶通過視圖對數(shù)據(jù)進行增刪改時,無意或故意操作不屬于視圖范圍內的基本表數(shù)據(jù),可在定義視圖時加上WITHCHECKOPTION子句,這樣在視圖上增刪改數(shù)據(jù)時,DBMS會進一步檢查視圖定義中的條件,若不滿足條件,則拒絕執(zhí)行該操作。第二十三頁,共四十頁,2022年,8月28日24例1將信息系學生視圖IS_Student中學號為95002的學生姓名改為“劉辰”UPDATEIS_Student

SETSname='劉辰'

WHERESno='95002';

一般行列子集視圖都是可更新視圖第二十四頁,共四十頁,2022年,8月28日25與查詢視圖類似,DBMS執(zhí)行此語句時,首先進行有效性檢查,檢查所涉及的表、視圖等是否在數(shù)據(jù)庫中存在如果存在,則從數(shù)據(jù)字典中取出該語句涉及的視圖的定義,把定義中的子查詢和用戶對視圖的更新操作結合起來,轉換成對基本表的更新執(zhí)行經(jīng)過修正的更新操作。轉換后的更新語句為:

UPDATESSETSname='劉辰'

WHERESno='95002'ANDdept='IS';

第二十五頁,共四十頁,2022年,8月28日26例2向信息系學生視圖IS_S中插入一個新的學生記錄,其中學號為95029,姓名為趙新,年齡為20歲

INSERT

INTOIS_Student

VALUES('95029','趙新',20);

DBMS將其轉換為對基本表的更新:

INSERT

INTOS(Sno,Sname,age,dept)

VALUES('95029','趙新',20,'IS');

這里系統(tǒng)自動將系名'IS'放入VALUES子句中。第二十六頁,共四十頁,2022年,8月28日27例3刪除計算機系學生視圖CS_S中學號為95029的記錄

DELETE

FROMIS_Student

WHERESno='95029';

DBMS將其轉換為對基本表的更新:

DELETE

FROMS

WHERESno='95029'ANDdept='IS';

第二十七頁,共四十頁,2022年,8月28日28更新的限制

在關系數(shù)據(jù)庫中,并不是所有的視圖都是可更新的,因為有些視圖的更新不能唯一地有意義地轉換成對相應基本表的更新。第二十八頁,共四十頁,2022年,8月28日29DB2規(guī)定:1.若視圖是由兩個以上基本表導出的,則此視圖不允許更新。2.若視圖的字段來自字段表達式或常數(shù),則不允許對此視圖執(zhí)行INSERT和UPDATE操作,但允許執(zhí)行DELETE操作。3.若視圖的字段來自集函數(shù),則此視圖不允許更新。4.若視圖定義中含有GROUPBY子句,則此視圖不允許更新。5.若視圖定義中含有DISTINCT短語,則此視圖不允許更新。第二十九頁,共四十頁,2022年,8月28日306.若視圖定義中有嵌套查詢,并且內層查詢的FROM子句中涉及的表也是導出該視圖的基本表,則此視圖不允許更新。例如將成績在平均成績之上的元組定義成一個視圖GOOD_SC:

CREATEVIEWGOOD_SCASSELECTSno,Cno,GradeFROMSCWHEREGrade>(SELECTAVG(Grade)FROMSC);

導出視圖GOOD_SC的基本表是SC,內層查詢中涉及的表也是SC,所以視圖GOOD_SC是不允許更新的。

7.一個不允許更新的視圖上定義的視圖也不允許更新。第三十頁,共四十頁,2022年,8月28日31視圖的優(yōu)點視圖能夠簡化用戶的操作視圖使用戶能以多種角度看待同一數(shù)據(jù)視圖對重構數(shù)據(jù)庫提供了一定程度的邏輯獨立性視圖能夠對機密數(shù)據(jù)提供安全保護第三十一頁,共四十頁,2022年,8月28日32數(shù)據(jù)控制

對象

對象類型

操作權限

屬性列

TABLE

SELECT,INSERT,UPDATE,DELETE,ALLPRIVILEGES

視圖

TABLE

SELECT,INSERT,UPDATE,DELETE,ALLPRIVILEGES

基本表

TABLE

SELECT,INSERT,UPDATE,DELETE,ALTER,INDEX,ALLPRIVILEGES

數(shù)據(jù)庫

DATABASE

CREATETABLE,ALTERTABLE

第三十二頁,共四十頁,2022年,8月28日33一、授權GRANT<權限>[,<權限>]…[ON<對象類型><對象名>][TO<用戶>[,<用戶>]…[WITHGRANTOPTION];二、收回權限REVOKE<權限>[,<權限>]…[ON<對象類型><對象名>][FROM<用戶>[,<用戶>]…第三十三頁,共四十頁,2022年,8月28日34例1把查詢S表權限授給用戶U1GRANTSELECTONTABLESTOU1;

例2把對S表和C表的全部權限授予用戶U2和U3GRANTALLPRIVILEGESONTABLES,CTOU2,U3;

例3把對表SC的查詢權限授予所有用戶

GRANTSELECTONTABLESCTOPUBLIC;

在sqlserver2000中不需要對象類型table只需對象名sc第三十四頁,共四十頁,2022年,8月28日35例4把查詢S表和修改學生學號的權限授給用戶U4這里實際上要授予U4用戶的是對基本表S的SELECT權限和對屬性列Sno的UPDATE權限。授予關于屬性列的權限時必須明確指出相應屬性列名。完成本授權操作的SQL語句為:

GRANTUPDATE(Sno),SELECTONTABLESTOU4;第三十五頁,共四十頁,2022年,8月28日36例5把對表SC的INSERT權限授予U5用戶,并允許他再將此權限授予其他用戶

GRANTINSERTONTABLESCTOU5WITHGRANTOPTION;U5可以將此權限授予U6:

GRANTINSERTONTABLESCTOU6WITHGRANTOPTION;

同樣,U6還可以將此權限授予U7:

GRANTINSERTONTABLESCTOU7;第三十六頁,共四十頁,2022年,8月28日37例6DBA把在數(shù)據(jù)庫S_C中建立表的權限授予用戶U8 GRANTCREATETABLEON

DATABASESTUTOU8;例7把用戶U4修改學生學號的權限收回

REVOKEUPDA

溫馨提示

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

評論

0/150

提交評論