零点起飞学Oracle之使用视.pptx
《零点起飞学Oracle之使用视.pptx》由会员分享,可在线阅读,更多相关《零点起飞学Oracle之使用视.pptx(44页珍藏版)》请在三一办公上搜索。
1、第10章 使用视图,视图在Oracle中应用很普遍。视图在数据库中可以看作是一张虚拟的表。使用视图可以补充表结构在某些需求方面的不足,可以让开发人员更方便地查询复杂数据。本章主要讲解视图定义、关系视图的创建和使用、内嵌视图的使用、对象视图的使用、物化视图的使用。,10.1 视图简介,在Oracle中,视图可以实现集中、简化数据库的作用,同时还可以提供安全保证。用户可以像操作普通表一样操作视图。视图往往不占用数据库额外的存储空间,而只存储定义。,10.1.1 视图定义,视图是从一个或者多个表中导出的表,其结构和数据都是建立在对表的查询基础上的。和真实的表一样,视图也包括多个被定义的数据列和多个数
2、据行。从本质上讲,这些数据列和数据行来自于其所引用的表,视图本身不包含数据,它只是一个查询语句的结果,所有数据最终是从表中获取的,通常可以将这些称为源表或基表。,10.1.1 视图定义,视图不是真实存在的基础表而是一个虚拟表。视图所对应的数据并不是实际地以视图结构存储在数据库中,而是存储在视图所引用的表中。从关系代数理论上来说,数据表可以看作关系。这种关系往往代表了现实世界的真实实体。而关系可以通过各种运算(如交、差、并、投影)来获得新的关系。在查询员工职位信息状况的实例中,可以通过表之间的关系运算来获得所需的结果集合。而该结果集则具有临时性,一旦使用完毕,即可“丢弃”。这些结果数据,并不形成
3、真正的数据表,也不会持久化到数据库中。视图也不存储查询的结果,但是存储了查询的定义。也就是说,对于关系运算的运算步骤进行存储。因此,视图的本质就是关系运算的定义。,10.1.2 为什么使用视图,视图有很多优点,主要表现在大致两个方面上。1封装查询数据库虽然可以存储海量数据,但是在数据表设计上却不可能为每种关系创建数据表。因为这种做法很明显的造成了数据库中数据的大量冗余。视图则是解决该问题的最佳策略。因为视图可以存储查询定义(或者说关系运算),那么,一旦使用视图存储了查询定义,就如同存储了一个新的关系。用户可以直接对视图中所存储的关系进行各种操作,就如同面对的是真实的数据表。,10.1.2 为什
4、么使用视图,2.灵活的控制安全性一个数据表可能含有很多列。但是这些列的信息,对于不同角色的用户,可访问的权限有可能不同。例如,在员工表中,可能存在着员工工号、员工姓名、员工年龄、员工职位、员工家庭住址、员工社会关系等信息。对于普通用户(例如普通员工),有可能需要访问员工表,来查看某个工号的员工的姓名、职位等信息,而不允许查看家庭住址、社会关系等信息;对于高级用户(例如人事经理),则需要关注所有信息。那么,这就涉及到数据表的安全性。利用视图可以灵活的实现这一策略。,10.2 关系视图,Oracle数据库中,视图可以分成这样几种类型,关系视图、内嵌视图、对象视图和物化视图。关系视图是虚拟表,同时也
5、是最常用的视图。关系视图可以看作对简单或复杂查询的定义,这种视图允许开发者在数据库字典中查看它的信息。,10.2.1 创建关系视图,视图是由select子查询语句定义的,基于一个或多个表的逻辑表。视图的创建比较简单。Oracle视图是作为数据库对象存在的,因此,创建之后也可以通过工具或数据字典来查看视图的相关信息。1创建关系视图创建关系视图应该使用create view命令,其语法形式如下所示。create view 视图名称 as 查询语句|关系运算其中,create view是创建关系视图的命令;其后紧跟视图名称;as后面连接的是视图的查询定义(或者说关系运算)。【示例10-1】在数据库中
6、存在着名为employees的数据表,如欲创建针对普通用户的视图vw_e。该视图仅可访问表中的department_id、first_name、hire_date、job_id。,10.2.1 创建关系视图,2查看视图定义视图一旦创建,其定义即可存在于数据库中。可以通过SQL Developer的Views窗口来查看视图VW_E在数据库中的信息。数据字典user_view是Oracle数据库预定义的视图。可以通过查询该视图的数据,来查看当前用户拥有的所有视图信息。,10.2.2 使用关系视图,视图作为虚表,在一定的条件下可以像表一样完成数据操纵的功能。使用视图进行数据操纵拥有更好的安全性和灵活
7、性。我们可以对视图进行插入、更新操作。1.查询视图查询视图的方法与查询表的方法是相同的。【示例10-2】在创建了视图vw_e之后,即可利用查询语句来获得视图中所包含的数据。,10.2.2 使用关系视图,2.更新视图数据用户可以利用update语句来更新视图中的数据,而视图本身并不存储数据。其数据来源于基础数据表。因此,更新视图数据,实际是更新基础表中的数据。【示例10-3】在员工视图vw_e中,更新视图。,10.2.2 使用关系视图,3查看关系视图修改功能利用关系视图,除了插入数据和更新数据之外,还可以删除其中数据。表面上看起来,可以通过视图对基础表进行任何修改,但事实并非如此。我们可以做的就
8、是更新、插入、删除。【示例10-5】Oracle内置视图user_updatable_columns定义了用户视图中各列的可更新情况。,10.2.3 修改/删除视图,当系统中的视图不使用时,可以对其删除,以避免产生大量的垃圾数据。也可以对已经存在的视图进行修改,使其重新符合用户需求。1修改视图修改视图的过程即为重新定义视图的过程。视图创建成功之后,数据库管理系统会允许开发人员修改创建的视图。,Oralce了一个专门的命令create or replace view来重新定义视图。其语法形式如下所示。create or replace view 视图名称 as 查询语句|关系运算【示例10-6】
9、假设现在需要为视图vw_e添加新列employee_id。,10.2.3 修改/删除视图,2删除视图删除视图和删除其他数据库对象的操作方式是一样的,利用drop命令即可以完成相关的操作。其语法形式如下所示。drop view view_name其中drop view向数据库发送删除视图命令;view_name则指定了要删除的视图名称。【示例10-7】删除视图vw_e。,10.2.4 构建只读视图,通常情况下,创建的视图时允许进行DML操作的,但这样容易出现逻辑问题,因为视图增加或更新数据实际上是在操作视图的源表。有时,并不希望用户通过视图修改数据,那么可以创建只读视图。创建只读视图应该使用re
10、ad only选项,其基本语法形式如下所示。create or replace view 视图名称 as 查询语句with read only其中,with read only选项表示该视图将被创建为只读视图。【示例10-8】我们在10.2.3节中创建的视图vw_e不是只读视图,通过该视图可以修改基础表employees中的数据。同样可以利用read only选项将其创建为只读视图。,10.2.5 构建联接视图,在实际应用中,更多的视图是基于多个基表的视图,这样的视图能充分展示它的优点。对于这种数据可以来源多个数据表或者其他视图的情况创建的视图就是联接视图。【示例10-9】可以利用create
11、 or replace view来定义一个联接视图,只是视图定义更加复杂而已。在表employees与表jobs中分别定义了员工与工资信息,那么我们可以利用create or replace view来创建视图。,10.2.6 强制创建视图,Oracle视图的一个突出特点是可以在没有源表时,也允许创建视图,但是这种情况下,视图虽然是创建了,但是还不能使用。等到它的源表创建完成之后,就可以正常使用了。【示例10-10】例如,开发者预期有名为sales的数据表,该表至少包含以下四列,product_id、product_time、product_count、ssistant_id。现欲创建一个名为
12、vw_sales的视图,该视图仅包含以下列product_id、product_time、product_count和ssistant_id列。但是,视图创建者无权创建实际的数据表,但又不能等待表的预期创建者的工作。此时,可以使用force选项来强制创建视图。,10.2.6 强制创建视图,利用force选项强制创建视图的语法如下所示。create or replace force view视图名称 as 查询语句|关系运算 在SQL Developer中强制创建视图vw_sales。,10.2.7 创建视图约束,当视图创建完成后,可以对其约束进行添加、删除、修改操作。针对视图,Oracle提供
13、了check option选项,以保证视图数据的完整性。1where子句情况with check option仅在视图定义中含有where子句的情况下起作用。with check option选项可以保证视图数据完整性。【示例10-11】首先修改视图vw_e的定义只选择员工id小于109的记录。同时使用with check option选项。,10.2.7 创建视图约束,2.insert/update操作with check option选项并非对所有DML操作均起作用,而只针对insert/update操作有效。在试验了update操作之后,可以再次测试对insert操作的影响。【示例10-
14、12】尝试向视图vw_em中插入employee_id为209的数据。,10.2.7 创建视图约束,3.创建了一个约束with check option选项实际为视图创建了一个约束。约束是对表或视图中的数据进行限制的一种数据库对象。关于约束的详细信息,可以参考第11章的内容。【示例10-13】Oracle提供了数据字典user_constraints,该视图可以查看用户创建的所有约束。通过该视图,可以查询到with check option所创建的约束。,10.3 内嵌视图,内嵌视图不需要视图名称,只是一段SQL语句,通常在子查询中作为一个中间的数据集,它可以在增加、删除、修改操作中使用。,1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 零点 起飞 Oracle 使用

链接地址:https://www.31ppt.com/p-6613784.html