您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 国内外标准规范 > Oracle数据库-SQL+PLSQL-Less12-其它的数据库对象
1的主键值。该序列名字为DEPT_NO_SEQ,它的初始值为60,最大值为200,每次递增10,并且不能循环使用这些值。2.从user_sequences视图中查出序列名称、最大值、递增值、何下一个值的信息。3.写一个脚本,往dept10表中插入两行信息,要求使用上面创建的序列来产生部门号,并提示用户输入部门名称和部门地址。执行该脚本。4.在dept10表中的deptno列上创建一个非唯一索引deptno_idx。3什么是序列?–自动产生唯一的数字–是一个可以共享的数据库对象–典型地用于产生数据库表中的主键值–能够节省应用程序的代码–当缓存在内存中时,能够提高存取的效率5语句•定义一个可以自动产生序列值的序列.CREATESEQUENCEsequence[INCREMENTBYn][STARTWITHn][{MAXVALUEn|NOMAXVALUE}][{MINVALUEn|NOMINVALUE}][{CYCLE|NOCYCLE}][{CACHEn|NOCACHE}];6创建一个序列–创建一个名称为DEPT_DEPTNO的序列值,以用于DEPT表.–不要设置CYCLE选项.SQLCREATESEQUENCEdept_deptno2INCREMENTBY13STARTWITH914MAXVALUE1005NOCACHE6NOCYCLE;Sequencecreated.7伪列–NEXTVAL返回下一个可用的序列值.–每访问一次,它将产生一个唯一的新值,即使对不同的用户,该值也是唯一的.–CURRVAL返回当前的序列值.–只有当NEXTVAL被访问之后,CURRVAL伪列才能包含一个值.8序列的使用–向表中插入一个位于SANDIEGO,名为“MARKETING”的部门.–浏览序列DEPT_DEPTNO的当前值.SQLINSERTINTOdept(deptno,dname,loc)2VALUES(dept_deptno.NEXTVAL,3'MARKETING','SANDIEGO');1rowcreated.SQLSELECTdept_deptno.CURRVAL2FROMdual;9使用序列–将序列值缓存在内存中,使得这些值访问起来更快.–如果发生下列情况,可能使得一个表中的序列值之间产生间隔,而不是连续的:•回滚操作产生•系统崩溃•序列值同时也用于其它表–如果一个序列是以NOCACHE选项建立的,那么可以通过查询USER_SEQUENCES表来查看下一个可用的序列值,而不会使序列的当前值增加.10修改一个序列•可以更改序列的增量值、最大值、最小值、循环或者缓存选项。SQLALTERSEQUENCEdept_deptno2INCREMENTBY13MAXVALUE9999994NOCACHE5NOCYCLE;Sequencealtered.11修改序列的指导–必须是序列的拥有者,或者拥有序列的修改权限.–只有将来会用到序列值会受到影响.–只能重建序列,才能更改序列的STARTWITH选项.–序列的修改可能会带来冲突,例如MAXVALUE如果小于当前值就会产生冲突.12删除一个序列–使用DROPSEQUENCE命令来删除一个数据字典中的序列.–一旦序列被删除,那么该序列就不可以访问了.SQLDROPSEQUENCEdept_deptno;Sequencedropped.13索引是什么?–一个数据库模式对象–Oracle利用索引来加快对数据行的访问–依靠索引来快速定位数据,从而减少了磁盘I/O的次数–与使用它的表是相互独立的数据库对象–Oracle服务器自动对索引进行维护和使用14索引是如何创建的?–自动创建:当在创建表时,如果指定了PRIMARYKEY或者UNIQUE约束,那么将自动创建索引.–手动创建:用户可以在某个列上建立非唯一的索引,以加快基于该行的查询.15创建一个索引–创建索引,以提高对表EMP的ENAME列的访问速度.SQLCREATEINDEXemp_ename_idx2ONemp(ename);Indexcreated.CREATEINDEXindexONtable(column[,column]...);在一个列上或者多个列上创建索引.16什么时候创建索引–欲创建索引的列在WHERE子句或者连接条件中频繁使用.–该列所包含的不同值很多.–该列包含大量的空值.–表中的数据行数非常大,而且只有2–4%数据行被查询出来.17什么时候不必创建索引–表是空的.–列在查询条件中不经常使用.–大多数基于该表的查询,所查询出的数据量远多于2–4%行.–表被频繁修改.18确认索引创建结果–USER_INDEXES数据字典视图包含用户创建的索引的名字和它唯一性.–USER_IND_COLUMNS视图包含索引的名字、表名、列名.SQLSELECTic.index_name,ic.column_name,2ic.column_positioncol_pos,ix.uniqueness3FROMuser_indexesix,user_ind_columnsic4WHEREic.index_name=ix.index_name5ANDic.table_name='EMP';19基于函数的索引–基于函数的索引也就是基于表达式的索引.–索引表达式由表的列、常量、SQL函数或者用户自定义函数组成.SQLCREATETABLEtest(col1NUMBER);SQLCREATEINDEXtest_indexontest(col1,col1+10);SQLSELECTcol1+10FROMtest;20删除索引–从数据字典中删除一个索引.–从数据字典中删除EMP_ENAME_IDX索引.–要删除一个索引,必须是索引的拥有者,或者具有DROPANYINDEX的权限.SQLDROPINDEXemp_ename_idx;Indexdropped.SQLDROPINDEXindex;21同义词•通过创建一个同义词(对象的另一个名字)来简化对数据库中对象的存取.–缩短了对象的名字长度.CREATE[PUBLIC]SYNONYMsynonymFORobject;22创建和删除同义词–为视图DEPT_SUM_VU创建一个简短的名字.SQLCREATESYNONYMd_sum2FORdept_sum_vu;SynonymCreated.SQLDROPSYNONYMd_sum;Synonymdropped.–丢弃一个同义词.23的主键值。该序列名字为DEPT_NO_SEQ,它的初始值为60,最大值为200,每次递增10,并且不能循环使用这些值。SQLcreatesequenceDEPT_NO_SEQincrementby10startwith60maxvalue200nocycle;Sequencecreated.2.从user_sequences视图中查出序列名称、最大值、递增值、何下一个值的信息。SQLselectSEQUENCE_NAME,MAX_VALUE,INCREMENT_BY,LAST_NUMBERfromuser_sequenceswhereSEQUENCE_NAME='DEPT_NO_SEQ';SEQUENCE_NAMEMAX_VALUEINCREMENT_BYLAST_NUMBER-----------------------------------------------------DEPT_NO_SEQ2001060练习案例24写一个脚本,往dept10表中插入两行信息,要求使用上面创建的序列来产生部门号,并提示用户输入部门名称和部门地址。执行该脚本。SQLacceptdeptnamepromptinputthedepartmentname:inputthedepartmentname:testSQLacceptlocationpromptinputthedepartmentlocation:inputthedepartmentlocation:testSQLinsertintodepartment(deptno,dname,loc)values(DEPT_NO_SEQ.nextval,'&deptname','&location');old1:insertintodepartment(deptno,dname,loc)values(DEPT_NO_SEQ.nextval,'&deptname','&location')new1:insertintodepartment(deptno,dname,loc)values(DEPT_NO_SEQ.nextval,'test','test')练习案例25。SQLcreateindexdeptno_idxonEMPLOYEE(deptno);Indexcreated.练习案例
本文标题:Oracle数据库-SQL+PLSQL-Less12-其它的数据库对象
链接地址:https://www.777doc.com/doc-7976380 .html