北大青鸟oracle学习资料TP312398.pptx
第三章第三章第三章第三章 数据数据数据数据库对库对象象象象本章任务本章任务使用使用Oracle创建各种数据库对象创建各种数据库对象理解和使用序列理解和使用序列理解和创建视图理解和创建视图理解和创建索引理解和创建索引本章目标本章目标数据库对象简介数据库对象简介Oracle 数据库对象又称模式对象数据库对象又称模式对象数据库对象是逻辑结构的集合,最基本的数据库对象是表数据库对象是逻辑结构的集合,最基本的数据库对象是表其他数据库对象包括其他数据库对象包括数据库对象数据库对象 序列视图索引序列序列序列是用于生成唯一、连续序号的对象序列是用于生成唯一、连续序号的对象序列可以是升序的,也可以是降序的序列可以是升序的,也可以是降序的使用使用CREATE SEQUENCE语句创建序列语句创建序列SQL CREATE SEQUENCE toys_seqSTART WITH 10INCREMENT BY 10MAXVALUE 2000MINVALUE 10NOCYCLECACHE 10;指定内存中预先分配的序号数 访问序列访问序列通过序列的伪列来访问序列的值通过序列的伪列来访问序列的值NEXTVAL 返回序列的下一个值返回序列的下一个值CURRVAL 返回序列的当前值返回序列的当前值SQL INSERT INTO toys(toyid,toyname,toyprice)VALUES(toys_seq.NEXTVAL,TWENTY,25);SQL INSERT INTO toys(toyid,toyname,toyprice)VALUES(toys_seq.NEXTVAL,MAGIC PENCIL,75);指定序列的下一个值SQL SELECT toys_seq.CURRVAL FROM dual;检索序列的当前值更改和删除序列更改和删除序列 SQL ALTER SEQUENCE toys_seq MAXVALUE 5000 CYCLE;使用ALTER SEQUENCE语句修改序列,不能更改序列的START WITH参数使用DROP SEQUENCE语句删除序列SQL DROP SEQUENCE toys_seq;视图视图视图以经过定制的方式显示来自一个或多个表的数据视图以经过定制的方式显示来自一个或多个表的数据视图可以视为视图可以视为“虚拟表虚拟表”或或“存储的查询存储的查询”创建视图所依据的表称为创建视图所依据的表称为“基表基表”视图的优点有:视图的优点有:提供了另外一种级别的表安全性提供了另外一种级别的表安全性隐藏的数据的复杂性隐藏的数据的复杂性简化的用户的简化的用户的SQL命令命令隔离基表结构的改变隔离基表结构的改变通过重命名列,从另一个角度提供数据通过重命名列,从另一个角度提供数据创建视图创建视图3-1 studnostudnamestudmarkssubnostudcaste1Rob452Open2James334SC3Jesica405OpenStud_detailsStud_viewstudnostudnamesubno1Rob22James43Jesica5CREATE VIEW stud_viewAS SELECT studno,studname,subnoFROM Stud_details;创建视图创建视图 3-2创建视图的语法:创建视图的语法:CREATE OR REPLACE FORCE VIEW view_name(alias,alias.)AS select_statement WITH CHECK OPTION WITH READ ONLY;创建视图创建视图 3-3 使用使用 WITH CHECK OPTION 选项创建视图选项创建视图CREATE OR REPLACE VIEW pause_view ASSELECT*FROM order_master WHERE ostatus=pWITH CHECK OPTION CONSTRAINT chk_pv;使用使用 ORDER BY 子句创建视图子句创建视图CREATE OR REPLACE VIEW ord_ven ASSELECT*FROM vendor_master ORDER BY venname;创建带有错误的视图创建带有错误的视图CREATE FORCE VIEW ven ASSELECT*FROM venmaster;联接视图联接视图 2-1 StudnoStudnameSubmrksSubno1Rob4522James3343Jesica404SubnoSubname2English4Maths5ScienceStud_detailsSub_detailsCREATE VIEW Stud_sub_view ASSELECT Studno,Studname,Submrks,SubnameFROM Stud_details,Sub_Details WHERE Stud_details.Subno=Sub_details.Subno;Stud_sub_view联接视图StudnoStudnameSubmrksSubname1Rob45English2James33Maths3Jesica40Maths联接视图联接视图 2-2 创建外联接视图CREATE VIEW ven_ord_outj_view ASSELECT vm.vencode,venname,orderno,odate,ostatusFROM vendor_master vm,order_master omWHERE vm.vencode=om.vencode(+);SELECT vm.vencode,venname,orderno,odate,ostatusFROM vendor_master vm LEFT OUTER JOIN order_master omON vm.vencode=om.vencode;视图上的视图上的DML语句语句在视图上也可以使用修改数据的在视图上也可以使用修改数据的DML语句,如语句,如INSERT、UPDATE和和DELETE视图上的视图上的DML语句有如下限制:语句有如下限制:只能修改一个底层的基表只能修改一个底层的基表如果修改违反了基表的约束条件,则无法更新视图如果修改违反了基表的约束条件,则无法更新视图如果视图包含连接操作符、如果视图包含连接操作符、DISTINCT 关键字、集合操作符、聚关键字、集合操作符、聚合函数或合函数或 GROUP BY 子句,则将无法更新视图子句,则将无法更新视图如果视图包含伪列或表达式,则将无法更新视图如果视图包含伪列或表达式,则将无法更新视图索引索引 3-1索引是与表相关的一个可选结构索引是与表相关的一个可选结构用以提高用以提高 SQL 语句执行的性能语句执行的性能减少磁盘减少磁盘I/O使用使用 CREATE INDEX 语句创建索引语句创建索引在逻辑上和物理上都独立于表的数据在逻辑上和物理上都独立于表的数据Oracle 自动维护索引自动维护索引索引索引 3-2索引有各种类型,除了标准索引外,还有一些特殊类型的索引有各种类型,除了标准索引外,还有一些特殊类型的索引:索引:索引的类型基于函数的索引反向键索引位图索引唯一索引组合索引索引索引 3-3 SQL CREATE INDEX item_index ON itemfile(itemcode)TABLESPACE tablespace_name;创建标准索引重建索引SQL ALTER INDEX item_index REBUILD;删除索引SQL DROP INDEX item_index;唯一索引唯一索引唯一索引确保在定义索引的列中没有重复值唯一索引确保在定义索引的列中没有重复值Oracle 自动在表的主键列上创建唯一索引自动在表的主键列上创建唯一索引使用使用CREATE UNIQUE INDEX语句创建唯一索引语句创建唯一索引SQL CREATE UNIQUE INDEX item_index ON itemfile(itemcode);组合索引组合索引组合索引是在表的多个列上创建的索引组合索引是在表的多个列上创建的索引索引中列的顺序是任意的索引中列的顺序是任意的如果如果 SQL 语句的语句的 WHERE 子句中引用了组合索引的所有子句中引用了组合索引的所有列或大多数列,则可以提高检索速度列或大多数列,则可以提高检索速度SQL CREATE INDEX comp_index ON itemfile(p_category,itemrate);反向键索引反向键索引反向键索引反转索引列键值的每个字节反向键索引反转索引列键值的每个字节通常建立在值是连续增长的列上,使数据均匀地分布在整通常建立在值是连续增长的列上,使数据均匀地分布在整个索引上个索引上创建索引时使用创建索引时使用REVERSE关键字关键字SQL CREATE INDEX rev_index ON itemfile(itemcode)REVERSE;SQL ALTER INDEX rev_index REBUID NOREVERSE;位图索引位图索引位图索引适合创建在低基数列上位图索引适合创建在低基数列上位图索引不直接存储位图索引不直接存储ROWID,而是存储字节位到,而是存储字节位到ROWID的映射的映射减少响应时间减少响应时间节省空间占用节省空间占用SQL CREATE BITMAP INDEX bit_index ON order_master(orderno);基于函数的索引基于函数的索引基于一个或多个列上的函数或表达式创建的索引基于一个或多个列上的函数或表达式创建的索引表达式中不能出现聚合函数表达式中不能出现聚合函数不能在不能在LOB类型的列上创建类型的列上创建创建时必须具有创建时必须具有 QUERY REWRITE 权限权限SQL CREATE INDEX lowercase_idx ON toys(LOWER(toyname);SQL SELECT toyid FROM toys WHERE LOWER(toyname)=doll;获取索引的信息获取索引的信息与索引有关的数据字典视图有:与索引有关的数据字典视图有:只能修改一个底层的基表只能修改一个底层的基表USER_INDEXES 用户创建的索引的信息用户创建的索引的信息USER_IND_PARTITIONS 用户创建的分区索引的信息用户创建的分区索引的信息USER_IND_COLUMNS 与索引相关的表列的信息与索引相关的表列的信息SQL SELECT INDEX_NAME,TABLE_NAME,COLUMN_NAME FROM USER_IND_COLUMNS ORDER BY INDEX_NAME,COLUMN_POSITION;总结总结序列用于生成唯一、连续的序号序列用于生成唯一、连续的序号视图是基于一个或多个表的虚拟表视图是基于一个或多个表的虚拟表索引是与表相关的一个可选结构,用于提高索引是与表相关的一个可选结构,用于提高 SQL 语句执语句执行的性能行的性能索引类型有标准索引、唯一索引、反向键索引、位图索引索引类型有标准索引、唯一索引、反向键索引、位图索引和基于函数的索引和基于函数的索引