前言:
视图是一个虚拟的表,是基于一个或多个基本表或其他视图的查询结果集。视图本身不占据物理储存空间,仅仅只是一个查询的逻辑表示,物理上依赖于数据表的数据。
视图具有简单,安全,逻辑数据独立,可读性等优点,在数据库领域广泛的使用。
现在给出四张表,来演示视图作用:
class表:
student表:
score成绩表:
course学科表:
使用视图
创建视图
语法:create VIEW 视图名 (指定列名)AS ( sql的查询语句 );
视图就是将sql查询出来的结果集做一个简单封装,能让其他程序员能够直接使用这个结果集。
一般的查询(查找学生各科的成绩,四表联合):
可以看到,这样的联合查询的语句有些复杂,别人再想使用时写的语句很麻烦,这时我们就可以创建视图来使用:
1.不指定结果集的列:
取好别名后,可以看到:
表中已包含有刚刚建立的视图存在,我们可以查看视图:
这样使用起来代码就不会复杂了。
2.指定结果集的列:
指定的结果集列就不用另起别名了.
3.视图的结构查询:
语法:show create view 视图名;
视图还可以和真实表进行表连接查询。
修改数据
语法:update 表名/视图名 set 修改字段 where 条件;
1.通过真实表修改数据会影响到视图
如修改刘峰的名字为刘某某:
再查看视图:
发现视图的名字也被修改了,说明了基本表的修改会影响视图这个结果集的数据,视图是实时更新的。
2.通过视图修改数据会影响到基本表
如修改刘某某重新变为刘峰:
但是发现了点小问题:
我们重新创建个视图,再修改:
再查看基本表:
总结:
基本表和视图修改时都会互相影响,因为视图本质上是一个虚拟表,不存储任何数据,基于原表的数据。而且视图的数据是动态生成的,视图只提供了一个查看和操作原始数据的接口,也可以用来限制用户对数据的访问。
注意事项:
以下的视图不可以进行更新操作:
1:创建视图时使用group by 或者having 来分组
2:创建视图时使用聚合查询的视图
3:创建视图时使用union 或 union all
4:创建视图时使用distinct
5:查询列表中使用子查询
删除视图
语法:drop view 视图名;