《oracle讲解Chapter38266.pptx》由会员分享,可在线阅读,更多相关《oracle讲解Chapter38266.pptx(36页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Version 3.0数据库对象数据库对象第三章第三章(Oracle数据库设计与实现)Database Design and Implementation Using Oracle 2/44目目标同同义词序列序列视图索引索引(Oracle数据库设计与实现)Database Design and Implementation Using Oracle 3/44一、同一、同义词 2-1数据数据库对象的替象的替换名称,名称,用作表、用作表、视图、序列、序列、过程、存程、存储函数、程序包、函数、程序包、实体化体化视图或其他同或其他同义词的的别名或替名或替换名称名称 优点:点:简化化 SQL 语句句隐藏
2、藏对象的名称和所有者象的名称和所有者为分布式数据分布式数据库的的远程程对象提供了位置透明象提供了位置透明性性提供提供对对象的公共象的公共访问(Oracle数据库设计与实现)Database Design and Implementation Using Oracle 4/44同同义词 2-2同同义词类型型私有私有公用公用CREATE SYNONYM 命令用于命令用于创建同建同义词DROP SYNONYM 命令用于命令用于删除同除同义词USER_SYNONYMS 包含有关同包含有关同义词的信息的信息(Oracle数据库设计与实现)Database Design and Implementatio
3、n Using Oracle 5/44同同义词的的创建及使用建及使用语法法 CREATE PUBLIC SYSNONYM FOR objcet;示例示例SELECT*FROM Marketing.vendor_master;CREATE SYSNOSYM vendor_master FOR Marketing.vendor_master;删除除DROP PUBLIC SYNONYM schema.synonym;DROP SYNONYM vendor_master;(Oracle数据库设计与实现)Database Design and Implementation Using Oracle 6
4、/44注意事注意事项私有同私有同义词是由普通用是由普通用户创建的,并且有建的,并且有创建建该同同义词的用的用户才能使用才能使用公用同公用同义词是由是由DBA创建的,任何数据建的,任何数据库用用户都可以使用它。用于都可以使用它。用于隐藏基表的身份,并藏基表的身份,并降低降低SQL语句的复句的复杂性性当公用当公用对象和本地象和本地对象具有相同的名称象具有相同的名称时,本地本地对象象优先,但在先,但在删除本地除本地对象之后,可象之后,可以像平常一以像平常一样使用公用同使用公用同义词(Oracle数据库设计与实现)Database Design and Implementation Using Ora
5、cle 7/44二、序列二、序列2-1生成唯一、生成唯一、连续的整数的整数用于生成主用于生成主键值Create Sequence 语句用于句用于创建序列建序列序列可以是升序排序,也可以是降序排序序列可以是升序排序,也可以是降序排序(Oracle数据库设计与实现)Database Design and Implementation Using Oracle 8/44序列序列语法法CREATE SEQUENCE INCREMENT BY nSTART WITH nMAXVALUE n MINVALUE nCYCLE|NOCYCLECACHE n|NOCACHE;注:注:INCREMENT BY n
6、:指定序列数字之间的整数间隔指定序列数字之间的整数间隔 START WITH n:指定要生成的第一个序列号指定要生成的第一个序列号 MINVALUE n:指定序列的最小值指定序列的最小值 MAXVALUE n:指定序列可以生成的最大值指定序列可以生成的最大值 CYCLE:指定序列即使达到了最大值,还应继续生成值指定序列即使达到了最大值,还应继续生成值,通常通常 是循环从头开始产生序列值是循环从头开始产生序列值 CACHE:允许更快地生成序列号,允许更快地生成序列号,Oracle分配序列号,并将分配序列号,并将其保存在内存中以便更快地访问其保存在内存中以便更快地访问(Oracle数据库设计与实现
7、)Database Design and Implementation Using Oracle 9/44示例示例示例示例 CREATE SEQUENCE venseqINCREMENT BY 1START WITH 1MAXVALUE 10MINVALUE 1CYCLECACHE 4;(Oracle数据库设计与实现)Database Design and Implementation Using Oracle 10/44序列序列应用用访问序列序列nextval:第一次使用nextval时,将返回该序列的初始值currval:返回序列的当前返回序列的当前值,即最后一次引用即最后一次引用next
8、val时返回的返回的值SELECT vdnseq.NEXTVAL FROM dual;SELECT venseq.CURVAL FROM dual;INSERT INTO vendor_master(vencode,venname)VALUES(V|venseq.nextval,vijay)(Oracle数据库设计与实现)Database Design and Implementation Using Oracle 11/44修改序列修改序列Alter Sequence可可对序列序列进行修改,需要行修改,需要设置或删除最小或最大值更改增加值更改高速缓存的序列号的数字不能用于修改不能用于修改ST
9、ART WITH参数的参数的值语法:法:ALTER SEQUENCE INCREMENT BY nMAXVALUE nMINVALUE nCYCLE|NOCYCLECACHE n|NOCACHE;示例:ALTER SEQUENCE member_numINCREMENT BY 1MAXVALUE 999MINVALUE 1;(Oracle数据库设计与实现)Database Design and Implementation Using Oracle 12/44删除序列除序列Drop Sequence语法:法:DROP SEQUENCE;示例示例 DROP SEQUENCE member_seq
10、;查看序列:看序列:select*from seq;(Oracle数据库设计与实现)Database Design and Implementation Using Oracle 13/44三、三、视图 5-1经过定制的表示方式,用来定制的表示方式,用来显示来自一个或示来自一个或多个表的数据多个表的数据也称也称为“虚虚拟表表”或或“已存已存储的的查询”基表基表-创建建视图所依据的表所依据的表(Oracle数据库设计与实现)Database Design and Implementation Using Oracle 14/44视图5-2视图的的优点点提供了另外一种提供了另外一种级别的表安全性的
11、表安全性隐藏数据的复藏数据的复杂性性简化用化用户的的 SQL 命令命令将将应用程序与基表定用程序与基表定义的修改隔离开来的修改隔离开来从另一个角度提供数据从另一个角度提供数据(Oracle数据库设计与实现)Database Design and Implementation Using Oracle 15/44创建建视图CREATE OR REPLACE VIEW viewname(alias,alias,)AS subqueryWITH CHECK OPTION CONSTRAINT constraintnameWITH READ ONLY CONSTRAINT constraintname
12、OR REPLACE:存在,就替换WITH CHECK OPTION:只能插入或更新视图可以访问的行WITH READ ONLY:不能在视图上执行任何DML操作(Oracle数据库设计与实现)Database Design and Implementation Using Oracle 16/44创建建视图(续)示例示例 CREATE VIEW emp_dept10(no,name,salary)ASSELECT empno,empname,salaryFROM employeeWHERE deptno=10;(Oracle数据库设计与实现)Database Design and Implem
13、entation Using Oracle 17/44创建建视图(续)CREATE VIEW emp_dept10(no,dno,name,salary)ASSELECT empno,deptno,empname,salaryFROM employeeWHERE deptno=10 WITH CHECK OPTION CONSTRAINT empenvUPDATE emp_dept10 SET no=20 WHERE dno=10;不允不允许更新更新这些行些行(Oracle数据库设计与实现)Database Design and Implementation Using Oracle 18/4
14、4创建建视图(续)CREATE OR REPLACE VIEW empviewAS SELECT*FROM emp WITH READ ONLYUPDATE empview SET deptno=33;不允不允许更新只更新只读视图(Oracle数据库设计与实现)Database Design and Implementation Using Oracle 19/44ORDER BY 视图ORDER BY 子句可以用来按特定的子句可以用来按特定的顺序序对行行进行排列行排列CREATE OR REPLACE VIEW empview2AS SELECT*FROM EMP ORDER BY dept
15、no DESC;(Oracle数据库设计与实现)Database Design and Implementation Using Oracle 20/44联接接视图(SQL语句是多个表的句是多个表的连接接)通过联接多个表来创建视图DML 只能修改一个基表通过INSTEAD OF触发器来修改(Oracle数据库设计与实现)Database Design and Implementation Using Oracle 21/44视图中的函数中的函数在视图中可以使用函数和表达式CREATE VEIW itemsoldAS SELECT itemcode,SUM(qty_ord)sold_qtyFRO
16、M order_detail GROUP BY itemcode;注意事项不能不能选择伪列,如列,如currval,nextval视图包括包括联接接,集合操作符集合操作符,分分组函数函数,DISTINCT子句,不子句,不能能执行行删除、更新、插入操作除、更新、插入操作在在视图中所作的修改将影响基表,反之亦然中所作的修改将影响基表,反之亦然分分组函数和函数和GROUP BY子句也可以包含在子句也可以包含在视图中中使用函数使用函数时,应为列指定一个列指定一个别名名(Oracle数据库设计与实现)Database Design and Implementation Using Oracle 22/4
17、4删除除视图DROP VIEW 语句句从数据从数据库中中删除除视图DROP VIEW empview;有关有关视图的信息的信息查询 USER_VIEWS(Oracle数据库设计与实现)Database Design and Implementation Using Oracle 23/44四、索引四、索引10-1与表关与表关联的可的可选结构构加快加快 SQL 语句的句的执行行减少磁减少磁盘 I/OCREATE INDEX 语句用于句用于创建索引建索引在在逻辑上和物理上独立于表中的数据上和物理上独立于表中的数据Oracle 自自动维护索引索引(Oracle数据库设计与实现)Database De
18、sign and Implementation Using Oracle 24/441、唯一索引、唯一索引确保在定确保在定义索引的列中没有重复的索引的列中没有重复的值Oracle 自自动为主主键和唯一和唯一键列列创建唯一索建唯一索引引CREATE UNIQUE INDEX 语句用于句用于创建唯一建唯一索引索引CREATE UNIQUE INDEX ind2 ON order_master(orderno);(Oracle数据库设计与实现)Database Design and Implementation Using Oracle 25/44在表的多个列上在表的多个列上创建的索引建的索引也称也
19、称为“连接索引接索引”组合索引中的列可以按任意合索引中的列可以按任意顺序排列序排列对于在于在 WHERE 子句中包含多个列的子句中包含多个列的查询,可,可以提高数据以提高数据访问速度速度CREATE INDEX combind1 ON order_detail(orderno,itemcode);2、组合索引合索引(Oracle数据库设计与实现)Database Design and Implementation Using Oracle 26/44表的数据存表的数据存储在与其关在与其关联的索引中的索引中对表数据的增表数据的增删改只会改只会导致致对索引的更新索引的更新5、索引、索引组织表表(O
20、racle数据库设计与实现)Database Design and Implementation Using Oracle 27/44普通表与索引普通表与索引组织表的表的对比比普通表普通表索引编排表索引编排表ROWID 唯一地标识行唯一地标识行主键唯一地标识行主键唯一地标识行隐式的隐式的 ROWID 列列没有隐式的没有隐式的 ROWID 列列基于基于 ROWID 的访问的访问基于主键的访问基于主键的访问顺序扫描返回所有行顺序扫描返回所有行完全索引扫描返回所有行,并按完全索引扫描返回所有行,并按主键顺序排列主键顺序排列索引索引10-7(Oracle数据库设计与实现)Database Design
21、 and Implementation Using Oracle 28/44索引的分索引的分类B*tree:平衡平衡树树 适用于适用于OLTPBitmap:位位图图 适用于适用于OLAP(Oracle数据库设计与实现)Database Design and Implementation Using Oracle 29/44索引索引说明明Oracle的索引主要包含两的索引主要包含两类:BTree和位和位图索引。默索引。默认情况下大情况下大多使用多使用Btree索引,索引,该索引就是通常所索引就是通常所见 唯一索引、聚簇索引等唯一索引、聚簇索引等等,等,Btree用在用在OLTP,加快,加快查询速
22、度。位速度。位图索引是索引是Oracle的比的比较引引人注目的地方,其主要用在人注目的地方,其主要用在OLAP(联机数据分析)方面,也就机数据分析)方面,也就是数据是数据仓库方面用到,目的是在加快方面用到,目的是在加快查询速度是,速度是,节省存省存储空空间。通常情况下,索引都要耗。通常情况下,索引都要耗费比比较大的存大的存储空空间,位,位图采用采用了了压缩技技术实现磁磁盘空空间缩减。减。Btree用在高基数(即列的数据用在高基数(即列的数据相异度大),位相异度大),位图用在低基数列。位用在低基数列。位图索引的基本原理是在索索引的基本原理是在索引中使用位引中使用位图而不是列而不是列值。通常在事。
23、通常在事实表和表和维表的表的键之之间有很有很低的集的低的集的势(cardinality),使用位),使用位图索引,存索引,存储更更为有效,有效,与与B*Tree索引比索引比较起来,只需要更少的存起来,只需要更少的存储空空间,这样每次每次读取取可以可以读到更多的到更多的记录,而且与,而且与B*Tree索引相比索引相比,位位图索引将比索引将比较,连接和聚集都接和聚集都变成了位算成了位算术运算运算,大大减少了运行大大减少了运行时间,从而得,从而得到性能上的极大的提升。到性能上的极大的提升。(Oracle数据库设计与实现)Database Design and Implementation Using
24、 Oracle 30/44什么什么时候采用位候采用位图索引索引基数是指某个列可能基数是指某个列可能拥有的不重复数有的不重复数值的个数。比如的个数。比如说在一个中在一个中华人民共和国公民的信息表中,包含着十几人民共和国公民的信息表中,包含着十几亿条的条的记录。但是在。但是在这些些记录中,有几个比中,有几个比较特殊的列,其指包含几个有限的重复数特殊的列,其指包含几个有限的重复数值。如性。如性别这一字段,其就只有男与女两个可能一字段,其就只有男与女两个可能值;如在民族一列内也只有如在民族一列内也只有56个个不重复的不重复的值;如在出身地一列内,中国只有如在出身地一列内,中国只有34个省市自治区。个省
25、市自治区。有有时候用候用户可能需要根据可能需要根据这些列来些列来查询相关的数据。如公司搞活相关的数据。如公司搞活动的的时候,可能需要确候,可能需要确认一下活一下活动有没有涉及到宗教的禁忌,如可能有没有涉及到宗教的禁忌,如可能涉及到回族的禁忌的涉及到回族的禁忌的话,那么就需要,那么就需要查询一下一下员工信息系工信息系统,看看公,看看公司有没有回族的司有没有回族的员工。如公司可能在三八工。如公司可能在三八妇女女节的的时候,会候,会给女女员工工提供一定的福利,提供一定的福利,为此也需要在数据此也需要在数据库中拉出女中拉出女员工的名工的名单,此,此时也也就是根据性就是根据性别这个字段来个字段来查询数据
26、。等等。如果用数据。等等。如果用户查询的列的基数的列的基数非常的小,只是有限的几个固定非常的小,只是有限的几个固定值,如性,如性别、民族、行政区等等。要、民族、行政区等等。要为这些基数些基数值比比较小的列建立索引小的列建立索引时,就需要建立位,就需要建立位图索引。如果一索引。如果一定要定要说一个具体的一个具体的标准的准的话,那么如果基数,那么如果基数值在整个表在整个表记录的的2%以内以内或者字段内容的重复或者字段内容的重复值在在100次以上,次以上,则通通过位位图索引可以起到不索引可以起到不错的的效果。效果。(Oracle数据库设计与实现)Database Design and Impleme
27、ntation Using Oracle 31/44将索引将索引键拆分拆分为前前缀项和后和后缀项在一个索引在一个索引块中,通中,通过后后缀项共享前共享前缀项即可达即可达到到压缩的目的的目的节省磁省磁盘空空间在一个索引在一个索引块中可以存中可以存储更多的更多的键COMPRESS 子句用于子句用于创建建这种索引种索引CREATE INDEX indexname ON tablename(c1,c2,)COMPRESS 1;7、键压缩索引索引(了解了解)(Oracle数据库设计与实现)Database Design and Implementation Using Oracle 32/44分区索引分
28、区索引索引存索引存储在不同的分区中并在不同的分区中并对应不同的表空不同的表空间,与表分区一,与表分区一样分区索引的分区索引的类型型本地索引本地索引本地前缀索引本地前缀索引本地无前缀索引本地无前缀索引全局索引全局索引全局前缀索引全局前缀索引全局无前缀索引全局无前缀索引8、分区索引、分区索引(Oracle数据库设计与实现)Database Design and Implementation Using Oracle 33/44分区索引分区索引CREATE INDEX indexname ON tablename(c1,c2,)GLOBAL/LOCALPARTITION BY RANGE(c2)PA
29、RTITION VALUES LESS THAN(v1)TABLESPACE tb1,PARTITION VALUES LESS THAN(v2)TABLESPACE tb2;本地索引本地索引CREATE INDEX myind ON ord_mast(orderno)LOCAL;分区索引中的分区分区索引中的分区键应引用与基引用与基础表分区相同的行表分区相同的行使用USER_SEGMENTS查看分区索引SELECT segment_name,partition_name,segment_type,tablespace_name FROM user_segments WHERE segment_
30、name=MYIND;(Oracle数据库设计与实现)Database Design and Implementation Using Oracle 34/44全局索引全局索引引用存引用存储在多个基在多个基础分区中的行分区中的行,如果索引是基,如果索引是基于索引列的左前于索引列的左前缀进行分区的,行分区的,则称称该索引是全索引是全局前局前缀索引索引基于多列基于多列进行分区的表行分区的表为例,在第一列上例,在第一列上创建索建索引,称前引,称前缀索引,在第二列上索引,在第二列上创建索引,建索引,则会会显示示错误消息消息示例:示例:参参见P99重建分区索引重建分区索引ALTER INDEX inde
31、x_name REBUILD PARTITION partition_name;只有当索引不是簇索引时,才可以对索引进行范围分区(Oracle数据库设计与实现)Database Design and Implementation Using Oracle 35/44总结2-1同同义词是数据是数据库对象的替象的替换名称名称同同义词隐藏了藏了对象的名称和所有者象的名称和所有者序列生成唯一、序列生成唯一、连续的整数的整数Nextval 和和 Currval 用于用于访问序列序列(Oracle数据库设计与实现)Database Design and Implementation Using Oracle 36/44总结 2-2视图是一种是一种经过定制的表示方式,用于定制的表示方式,用于显示来自一个或多个表的数据示来自一个或多个表的数据索引加快了索引加快了 SQL 语句的句的执行速度行速度在表的多个列上在表的多个列上创建的索引称建的索引称为“组合索合索引引”在索引在索引组织表中,数据表中,数据访问基于主基于主键值