视图
试图是一个虚拟表,是从数据库中一个或者 多个表中导出来的表。视图还可以从已经存 在的视图的基础上定义
使用视图的大部分情况是为了保障数据安全性,提高查询效率
如果需要经常执行某项复杂查询,可以基于这个复杂查询建立视图,此后查询此视图即可,简化复杂查询;
视图本质上就是一条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选项使得删除不存在的视图时不抛出异常。