数据库视图
视图是从一个或几个基本表(或视图)导出的表。它与基本表不同,是一个虚表。数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。
建立视图
sql语言用CREATE VIEW命令建立视图,其一般格式为:123CREATE VIEW <视图名> [(<列名>[,<列名>]...)]AS <子查询>[WITH CHECK OPTION]其中,子查询可以是任意的SELECT语句,是否可以含有ORDER BY子句和DISTINCT短语,取决于具体系统的实现。WITH CHECK OPTION表示对视图进行UPDATE, INSERT,和DELETE操作时要保证更新,插入或删除的行满足视图定义中的谓词条件(即子查询中的条件表达式),组成视图的属性列名或者全部省略或者全部指定,没有第三种选择。如果省略了视图的各个列名,则隐含该视图由子查询中SELECT子句目标列中的诸字段组成,但在下列情况下必须明确指定组成视图的所有列名。
1) 某个目标列不是单纯的属性名,而是聚集函数或列表达式
2) 多表连接时选出了几个同名列作为视图的字段
3) 需要在视图中为某个列启用新的更合适的名字
若一个视图是从单个基本表导出的,并且只是去掉了基本表的某些行和某些列,但保留了主码,则称这类视图为行列子集视图
还可以用带有聚集函数和group by 子句的查询来定义视图,这种视图称为分组视图
12345 CREATE VIEW S_G(Sno Gavg)ASSELECT Sno,AVG(Grade)FROM SCGROUP BY Sno;
删除视图
语句为DROP VIEW <视图名> [CASCADE]
,视图删除后视图的定义将从数据字典中删除。如果该视图上还导出了其它视图,则使用CASCADE级联删除语句把该视图和由它导出的所有视图一起删除。1DROP VIEW BT_S CASCADE;查询视图
关系数据库管理系统执行对视图的查询时,首先进行有效性检查,检查查询中涉及的表,视图等是否存在。如果存在,则从数据字典中取出视图的定义,把定义中的子查询和用户的查询结合起来,转化成等价的对基本表的查询,然后再执行修正了的查询。这一转换过程称为视图消解更新视图
更新视图是通过视图来插入(insert),删除(delete)和修改(update)数据。由于视图是不实际存储数据的虚表,因此对视图的更新最终要转化为对基本表的更新。像查询视图一样,对视图的更新操作也是通过视图消解,转化为对基本表的更新操作。
为防止用户通过视图对数据进行增加,删除,修改时,有意无意地对不属于视图范围的基本表数据进行操作,可在定义视图时加上WITH CHECK OPTION子句,这样在视图上增,删,改数据时,关系数据库管理系统会检查视图定义中的条件,若不满足条件则拒绝执行该操作。视图的作用
- 视图能够简化用户的操作
- 视图使用户能以多种角度看待同一数据
- 视图对重构数据库提供了一定程度的逻辑独立性
- 视图能够对机密数据提供安全保护
- 适当利用视图可以更清晰地表达查询