SQL Server基礎之《檢視的概述和基本操作》

阿赫瓦里發表於2015-05-09

 資料庫中的檢視是一個虛擬表。同真實的表一樣,檢視包含一系列帶有名稱的列和行資料,行和列資料用來自由定義檢視和查詢所引用的表,並且在引用檢視時動態產生。本篇將通過一些例項來介紹檢視的概念,檢視的作用,建立檢視,檢視檢視,修改檢視,更新和刪除檢視等SQL Server的資料庫知識。

一:檢視的概述

 檢視是從一個或者多個表匯出的,它的行為與表非常相似,但檢視是一個虛擬表,在檢視中可以使用SELECT語句查詢資料,以及使用insert、update和delete語句修改記錄,對於檢視的操作最終轉化為對基本資料表的操作。檢視不僅可以方便操作,而且可以保障資料庫系統的安全性。

 檢視一經定義便儲存在資料庫中,與其相對應的資料並沒有像表資料那樣在資料庫中在儲存一份,通過檢視看到的資料只是存放在基本表中的資料。可以對其進行增刪該查,通過檢視對資料修改,基本表資料也對應變化,反之亦然。

二:檢視的分類

 SQL Server的檢視可以分為3類,分別是:標準檢視,索引檢視,分割槽檢視

2.1.標準檢視

 標準檢視組合了一個或多個表中的資料,可以獲得使用檢視中的大多數好處,包括重點將放在特定的資料上及簡化資料操作。

2.2.索引檢視

 索引檢視是被具體化了的檢視,即它已經經過計算並儲存。可以為檢視建立索引,對檢視建立一個唯一的聚集索引。索引檢視可以顯著提高某些型別查詢的效能,索引檢視尤其適於聚合許多行的查詢,但它們不太適於經常更新的基本資料集。

2.3.分割槽檢視

 分割槽檢視在一臺多多臺伺服器間水平連線一組成員表的分割槽資料,這樣,資料看上去如同來自一個表。連線本地同一個SQL Server例項中的成員表的檢視是一個本地區分檢視。

三:檢視的優點和作用

與直接從表中讀取資料相比,檢視具有一下優點

3.1.簡單化

 看到的就是需要的,檢視不僅可以簡化使用者對資料的理解,也可以簡化對它們的操作,那些經常使用的查詢可以被定義為檢視,從而使得使用者不必為以後的每次操作指定全部的條件。

3.2.安全性

 檢視可以作為一種安全機制。通過檢視使用者只能檢視和修改他們所能看到的資料。其它或表既不可見也不可以訪問。如果某一使用者想要訪問檢視的,必須授予其訪問許可權。檢視所引用表的訪問許可權與檢視許可權的設定互不影響。

3.3.邏輯資料獨立性

 檢視可以幫助使用者遮蔽真實表結構變化帶來的影響。

四:檢視的基本操作和語法

4.1.建立檢視

--語法
CREATE VIEW view_name
 AS
    SELECT column_name(s) FROM table_name
WHERE condition

測試資料準備:

use sample_db;
create table studentTable(
    id int identity(1,1)primary key,
    name varchar(20),
    gender char(2),
    age int,
)
insert into studentTable (name,gender,age)
values
    ('劉備','',28),
    ('張飛','',24),
    ('關羽','',26); 
--建立檢視
if (exists (select * from sys.objects where name = 'student_view'))
    drop view student_view
go
--student_view()不實用引數,預設為基礎表中的列名稱
create view student_view 
as
select name,age from studentTable where age>24;
--執行檢視
select * from student_view;

檢視檢視的資訊

  • 使用sp_help儲存過程檢視檢視的定義資訊
  • 使用sp_helptext系統儲存過程使用來顯示規則,預設值,未加密的儲存過程,使用者定義函式,觸發器或檢視的文字,語法
exec  sp_help 'student_view';
exec sp_helptext 'student_view';

建立加密檢視:

--加密檢視
if (exists (select * from sys.objects where name = 'student_encryption'))
    drop view student_encryption
go
create view student_encryption
with encryption --加密
as
    select id, name, age from studentTable
go
--view_definition is null
--檢視加密檢視
select * from information_schema.views 
where table_name like 'student_encryption';

 

  從執行結果可看出view_definition欄位為 NULL

4.2.使用檢視修改基本表資料

(1).通過檢視向基本表中插入資料

--(1).通過檢視向基本表中插入資料
create view stu_insert_view(編號,姓名,性別,年齡)
as
select id,name,gender,age from studentTable;
go
select * from studentTable;
---插入一條資料
insert into stu_insert_view values('曹操','',40);
----檢視插入記錄之後表中的內容。
select * from studentTable;   

(2).通過檢視修改基本表的資料

--(2).通過檢視修改基本表的資料
--檢視修改之前的資料
select * from studentTable;
--修改資料
update student_view set age=30
where name='劉備';
--檢視修改後的資料
select * from studentTable;

(3).通過檢視刪除基本表的資料

--語法
delete view_name where condition;
--例子
delete student_view where name ='張飛';
select * from student_view;
select * from studentTable;

 4.3.修該檢視

--修改檢視
alter view student_view 
as
select * from studentTable where age>26;

4.4.刪除檢視

 

--語法
drop view view_name1,view_name2,......,view_nameN;
--該語句可以同時刪除多個檢視,只要在刪除各檢視名稱之間用逗號分隔即可。
drop view studentTable;

 

五:檢視和表的區別

  1. 檢視是已經編譯好的SQL語句,是基於SQL語句的結果集的視覺化表,而表不是;
  2. 檢視(除過索引檢視)沒有實際的物理記錄,而基本表有;
  3. 表示內容,檢視是視窗;
  4. 表佔物理空間,而檢視不佔物理空間,檢視只是邏輯概念的存在;
  5. 檢視是檢視資料表的一種方法,可以查詢資料表中某些欄位構成的資料,只是一些SQL語句的集合。從安全形度說,檢視可以防止使用者接觸資料表,從而不知表結構;
  6. 表屬於全域性模式的表,是實表;檢視資料區域性模式的表,是虛表;
  7. 檢視的建立和刪除隻影響檢視本身,不影響對應的基本表。

相關文章