Oracle数据库SQL和PL SQL实例教程 高继民 第5章 其他数据库对象

上传人:E**** 文档编号:89349070 上传时间:2019-05-23 格式:PPT 页数:59 大小:472KB
返回 下载 相关 举报
Oracle数据库SQL和PL SQL实例教程 高继民 第5章 其他数据库对象_第1页
第1页 / 共59页
Oracle数据库SQL和PL SQL实例教程 高继民 第5章 其他数据库对象_第2页
第2页 / 共59页
Oracle数据库SQL和PL SQL实例教程 高继民 第5章 其他数据库对象_第3页
第3页 / 共59页
Oracle数据库SQL和PL SQL实例教程 高继民 第5章 其他数据库对象_第4页
第4页 / 共59页
Oracle数据库SQL和PL SQL实例教程 高继民 第5章 其他数据库对象_第5页
第5页 / 共59页
点击查看更多>>
资源描述

《Oracle数据库SQL和PL SQL实例教程 高继民 第5章 其他数据库对象》由会员分享,可在线阅读,更多相关《Oracle数据库SQL和PL SQL实例教程 高继民 第5章 其他数据库对象(59页珍藏版)》请在金锄头文库上搜索。

1、第5章 其他数据库对象,5.1 数据库模式对象 5.2 索引 5.3 序列 5.4 同义词 5.5 聚簇 5.6 数据库链接 5.7 练习,5.1 数据库模式对象,Oracle数据库的模式对象如表5-1所示。,表5-1 Oracle数据库模式对象,5.2 索引,5.2.1 Oracle数据库的索引 索引(INDEX)是为了加快数据的查找而创建的数据库对象,特别是对大表,索引可以有效地提高查找速度,也可以保证数据的惟一性。索引是由Oracle自动使用和维护的,一旦创建成功,用户不必对索引进行直接的操作。索引是独立于表的数据库结构,即表和索引是分开存放的,当删除索引时,对拥有索引的表的数据没有影响

2、。,在创建PRIMARY KEY和UNIQUE约束条件时,系统将自动为相应的列创建惟一(UNIQUE)索引。索引的名字同约束的名字一致。 索引有两种:B*树索引和位图(BITMAP)索引。 B*树索引是通常使用的索引,也是默认的索引类型。在这里主要讨论B*树索引。B*树是一种平衡2叉树,左右的查找路径一样。这种方法保证了对表的任何值的查找时间都相同。 B*树索引可分为:惟一索引、非惟一索引、一列简单索引和多列复合索引。,创建索引一般要掌握以下原则:只有较大的表才有必要建立索引,表的记录应该大于50条,查询数据小于总行数的2%4%。虽然可以为表创建多个索引,但是无助于查询的索引不但不会提高效率,

3、还会增加系统开销。因为当执行DML操作时,索引也要跟着更新,这时索引可能会降低系统的性能。一般在主键列或经常出现在WHERE子句或连接条件中的列建立索引,该列称为索引关键字。,5.2.2 索引的创建 创建索引不需要特定的系统权限。建立索引的语法如下: CREATE UNIQUE|BITMAP INDEX 索引名 ON 表名(列名1,列名2,.); 其中: UNIQUE代表创建惟一索引,不指明为创建非惟一索引。 BITMAP 代表创建位图索引,如果不指明该参数,则创建B*树索引。 列名是创建索引的关键字列,可以是一列或多列。,删除索引的语法是: DROP INDEX 索引名; 删除索引的人应该是

4、索引的创建者或拥有DROP ANY INDEX系统权限的用户。索引的删除对表没有影响。 【训练1】 创建和删除索引。 步骤1:创建索引: CREATE INDEX EMP_ENAME ON EMP(ENAME); 执行结果: 索引已创建。,步骤2:查询中引用索引: SELECT ENAME,JOB,SAL FROM EMP WHERE ENAME=SCOTT; 执行结果: ENAME JOB SAL - - - SCOTT ANALYST 3000 步骤3:删除索引: DROP INDEX EMP_ENAME; 执行结果: 索引已丢弃。,说明:本例创建的是B*树非惟一简单索引。索引关键字列是E

5、NAME。在步骤2中,因为WHERE条件中出现了索引关键字,所以查询中索引会被自动引用,但是由于行数很少,因此不会感觉到查询速度的差别。 【训练2】 创建复合索引。 步骤1:创建复合索引: CREATE INDEX EMP_JOBSAL ON EMP(JOB,SAL); 执行结果: 索引已创建。,步骤2:查询中引用索引: SELECT ENAME,JOB,SAL FROM EMP WHERE JOB=MANAGERAND SAL2500; 执行结果: ENAME JOB SAL - - - BLAKE MANAGER 2850 CLARK MANAGER 2850 JONES MANAGER

6、2975 说明:在本例中创建的是包含两列的复合索引。JOB是主键,SAL是次键。WHERE条件中引用了JOB和SAL,而且是按照索引关键字出现的顺序引用的,所以在查询中,索引会被引用。,如下的查询也会引用索引: SELECT ENAME,JOB,SAL FROM EMP WHERE JOB=CLERK; 但以下查询不会引用索引,因为没有先引用索引关键字的主键: SELECT ENAME,JOB,SAL FROM EMP WHERE SAL2500;,5.2.3 查看索引 通过查询数据字典USER_INDEXES可以检查创建的索引。 通过查询数据字典USER_IND_COLUMNS可以检查索引的

