1.现在有一个情况,如果我们想要查询人员表中的name、age、sex这三个字段,查询后结果为
SELECT name, age, sex from person;
结果1的结果就是一个结果集,假如这个结果集我们有用到的情况,我们会将这个产生这个结果集的sql语句变为一个子语句当成临时表使用,但是如果假如我们经常用到这个结果集,这样我们每次用这三个字段值的时候,每次都需要写一次查询的sql语句,并且当多表查询多的时候这个同样的sql语句还会增加sql语句的长度,写起来麻烦。所以当一个sql语句产生的结果集我们会经常用到的时候,就可以用到视图。
2.视图,是一个虚拟表,内容可以是由多个真实表的不同字段查询后定义出来的。单表产生的视图可以删除、增加、修改其中的记录,会影响基本表。多表产生的视图不可以删除、新增其中的记录,但可以修改。也会影响基本表
(1)了解下mysql数据库的文件
其中person是一张表,我们创建的,person.frm文件里存的是person表的结构信息,person.ibd文件存储的person表的数据。而当我们创建一个视图时,会在数据库这里创建一个我们视图名字+.frm文件,也就是说创建一个视图后,就创建了一个视图文件,这个文件中存储的这个虚拟表的结构,当我们用来这个视图临时表去查询数据的时候,就直接会以视图虚拟表中的相应字段去创建视图时指定的目标查询表中查询出相应的数据。视图虚拟表的数据改变后,真实表对应的字段数据也会更改。
(2)创建视图的sql语句
-- 创建一个视图,CREATE VIEW是创建视图的关键字,p_view为视图名字,as后面跟的是要被创建为p_view视图的sql语句查询出来的结果集 CREATE VIEW p_view as select name, age, sex from person;
打开视图p_view可以看到这个虚拟表的数据和结构,在这个虚拟表中修改了数据也会影响到persion这个创建视图时用的查询表
(3)使用到视图的情况还有一种,比如你的一张表中有很多信息,包括私密的信息,这个时候有一个第三方的开发者需要用到这个表中的一些数据,但是只用到几个字段的数据,这个时候我们不想能把这整个表的所有字段的数据都给他,此时就可以利用视图,将这个表的他需要用到的字段数据弄成一个视图,将视图给他,因为视图是一个虚拟表并操作起来如同真实表一般,所以给第三方人使用完全可以。这种情况也会用到视图,起到了一个将私密字段,不想公开的字段进行保密的手段
(4)删除一个视图
-- 删除视图 drop view p_view;
(5)修改更新一个视图,为一个视图增加字段,则使用alter关键字重新写一遍查询结果集,查询结果集中新加一个字段。视图关心的只是查询出来的结果集,所以修改视图的时候,只要查询的结果集变了,那么视图的字段就会变。这就是修改视图的关键
-- 一个视图创建好后,发现创建的视图中的字段不够用的时候,需要为这个视图在增加字段的时候可以如此操作,将之间的查询结果集重新写一遍在加入一个新的字段,用alter关键字进行操作 alter view p_view as select name, age, sex, salary from person;
(6)视图在实际开发中,用的并不多