SQL Server基礎之《視圖的概述和基本操做》

閱讀目錄

  • 一:視圖的概述
  • 二:視圖的分類
  • 三:視圖的優勢和做用
  • 四:視圖的基本操做和語法
  • 五:視圖和表的區別

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

一:視圖的概述

 視圖是從一個或者多個表導出的,它的行爲與表很是類似,但視圖是一個虛擬表,在視圖中可使用SELECT語句查詢數據,以及使用insert、update和delete語句修改記錄,對於視圖的操做最終轉化爲對基本數據表的操做。視圖不只能夠方便操做,並且能夠保障數據庫系統的安全性。安全

 視圖一經定義便存儲在數據庫中,與其相對應的數據並無像表數據那樣在數據庫中在存儲一份,經過視圖看到的數據只是存放在基本表中的數據。能夠對其進行增刪該查,經過視圖對數據修改,基本表數據也對應變化,反之亦然。服務器

二:視圖的分類

 SQL Server的視圖能夠分爲3類,分別是:標準視圖,索引視圖,分區視圖ide

2.1.標準視圖函數

 標準視圖組合了一個或多個表中的數據,能夠得到使用視圖中的大多數好處,包括重點將放在特定的數據上及簡化數據操做。性能

2.2.索引視圖測試

 索引視圖是被具體化了的視圖,即它已經通過計算並存儲。能夠爲視圖建立索引,對視圖建立一個惟一的彙集索引。索引視圖能夠顯著提升某些類型查詢的性能,索引視圖尤爲適於聚合許多行的查詢,但它們不太適於常常更新的基本數據集。加密

2.3.分區視圖spa

 分區視圖在一臺多多臺服務器間水平鏈接一組成員表的分區數據,這樣,數據看上去如同來自一個表。鏈接本地同一個SQL Server實例中的成員表的視圖是一個本地區分視圖。orm

三:視圖的優勢和做用

與直接從表中讀取數據相比,視圖具備一下優勢

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. 視圖的創建和刪除隻影響視圖自己,不影響對應的基本表。
相關文章
相關標籤/搜索