管理oracle对象资料.ppt

管理oracle对象资料

第七章 管理Oracle对象 管理表 概览 表是最基本的数据库对象,它用于存储用户数据,关系数据库的所有操作最终都是围绕用户表进行的。在Oracle数据库中,按照存储方式的不同,表可以分为普通表、分区表、索引组织表以及簇表等四种表。 7.3 管理数据的完整性 实现数据完整性可以使用应用代码、触发器和约束三种方法,如果要使用应用代码实现商业规则,那么既可以使用数据库存储过程实现,也可以使用客户端的过程和函数实现;而触发器则是隐含执行的PL/SQL存储程序,当执行DML操作时会触发触发器。与应用代码和触发器相比,约束不仅具有更好的性能,而且维护更加容易,所以实现数据完整性的首选方法是使用约束。 7.3.1 约束类型 1.NOT NULL约束 该约束用于指定列不能为NULL。当插人数据时,必须要为NOT NULL列提供数据。 只能在字段级定义NOT NULL约束,并且在同一个表中可以定义多个NOT NULL约束。 create table student ( sno number(5) primary key, sname varchar2(20) constraint c1 not null, sage number(3) ) ; 2.惟一约束 惟一约束用于指定列的数据不能重复。但大家需要注意,惟一约束列可以为NULL。 例如,建立部门表DEPT,要求部门名称Dname列值唯一。 create table dept ( deptno number primary key, dname varchar2(9) constraint u1 unique, loc varchar2(10) ); 注意:当指定惟一约束时,系统会自动基于惟一约束列建立索引。 5.显示区信息 当建立表时,Oracle会为表建立相应的表段。段逻辑上又是由一个或多个区组成的,而区又是由相邻的数据块所组成的,那么如何确定段包含哪些区,以及区的位置及尺寸呢?通过查询数据字典DBA_EXTENTS,可以显示区的详细信息,示例如下: select extent_id, file_id, block_id, blocks from dba_extents where owner=DEVEP and segment_name=DEPT; 其中,extent_id为区编号,file_id为区所在文件号,block_id为区的初始数据块号,blocks为区所包含的数据块个数。 6.显示行所在的实际位置 执行INSERT操作时,服务器进程会将数据插入到表段的相应数据块中,并且Oracle会生成惟一的ROWID对应于该行数据。但用户无法直接读懂ROWID,通过使用DBMS_ROWID包可以显示行所在数据文件、数据块位置以及行位置,如下所示: select deptno, dname, dbms_rowid.rowid_relative_fno(ROWID) file#, dbms_rowid.rowid_block_number(ROWID) block#, dbms_rowid.rowid_row_number(ROWID) row# from dept; 7.2 管理索引 索引的作用 索引是与表和簇相关的一种数据库对象,它的作用类似于书中的目录。在没有目录的情况下,要在书中查找指定的内容必须通读全书,而有了目录之后,只需要通过目录就可以快速地找到包含所需内容的页。合理地使用索引可以降低磁盘I/O操作次数,从而提高表的访问性能。 ROWID 在empno列上无索引 在empno列上存在索引 select * from emp where empno=7788 假定表EMP数据占用了1000个数据块,如果在EMPNO列上不存在索引,那么当执行“select * from emp where empno=7788”时需要扫描表的所有数据块,也就是说需要1000次I/O操作;如果在EMPNO列上存在索引,并假定索引层次为2,那么当执行“select * from emp where empno=7788”时,在检索了3个索引块后就可以定位到行所在的ROWID,然后根据ROWID可以直接定位到该行数据,也就是说只需要4次I/O操作。显然,使用索引可以大大提高查询速度。 2. 索引存储方式 索引与表一样,不仅需要在数据字典中保存索引的定义,还需要在表空间中为它分配实际的存储空

文档评论(0)

1亿VIP精品文档

相关文档