今天是oracle的最后一天,也是冯威老师给我们上课的最后一天,明天就要换老师了,因为我们的课程是分为许多部分的,俗话说:“术业有专攻”,每一个老师都不可能哪一项技术都很牛,所以我们不同的课程安排了不同的老师,让每个老师讲自己擅长的部分,这也是我们传智播客课程上的优势。在跟冯老师的这一段时间里我们相处的十分融洽,冯老师就像是一个大孩子,经常跟我们开玩笑,在放学了以后老师还会跟同学们一起去打篮球,我们之间的没有了学生跟老师的那种隔阂,好像是朋友在一起的感觉,这段时间学到了很多,特别是那些良好的编码习惯和解题思想,以及一些工作中会遇到的问题,真的是受益匪浅。今天上课主要讲解的内容是oracle的视图、序列和优化,oracle的优化时这部分的重点,在许多的公司的面试中都会或多或少涉及到数据库优化的问题,之前从网上看到一篇文章,oracle语句优化的30个规则详解,总结的非常好,说的非常详细,前面我已经对这篇文章进行了转载,今天我总结一下oracle的索引、视图和序列:
索引:
索引时方案(schema)中的一个数据库对象,在 Oracle数据库中用来加速对表的查询
通过使用快速路径访问方法快速定位数据,减少了磁盘的I/O,与表独立存放,Oracle数据库自动维护。
创建索引:
自动: 当在表上定义一个PRIMARY KEY 或者UNIQUE 约束条件时,Oracle数据库自动创建一个对应的唯一索引.
手动: 用户可以创建索引以加速查询,语法如下:.
 CREATE INDEX index ON table (column[, column]...); 可以在一列或者多列创建索引
删除索引:
通过DROP INDEX 命令删掉一个索引.
DROP INDEX index;

为了删除索引,必须拥有索引或者拥有 DROP ANY INDEX 权限.

视图;
视图也就是虚表,实际上视图就是一个命名的查询,用于改变基表数据的显示。可以限制对数据的访问,可以使复杂的查询变的简单,提供了数据的独立性,提供了对相同数据的不同显示.
 创建视图语法:
在CREATE VIEW语句后加入子查询,在子查询中可以加入复杂的SELECT.
CREATE [OR REPLACE] VIEW view
     [(alias[, alias]...)]
     AS subquery
     [WITH READ ONLY];
可以使用SQL*Plus的DESCRIBE命令描述视图结构.
DESCRIBE viewname
在创建完视图后我们在查询数据的时候,不需要再写完全的Select查询语句,只需要简单的写上从视图中查询的语句就可以了
通过设置WITH READ ONLY选项可以禁止对视图执行DML操作,任何对视图执行的DML操作都将导致Oracle 错误.
删除视图
删掉视图不会导致数据的丢失,因为视图是基于数据库的表之上的一个查询定义.
DROP VIEW view_name;
序列
序列(SEQUENCE)是序列号生成器,可以为表中的行自动生成序列号,产生一组等间隔的数值(类型为数字)。其主要的用途是生成表的主键值,可以在插入语句中引用,也可以通过查询检查当前值,或使序列增至下一个值。
创建序列需要CREATE SEQUENCE系统权限。序列的创建语法如下:
CREATE SEQUENCE 序列名
[INCREMENT BY n]
[START WITH n]
[{MAXVALUE/ MINVALUE n|NOMAXVALUE}]
[{CYCLE|NOCYCLE}]
[{CACHE n|NOCACHE}];
INCREMENT BY 用于定义序列的步长,如果省略,则默认为1,如果出现负值,则代表序列的值是按照此步长递减的。
START WITH 定义序列的初始值(即产生的第一个值),默认为1。
MAXVALUE 定义序列生成器能产生的最大值。选项NOMAXVALUE是默认选项,代表没有最大值定义,这时对于递增序列,系统能够产生的最大值是10的27次方;对于递减序列,最大值是-1。
MINVALUE定义序列生成器能产生的最小值。选项NOMAXVALUE是默认选项,代表没有最小值定义,这时对于递减序列,系统能够产生的最小值是10的26次方;对于递增序列,最小值是1。
CYCLE和NOCYCLE 表示当序列生成器的值达到限制值后是否循环。CYCLE代表循环,NOCYCLE代表不循环。如果循环,则当递增序列达到最大值时,循环到最小值;对于递减序列达到最小值时,循环到最大值。如果不循环,达到限制值后,继续产生新值就会发生错误。
CACHE(缓冲)定义存放序列的内存块的大小,默认为20。NOCACHE表示不对序列进行内存缓冲。对序列进行内存缓冲,可以改善序列的性能。
删除序列 语法:
DROP SEQUENCE 序列名;
删除序列的人应该是序列的创建者或拥有DROP ANY SEQUENCE系统权限的用户。序列一旦删除就不能被引用了。
序列的某些部分也可以在使用中进行修改,但不能修改SATRT WITH选项。对序列的修改只影响随后产生的序号,已经产生的序号不变。修改序列的语法:
alter sequence  序列名
increment by 1
minvalue 2
序列的使用
使用CURRVAL和NEXTVAL来引用序列的值。
调用NEXTVAL将生成序列中的下一个序列号,调用时要指出序列名,即用以下方式调用:
序列名.NEXTVAL
CURRVAL用于产生序列的当前值,无论调用多少次都不会产生序列的下一个值。如果序列还没有通过调用NEXTVAL产生过序列的下一个值,先引用CURRVAL没有意义。调用CURRVAL的方法同上,要指出序列名,即用以下方式调用:
序列名.CURRVAL.
查看序列
同过数据字典USER_OBJECTS可以查看用户拥有的序列。
通过数据字典USER_SEQUENCES可以查看序列的设置。