欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

MySQL - 视图

最编程 2024-10-16 14:48:39
...

前言:

视图是一个虚拟的表,是基于一个或多个基本表或其他视图的查询结果集。视图本身不占据物理储存空间,仅仅只是一个查询的逻辑表示,物理上依赖于数据表的数据。

视图具有简单,安全,逻辑数据独立,可读性等优点,在数据库领域广泛的使用。

现在给出四张表,来演示视图作用:

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 视图名;