oracle中的视图,序列和索引

oracle中的视图
视图: 直观上是一张表,不占表空间的大小,只能用来查询
不能进行其他操作
视图的作用是:
1.控制数据访问
2.简化查询
3.数据独立性
4.避免重复访问相同的数据
创建视图:
create view 视图名 as 查询语句;
例如:
create view e
as select job, sal
   from emp
   where empno= 7369;
在现在视图中的列时可以直接定义别名
例如:
create view e
as select job J, sal S
   from emp
   where empno= 7369;
查询视图: select * from e;
修改视图: 使用create or replace view 子句修改视图;
create or replace view e(work,money)
as select job , sal
   from emp
   where empno= 7369;
屏蔽dml操作_只读视图
create or replace view e(work,money)
as select job , sal
   from emp
   where empno= 7369
with read only;
删除视图只是删除视图的定义,并不会删除基表的数据
drop view 视图名;
例如:
drop view e;

视图中的DML规定:
1.当视图定义中包含以下元素之一时不能使用delecte
a.组函数
b.group by 子句
c.distinct关键字
d.rownum伪列
2.当视图定义中包含以下元素之一时不能使用update :组

函数,GROUP BY子句,
DISTINCT 关键字,
ROWNUM 伪列
,列的定义为表达式
3.当视图定义中包含以下元素之一时不能使用insert :
组函数,
GROUP BY 子句,
DISTINCT 关键字,
ROWNUM 伪列,

列的定义为表达式,

表中非空的列在视图定义中未包括.


**********************

序列:自动提供唯一的数值;共享对象;

主要用于提供主键值;

代替应用代码;
将序列值装入内存可以提高访问效率;


定义序列的语句:

create sequence 序列名;
例如:
CREATE SEQUENCE dept_deptid_seq                 
INCREMENT BY 10   --自增加10
START WITH 120     --初始值为120
MAXVALUE 9999     --最大值
NOCACHE          --不缓存
NOCYCLE;   --不循环
创建序列:
创建序列 DEPT_DEPTID_SEQ为表 DEPARTMENTS 提供主键
CREATE SEQUENCE dept_deptid_seq

INCREMENT BY 10
 
START WITH 120
   
MAXVALUE 9999
 
NOCACHE
   
NOCYCLE;
查询序列:查询数据字典视图 USER_SEQUENCES获取序列定义信息
SELECT    sequence_name, min_value, max_value,
    

increment_by, last_number
FROM    user_sequences;
如果指定NOCACHE 选项,则列LAST_NUMBER 显示序列中下一个有效的值
NEXTVAL 和 CURRVAL 伪列:
NEXTVAL 返回序列中下一个有效的值,任何用户都可以引用;
CURRVAL 中存放序列的当前值;
NEXTVAL 应在 CURRVAL

之前指定 ,二者应同时有效.
序列应用举例:
INSERT INTO departments(department_id,
            

department_name, location_id)
VALUES      

(dept_deptid_seq.NEXTVAL,
            'Support',

2500);
序列DEPT_DEPTID_SEQ 的当前值
select dept_deptid_seq.currval
from dual;
序列使用时:
序列在下列情况下出现裂缝:

回滚;

系统异常;

多个表同时使用同一序列;



如果不讲序列的值装入内存(NOCACHE), 可使用表USER_SEQUENCES 查看序列当前的有效值.
修改序列:

修改序列的增量, 最大值, 最小值, 循环选项, 或是否装入内存

ALTER SEQUENCE dept_deptid_seq

       
  INCREMENT BY 20
             
  MAXVALUE 999999
              
  NOCACHE
              
  NOCYCLE;
修改序列的注意事项:
必须是序列的拥有者或对序列有 ALTER 权限
只有将来的序列值会被改变

改变序列的初始值只能通过删除序列之后重建序列的方法

实现

其它的一些限制
删除序列:
使用DROP SEQUENCE 语句删除序列

删除之后,序列不能再次被引用
DROP SEQUENCE dept_deptid_seq;

***************************
索引:
一种数据库对象
;通过指针加速 Oracle 服务器的查

询速度;
通过快速定位数据的方法,减少磁盘 I/O
;索引与

表相互独立
;Oracle 服务器自动使用和维护索引
创建索引:
自动创建: 在定义 PRIMARY KEY 或 UNIQUE(唯一性) 约束

后系统自动在相应的列上创建唯一性索引

手动创建: 用户可以在其它列上创建非唯一的索引,以加

速查询
创建索引语法:
create index 索引名
on table 列名;
例如在表 EMPLOYEES的列 LAST_NAME 上创建索引
create index emp_last_name_idx
on table employees(last_name);
什么时候创建索引:

1.列值基数比较高(重复率比较低)

2.不以空值做条件

3.列经常出现在条件子句中4.表很大5.经常做查询操作,

而不是DML操作

6.满足条件的数据不超过总记录数的15%

7.模糊查询不走索引,如果模糊查询想使用索引,必须用

全文检索技术
查询索引:
可以使用数据字典视图(当Oracle数据库系统启动后,数据

字典总是可用,它驻留在SYSTEM表空间中。数据字典包含

视图集,在许多情况下,每一视图集有三种视图包含有类

似信息,彼此以前缀相区别,前缀为USER、ALL和DBA。)

USER_INDEXES 和USER_IND_COLUMNS 查看索引的信息
SELECT    ic.index_name, ic.column_name,
    

ic.column_position col_pos,ix.uniqueness
FROM    

user_indexes ix, user_ind_columns ic
WHERE    

ic.index_name = ix.index_name;
基于函数的索引:
基于函数的索引是一个基于表达式的索引
索引表达式由列, 常量, SQL 函数和用户自定义的函数
CREATE INDEX upper_dept_name_idx
ON departments

(UPPER(department_name));
-----
SELECT *
FROM   departments
WHERE  UPPER

(department_name) = 'SALES';
删除索引(只有索引的拥有者或拥有DROP ANY INDEX权限的

用户才可以删除索引):
drop index 索引名;
例如:
DROP INDEX upper_last_name_idx;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值