资源预览内容
第1页 / 共33页
第2页 / 共33页
第3页 / 共33页
第4页 / 共33页
第5页 / 共33页
第6页 / 共33页
第7页 / 共33页
第8页 / 共33页
第9页 / 共33页
第10页 / 共33页
亲,该文档总共33页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第3章管理数据库对象本章学习内容1. 同义词2. 序列3. 视图4. 索引本章学习目标1. 掌握同义词的使用2. 掌握序列的使用3. 掌握视图的使用4. 掌握索引的使用本章简介在第2章中,我们已经学习了使用DDL语句、DML语句、SELECT语句、DCL数据控制语言、TC事务控制语言、基本函数等,并能将这些语句用于Oracle的SQL查询语句中,特别是使用基本函数可以提高书写SQL语句的效率。本章将继续学习Oracle方案、同义词、序列、视图和索引等知识。方案是数据库对象的集合,为了区分各个集合,需要给集合命名,其名称即为方案名。方案中包含各种对象,如表、视图、索引、同义词、序列、数据库链接等对象。同义词是方案对象的一个别名,常用于简化对象和提高对象访问的安全性。序列(SEQUENCE)是一个命名的顺序编号生成器,它能以串行的方式生成一系列顺序整数。在表中序列经常作为表的自动编号列。视图(VIEW)是由SELECT子查询语句定义的一个逻辑表,只有定义而无数据,是一个“虚表”。视图是查看和操作表数据的一种方法,使用视图有诸多优点,如提供各种数据表现形式、提供某些数据的安全性、隐藏数据的复杂性、简化查询语句、执行特殊查询、保存复杂查询等。索引是一种与表相关的可选的方案对象。通过在表中的一个或多个列上创建索引,能够为数据的检索提供快捷的存取路径,减少查询时的硬盘I/O操作,加快数据的检索速度。3.1 同义词3.1.1 方案方案是数据库对象的集合,为了区分各个集合,需要给集合命名,其名称即为方案名。方案中包含各种对象,如表、视图、索引、同义词、序列、数据库链接等对象。一般情况下,一个用户对应一个方案,在创建用户的同时为该用户创建一个与用户名同名的方案,并作为该用户的缺省方案。当然,一个用户还可以使用其他用户的方案。如果访问一个表时没有指明该表属于哪一个用户方案,则系统将会自动地在访问表前加上缺省的方案名。例如,访问SCOTT用户下的emp表的SQL语句为:select * from emp。事实上,这条SQL语句的完整写法应为:select * from scott.emp,因为在数据库中一个对象的完整名称为“方案名.对象名”,而不是“用户名.对象名”。解释用户所持有的是系统的权限及资源,而方案所涵盖的是各种对象,包含了表、视图、序列等对象的“所在地”,并不包括对他们的权限控制。类似于一个房子(方案),里面放满了家具(方案对象),对这些家具有支配权的是房子的主人(用户),而不是房子(方案)。3.1.2 同义词概述同义词是方案对象的一个别名,常用于简化对象和提高对象访问的安全性。同义词并不占用实际存储空间,只在数据库字典中保存同义词的定义。可以创建同义词的对象主要包括表、视图、同义词、序列、存储过程等对象。在开发数据库应用程序时,应当普遍遵守的规则是:尽量避免直接引用表、视图或其他对象的名称。否则,当DBA改变了这些对象的名称时,就必须重新更改并编译应用程序。因此,DBA应当为开发人员建立对象的同义词,这样即使基础表或其他对象发生了变动,也只需要在数据库中对同义词进行修改,而不必对应用程序作出任何改动。Oracle中可以创建两种类型的同义词:公用同义词和方案同义词。3.1.3 公用同义词与方案同义词1. 公用同义词(public synonym)公用同义词由一个特殊的用户组PUBLIC所拥有,数据库中所有的用户都可以使用公用同义词。SYS用户创建的数据字典视图就是公用同义词的示例。2. 方案同义词(schema synonym)方案同义词由创建它的用户所拥用,也称为私有同义词(private synonym),用户可以控制其他用户是否有权使用属于自己的方案同义词。方案同义词常在应用开发中使用,为应用开发提供命名上的解决方案。值得注意的是,当代码引用一个未限定的表、视图、同义词、序列、函数等对象时,Oracle会按以下顺序来查看这3个位置是否有被引用的对象:(1)当前用户拥有的对象。(2)由当前用户拥有的一个方案同义词。(3)公用同义词。可见,方案同义词的搜索顺序优于公用同义词。如果在这3个地方都没有找到该对象的名称,将会出现错误提示,如“ORA-00942:表或视图不存在”。3.1.4 创建同义词1. 创建方案同义词需要在自己的方案中创建方案同义词时,用户必须具有CREATE SYNONYM系统权限;需要在其他的方案中创建方案同义词时,用户必须具有CREATE ANY SYNONYM系统权限。语法:CREATE OR REPLACE SYNONYM synonym_name schema.object;其中,OR REPLACE表示如果同义词已经存在,将重新覆盖新建同义词。如图1.3.1所示,在被授予CREATE SYNONYM系统权限后,SCOTT用户在其dept表上创建方案同义词syn_dept。1. 授予SCOTT用户create synonym权限2. 创建dept表上的同义词图1.3.1 创建方案同义词2. 创建公用同义词需要创建公用同义词时,用户必须具有CREATE PUBLIC SYNONYM系统权限。语法:CREATE OR REPLACE PUBLIC SYNONYM synonym_name schema.object;如图1.3.2所示,在被授予CREATE SYNONYM系统权限后,SCOTT用户在其dept表上创建公用同义词pubsyn_dept。创建dept表上的公用同义词图1.3.2 创建公用同义词注意在Oracle数据库中,公用同义词已经超过2600万条,查询不方便,所以在应用开发中应尽量避免创建公用同义词。3.1.5 使用同义词1. 使用方案同义词使用方案同义词可分为方案用户使用和其他用户使用。(1)方案用户使用自己的方案同义词。方案用户具有对象的所有权限,所以可以像使用原对象一样使用该对象的同义词。SCOTT用户使用自己方案中syn_dept方案同义词的示例如图1.3.3所示。图1.3.3 方案用户使用自己的方案同义词(2)其他用户使用另一个用户创建的方案同义词。由于方案同义词是私有的,所以其他用户无法直接使用另一个用户所创建的方案同义词,但能够以在方案同义词前面加上方案名作为前缀的方式来使用其他用户所创建的方案同义词,如图1.3.4所示。3. 在syn_dept方案同义词前加上“scott”方案名来访问2. 以HR用户登录,访问SCOTT方案中的syn_dept方案同义词1. 授予HR用户查询SCOTT方案dept表的权限图1.3.4 其他用户使用另一个用户创建的方案同义词(2)通过自己的方案同义词访问其他方案中的对象。通过在自己的方案中创建指向其他方案中对象的方案同义词,SCOTT用户给HR用户授予dept表上的SELECT对象权限,HR用户在自己的方案中创建一个指向SCOTT用户的dept表的syn_scott_dept方案同义词,则HR用户可以通过自己的syn_scott_dept方案同义词来查询SCOTT用户的dept表,如图1.3.5所示。4. HR用户通过查询syn_scott_dept来访问SCOTT方案中的dept表3. 授予HR用户SCOTT用户dept表上的SELECT权限2. HR用户使用syn_scott_dept方案同义词权限不足1. HR用户创建关于SCOTT用户syn_scott_dept方案同义词图1.3.5 通过自己的方案同义词访问其他方案中的对象2. 使用公用同义词与方案同义词不同,如果使用公用同义词来访问其他方案中的对象,就不需要在该公用同义词前面添加方案名。但是,如果用户没有被授予访问该公用同义词所引用的对象的对象权限,仍然不能使用该公用同义词,如图1.3.6所示。3. 再次以HR用户登录后,使用公用方案syn_scott_dept来访问SCOTT方案中的dept表失败2. 撤消HR用户关于SCOTT方案中dept表的SELECT对象权限1. 以HR用户登录,使用公用方案syn_scott_dept来访问SCOTT方案中的dept表图1.3.6 使用公用同义词3.1.6 删除同义词删除同义词后,同义词所引用的基础对象不会受影响。1. 删除方案同义词用户能够删除自己方案中的任何方案同义词,但若需要删除其他用户方案中的方案同义词,必须拥有DROP ANY SYNONYM系统权限。语法:DROP SYNONYM synonym_name2. 删除公用同义词需要删除公用同义词时,用户必须具有DROP PUBLIC SYNONYM系统权限。语法:DROP PUBLIC SYNONYM synonym_name3.2 序列3.2.1 序列概述序列(SEQUENCE)是一个命名的顺序编号生成器,它能以串行的方式生成一系列顺序整数。与视图、约束相似,序列也不占用实际的存储空间,而只在数据字典中保存序列的定义。引入序列的理由或序列的主要用途在于以下几点。1. 主键、外键值应用需求在某些表中,主键可能需要由几个字段组成,如果将这些字段合起来作为主键,就会使问题复杂化。因此,可以使用简单的顺序号来代替多个字段的主键标识记录,以简化子表对于父表的引用关系。如果在一个数据库应用中创建一个序列,使各个表都使用这个序列产生的整数作为主键、外键值,则会对数据库的设计、编程、各种主键和外键关系的建立都起到良好的作用。2. 流水号应用需求在现实生活中,很多情况下都需要流水号。例如,商场打印销售单时需要将销售单按顺序编号,一般每张销售单对应一个编号,且编号是依次递增的。如果需要产生诸如此类的单据流水号,则可以借助序列来完成。3. 序列的生成与定义的内容序列由Oracle服务器端产生,所有的序列都出自一处。如果有多个用户同时向序列提出申请,则序列会按照串行机制依次处理各个用户的请求,绝不会生成两个相同的整数。而且序列生成下一个整数的速度很快,即使在并发用户数量很多的联机事务处理环境中,也不会产生明显的延迟。说明序列能生成最大38位的整数。3.2.2 创建序
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号