您好,欢迎访问三七文档
版权所有©2006,Oracle。保留所有权利。创建其它方案对象版权所有©2006,Oracle。保留所有权利。10-2课程目标学完本课后,应能完成以下工作:•创建简单的视图和复杂的视图•从视图中检索数据•创建、维护和使用序列•创建和维护索引•创建私用和公用同义词版权所有©2006,Oracle。保留所有权利。10-3数据库对象对象说明表基本的存储单元,由行组成视图逻辑上代表一个或多个表中数据的子集序列用于生成数字值索引提高某些查询的性能同义词给出对象的替代名称版权所有©2006,Oracle。保留所有权利。10-4什么是视图EMPLOYEES表版权所有©2006,Oracle。保留所有权利。10-5视图的优点限制数据访问使复杂的查询变得容易提供数据独立性提供相同数据的不同视图版权所有©2006,Oracle。保留所有权利。10-6简单视图和复杂视图特点简单视图复杂视图表的数量一个一个或多个是否包含函数否是是否包含数据组否是是否通过视图执行DML操作是不一定版权所有©2006,Oracle。保留所有权利。10-7创建视图•在CREATEVIEW语句中嵌入一个子查询:•该子查询可以包含复杂的SELECT语法。CREATE[ORREPLACE][FORCE|NOFORCE]VIEWview[(alias[,alias]...)]ASsubquery[WITHCHECKOPTION[CONSTRAINTconstraint]][WITHREADONLY[CONSTRAINTconstraint]];版权所有©2006,Oracle。保留所有权利。10-8创建视图•创建视图EMPVU80,其中包括部门80中的雇员的详细资料:•使用iSQL*PlusDESCRIBE命令描述视图的结构:DESCRIBEempvu80CREATEVIEWempvu80ASSELECTemployee_id,last_name,salaryFROMemployeesWHEREdepartment_id=80;Viewcreated.版权所有©2006,Oracle。保留所有权利。10-9创建视图•在子查询中使用列别名创建视图:•按给定的别名从该视图中选择列:CREATEVIEWsalvu50ASSELECTemployee_idID_NUMBER,last_nameNAME,salary*12ANN_SALARYFROMemployeesWHEREdepartment_id=50;Viewcreated.版权所有©2006,Oracle。保留所有权利。10-10SELECT*FROMsalvu50;从视图中检索数据版权所有©2006,Oracle。保留所有权利。10-11修改视图•可以使用CREATEORREPLACEVIEW子句修改视图EMPVU80。为每个列名添加一个别名:•CREATEORREPLACEVIEW子句中列出的列别名与子查询中的列具有相同的顺序。CREATEORREPLACEVIEWempvu80(id_number,name,sal,department_id)ASSELECTemployee_id,first_name||''||last_name,salary,department_idFROMemployeesWHEREdepartment_id=80;Viewcreated.版权所有©2006,Oracle。保留所有权利。10-12创建复杂视图创建包含分组函数的复杂视图以显示两个表中的值:CREATEORREPLACEVIEWdept_sum_vu(name,minsal,maxsal,avgsal)ASSELECTd.department_name,MIN(e.salary),MAX(e.salary),AVG(e.salary)FROMemployeeseJOINdepartmentsdON(e.department_id=d.department_id)GROUPBYd.department_name;Viewcreated.版权所有©2006,Oracle。保留所有权利。10-13对视图执行DML操作的规则•通常可以对简单视图执行DML操作。•如果视图包含以下内容,则不能删除行:–分组函数–GROUPBY子句–DISTINCT关键字–伪列ROWNUM关键字版权所有©2006,Oracle。保留所有权利。10-14对视图执行DML操作的规则如果视图包含以下内容,则不能修改视图中的数据:•分组函数•GROUPBY子句•DISTINCT关键字•伪列ROWNUM关键字•由表达式定义的列版权所有©2006,Oracle。保留所有权利。10-15对视图执行DML操作的规则如果视图包括以下内容,则不能向视图添加数据:•分组函数•GROUPBY子句•DISTINCT关键字•伪列ROWNUM关键字•由表达式定义的列•基表中未被视图选中的NOTNULL列版权所有©2006,Oracle。保留所有权利。10-16使用WITHCHECKOPTION子句•使用WITHCHECKOPTION子句可确保对视图执行的DML操作只在视图范围内起作用:•尝试在视图中更改任一行的部门编号都不会成功,因为此操作违反了WITHCHECKOPTION约束条件。CREATEORREPLACEVIEWempvu20ASSELECT*FROMemployeesWHEREdepartment_id=20WITHCHECKOPTIONCONSTRAINTempvu20_ck;Viewcreated.版权所有©2006,Oracle。保留所有权利。10-17拒绝DML操作•通过在视图定义中添加WITHREADONLY选项可以确保系统不会执行DML操作。•尝试对视图中的行执行DML操作会导致Oracle服务器错误。版权所有©2006,Oracle。保留所有权利。10-18拒绝DML操作CREATEORREPLACEVIEWempvu10(employee_number,employee_name,job_title)ASSELECTemployee_id,last_name,job_idFROMemployeesWHEREdepartment_id=10WITHREADONLY;Viewcreated.版权所有©2006,Oracle。保留所有权利。10-19删除视图因为视图是基于数据库中的基表,所以删除视图不会导致丢失数据。DROPVIEWview;DROPVIEWempvu80;Viewdropped.版权所有©2006,Oracle。保留所有权利。10-20练习10,第1部分:概览本练习包含以下主题:•创建简单的视图•创建复杂的视图•创建具有检查约束条件的视图•尝试修改视图中的数据•删除视图版权所有©2006,Oracle。保留所有权利。10-21序列对象说明表基本的存储单元,由行组成视图逻辑上代表一个或多个表中数据的子集序列用于生成数字值索引提高某些查询的性能同义词给出对象的替代名称版权所有©2006,Oracle。保留所有权利。10-22序列序列具有如下特点:•可以自动生成唯一编号•是一个可共享的对象•可用于创建主键值•替换应用程序代码•如果将序列高速缓存到内存中,则访问序列值的效率会有所提高12435687109版权所有©2006,Oracle。保留所有权利。10-23CREATESEQUENCE语句:语法定义一个可以自动生成序号的序列:CREATESEQUENCEsequence[INCREMENTBYn][STARTWITHn][{MAXVALUEn|NOMAXVALUE}][{MINVALUEn|NOMINVALUE}][{CYCLE|NOCYCLE}][{CACHEn|NOCACHE}];版权所有©2006,Oracle。保留所有权利。10-24创建序列•创建一个名为DEPT_DEPTID_SEQ的序列,将其用作DEPARTMENTS表的主键。•不使用CYCLE选项。CREATESEQUENCEdept_deptid_seqINCREMENTBY10STARTWITH120MAXVALUE9999NOCACHENOCYCLE;Sequencecreated.版权所有©2006,Oracle。保留所有权利。10-25NEXTVAL和CURRVAL伪列•NEXTVAL会返回下一个可用的序列值。每次被引用时NEXTVAL都会返回一个唯一值,即使对于不同的用户也是如此。•CURRVAL会获得当前序列值。•只有对序列发出NEXTVAL之后,CURRVAL才能包含值。版权所有©2006,Oracle。保留所有权利。10-27使用序列•在位置ID2500中插入一个名为“Support”的新部门:•查看DEPT_DEPTID_SEQ序列的当前值:SELECTdept_deptid_seq.CURRVALFROMdual;INSERTINTOdepartments(department_id,department_name,location_id)VALUES(dept_deptid_seq.NEXTVAL,'Support',2500);1rowcreated.版权所有©2006,Oracle。保留所有权利。10-28高速缓存序列值•将序列值高速缓存在内存中,这样便可以更快地对这些值进行访问。•在发生以下情况时,序列值中会出现间断:–发生回退–系统崩溃–在其它表中使用了序列版权所有©2006,Oracle。保留所有权利。10-29修改序列更改增量值、最大值、最小值、循环选项或高速缓存选项:ALTERSEQUENCEdept_deptid_seqINCREMENTBY20MAXVALUE999999NOCACHENOCYCLE;Sequencealtered.版权所有©2006,Oracle。保留所有权利。10-30修改序列的准则•您必须是序列的所有者或对该序列具有ALTER权限。•修改只会影响以后生成的序列号。•如果要从另一编号处重新开始,则必须删除原有的序列然后进行重新创建。•会执行一些验证操作。•要删除序列,请使用DROP语句:DROPSEQUENCEdept_deptid_seq;Sequencedropped.版权所有©2006,Oracle。保留所有权利。10-31索引对象说明表基本的存储单元,由行组成视图逻辑上代表一个或多个表中数据的子集序列用于生成数字值索引提高某些查询的性能同义词给出对象的替代名称版权所有©2006,Oracle。保留所有权利。10-32索引索引具有以下特点:•是一个方案对象•Oracle服务器可以使用它来通过指针加速对行的检索•通过使用快速路径访问方法来迅速地找到数据,可以减少磁盘I/O•与其索引的表无关•Oracle服务器会自动使用并维护它版权所有©2006,Oracle。保留所有权利。10-33如何创建索引•自动创建:如果在表定义中定义了PRIMARYKEY或UNIQUE约束条件,则系统会自动创建一个唯一的索引。•手动创建:用户可以对列创建非唯一的索引,以加速对行的访问。版权所有©2006,Oracle。保留所有权利。10-34创建索引•对一个或多个列创建索引:•提高对EMPLOYEES表中LAST_NAME列的查询访问速度:CREATEINDEXemp_last_name_idxONemployees(last_name);Indexcreated.CREATEINDEXindexONtable(column[,column]...);版权所有©2006,Oracle。保留所有权利。10-35索引创建准则在以下情况下,应该创建索引:列所包含的值的范围很大列包含大量空值在WHERE子句或联接条件中频繁使用了一个或多个列表很大,但是预计大多数查询要检索的行将小于表中行数的2%至4%不要在以下情况下创建索引:在查询中列没有被频繁用作条件表比较小,或者预计大多数查询要检索的行将超过表中行数的2%至4%表更新频繁系统作为表达式的
本文标题:9-其他方案
链接地址:https://www.777doc.com/doc-4048869 .html