视图是从一个或几个基本表(或视图)导出的虚表。所谓虚表是指数据库中值存放视图的定义,不存放视图对应的数据,数据仍然存放在原来的基本表中。
1.定义视图
create view....
as...
[ with check option]
(这一句的意思是对视图进行update insert delete操作的时候要保证相应的行为满足试图定义中的谓词条件。
(更新一个视图将更新其基表,而且不是所有的视图都是可更新的:很多都不可以)
比如包含有:分组,联结,子查询,并,聚集函数,distinct,导出(计算)列的时候都不可以。
(但是,一般应该将试图用于检索,而非更新)
create view IS_Student
as
select Sno,Sname,Sage
from Student
where Sdept='IS'
with check option;
这里省略了视图的列名,隐含的由子查询select语句的三个列名组成
create view Is_S1(Sno,Sname,Grade)
as
select Student.Sno,Sname,Grade
from Student,sc
where
Sdept='IS' and
student.Sno=SC.Sno and
SC.Cno='1';
建立了信息系选修1号课程的学生的视图,信息包含了两个表,所以要连接,除此之外,where需要表名信息系和1号课,所以三个条件是清晰地,因为sno是两个表的同名列,所以视图定义需要指出名字。
create view S_G(Sno,Sbirth)
as
select Sno,avg(Grade)
from sc
group by Sno;
这是使用了分组和聚集函数的分组视图。
2.删除视图
drop view S_G;
注意:如果要删除的视图上导出了视图,那么需要加上cascade才能删除成功。
3.查询视图
像对基本表一样查询即可。
select ... from 视图名;
举例:
select IS_Student.Sno,Sname
from Is_Student,sc
where IS_Student.Sno=sc.Sno and SC.Cno='1';
4.更新视图
由于视图是不实际存储数据的虚表,因此对视图的更新最重要转换为对基本表的更新
注意:对视图的更新转化为对基本表的增,删,改的时候,要注意基表上建立视图时候的where条件
5 修改视图
(1)alter view 视图名 as 新的select语句。
(2)先drop删掉视图,再create重建。
6.查看视图的创建
show create view viewname;