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_view
go
--stu_view()不實用參數,默認為基礎表中的列名稱
--注意 create view 必須是批處理里面的語句
create view stu_view
as
select name,age from stuTable where age>20;
go
--執行視圖
select * from stu_view; |
3 修改視圖
go
alter view stu_view
as
select * from stuTable where age>22;
go
select * from stu_view |

4 刪除視圖
go
--語法
drop view view_name1,view_name2,......,view_nameN;
--該語句可以同時刪除多個視圖,只要在刪除各視圖名稱之間用逗號分隔即可。
|
--語法
drop view stu_view;
--該語句可以同時刪除多個視圖,只要在刪除各視圖名稱之間用逗號分隔即可。 |
注意:
1.可通過視圖向基表中插入數據,但插入的數據實際上存放在基表中,而不是存放在視圖中。
2.如果視圖引用了多個表,使用insert語句插入的列必須屬於同一個表。
3.若創建視圖時定義了“with check option”選項,則使用視圖向基表中插入數據時,必須保證插入后的數據滿足定義視圖的限制條件。
--(1).通過視圖向基本表中插入數據
go
create view stu_insert_view(編號,姓名,性別,年齡)
as
select id,name,gender,age from stuTable;
go
select * 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總結
2.涉及到權限管理方面,比如某表中的部分字段含有機密信息,不應當讓低權限的用戶訪問到的情況,這時候給這些用戶提供一個適合他們權限的視圖,供他們閱讀自己的數據就行了。
2.視圖與表的區別:
1.視圖是已經編譯好的SQL語句,是基於SQL語句的結果集的可視化表,而表不是;
2.視圖(除過索引視圖)沒有實際的物理記錄,而基本表有;
3.表示內容,視圖是窗口;
4.表占物理空間,而視圖不占物理空間,視圖只是邏輯概念的存在;
5.視圖是查看數據表的一種方法,可以查詢數據表中某些字段構成的數據,只是一些SQL語句的集合。從安全角度說,視圖可以防止用戶接觸數據表,從而不知表結構;
6.表屬於全局模式的表,是實表;視圖數據局部模式的表,是虛表;
7.視圖的建立和刪除只影響視圖本身,不影響對應的基本表。
轉載自:https://blog.csdn.net/marvel_java/article/details/53353475