資料庫檢視詳解,視圖詳解

來源:互聯網
上載者:User

資料庫檢視詳解,視圖詳解

資料庫檢視詳解

- 定義:
視圖(View)是從一個或多個表(或視圖)匯出的表。視圖與表(有時為與視圖區別,也稱表為基本表——Base Table)不同,視圖是一個虛表,即視圖所對應的資料不進行實際儲存,資料庫中只儲存視圖的定義,在對視圖的資料進行操作時,系統根據視圖的定義去操作與視圖相關聯的基本表。

視圖就像一個視窗,透過它可以看到資料庫中自己感興趣的資料及其變化

- 視圖的建立

SQL Server建立視圖的文法:

CREATE VIEW  [ < database_name > .] [ < owner > .]      view_name [ ( column [ ,...n ] ) ]     [ WITH < view_attribute > [ ,...n ] ]  AS  select_statement      [ WITH CHECK OPTION ]  < view_attribute > ::=   { ENCRYPTION | SCHEMABINDING |        VIEW_METADATA }  

WITH check OPTION 表示對視圖進行UPDATE、INSERT、delete操作時要保證更新、刪除、或插入的行滿足視圖定義中的謂詞條件

  • 例1:建立顯示年齡大於20歲的學生學號、姓名、性別等資訊的S_view1
create view S_view1   as  select sno,sname,sex from s where age>20  ;
  • 例2:建立v_score1,要求基本表來源:S,C,SC;選擇的欄位為:S表中的sno、sname;C表中的cname及SC表中score;要求查詢的資料為學號為20030001的學生的考試成績。
create view v_score1  As  Select s.sno,s.sname,c.cname,sc.score  From s,c,sc  Where s.sno=sc.sno and c.cno=sc.cno and sno=  “  20030001”  ;
  • 例3:建立資訊系學生的視圖,並要求進行修改和插入操作時仍需保證該視圖只有資訊系的學生
Create view IS_StudentASselect Sno,Sname,Sagefrom Studentwhere Sdept='IS'with check option;
    在上述視圖上加了with check option子句,以後對該視圖進行插入、修改和刪除操作時,RDBMS都會自動加上Sdept='IS'行列子集視圖: 如果一個視圖只是從單個基本表匯出的,並且只是去掉了某些行列,但保留了主鍵,稱之為行列子集視圖如上面例1和例3就是一個行列子集視圖
- 查詢檢視

視圖定義好之後就可以像對基本表一樣進行查詢了

  • 例 4 在資訊系學生中尋找年齡小於20的
select Sno,Sagefrom IS_Studentwhere Sage<20;

對應的轉換後的語句為

select Sno,Sagefrom Studentwhere Sdept='IS' and Sage<20;

有時候,單單一個視圖並不能查詢到需要的資料,如例5

  • 例5 查詢選修了1號課程的資訊系學生
select IS_Student.Sno,Snamefrom IS_Student,SCwhere IS_Student.Sno=SC.Sno and SC.Cno='1';

上述查詢涉及視圖IS_Student和基本表SC共同查詢得到結果

- 更新視圖

更新視圖是指通過視圖來插入、刪除和修改資料

由於視圖是不實際儲存資料的虛表,因此對視圖的更新最終要轉換為對基本表的更新。所以為了防止使用者對資料有意無意的操作,可在定義視圖時加上 with check option 如例3

  • 例 6 將資訊系學生視圖IS_Student 好、中學號為200215122的學生姓名改為"張大屁"
Update IS_Studentset Sname='張大屁'where Sno='2000215122';

轉換後對應的語句為

Update Studentset Sname='張大屁'where Sno='200215122' and Sdept='IS';
  • 例7 向資訊系學生視圖中插入一個新的學生記錄 學號為200215129 姓名為 ‘李紅’ 年齡為21
insert intoIS_Studentvalues('200215129','李紅',21);

轉換後的語句為

insert into Student(Sno.Sname,Sage,Sdept)values('200215129','李紅',21,'IS');
  • 例8 刪除資訊系學生學號為200215111的學生
delete from IS_Studentwhere Sno='200215111';

轉換後的語句為

deletefrom Studentwhere Sno='200215111' and Sdept='IS';

視圖更新的限制

如果視圖定義中有如下子句則不能更新

  • 分組 使用group by 和 Having
  • 連接
  • 子查詢
  • 並集
  • 聚集合函式 MAX MIN COUNT AVG
  • DISTINCT
  • 匯出列
- 視圖的刪除

視圖刪除格式為

DROP VIEW <視圖名> [CASCADE] ;

視圖刪除後視圖的定義將從資料字典中刪除,使用CASCADE是串聯刪除,刪除此視圖上匯出的視圖

  • 例9 刪除視圖IS_Student
Drop VIEW IS_Student;
- 視圖的優點- 1簡化使用者操作
視圖不僅可以簡化使用者對資料的理解,也可以簡化他們的操作。那些被經常使用的查詢可以被定義為視圖,從而使使用者不必為以後的操作每次都指定全部的條件。 
- 2對重構資料庫提供了一定程度上的邏輯獨立性
視圖可以使應用程式和資料庫表在一定程度上獨立。如果沒有視圖,應用一定是建立在表上的。有了視圖之後,程式可以建立在視圖之上,從而程式與資料庫表被視圖分割開來。 
- 3安全性
 通過視圖使用者只能查詢和修改他們所能見到的資料。資料庫中的其他資料則既看不見也取不到。資料庫授權命令可以使每個使用者對資料庫的檢索限制到特定的資料庫物件上,但不能授權到資料庫特定行和特定的列上。通過視圖,使用者可以被限制在資料的不同子集上。 

視圖的缺點

● 效能:SQL Server必須把視圖的查詢轉化成對基本表的查詢,如果這個視圖是由一個複雜的多表查詢所定義,那麼,即使是視圖的一個簡單查詢,SQL Server也把它變成一個複雜的結合體,需要花費一定的時間。

● 修改限制:當使用者試圖修改視圖的某些行時,SQL Server必須把它轉化為對基本表的某些行的修改。對於簡單視圖來說,這是很方便的,但是,對於比較複雜的視圖,可能是不可修改的。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.