6.1 視圖概述
6.1.1 視圖的含義
視圖是一個虛擬表,是從數據庫中一個或多個表中導出來的表。視圖還可以從已經存在的視圖的基礎上定義。
視圖一經定義便存儲在數據庫中,與其相對應的數據並沒有像表那樣在數據庫中再存儲一份,通過視圖看到的數據只是存放在基本表中的數據。對視圖的操作與對表的操作一樣,可以對其進行查詢、修改和刪除。當對通過視圖看到的數據進行修改時,相應的基本表的數據也要發生變化;同時,若基本表的數據發生變化,則這種變化可以自動地反映到視圖中。
6.1.2 視圖的作用
與直接從數據表中讀取相比,視圖有以下優點:
● 簡單性
● 安全性
● 邏輯數據獨立性
6.2 創建視圖
6.2.1 創建視圖的語法形式
創建視圖使用CREATE VIEW語句,基本語法格式如下:
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS SELECT_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
6.2.2 在單表上創建視圖
MySQL可以在單個數據表上創建視圖。
【例6.1】在t表上創建一個名為view_t的視圖,代碼如下:
首先創建基本表並插入數據,語句如下:
CREATE TABLE t (quantity INT, price INT);
INSERT INTO t VALUES(3, 50);
6.2.3 在多表上創建視圖
MySQL中也可以在兩個或者兩個以上的表上創建視圖,可以使用CREATE VIEW語句實現。
創建視圖stu_glass,語句如下:
CREATE VIEW stu_glass (id,name, glass) AS SELECT student.s_id,student.name ,
stu_info.glass
FROM student ,stu_info WHERE student.s_id=stu_info.s_id;
6.3 查看視圖
6.3.1 DESCRIBE語句查看視圖基本信息
DESCRIBE可以用來查看視圖。
DESCRIBE 視圖名;
【例6.4】通過DESCRIBE語句查看視圖view_t的定義,代碼如下:
DESCRIBE view_t;
6.3.2 SHOW TABLE STATUS語句查看視圖基本信息
查看視圖的信息可以通過SHOW TABLE STATUS的方法。
SHOW TABLE STATUS LIKE '視圖名';
【例6.5】下面將通過一個例子來學習使用SHOW TABLE STATUS命令查看視圖信息,代碼如下:
SHOW TABLE STATUS LIKE 'view_t' \G
6.3.3 SHOW CREATE VIEW語句查看視圖詳細信息
使用SHOW CREATE VIEW語句可以查看視圖詳細定義。
SHOW CREATE VIEW 視圖名;
【例6.6】SHOW CREATE VIEW查看視圖的詳細定義,代碼如下:
SHOW CREATE VIEW view_t \G
6.3.4 在views表中查看視圖詳細信息
在MySQL中,information_schema數據庫下的views表中存儲了所有視圖的定義。通過對views表的查詢,可以查看數據庫中所有的視圖的詳細信息。
SELECT * FROM information_schema.views;
【例6.7】在views表中查看視圖的詳細定義,代碼如下:
mysql> SELECT * FROM information_schema.views\G
6.4 修改視圖
6.4.1 CREATE OR REPLACE VIEW語句修改視圖
修改視圖,使用CREATE OR REPLACE VIEW語句,語法如下:
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS SELECT_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
6.4.2 ALTER語句修改視圖
ALTER語句是MySQL提供的另外一種修改視圖的方法。
ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS SELECT_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
6.5 更新視圖
更新視圖是指通過視圖來插入、更新、刪除表中的數據,因為視圖是一個虛擬表,其中沒有數據。通過視圖更新的時候都是轉到基本表進行更新的,如果對視圖增加或者刪除記錄,實際上是對其基本表增加或者刪除記錄
6.6 刪除視圖
當視圖不再需要時,可以將其刪除,刪除一個或多個視圖可以使用DROP VIEW語句,刪除視圖必須擁有DROP權限。
DROP VIEW [IF EXISTS]
view_name [, view_name] ...
[RESTRICT | CASCADE]
6.7 綜合案例——視圖應用