MySQL的深入淺出(六)—— 視圖

視圖

試圖是一個虛擬表,是從數據庫中一個或者 多個表中導出來的表。視圖還可以從已經存 在的視圖的基礎上定義

使用視圖的大部分情況是爲了保障數據安全性,提高查詢效率
如果需要經常執行某項複雜查詢,可以基於這個複雜查詢建立視圖,此後查詢此視圖即可,簡化複雜查詢;
視圖本質上就是一條SELECT語句,所以當訪問視圖時,只能訪問到所對應的SELECT語句中涉及到的列,對基表中的其它列起到安全和保密的作用,可以限制數據訪問。

簡單來說視圖有以下這三大優點 :

  1. 簡單:使用視圖的用戶完全不需要關心後面對應的表的結構、關聯條件和篩選條件,對用戶來說已經是過濾好的複合條件的結果集。
  2. 安全:使用視圖的用戶只能訪問他們被允許查詢的結果集,對錶的權限管理並不能限制到某個行某個列,但是通過視圖就可以簡單的實現。
  3. 數據獨立:一旦視圖的結構確定了,可以屏蔽表結構變化對用戶的影響,源表增加列對視圖沒有影響;源表修改列名,則可以通過修改視圖來解決,不會造成對訪問者的影響。

一、創建視圖

語法:

	CREATE VIEW 視圖名 AS  <select statement>

示例:CREATE VIEW 視圖名 AS select 字段名1,字段名2,字段名N from 表名

mysql> create view view_sellset as
	-> select c.c_name as 商品名稱 ,c.c_madein as 商品產地,ct.ct_name as 商品類型 , c.c_outprice as 商品售價
	-> from commodity as c inner join commoditytype as ct 
	-> on c.c_type = ct.ct_id where c.c_outprice is not null;

二、查看視圖

1.DESCRIBE語句查看視圖基本信息

語法:DESCRIBE 視圖名;
結果如下:

		+----------+-------------+------+-----+---------+-------+
		| Field    | Type        | Null | Key | Default | Extra |
		+----------+-------------+------+-----+---------+-------+
		| 商品名稱 | varchar(50) | NO   |     | NULL    |       |
		| 商品產地 | varchar(50) | NO   |     | NULL    |       |
		| 商品類型 | varchar(50) | NO   |     | NULL    |       |
		| 商品售價 | int(11)     | YES  |     | NULL    |       |
		+----------+-------------+------+-----+---------+-------+

2.SHOW TABLE STATUS語句查看視圖基本信息
語法:SHOW TABLE STATUS LIKE ‘視圖名’;
結果如下:

+--------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+-------------+-------------+------------+-----------+----------+----------------+---------+
| Name         | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time | Update_time | Check_time | Collation | Checksum | Create_options | Comment |
+--------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+-------------+-------------+------------+-----------+----------+----------------+---------+
| view_sellset | NULL   |    NULL | NULL       | NULL |           NULL |        NULL |            NULL |         NULL |      NULL |           NULL | NULL        | NULL        | NULL       | NULL      |     NULL | NULL           | VIEW    |
+--------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+-------------+-------------+------------+-----------+----------+----------------+---------+

3.HOW CREATE VIEW語句查看視圖詳細信息
語法:SHOW CREATE VIEW 視圖名;
結果如下:

+--------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
| View         | Create View                                                                                                                                                                                                                                                                                                                                          | character_set_client | collation_connection |
+--------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
| view_sellset | CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `view_sellset` AS select `c`.`c_name` AS `商品名稱`,`c`.`c_madein` AS `商品產地`,`ct`.`ct_name` AS `商品類型`,`c`.`c_outprice` AS `商品售價` from (`commodity` `c` join `commoditytype` `ct` on((`c`.`c_type` = `ct`.`ct_id`))) where (`c`.`c_outprice` is not null) | gbk                  | gbk_chinese_ci       |
+--------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+

4.在VIEWS表中查看視圖詳細信息
在MYSQL中,information_schema數據庫下的view表中 存儲了所有視圖的定義。通過對VIEW表的查詢,可以查 看數據庫中所有視圖的詳細信息。
語法:select * from information_schema.views;


三、修改視圖

1.CREATE OR REPLACE VIEW語句修改視圖

CREATE OR REPLACE VIEW view_name as select語句;

在視圖存在的情況下可對視圖進行修改,視圖不在的情況下可創建視圖

2.ALTER語句修改視圖

ALTER VIEW 視圖名 AS <select statement>

注意:修改視圖是指修改數據庫中已存在的表的定義,當基表的某些字段發生改變時,可以通過修改視圖來保持視圖和基本表之間一致


四、更新視圖

更新視圖是指通過插入、更新、刪除表中的數據,因爲視圖是一個虛擬表,其中沒有數據。
通過視圖更新的時候都是轉到基本表進行更新的,如果對視圖增加或者刪除記錄,實際上是對其基本表增加或者刪除記錄
實際操作如下:

mysql> select* from view_sellset;
+------------------------+----------+----------+----------+
| 商品名稱                | 商品產地  | 商品類型   | 商品售價  |
+------------------------+----------+----------+----------+
| 變形金剛-霸天虎          | 中國      | 玩具      |       20 |
| 變形金剛-威震天          | 美國      | 玩具      |      245 |
| 魔仙玩偶1               | 中國      | 玩具      |       12 |
| 超人玩偶                | 中國      | 玩具      |       99 |
| 小霸王遊戲機            | 中國       | 玩具      |       99 |
+------------------------+----------+----------+----------+

mysql> update view_sellset set 商品售價=60 where 商品名稱='變形金剛-霸天虎';

mysql> select* from view_sellset;
+------------------------+----------+----------+----------+
| 商品名稱                | 商品產地  | 商品類型  | 商品售價   |
+------------------------+----------+----------+----------+
| 變形金剛-霸天虎          | 中國      | 玩具     |       60 |
| 變形金剛-威震天          | 美國      | 玩具     |      245 |
| 魔仙玩偶1               | 中國      | 玩具     |       12 |
| 超人玩偶                | 中國      | 玩具     |       99 |
| 小霸王遊戲機             | 中國      | 玩具     |       99 |
+------------------------+----------+----------+----------+

五、刪除視圖

刪除視圖時必須擁有DROP權限
刪除視圖是指刪除數據庫中已存在的視圖,刪除視圖時,只能刪除視圖的定義,不會刪除數據,也就是說不動基表:

語法:DROP VIEW [IF EXISTS] 視圖名[,視圖名2]…

如果視圖不存在,則拋出異常;使用IF EXISTS選項使得刪除不存在的視圖時不拋出異常。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章