1、ACCP V4.0,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第四章 数据库对象,2,回顾,锁用于保护多用户环境下被修改的数据,锁分为两种级别,即行级锁和表级锁,表分区允许将一个表划分成几部分,以改善大型应用系统的性能,分区方法包括范围分区、散列分区、复合分区和列表分区,分区维护操作包括添加、删除、截断、合并
2、和拆分分区,3,目标,使用同义词,使用序列,创建视图,创建索引,4,数据库对象简介,Oracle,数据库对象又称模式对象,数据库对象是逻辑结构的集合,最基本的数据库对象是表,其他数据库对象包括:,数据库对象,同义词,序列,视图,索引,5,同义词,3-1,同义词是现有对象的一个别名。,简化,SQL,语句,隐藏对象的名称和所有者,提供对对象的公共访问,同义词共有两种类型:,同义词,私有同义词,公有同义词,私有同义词只能在其模式内访问,且不能与当前模式的对象同名。,公有同义词可被所有的数据库用户访问。,6,同义词,3-2,CREATE SYNONYM emp FOR SCOTT.emp;,SCOTT
3、.emp,的别名,模式名,表名,私有同义词,公有同义词,CREATE PUBLIC SYNONYM emp_syn FOR SCOTT.emp;,同义词名称,7,同义词,3-3,创建或替换现有的同义词,CREATE OR REPLACE SYNONYM emp_syn FOR SCOTT.emp;,替换现有的同义词,SQL DROP SYNONYM emp;,SQL DROP PUBLIC SYNONYM emp_syn;,删除同义词,8,序列,序列是用于生成唯一、连续序号的对象,序列可以是升序的,也可以是降序的,使用,CREATE SEQUENCE,语句创建序列,SQL CREATE SEQ
4、UENCE toys_seq,START WITH 10,INCREMENT BY 10,MAXVALUE 2000,MINVALUE 10,NOCYCLE,CACHE 10;,指定第一个序号从,10,开始,指定序号之间的间隔为,10,表示序列的最大值为,2000,表示序列的最小值为,10,在达到最大值后停止生成下一个值,指定内存中预先分配的序号数,9,访问序列,通过序列的伪列来访问序列的值,NEXTVAL,返回序列的下一个值,CURRVAL,返回序列的当前值,SQL INSERT INTO toys(toyid,toyname,toyprice),VALUES(toys_seq.NEXTVA
5、L,TWENTY,25);,SQL INSERT INTO toys(toyid,toyname,toyprice),VALUES(toys_seq.NEXTVAL,MAGIC PENCIL,75);,指定序列的下一个值,SQL SELECT toys_seq.CURRVAL FROM dual;,检索序列的当前值,10,更改和删除序列,SQL ALTER SEQUENCE toys_seq MAXVALUE 5000 CYCLE;,使用,ALTER SEQUENCE,语句修改序列,,不能更改序列的,START WITH,参数,使用,DROP SEQUENCE,语句删除序列,SQL DROP
6、SEQUENCE toys_seq;,11,视图,视图以经过定制的方式显示来自一个或多个表的数据,视图可以视为“虚拟表”或“存储的查询”,创建视图所依据的表称为“基表”,视图的优点有:,提供了另外一种级别的表安全性,隐藏的数据的复杂性,简化的用户的,SQL,命令,隔离基表结构的改变,通过重命名列,从另一个角度提供数据,12,创建视图,3-1,studno,studname,studmarks,subno,studcaste,1,Rob,45,2,Open,2,James,33,4,SC,3,Jesica,40,5,Open,Stud_details,Stud_view,studno,studn
7、ame,subno,1,Rob,2,2,James,4,3,Jesica,5,创建视图,CREATE VIEW stud_view,AS SELECT studno,studname,subno,FROM Stud_details;,13,创建视图,3-2,创建视图的语法:,CREATE OR REPLACE FORCE VIEW,view_name(alias,alias.),AS select_statement,WITH CHECK OPTION,WITH READ ONLY;,14,创建视图,3-3,使用,WITH CHECK OPTION,选项创建视图,CREATE OR REPLA
8、CE VIEW pause_view AS,SELECT*FROM order_master WHERE ostatus=p,WITH CHECK OPTION CONSTRAINT chk_pv;,使用,ORDER BY,子句创建视图,CREATE OR REPLACE VIEW ord_ven AS,SELECT*FROM vendor_master ORDER BY venname;,创建带有错误的视图,CREATE FORCE VIEW ven AS,SELECT*FROM venmaster;,15,联接视图,2-1,Studno,Studname,Submrks,Subno,1,R
9、ob,45,2,2,James,33,4,3,Jesica,40,4,Subno,Subname,2,English,4,Maths,5,Science,Stud_details,Sub_details,Studno,Studname,Submrks,Subname,1,Rob,45,English,2,James,33,Maths,3,Jesica,40,Maths,CREATE VIEW Stud_sub_view AS,SELECT Studno,Studname,Submrks,Subname,FROM Stud_details,Sub_Details,WHERE Stud_detai
10、ls.Subno=Sub_details.Subno;,Stud_sub_view,联接视图,16,联接视图,2-2,创建外联接视图,CREATE VIEW ven_ord_outj_view AS,SELECT vm.vencode,venname,orderno,odate,ostatus,FROM vendor_master vm,order_master om,WHERE vm.vencode=om.vencode(+);,SELECT vm.vencode,venname,orderno,odate,ostatus,FROM vendor_master vm LEFT OUTER J
11、OIN order_master om,ON vm.vencode=om.vencode;,17,视图上的,DML,语句,在视图上也可以使用修改数据的,DML,语句,如,INSERT,、,UPDATE,和,DELETE,视图上的,DML,语句有如下限制:,只能修改一个底层的基表,如果修改违反了基表的约束条件,则无法更新视图,如果视图包含连接操作符、,DISTINCT,关键字、集合操作符、聚合函数或,GROUP BY,子句,则将无法更新视图,如果视图包含伪列或表达式,则将无法更新视图,18,键保留表,Studno,Studname,Submrks,Subno,1,Rob,45,2,2,James
12、,33,4,3,Jesica,40,4,Subno,Subname,2,English,4,Maths,5,Science,Stud_details,Sub_details,Studno,Studname,Submarks,Subno,Subname,1,Rob,45,2,English,2,James,33,4,Maths,3,Jesica,40,4,Maths,键保留表,因为,Studno,既是,Stud_details,中的主键,,也是联接结果中的主键,Stud_details,为什么,是键保留表?,联接视图,19,视图中可以使用单行函数、分组函数和表达式,使用,DROP VIEW,语句
13、删除视图,视图中的函数,CREATE VIEW item_view AS,SELECT itemcode,LOWER(itemdesc)item_desc,FROM itemfile;,SQL DROP VIEW toys_view;,20,索引,3-1,索引是与表相关的一个可选结构,用以提高,SQL,语句执行的性能,减少磁盘,I/O,使用,CREATE INDEX,语句创建索引,在逻辑上和物理上都独立于表的数据,Oracle,自动维护索引,21,索引,3-2,索引有各种类型,除了标准索引外,还有一些特殊类型的索引:,索引的类型,基于函数的索引,反向键索引,位图索引,唯一索引,组合索引,22,
14、索引,3-3,SQL CREATE INDEX item_index ON itemfile(itemcode),TABLESPACE index_tbs;,创建标准索引,重建索引,SQL ALTER INDEX item_index REBUILD;,删除索引,SQL DROP INDEX item_index;,23,唯一索引,SQL CREATE UNIQUE INDEX item_index,ON itemfile(itemcode);,唯一索引确保在定义索引的列中没有重复值,Oracle,自动在表的主键列上创建唯一索引,使用,CREATE UNIQUE INDEX,语句创建唯一索引,
15、24,组合索引,SQL CREATE INDEX comp_index,ON itemfile(p_category,itemrate);,组合索引是在表的多个列上创建的索引,索引中列的顺序是任意的,如果,SQL,语句的,WHERE,子句中引用了组合索引的所有列或大多数列,则可以提高检索速度,25,反向键索引反转索引列键值的每个字节,通常建立在值是连续增长的列上,使数据均匀地分布在整个索引上,创建索引时使用,REVERSE,关键字,反向键索引,SQL CREATE INDEX rev_index,ON itemfile(itemcode)REVERSE;,SQL ALTER INDEX rev
16、_index REBUID NOREVERSE;,26,位图索引,SQL CREATE BITMAP INDEX bit_index,ON order_master(orderno);,位图索引适合创建在低基数列上,位图索引不直接存储,ROWID,,而是存储字节位到,ROWID,的映射,减少响应时间,节省空间占用,27,基于函数的索引,SQL CREATE INDEX lowercase_idx,ON toys(LOWER(toyname);,基于一个或多个列上的函数或表达式创建的索引,表达式中不能出现聚合函数,不能在,LOB,类型的列上创建,创建时必须具有,QUERY REWRITE,权限,
17、SQL SELECT toyid FROM toys,WHERE LOWER(toyname)=doll;,28,索引组织表,2-1,SQL CREATE TABLE ind_org_tab(,vencode NUMBER(4)PRIMARY KEY,venname VARCHAR2(20),),ORGANIZATION INDEX;,索引组织表的数据存储在与其关联的索引中,索引中存储的是行的实际数据,而不是,ROWID,基于主键访问数据,CREATE TABLE,命令与,ORGANIZATION INDEX,子句一起用于创建索引组织表,29,索引组织表,2-2,普通表与索引组织表的比较,普通
18、表,索引组织表,ROWID,唯一地标识行,主键唯一地标识行,隐式的,ROWID,列,没有隐式的,ROWID,列,基于,ROWID,的访问,基于主键的访问,顺序扫描返回所有行,完全索引扫描返回所有行,并按主键顺序排列,支持分区,不支持分区,30,索引中的分区,可以将索引存储在不同的分区中,与分区有关的索引有三种类型:,局部分区索引 在分区表上创建的索引,在每个表分区上创建独立的索引,索引的分区范围与表一致,全局分区索引 在分区表或非分区表上创建的索引,索引单独指定分区的范围,与表的分区范围或是否分区无关,全局非分区索引 在分区表上创建的全局普通索引,索引没有被分区,31,获取索引的信息,SQL
19、SELECT INDEX_NAME,TABLE_NAME,COLUMN_NAME,FROM USER_IND_COLUMNS,ORDER BY INDEX_NAME,COLUMN_POSITION;,与索引有关的数据字典视图有:,USER_INDEXES,用户创建的索引的信息,USER_IND_PARTITIONS,用户创建的分区索引的信息,USER_IND_COLUMNS,与索引相关的表列的信息,32,总结,同义词是现有数据库对象的别名,序列用于生成唯一、连续的序号,视图是基于一个或多个表的虚拟表,索引是与表相关的一个可选结构,用于提高,SQL,语句执行的性能,索引类型有标准索引、唯一索引、反向键索引、位图索引和基于函数的索引,索引组织表基于主键访问数据,