概念:數據庫
視圖是一個虛擬的表,外觀和行爲上與相似,可是不須要實際的物理存儲,它只是從表裏引用數據安全
做用:函數
a、使用視圖來簡化數據訪問code
例如用戶不知道如何去數據庫使用結合獲取數據時,建立一個視圖來包含表的結合,讓用戶能夠從這個視圖獲取數據it
b、使用視圖做爲一種安全形式io
例如一張表裏有敏感信息,好比薪水,身份證等,姓名,年齡等,能夠建立一個視圖只包含姓名、年齡非敏感信息table
c、使用視圖維護摘要數據function
語法基礎
CREATE VIEW view_name AS SELECT column1,column2 FROM table_name WHERE [condition]
案例書籍
由CUSTOMERS 表建立名字、年齡字段的視圖
CREATE VIEW CUSTOMERS_VIEW AS SELECT NAME, AGE FROM CUSTOMERS
能夠像普通的數據表同樣查詢
SELECT * FROM CUSTOMERS_VIEW
注:
視圖能夠從一個、多個表或者視圖中被建立,語法都是相似的,基礎數據的表或者視圖被刪除,上層的所有視圖都不能使用了
WITH CHECK OPTION 是一個 CREATE VIEW 語句的一個可選項,用於保證全部的 UPDATE 和 INSERT 語句都知足視圖定義的條件,若是不知足則會返回錯誤
案例
--建立一個視圖,可是 WITH CHECK OPTION是打開的 CREATE VIEW COUSTOMERS AS SELECT NAME AGE FORM CUSTOMERS WHERE AGE IS NOT NULL WITH CHECK OPTION -- AGE字段不能爲 NULL
-- AGE字段不能爲 NULL
注:
在基於視圖建立另外一個視圖時, WITH CHECK OPTION有兩個選線
一、默認選項CASCADE,其是 ANSI標準語法,但Micsoft SQL Server 和 Oracle稍有不一樣的CASCADE關鍵字,該項會選擇全部底層視圖、全部完整性約束,以及新視圖的定義條件,所以使用CASCADED選項建立視圖是更安全的作法,基表的引用完整性也獲得保護
二、LOCAL 選項只檢測兩個視圖的完整性約束和新視圖的定義條件,不檢查底層的表
能夠從視圖建立一個表,就像從一個表建立另外一個表(或從一個視圖建立另外一個視圖)同樣
語法
CREATE TABLE TABEL_NAME AS SELECT COLUMN1,COLUMN2 FROM VIEW_NAME [WHERE CONDITION1 [,CONDITION2] [OREDER BY]
注
表與視圖的主要區別在於表包含實際的數據、佔據物理存儲空間,而視圖不包含數據,並且值須要保存視圖定義(查詢語句)
CREATE VIEW 語句裏不能包含 ORDER BY 子句,可是GROUP BY子句用於CREATE VIEW 語句時,能夠起到相似 ORDER BY 子句的做用
CREATE VIEW NAME AS SELECT COLUMN1,COLUMN2 FROM TABLE GROUP BY COLUMN2,COLUMN1
在必定的條件下,視圖底層數據能夠進行更新
書籍介紹
a、視圖不包含結合
b、視圖不包含 GROUP BY 子句
c、視圖不包含 UNION 語句
d、視圖不包含任何組函數
e、不能使用 DISTINCT 子句
f、WHERE 子句包含的嵌套的表表達式不能與 FROM 子句引用同一個表
g、視圖可執行 INSERT、UPDATE和DELETE等語句
另一種說法
a、SELECT 子句不能包含 DISTINCT 關鍵字
b、SELECT 子句不能包含任何彙總函數(summary functions)
c、SELECT 子句不能包含任何集合函數(set functions)
d、SELECT 子句不能包含任何集合運算符(set operators)
e、SELECT 子句不能包含 ORDER BY 子句
f、FROM 子句中不能有多個數據表
g、WHERE 子句不能包含子查詢(subquery)
h、查詢語句中不能有 GROUP BY 或者 HAVING
i、計算得出的列不能更新
j、視圖必須包含原始數據表中全部的 NOT NULL 列,從而使 INSERT 查詢生效
DROP VIEW 命名用於從數據庫裏刪除視圖,它有兩個選項
一、RESTRICT 若是這選項進行刪除操做,而其餘視圖在約束裏有所引用,刪除操做就會出錯
二、CASCADE 選項,並且其餘視圖或約束被引用,DROP VIEW 也會成功,並且底層的視圖或約束也會被刪除
語法
DROP VIEW NAMES2
就是表和視圖的另外一個名稱,異名能夠建立爲 PUBLIC 或 PRIVATE,PUBLIC的異名能夠被數據庫裏的其餘用戶使用,而PRIVATE異名只能被全部者和擁有權限的用戶使用
語法
CREATE [PUBLIC|PRIVATE] SYNONYM SYNONYM_NAME FOR TABLE|VIEW
案例
--爲表建立一個異名 CREATE SYNONYM CUST FOR CUSTOMER_TBL SELECT CUST_NAME FORM CUST
語法
DROP [PUBLIC|PRIVATE] SYNONYM SYNONYM_NAME
案例
DROP SYNONYM CUST
注
異名並不屬於ANSI SQL標準,MySQL不支持異名,但咱們可使用視圖來實現一樣的同年