您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > oracle 教程 第5章 其他数据库对象
第5章其他数据库对象ORACLE9iORACLE9i第5章其他数据库对象5.1数据库模式对象5.2索引5.3序列5.4同义词5.5聚簇5.6数据库链接5.7练习这部分以后再讲但序列先介绍!第5章其他数据库对象ORACLE9iORACLE9i5.1数据库模式对象Oracle数据库的模式对象如表5-1所示。第5章其他数据库对象ORACLE9iORACLE9i表5-1Oracle数据库模式对象对象名称作用TABLE表用于存储数据的基本结构VIEW视图以不同的侧面反映表的数据,是一种逻辑上的表INDEX索引加快表的查询速度CLUSTER聚簇将不同表的字段并用的一种特殊结构的表集合SEQUENCE序列生成数字序列,用于在插入时自动填充表的字段SYNONYM同义词为简化和便于记忆,给对象起的别名DATABASELINK数据库链接为访问远程对象创建的通道STOREDPROCEDURE、FUNCTION存储过程和函数存储于数据库中的可调用的程序和函数PACKAGE、PACKAGEBODY包和包体将存储过程、函数及变量按功能和类别进行捆绑TRIGGER触发器由DML操作或数据库事件触发的事件处理程序第5章其他数据库对象ORACLE9iORACLE9i5.2索引5.2.1Oracle数据库的索引索引(INDEX)是为了加快数据的查找而创建的数据库对象,特别是对大表,索引可以有效地提高查找速度,也可以保证数据的惟一性。索引是由Oracle自动使用和维护的,一旦创建成功,用户不必对索引进行直接的操作。索引是独立于表的数据库结构,即表和索引是分开存放的,当删除索引时,对拥有索引的表的数据没有影响。第5章其他数据库对象ORACLE9iORACLE9i在创建PRIMARYKEY和UNIQUE约束条件时,系统将自动为相应的列创建惟一(UNIQUE)索引。索引的名字同约束的名字一致。索引有两种:B*树索引和位图(BITMAP)索引。B*树索引是通常使用的索引,也是默认的索引类型。在这里主要讨论B*树索引。B*树是一种平衡2叉树,左右的查找路径一样。这种方法保证了对表的任何值的查找时间都相同。B*树索引可分为:惟一索引、非惟一索引、一列简单索引和多列复合索引。第5章其他数据库对象ORACLE9iORACLE9i创建索引一般要掌握以下原则:只有较大的表才有必要建立索引,表的记录应该大于50条,查询数据小于总行数的2%~4%。虽然可以为表创建多个索引,但是无助于查询的索引不但不会提高效率,还会增加系统开销。因为当执行DML操作时,索引也要跟着更新,这时索引可能会降低系统的性能。一般在主键列或经常出现在WHERE子句或连接条件中的列建立索引,该列称为索引关键字。第5章其他数据库对象ORACLE9iORACLE9i5.2.2索引的创建创建索引不需要特定的系统权限。建立索引的语法如下:CREATE[{UNIQUE|BITMAP}]INDEX索引名ON表名(列名1[,列名2,...]);其中:UNIQUE代表创建惟一索引,不指明为创建非惟一索引。BITMAP代表创建位图索引,如果不指明该参数,则创建B*树索引。列名是创建索引的关键字列,可以是一列或多列。第5章其他数据库对象ORACLE9iORACLE9i删除索引的语法是:DROPINDEX索引名;删除索引的人应该是索引的创建者或拥有DROPANYINDEX系统权限的用户。索引的删除对表没有影响。【训练1】创建和删除索引。步骤1:创建索引:CREATEINDEXEMP_ENAMEONEMP(ENAME);执行结果:索引已创建。第5章其他数据库对象ORACLE9iORACLE9i步骤2:查询中引用索引:SELECTENAME,JOB,SALFROMEMPWHEREENAME='SCOTT';执行结果:ENAMEJOBSAL---------------------------------------------------SCOTTANALYST3000步骤3:删除索引:DROPINDEXEMP_ENAME;执行结果:索引已丢弃。第5章其他数据库对象ORACLE9iORACLE9i说明:本例创建的是B*树非惟一简单索引。索引关键字列是ENAME。在步骤2中,因为WHERE条件中出现了索引关键字,所以查询中索引会被自动引用,但是由于行数很少,因此不会感觉到查询速度的差别。【训练2】创建复合索引。步骤1:创建复合索引:CREATEINDEXEMP_JOBSALONEMP(JOB,SAL);执行结果:索引已创建。第5章其他数据库对象ORACLE9iORACLE9i步骤2:查询中引用索引:SELECTENAME,JOB,SALFROMEMPWHEREJOB='MANAGER'ANDSAL2500;执行结果:ENAMEJOBSAL----------------------------------------------------BLAKEMANAGER2850CLARKMANAGER2850JONESMANAGER2975说明:在本例中创建的是包含两列的复合索引。JOB是主键,SAL是次键。WHERE条件中引用了JOB和SAL,而且是按照索引关键字出现的顺序引用的,所以在查询中,索引会被引用。第5章其他数据库对象ORACLE9iORACLE9i如下的查询也会引用索引:SELECTENAME,JOB,SALFROMEMPWHEREJOB='CLERK';但以下查询不会引用索引,因为没有先引用索引关键字的主键:SELECTENAME,JOB,SALFROMEMPWHERESAL2500;第5章其他数据库对象ORACLE9iORACLE9i5.2.3查看索引通过查询数据字典USER_INDEXES可以检查创建的索引。通过查询数据字典USER_IND_COLUMNS可以检查索引的列。【训练1】显示emp表的索引:SELECTINDEX_NAME,INDEX_TYPE,UNIQUENESSFROMUSER_INDEXESWHERETABLE_NAME='EMP';第5章其他数据库对象ORACLE9iORACLE9i执行结果:INDEX_NAME-----------------------------------------------------------------------------------------------------------------EMP_JOBSALNORMALNONUNIQUEPK_EMPNORMALUNIQUE说明:由本训练可见,emp表共有两个索引,其中EMP_JOBSAL是刚刚创建的,属于非惟一索引。PK_EMP为生成主键时系统创建的索引,属于惟一索引。第5章其他数据库对象ORACLE9iORACLE9i【训练2】显示索引的列。SELECTCOLUMN_NAMEFROMUSER_IND_COLUMNSWHEREINDEX_NAME='EMP_JOBSAL';执行结果:COLUMN_NAME--------------------------------------------------------------------------------JOBSAL说明:该查询显示出索引“EMP_JOBSAL”拥有两列:JOB和SAL。第5章其他数据库对象ORACLE9iORACLE9i5.3序列5.3.1序列的创建序列(SEQUENCE)是序列号生成器,可以为表中的行自动生成序列号,产生一组等间隔的数值(类型为数字)。其主要的用途是生成表的主键值,可以在插入语句中引用,也可以通过查询检查当前值,或使序列增至下一个值。创建序列需要CREATESEQUENCE系统权限。序列的创建语法如下:第5章其他数据库对象ORACLE9iORACLE9iCREATESEQUENCE序列名[INCREMENTBYn][STARTWITHn][{MAXVALUEn|NOMAXVALUE}][{MINVALUEn|NOMINVALUE}][{CYCLE|NOCYCLE}][{CACHEn|NOCACHE}];第5章其他数据库对象ORACLE9iORACLE9i其中:INCREMENTBY用于定义序列的步长,如果省略,则默认为1,如果出现负值,则代表序列的值是按照此步长递减的。STARTWITH定义序列的初始值(即产生的第一个值),默认为1。MAXVALUE定义序列生成器能产生的最大值。选项NOMAXVALUE是默认选项,代表没有最大值定义,这时对于递增序列,系统能够产生的最大值是10的27次方;对于递减序列,最大值是-1。第5章其他数据库对象ORACLE9iORACLE9iMINVALUE定义序列生成器能产生的最小值。选项NOMAXVALUE是默认选项,代表没有最小值定义,这时对于递减序列,系统能够产生的最小值是?10的26次方;对于递增序列,最小值是1。CYCLE和NOCYCLE表示当序列生成器的值达到限制值后是否循环。CYCLE代表循环,NOCYCLE代表不循环。如果循环,则当递增序列达到最大值时,循环到最小值;对于递减序列达到最小值时,循环到最大值。如果不循环,达到限制值后,继续产生新值就会发生错误。CACHE(缓冲)定义存放序列的内存块的大小,默认为20。NOCACHE表示不对序列进行内存缓冲。对序列进行内存缓冲,可以改善序列的性能。第5章其他数据库对象ORACLE9iORACLE9i删除序列的语法是:DROPSEQUENCE序列名;删除序列的人应该是序列的创建者或拥有DROPANYSEQUENCE系统权限的用户。序列一旦删除就不能被引用了。序列的某些部分也可以在使用中进行修改,但不能修改SATRTWITH选项。对序列的修改只影响随后产生的序号,已经产生的序号不变。修改序列的语法如下:第5章其他数据库对象ORACLE9iORACLE9iALTERSEQUENCE序列名[INCREMENTBYn][{MAXVALUEn|NOMAXVALUE}][{MINVALUEn|NOMINVALUE}][{CYCLE|NOCYCLE}][{CACHEn|NOCACHE}];第5章其他数据库对象ORACLE9iORACLE9i【训练1】创建和删除序列。步骤1:创建序列:CREATESEQUENCEABCINCREMENTBY1STARTWITH10MAXVALUE9999999NOCYCLENOCACHE;执行结果:序列已创建。步骤2:删除序列:DROPSEQUENCEABC;第5章其他数据库对象ORACLE9iORACLE9i执行结果:序列已丢弃。说明:以上创建的序列名为ABC,是递增序列,增量为1,初始值为10。该序列不循环,不使用内存。没有定义最小值,默认最小值为1,最大值为9999999。第5章其他数据库对象ORACLE9iORACLE9i5.3.2序列的使用如果已经创建了序列,怎样才能引用序列呢?方法是使用CURRVAL和NEXTVAL来引用序列的值。调用NEXTVAL将生成序列中的下一个序列号,调用时要指出序列名,即用以下方式调用:序列名.NEXTVALCURRVAL用于产生序列的当前值,无论调用多少次都不会产生序列的下一个值。如果序列还没有通过调用NEXTVAL产生过序列的下一个值,先引用CURRVAL没有意义。调用CURRVAL的方法同上,要指出序列名,即用以下方式调用:序列名.CURRVAL.第5章其他数据库对象ORACLE9iORACLE9i【训练1】产生序列的值。步骤1:产生序列的第一个值:SELECTABC.NEXTVALFROMDUAL;执行结果:NEXTVAL------------------10步骤2:产生序列的下一个值:SELECTABC.NEXTVALFROMDUAL;执行结果:NEXTVAL-------------------11第5章其他数据库对象ORACLE9iORACLE9i步骤3:产生序列的当前值:SELECTABC.CURRVALFROMDUAL;执行结果:CURR
本文标题:oracle 教程 第5章 其他数据库对象
链接地址:https://www.777doc.com/doc-3605852 .html