东软实习之数据库(12)——视图
##视图
视图是逻辑上来自一个或多个表的数据集合
为什么使用视图
- 限制对数据库表的访问,因为视图可以有选择性的显示数据库表的一部分;
- 容易实现复杂的查询;
- 对于相同的数据可以产生不同的视图;
视图分类
视图分为简单视图和复杂视图,最基本差别在DML操作上
#创建视图
在CREATE VIEW语句中嵌入一子查询;
子查询可以采用复杂的SELECT语法形式;
子查询中不能使用ORDER BY子句,它可在从视图中查询数据时使用。
-
- OR REPLACE:如果所创建的视图已经存在,Oracle会自动重建该视图;
- FORCE:不管基表是否存在,Oracle都会创建该视图;
- NOFORCE:只有基表都存在,Oracle才会创建该视图; view:视图的名称;
- alias:为视图所产生的列定义别名,别名的数量必须和视图所对应查询语句的列数量相等; subquery:一条完整的SELECT语句,在该语句中同样可以定义别名;
- WITH CHECK OPTION:所插入或修改的数据行必须满足视图所定义的约束(插入或更新后的结果必须仍然可以在视图中呈现 ) ;
- constraint:CHECK OPTION中的约束名;
- WITH READ ONLY:确保在该视图上不能进行任何DML操作;
创建视图 EMPVU10,该视图仅包含10部门雇员的细节信息。
用SQL*Plus DESCRIBE显示视图的结构。
创建视图时在内部查询中使用列的别名
创建一个基于两个表并且含有组函数的复杂视图
#从视图检索数据//查询视图
#修改视图
用 CREATE OR REPLACE VIEW子句修改视图empvu10,为每个列添加别名。
CREATE VIEW子句中别名的顺序必须和内部查询中的列的顺序一一对应。
#视图上执行DML操作的规则
在简单视图上可以执行 DML 操作;
您可以通过视图删除基表中数据,只要视图中不出现以下情况:
-
- Group 函数;
- GROUP BY 子句;
- DISTINCT 关键字;
您可以通过视图修改基表中数据,只要视图中不出现以下情况:
-
- GROUP函数、
- GROUP BY子句,
- DISTINCT关键字;
- 使用表达式定义的列;
- ROWNUM 伪列;
您可以通过视图向基表插入数据,只要视图中不出现以下情况:
-
- GROUP函数、GROUP BY子句,DISTINCT关键字;
- 使用表达式定义的列;
- ROWNUM 伪列;
- 基表中未在视图中选择的其它列定义为非空并且没有默认值;
#WITH CHECK OPTION 子句
如果要确保在视图上执行的DML操作仅限于一定的范围,便可使用WITH CHECK OPTION子句;
在视图中任何修改部门编号的操作都会失败,因为这违反了 WITH CHECK OPTION约束。
#拒绝 DML 操作
在视图定义时使用WITH READ ONLY选项,可以确保不能对视图执行DML操作;
任何试图执行DML的操作都会导致一个错误ORA-01752。
#删除视图
删除视图并不会删除数据,因为视图是基于数据库中的基表的虚表。
#相关数据字典
USER_VIEWS:字典中包含了视图的定义。
USER_UPDATABLE_COLUMNS:字典包含了哪些列可以更新、插入、删除。
USER_OBJECTS:字典中包含了用户的对象。
##本章重点总结
-
- 理解视图的作用、分类;
- 掌握如何创建简单视图;
- 掌握如何创建复杂视图;
- 理解带约束视图的含义;
- 理解只读视图的含义;
- 掌握如何从视图中检索数据;
- 掌握修改、删除视图;
- 了解通过视图执行DML操作的规则;