<a href="http://www.cnblogs.com/lyhabc/p/3691555.html" target="_blank">我的MYSQL學習心得(一)</a>
<a href="http://www.cnblogs.com/lyhabc/p/3696629.html" target="_blank">我的MYSQL學習心得(二)</a>
<a href="http://www.cnblogs.com/lyhabc/p/3696958.html" target="_blank">我的MYSQL學習心得(三)</a>
<a href="http://www.cnblogs.com/lyhabc/p/3697952.html" target="_blank">我的MYSQL學習心得(四)</a>
<a href="http://www.cnblogs.com/lyhabc/p/3699969.html" target="_blank">我的MYSQL學習心得(五)</a>
<a href="http://www.cnblogs.com/lyhabc/p/3703994.html" target="_blank">我的MYSQL學習心得(六)</a>
<a href="http://www.cnblogs.com/lyhabc/p/3732942.html" target="_blank">我的MYSQL學習心得(七)</a>
<a href="http://www.cnblogs.com/lyhabc/p/3776000.html" target="_blank">我的MYSQL學習心得(八)</a>
<a href="http://www.cnblogs.com/lyhabc/p/3776739.html" target="_blank">我的MYSQL學習心得(九)</a>
<a href="http://www.cnblogs.com/lyhabc/p/3793524.html" target="_blank">我的MYSQL學習心得(十)</a>
<a href="http://www.cnblogs.com/lyhabc/p/3802704.html" target="_blank">我的MYSQL學習心得(十二)</a>
這一篇《我的MYSQL學習心得(十一)》将會講解MYSQL的視圖
使用視圖的理由是什麼?
1、安全性:一般是這樣做的:建立一個視圖,定義好該視圖所操作的資料。
之後将使用者權限與視圖綁定,這樣的方式是使用到了一個特性:grant語句可以針對視圖進行授予權限。
2、查詢性能提高
3、有靈活性的功能需求後,需要改動表的結構而導緻工作量比較大,那麼可以使用虛拟表的形式達到少修改的效果。
這是在實際開發中比較有用的
4、複雜的查詢需求,可以進行問題分解,然後将建立多個視圖擷取資料。将視圖聯合起來就能得到需要的結果了。
建立視圖
建立視圖的文法
其中,CREATE:表示建立視圖;
REPLACE:表示替換已有視圖
ALGORITHM :表示視圖選擇算法
view_name :視圖名
column_list:屬性列
select_statement:表示select語句
[WITH [CASCADED | LOCAL] CHECK OPTION]參數表示視圖在更新時保證在視圖的權限範圍之内
可選的ALGORITHM子句是對标準SQL的MySQL擴充。
ALGORITHM可取三個值:MERGE、TEMPTABLE或UNDEFINED。
如果沒有ALGORITHM子句,預設算法是UNDEFINED(未定義的)。算法會影響MySQL處理視圖的方式。
對于MERGE,會将引用視圖的語句的文本與視圖定義合并起來,使得視圖定義的某一部分取代語句的對應部分。
對于TEMPTABLE,視圖的結果将被置于臨時表中,然後使用它執行語句。
對于UNDEFINED,MySQL自己選擇所要使用的算法。如果可能,它傾向于MERGE而不是TEMPTABLE,
這是因為MERGE通常更有效,而且如果使用了臨時表,視圖是不可更新的。
LOCAL和CASCADED為可選參數,決定了檢查測試的範圍,預設值為CASCADED。
腳本 視圖的資料來自于兩個表

檢視視圖
檢視視圖必須要有SHOW VIEW權限
檢視視圖的方法包括:DESCRIBE、SHOW TABLE STATUS、SHOW CREATE VIEW
DESCRIBE檢視視圖基本資訊
結果顯示了視圖的字段定義、字段的資料類型、是否為空、是否為主/外鍵、預設值和額外資訊
DESCRIBE一般都簡寫成DESC
SHOW TABLE STATUS語句檢視檢視視圖基本資訊
檢視視圖的資訊可以通過SHOW TABLE STATUS的方法
COMMENT的值為VIEW說明該表為視圖,其他的資訊為NULL說明這是一個虛表,如果是基表那麼會基表的資訊,這是基表和視圖的差別
SHOW CREATE VIEW語句檢視視圖詳細資訊
執行結果顯示視圖的名稱、建立視圖的語句等資訊
在VIEWS表中檢視視圖的詳細資訊
在MYSQL中,INFORMATION_SCHEMA VIEWS表存儲了關于資料庫中的視圖的資訊
通過對VIEWS表的查詢可以檢視資料庫中所有視圖的詳細資訊
目前執行個體下隻有一個視圖stu_class
修改視圖
修改視圖是指修改資料庫中存在的視圖,當基本表的某些字段發生變化時,可以通過修改視圖來保持與基本表的一緻性。
MYSQL中通過CREATE OR REPLACE VIEW 語句和ALTER語句來修改視圖
文法如下:
該語句用于更改已有視圖的定義。其文法與CREATE VIEW類似。當視圖不存在時建立,存在時進行修改
通過DESC來檢視更改之後的視圖定義
可以看到隻查詢一個字段
ALTER語句修改視圖
這裡關鍵字跟前面的一樣,這裡不做介紹
使用ALTER語句修改視圖 stu_class
使用DESC檢視
更新視圖
更新視圖是指通過視圖來插入、更新、删除表資料,因為視圖是虛表,其中沒有資料。
通過視圖更新的時候都是轉到基表進行更新,如果對視圖增加或者删除記錄,實際上是對基表增加或删除記錄
我們先修改一下視圖定義
查詢視圖資料
UPDATE
更新成功
INSERT
插入成功
DELETE
删除成功
當視圖中包含如下内容的時候,視圖的更新操作将不能被執行
(1)視圖中包含基本中被定義為非空的列
(2)定義視圖的SELECT語句後的字段清單中使用了數學表達式
(3)定義視圖的SELECT語句後的字段清單中使用聚合函數
(4)定義視圖的SELECT語句中使用了DISTINCT、UNION、TOP、GROUP BY 、HAVING子句
删除視圖
删除視圖使用DROP VIEW文法
DROP VIEW能夠删除1個或多個視圖。必須在每個視圖上擁有DROP權限
可以使用關鍵字IF EXISTS來防止因不存在的視圖而出錯
删除stu_class視圖
如果名稱為 stu_class 的視圖存在則删除
使用SHOW CREATE VIEW語句檢視結果
該視圖不存在,删除成功
總結
SQLSERVER裡實際上跟MYSQL一樣,也是有資訊架構視圖的
<a href="http://technet.microsoft.com/zh-cn/library/ms186778.aspx" target="_blank">資訊架構視圖 (Transact-SQL)</a>
資訊架構視圖是 SQL Server 提供的幾種擷取中繼資料的方法之一。
資訊架構視圖提供獨立于系統表的内部 SQL Server 中繼資料視圖。
盡管已經對基礎系統表進行了重要的修改,資訊架構視圖仍然可使應用程式正常工作。
SQL Server 中包含的資訊架構視圖符合 ISO 标準中的資訊架構定義。
如有不對的地方,歡迎大家拍磚o(∩_∩)o