標籤:集合 font 介紹 編譯 from 自己 ble gen 沒有
1 視圖介紹 視圖是從一個或者幾個基本表(或視圖)匯出的表。它與基本表不同,是一個虛表。資料庫中只存放視圖的定義,而不存在視圖對應的資料,這些資料仍然存放在原來的基本表中。所以一旦基本表中的資料發生變化,從視圖中查詢的資料也就隨之改變了。從這個意義上講,視圖就像一個視窗,透過它可以看到資料庫中自己感興趣的資料及其變化。1.1 視圖的概述
視圖是從一個或者多個表匯出的,它的行為與表非常相似,但視圖是一個虛擬表,在視圖中可以使用SELECT語句查詢資料,以及使用insert、update和delete語句修改記錄,對於視圖的操作最終轉化為對基本資料表的操作。視圖不僅可以方便操作,而且可以保障資料庫系統的安全性。
?視圖一經定義便儲存在資料庫中,與其相對應的資料並沒有像表資料那樣在資料庫中在儲存一份,通過視圖看到的資料只是存放在基本表中的資料。可以對其進行增刪該查,通過視圖對資料修改,基本表資料也對應變化,反之亦然。
1.2 使用視圖的目的與好處1.聚焦特定資料:使使用者只能看到和操作與他們有關的資料,提高了資料的安全性。
2.簡化資料操作:使使用者不必寫複雜的查詢語句就可對資料進行操作。
3.定製使用者資料:使不同水平的使用者能以不同的方式看到不同的資料。
4.合并分離資料:視圖可以從水平和垂直方向上分割資料,但原資料庫的結構保持不變。
2 建立視圖文法:
| [ with check option ] --強制所有通過是同修改的資料,都要滿足select語句中指定的條件select查詢語句as[ with encryption ] --用於加密視圖的定義,使用者只能查看不能修改。[ (列名表) ]create view 視圖 |
先建立一個學生表
| use marvel_db;--建立一個學生表create table stuTable( id int identity(1,1)primary key,--id 主鍵,自增 name varchar(20), gender char(2), age int,)--往表中插入資料insert into stuTable (name,gender,age)values (‘劉邦‘,‘男‘,23), (‘項羽‘,‘男‘,22), (‘韓信‘,‘男‘,21); insert into stuTable(name,gender,age) values(‘蕭何‘,‘男‘,24) |
建立視圖
| --建立視圖if (exists (select * from sys.objects where name = ‘stu_view‘)) drop view stu_viewgo--stu_view()不實用參數,預設為基礎資料表中的列名稱--注意 create view 必須是批處理裡面的語句create view stu_view as select name,age from stuTable where age>20;go--執行視圖select * from stu_view; |
查詢結果:
3 修改視圖
| goalter view stu_view asselect * from stuTable where age>22;goselect * from stu_view |
顯示結果:4 刪除視圖
| go--文法drop view view_name1,view_name2,......,view_nameN;--該語句可以同時刪除多個視圖,只要在刪除各視圖名稱之間用逗號分隔即可。 |
例如:刪除視圖 stu_view
| --文法drop view stu_view;--該語句可以同時刪除多個視圖,只要在刪除各視圖名稱之間用逗號分隔即可。 |
5 通過視圖管理表中的資料(1).通過視圖向基本表中插入資料
注意:
1.可通過視圖向基表中插入資料,但插入的資料實際上存放在基表中,而不是存放在視圖中。
2.如果視圖引用了多個表,使用insert語句插入的列必須屬於同一個表。
3.若建立視圖時定義了“with check option”選項,則使用視圖向基表中插入資料時,必須保證插入後的資料滿足定義視圖的限制條件。
| --(1).通過視圖向基本表中插入資料gocreate view stu_insert_view(編號,姓名,性別,年齡)asselect id,name,gender,age from stuTable;goselect * from stuTable;---插入一條資料insert into stu_insert_view values(‘孫權‘,‘男‘,34);----查看插入記錄之後表中的內容。select * from stuTable; |
顯示結果:
(2).通過視圖修改基本表的資料
--查看修改之前的資料 select * from stuTable; |
顯示結果:
| --修改資料update stu_insert_view set 年齡=30 where 姓名=‘劉邦‘;--查看修改後的資料select * from stuTable; |
結果顯示:
(3).通過視圖刪除基本表的資料
注意:
1.要刪除的資料必須包含在視圖的結果集中。
2.如果視圖引用了多個表時,無法用delete命令刪除資料。
文法
--文法 delete stu_insert_view where condition; |
刪除之前:
刪除:
| --例子delete stu_insert_view where 姓名 =‘劉邦‘;select * from stu_insert_view;select * from stuTable; |
顯示結果:6總結1.使用情境:1.經常用到的查詢,或較複雜的聯集查詢應當創立視圖,這是會最佳化效能的
2.涉及到許可權管理方面,比如某表中的部分欄位含有機密資訊,不應當讓低許可權的使用者訪問到的情況,這時候給這些使用者提供一個適合他們許可權的視圖,供他們閱讀自己的資料就行了。
2.視圖與表的區別:
1.視圖是已經編譯好的SQL語句,是基於SQL語句的結果集的可視化表,而表不是;
2.視圖(除過索引檢視表)沒有實際的物理記錄,而基本表有;
3.表示內容,視圖是視窗;
4.表占物理空間,而視圖不佔物理空間,視圖只是邏輯概念的存在;
5.視圖是查看資料表的一種方法,可以查詢資料表中某些欄位構成的資料,只是一些SQL語句的集合。從安全形度說,視圖可以防止使用者接觸資料表,從而不知表結構;
6.表屬於全域模式的表,是實表;視圖資料局部模式的表,是虛表;
7.視圖的建立和刪除隻影響視圖本身,不影響對應的基本表。
轉載自:53353475
SQLServer之視圖篇