MySQL开发技巧 - 视图

第1关:视图

任务描述

本关任务:通过学习视图,创建一个单表视图和一个多表视图。

相关知识

为了完成本关任务,你需要掌握:

  1. 视图的定义;
  2. 创建视图;
  3. 操作视图;
  4. 删除视图。
视图的定义

视图(view)是一种虚拟存在的表,是一个逻辑表,本身并不包含数据。通过视图,可以展现基表(用来创建视图的表)的部分数据;视图数据来自定义视图的查询表。

我们知道了视图的定义,那么,为什么要使用它呢?

因为视图有如下优点:

①. 简单:使用视图的用户完全不需要关心后面对应的表的结构、关联条件和筛选条件,对用户来说已经是过滤好的复合条件的结果集;

②. 安全:使用视图的用户只能访问他们被允许查询的结果集,对表的权限管理并不能限制到某个行或列,但是通过视图就可以简单的实现;

③. 数据独立:一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响,源表增加列队视图没有影响;源表修改列名,则可以通过修改视图来解决,不会造成对访问者的影响。

总而言之,使用视图的大部分情况是为了保障数据安全性,提高查询效率

创建视图
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]    VIEW view_name [(column_list)]    AS select_statement   [WITH [CASCADED | LOCAL] CHECK OPTION]

参数说明:

  • OR REPLACE:表示替换已有视图;
  • ALGORITHM:表示视图选择算法,默认算法是UNDEFINED(未定义的): MySQL 自动选择要使用的算法 ;merge合并;temptable临时表;
  • column_list:可选参数,指定视图中各个属性的名词,默认情况下与select语句中查询的属性相同;
  • select_statement:表示select语句;
  • [WITH [CASCADED | LOCAL] CHECK OPTION]:表示视图在更新时保证在视图的权限范围之内;cascade是默认值,表示更新视图的时候,要满足视图和表的相关条件;local表示更新视图的时候,要满足该视图定义的一个条件即可。

示例一:

在这里插入图片描述

示例二:

在这里插入图片描述

以上两个示例可以看出,虽然两个视图的字段名不同,但是,数据是相同的,因为两个视图引用的是同一个表中的数据,并且,as后的创建视图的语句也相同。

在实际开发中,用户可以根据自己的需求,通过视图的方式,获取基本表中自己需要的数据,这样既能满足用户的需求,也不会破坏基本表原来的结构,从而保证了基本表中数据的安全性。

操作视图

视图是逻辑表,也就是说视图不是真实的表,但操作视图和操作普通表的语法是一样的。

用户可以在视图中无条件地使用select语句查询数据。但使用insertupdatedelete操作需要在创建视图时满足以下条件(满足以下条件的视图称为可更新视图):

  • from子句中只能引用有1个表(真实表或可更新视图);
  • 不能包含 withdistinctgroup byhavinglimit等子句;
  • 不能使用复合查询,即不能使用unionintersectexcept等集合操作;
  • select子句的字段列表不能包含聚合、窗口函数、集合返回函数。

我们仍使用之前示例中的数据来操作视图:
在这里插入图片描述

删除视图

若视图不再被需要,我们可以将其删除,且视图的删除并不影响源表中的数据。

删除视图的 SQL 如下:

DROP VIEW view_name;

示例:

在这里插入图片描述

编程要求

根据提示,在右侧编辑器补充代码,根据提供的表完成视图的创建,具体要求如下:

student表数据结构:

stu_idnamemathchinese
1Tom8078
2Jack7080
3Lucy9795

stu_info表数据结构:

stu_idclassescity
11633长沙
21632重庆
31633成都
  1. student表上创建视图stu_view,查询mathchinese字段并定义一个math+chinese成绩之和字段,值为两者之和;
  2. student表和stu_info表上,创建stu_classes视图,查询出stu_id、姓名和班级,查询条件为两表中的stu_id字段相同。
测试说明

平台会对你编写的代码进行测试,预期输出会查询你创建的两个视图,具体内容请查看右侧测试集。


开始你的任务吧,祝你成功!

use School;

#请在此处添加实现代码
########## Begin ##########

#1.创建单表视图,在student表上创建视图stu_view,查询math、chinese字段并定义一个math+chinese成绩之和字段,值为两者之和;
create view stu_view as select math,chinese,math+chinese from student;


#2.创建多表视图
create view stu_classes as select student.stu_id,student.name,stu_info.classes from student,stu_info where student.stu_id=stu_info.stu_id;

########## End ##########

本文仅供学习参考。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值