MySQL中的视图的用途与操作

MySQL中的视图

一、视图概述

视图(View)是虚拟存在的表,也称为派生表,因为其所有的内容都来源于其他的基本表的查询结果。虽然视图在操作时感觉与基本表很相似,但它们并不是基本表,其与基本表最大不同就是基本表的内容是持久的,而视图的内容是在使用过程中动态产生的。

1. 视图的优势

视图相对于普通表的优势主要包括以下几项:

  • 简单:使用视图的用户完全不关心后面对应的表的结构、关联条件和筛选条件,对用户来说已经是过滤好的复合条件的结果集;
  • 安全:使用视图的用户只能访问他们被允许查询的结果集,对表的权限管理并不能限制到某个行某个列,但是通过视图就可以简单的实现;
  • 数据独立:一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响,源表增加列对视图没有影响;源表修改列名,则可以通过修改视图来解决,不会造成访问者的影响;

2. 视图使用场景

1)计算列的需要,数据库设计范式要求我们减少冗余字段,因此现在很多数据表都没有计算列字段,如采购单:有价格、数量、税率、含税金额,多半没有不含税金额、税额,而这些字段在很多报表中有都会用到,所以我们可以创建一个含有计算列字段的视图来解决这个问题。

2)不同表字段聚合,信息重组,如:经销商通常有业务员,业务员通常有上下级关系(客户经理、区域经理、大区经理等),因此查看经销商业务员时我们需要看到直管业务员是谁?该业务员对应的区域经理、大区经理是谁(可能NULL)?因此我们可以联合经销商表、业务员信息表、业务员上下级关系表定义一个经销商视图。

3)安全性需要,主要是早期遗留系统集成需要,如:需要xx系统数据,又没接口,怎么办?直接操作数据库,这时就涉及数据安全性,合理利用视图则可以减少很多授权工作和保证数据安全性。当下新构建的系统几乎都是暴露api接口,因此数据安全性更多关注在接口的身份认证和数据粒度方面。

二、操作视图

1. 建立视图/修改视图

创建视图的语法为:

CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]

VIEW view_name [(column_list)]

AS select_statement

[WITH [CASCADED | LOCAL] CHECK OPTION] 

修改视图的语法为:

ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]

VIEW view_name [(column_list)]

AS select_statement

[WITH [CASCADED | LOCAL] CHECK OPTION] 

接下来介绍一下上面的参数:

  • OR REPLACE:表示替换已有视图

  • ALGORITHM:表示视图选择算法,默认算法是UNDEFINED(未定义的):MySQL自动选择要使用的算法 ;merge合并;temptable临时表

  • select_statement:表示select语句

  • [WITH [CASCADED | LOCAL] CHECK OPTION]:表示视图在更新时保证在视图的权限范围之内

  • CASCADED:是默认值,表示更新视图的时候,要满足视图和表的相关条件

  • LOCAL:表示更新视图的时候,要满足该视图定义的一个条件即可

操作示例:

# 创建视图
create view view_city_country as select c.*, t.country_name from city c, country t where c.country_id = t.country_id;

# 使用视图
select * from view_city_country;

2. 查看视图

从MySQL 5.1 版本开始,使用SHOW TABLES命令的时候不仅显示表的名字,同时也会显示视图的名字,而不存在单独显示视图的SHOW VIEWS命令。

在这里插入图片描述

3. 删除视图

删除视图的语法如下:

DROP VIEW [IF EXISTS] view_name [, view_name] ...[RESTRICT | CASCADE]

示例,删除视图view_city_country

DROP VIEW `view_city_country`;

猜你喜欢

转载自blog.csdn.net/Allen_Adolph/article/details/106985901
今日推荐