視圖的特點(diǎn)
虛表,是從一個(gè)或幾個(gè)基本表(或視圖)導(dǎo)出的表
只存放視圖的定義脑奠,不會(huì)出現(xiàn)數(shù)據(jù)冗余
基表中的數(shù)據(jù)發(fā)生變化挤土,從視圖中查詢出的數(shù)據(jù)也隨之改變
建立視圖
語句格式
CREATE VIEW
<視圖名> [(<列名> [眯亦,<列名>]…)]
AS <子查詢>
[WITH CHECK OPTION];
[例1] 建立信息系學(xué)生的視圖辫秧。
CREATE VIEW IS_Student
AS
SELECT Sno束倍,Sname,Sage
FROM Student
WHERE Sdept= 'IS'盟戏;
刪除視圖
DROP VIEW <視圖名>
該語句從數(shù)據(jù)字典中刪除指定的視圖定義
由該視圖導(dǎo)出的其他視圖定義仍在數(shù)據(jù)字典中肌幽,但已不能使用,必須顯式刪除
刪除基表時(shí)抓半,由該基表導(dǎo)出的所有視圖定義都必須顯式刪除
[例9] 刪除視圖IS_S1
DROP VIEW IS_S1喂急;
查詢視圖
從用戶角度:查詢視圖與查詢基本表相同
[例1] 在信息系學(xué)生的視圖中找出年齡小于20歲的學(xué)生。
SELECT Sno笛求,Sage
FROM IS_Student
WHERE Sage<20廊移;
IS_Student視圖的定義 (視圖定義例1):
CREATE VIEW IS_Student
AS
SELECT Sno,Sname探入,Sage
FROM Student
WHERE Sdept= 'IS‘狡孔;
更新視圖
用戶角度:更新視圖與更新基本表相同
[例1] 將信息系學(xué)生視圖IS_Student中學(xué)號(hào)95002
的學(xué)生姓名改為“劉辰”。
UPDATE IS_Student
SET Sname= '劉辰'
WHERE Sno= '95002'蜂嗽;
轉(zhuǎn)換后的語句:
UPDATE Student
SET Sname= '劉辰'
WHERE Sno= '95002' AND Sdept= 'IS'苗膝;
實(shí)際系統(tǒng)對(duì)視圖更新的限制
允許對(duì)行列子集視圖進(jìn)行更新
對(duì)其他類型視圖的更新不同系統(tǒng)有不同限制
DB2對(duì)視圖更新的限制:
(1) 若視圖是由兩個(gè)以上基本表導(dǎo)出的,則此視圖不允許更新植旧。
(2) 若視圖的字段來自字段表達(dá)式或常數(shù)辱揭,則不允許對(duì)此視圖執(zhí)行INSERT和UPDATE操作,但允許執(zhí)行DELETE操作病附。
(3) 若視圖的字段來自集函數(shù)问窃,則此視圖不允許更新。
(4) 若視圖定義中含有GROUP BY子句完沪,則此視圖不允許更新域庇。
(5) 若視圖定義中含有DISTINCT短語嵌戈,則此視圖不允許更新。
(6) 若視圖定義中有嵌套查詢听皿,并且內(nèi)層查詢的FROM子句中涉及的表也是導(dǎo)出該視圖的基本表熟呛,則此視圖不允許更新。
(7) 一個(gè)不允許更新的視圖上定義的視圖也不允許更新