視圖
試圖是一個虛擬表,是從數據庫中一個或者 多個表中導出來的表。視圖還可以從已經存 在的視圖的基礎上定義
使用視圖的大部分情況是爲了保障數據安全性,提高查詢效率
如果需要經常執行某項複雜查詢,可以基於這個複雜查詢建立視圖,此後查詢此視圖即可,簡化複雜查詢;
視圖本質上就是一條SELECT語句,所以當訪問視圖時,只能訪問到所對應的SELECT語句中涉及到的列,對基表中的其它列起到安全和保密的作用,可以限制數據訪問。
簡單來說視圖有以下這三大優點 :
- 簡單:使用視圖的用戶完全不需要關心後面對應的表的結構、關聯條件和篩選條件,對用戶來說已經是過濾好的複合條件的結果集。
- 安全:使用視圖的用戶只能訪問他們被允許查詢的結果集,對錶的權限管理並不能限制到某個行某個列,但是通過視圖就可以簡單的實現。
- 數據獨立:一旦視圖的結構確定了,可以屏蔽表結構變化對用戶的影響,源表增加列對視圖沒有影響;源表修改列名,則可以通過修改視圖來解決,不會造成對訪問者的影響。
一、創建視圖
語法:
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選項使得刪除不存在的視圖時不拋出異常。