视图
视图是一个或几个基本表(或视图)导出的表,与基本表不同,是一个虚表 数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中,一旦基本表中的数据发生变化,从视图中查询出的数据也随之改变。
定义视图
Create view zb_s
as
Select sno, sname, birth, college
from s
where college ='植保'
- 删除视图
该语句从数据字典中删除指定的视图定义 视图删除之后,由该视图导出的其他视图定义仍然在字典中,但已不能使用,必须使用语句删除。删除基本表之后,由该基本表导出的所有视图定义也都必须使用语句删除
drop view <视图名>;
- 行列子集视图
一个视图是从单个基本表导出,只是去掉了某些行和列,但保留了主码 with check option 的视图 透过该视图进行的更新操作要符合where的条件 比如下面的例子中,如果插入一个college属性值不为‘信息’的学生,则会操作失败 使用update 语句也要在修改之后能够被该视图查出来,否则失败 当查询语句中没有where 语句时使用with check option 是多余的
Create view xx_s
as
Select sno, sname, birth, college
from s
where college ='信息'
with check option;
create view sj_sc2
as
select sno, sname, grade
from sj_sc
where grade>90;
create view s_age(sno, sname, sage)
as
select sno, sname, 2021-year(sbirth)
from s;
create view sc_avg_grade(sno, gavg)
as
select sno, avg(grade)
from sc
group by sno;
查询视图
视图定义以后,用户可以像对基本表一样对视图进行查询
- 视图消解:将用户执行的对视图的查询,在DBMS内部转换成对导出视图的基本表的查询
原语句:
select sno, sbirth
from zb_s
where sbirth>str_to_date('1994-01-01', '%y-%m-%d')
视图的定义
create view xx_s
as
select sno,sname,birth,college
from s
where college= '信息';
视图消解后
select sno, birth
from s
where college='信息' and
birth>to_date('1994/01/01', 'yyyy/mm/dd');
更新视图
通过视图对数据进行增删改,由于视图是虚表,更新最终要转换成对基本表的更新,同样也使用了视图消解的原理。 更新语句
update xx_s
set sname='张三'
where sno='04003';
视图的定义
create view xx_s
as
select sno,sname,birth,college
from s
where college='信息';
视图消解后
update s
set sname='张三'
where sno='04003' and college='信息'
并不是所有的视图都是可更新的,对有些视图的更新不能唯一地有意义地转换成相对应基本表的更新 一般行列子集视图是可更新的 比如以下案例中修改学生平均成绩,就会报错:
create view sc_avg_grade(sno, gavg)
as
select sno, avg(grade)
from sc
group by sno;
update sc_avg_grade
set gavg=90
where sno='04001';
视图的作用
- 简化用户的操作
- 对重构数据库提供了一定程度的逻辑独立性
在下图情况下,若原数据库重构,通过建立不同的视图,可以使外模式保持不变,从而对原表的查询程序不必修改 - 视图能够对机密数据提供安全保护
- 适当利用视图可以更清晰地表达查询
|