SQLServer之視圖篇

來源:互聯網
上載者:User

標籤:集合   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之視圖篇

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.