最近复习了一下SQL,再一次学习了SQL中的view,先记录下来:

什么是视图:

首先视图是一个虚拟的表,只是具有表的结构,行为上像一个表,但实际上并不拥有任何的数据,所以我们也常常称其为 虚表。

那么它从哪里来呢?是从一个或者多个表导出的虚拟表,其内容由查询定义。

可能看到这,还是挺恍惚的,先来看一下它的定义:

--创建视图--  
create  view view_student as select * from student;  
--从视图中检索数据--  
select * from view_student;  
--删除视图--  
drop view view_student;

语法解析:create view +视图的名字+as+查询语句。注:查询语句可以是一条查询语句,也可以是很多个表的链接查询语句。

从语法中我们就可以看得出,我们先执行as后面的查询语句,然后我们就可以得到查询的结果集,视图只不过是省了一点事,不直接从我们的数据库中查询,只是从我们已经查询好的结果集中进行查询。

又在想这个有什么好处呢?

肯定是有好处的,好处如下:


数据库虽然可以存储海量数据,但是在数据表设计上却不可能每种关系创建数据表,例如,对于学生表,存储了学生信息,学生的属性包括学号、姓名、年龄、家庭地址等信息;而学生成绩表只存储了学生学号、科目、成绩等信息。现获得学生姓名和成绩信息,那么就需要创建一个关系,该关系需要包含学生的姓名、科目、成绩。但是为了该关系创建一个新的数据表,并利用实际信息进行填充,以备查询使用,是不合适的,这样会造成了数据库中数据的大量冗余。

视图就是解决这个问题的最佳策略,因此视图可以存储查询定义,一旦使用视图存储了查询定义,就如同存储了一个新的关系,用户就可以直接对视图中所存储的关系进行各种操作,就如同面对的是真实的数据表。

好处:

①简化操作,减少数据的冗余,方便操作,把经常使用的查询语句等定义为视图。

上面的例子就是一个很好的例子。我们在使用查询的时候,很多时候使用聚合函数,同时还要显示其它字段的信息,可能好会需要关联到其它的表,这个时候写的语句可能会很长,如果这个动作频繁发生,就可以创建视图,下次使用的时候我们就可以直接select *from view.很方便。

②安全性,用户只能查询和修改能看到的数据。

因为视图是一个虚拟的表,物理上是不存在的,只是存储了数据的集合,我们可以将基表(就是我们as后面的查询语句)中的重要字段,可以不通过视图给用户,视图是动态的数据的集合,数据是随着基表的更新而更新我的,同时,用户对视图不可以随意的更改和删除,可以保证数据的安全性。


坏处:

①性能差。

我们根据语法定义都知道,操作视图其实就是操作我们的基表,但是如果我们的基表查询是一个多表且复杂的查询,那么即使我们看到的视图是一个简单的查询,后天也可能是一个很庞大的基表查询,大大影响其查询效率。

②限制修改。

对视图的修改,其实也就是对我们基表的修改,在对于一个相对复杂的结合体的时候,我们可能不是很容易进行修改。