7、列。 【训练1】 显示emp表的索引: SELECT INDEX_NAME, INDEX_TYPE, UNIQUENESS FROM USER_INDEXES WHERE TABLE_NAME=EMP;,执行结果: INDEX_NAME - - - EMP_JOBSAL NORMAL NONUNIQUE PK_EMP NORMAL UNIQUE 说明:由本训练可见,emp表共有两个索引,其中EMP_JOBSAL是刚刚创建的,属于非惟一索引。PK_EMP为生成主键时系统创建的索引,属于惟一索引。,【训练2】 显示索引的列。 SELECT COLUMN_NAME FROM USER_IND_COL

8、UMNS WHERE INDEX_NAME=EMP_JOBSAL; 执行结果: COLUMN_NAME - JOB SAL 说明:该查询显示出索引“EMP_JOBSAL”拥有两列:JOB和SAL。,5.3 序列,5.3.1 序列的创建 序列(SEQUENCE)是序列号生成器,可以为表中的行自动生成序列号,产生一组等间隔的数值(类型为数字)。其主要的用途是生成表的主键值,可以在插入语句中引用,也可以通过查询检查当前值,或使序列增至下一个值。 创建序列需要CREATE SEQUENCE系统权限。序列的创建语法如下:,CREATE SEQUENCE 序列名 INCREMENT BY n START

9、WITH n MAXVALUE n|NOMAXVALUE MINVALUE n|NOMINVALUE CYCLE|NOCYCLE CACHE n|NOCACHE;,其中: INCREMENT BY 用于定义序列的步长,如果省略,则默认为1,如果出现负值,则代表序列的值是按照此步长递减的。 START WITH 定义序列的初始值(即产生的第一个值),默认为1。 MAXVALUE 定义序列生成器能产生的最大值。选项NOMAXVALUE是默认选项,代表没有最大值定义,这时对于递增序列,系统能够产生的最大值是10的27次方;对于递减序列,最大值是-1。,MINVALUE定义序列生成器能产生的最小值。选

10、项NOMAXVALUE是默认选项,代表没有最小值定义,这时对于递减序列,系统能够产生的最小值是?10的26次方;对于递增序列,最小值是1。 CYCLE和NOCYCLE 表示当序列生成器的值达到限制值后是否循环。CYCLE代表循环,NOCYCLE代表不循环。如果循环,则当递增序列达到最大值时,循环到最小值;对于递减序列达到最小值时,循环到最大值。如果不循环,达到限制值后,继续产生新值就会发生错误。 CACHE(缓冲)定义存放序列的内存块的大小,默认为20。NOCACHE表示不对序列进行内存缓冲。对序列进行内存缓冲,可以改善序列的性能。,删除序列的语法是: DROP SEQUENCE 序列名; 删

11、除序列的人应该是序列的创建者或拥有DROP ANY SEQUENCE系统权限的用户。序列一旦删除就不能被引用了。 序列的某些部分也可以在使用中进行修改,但不能修改SATRT WITH选项。对序列的修改只影响随后产生的序号,已经产生的序号不变。修改序列的语法如下:,ALTER SEQUENCE 序列名 INCREMENT BY n MAXVALUE n|NOMAXVALUE MINVALUE n|NOMINVALUE CYCLE|NOCYCLE CACHE n|NOCACHE;,【训练1】 创建和删除序列。 步骤1:创建序列: CREATE SEQUENCE ABC INCREMENT BY 1

12、 START WITH 10 MAXVALUE 9999999 NOCYCLE NOCACHE; 执行结果: 序列已创建。 步骤2:删除序列: DROP SEQUENCE ABC;,执行结果: 序列已丢弃。 说明:以上创建的序列名为ABC,是递增序列,增量为1,初始值为10。该序列不循环,不使用内存。没有定义最小值,默认最小值为1,最大值为9 999 999。,5.3.2 序列的使用 如果已经创建了序列,怎样才能引用序列呢?方法是使用CURRVAL和NEXTVAL来引用序列的值。 调用NEXTVAL将生成序列中的下一个序列号,调用时要指出序列名,即用以下方式调用: 序列名.NEXTVAL CU

13、RRVAL用于产生序列的当前值,无论调用多少次都不会产生序列的下一个值。如果序列还没有通过调用NEXTVAL产生过序列的下一个值,先引用CURRVAL没有意义。调用CURRVAL的方法同上,要指出序列名,即用以下方式调用: 序列名.CURRVAL.,【训练1】 产生序列的值。 步骤1:产生序列的第一个值: SELECT ABC.NEXTVAL FROM DUAL; 执行结果: NEXTVAL - 10 步骤2:产生序列的下一个值: SELECT ABC.NEXTVAL FROM DUAL; 执行结果: NEXTVAL - 11,步骤3:产生序列的当前值: SELECT ABC.CURRVAL

14、FROM DUAL; 执行结果: CURRVAL - 11 说明:第一次调用NEXTVAL产生序列的初始值,根据定义知道初始值为10。第二次调用产生11,因为序列的步长为1。调用CURRVAL,显示当前值11,不产生新值。,【训练2】 序列的应用:产生图书序列号。 步骤1:创建序列: CREATE SEQUENCE BOOKID INCREMENT BY 1 START WITH 10 MAXVALUE 9999999 NOCYCLE NOCACHE; 执行结果: 序列已创建。 步骤2:使用序列生成新的图书编号: INSERT INTO 图书 VALUES(A|TO_CHAR(BOOKID.NEXTVAL, fm0000), 多媒体制作, 01, 高建,3,28.00);,INSERT INTO 图书 VALUES(A|TO_CHAR(BOOKID.NEXTVAL, fm0000), 网页制作精选,01,刘莹,4,26.50); 执行结果: 已创建 1 行。 已创建 1 行。 步骤2:显示插入结果: SELECT * FROM 图书; 执行结果: 图书 图书名称 出 作者 数量 单价 - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号