天天看點

我的MYSQL學習心得(十一)我的MYSQL學習心得(十一)

<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。

腳本 視圖的資料來自于兩個表

我的MYSQL學習心得(十一)我的MYSQL學習心得(十一)

檢視視圖

檢視視圖必須要有SHOW VIEW權限

檢視視圖的方法包括:DESCRIBE、SHOW TABLE STATUS、SHOW CREATE VIEW

DESCRIBE檢視視圖基本資訊

我的MYSQL學習心得(十一)我的MYSQL學習心得(十一)

結果顯示了視圖的字段定義、字段的資料類型、是否為空、是否為主/外鍵、預設值和額外資訊

DESCRIBE一般都簡寫成DESC

SHOW TABLE STATUS語句檢視檢視視圖基本資訊

檢視視圖的資訊可以通過SHOW TABLE STATUS的方法

COMMENT的值為VIEW說明該表為視圖,其他的資訊為NULL說明這是一個虛表,如果是基表那麼會基表的資訊,這是基表和視圖的差別

SHOW CREATE VIEW語句檢視視圖詳細資訊

執行結果顯示視圖的名稱、建立視圖的語句等資訊

在VIEWS表中檢視視圖的詳細資訊

在MYSQL中,INFORMATION_SCHEMA VIEWS表存儲了關于資料庫中的視圖的資訊

通過對VIEWS表的查詢可以檢視資料庫中所有視圖的詳細資訊

目前執行個體下隻有一個視圖stu_class

我的MYSQL學習心得(十一)我的MYSQL學習心得(十一)

修改視圖

修改視圖是指修改資料庫中存在的視圖,當基本表的某些字段發生變化時,可以通過修改視圖來保持與基本表的一緻性。

MYSQL中通過CREATE OR REPLACE VIEW 語句和ALTER語句來修改視圖

文法如下:

該語句用于更改已有視圖的定義。其文法與CREATE VIEW類似。當視圖不存在時建立,存在時進行修改

通過DESC來檢視更改之後的視圖定義

我的MYSQL學習心得(十一)我的MYSQL學習心得(十一)

可以看到隻查詢一個字段

ALTER語句修改視圖

這裡關鍵字跟前面的一樣,這裡不做介紹

使用ALTER語句修改視圖 stu_class

使用DESC檢視

我的MYSQL學習心得(十一)我的MYSQL學習心得(十一)
我的MYSQL學習心得(十一)我的MYSQL學習心得(十一)

更新視圖

更新視圖是指通過視圖來插入、更新、删除表資料,因為視圖是虛表,其中沒有資料。

通過視圖更新的時候都是轉到基表進行更新,如果對視圖增加或者删除記錄,實際上是對基表增加或删除記錄

我們先修改一下視圖定義

查詢視圖資料

我的MYSQL學習心得(十一)我的MYSQL學習心得(十一)

UPDATE

我的MYSQL學習心得(十一)我的MYSQL學習心得(十一)

更新成功

INSERT

我的MYSQL學習心得(十一)我的MYSQL學習心得(十一)

插入成功

DELETE

我的MYSQL學習心得(十一)我的MYSQL學習心得(十一)

删除成功

當視圖中包含如下内容的時候,視圖的更新操作将不能被執行

(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