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选项使得删除不存在的视图时不抛出异常。


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