本节内容
数据库其他对象
1.视图
2.索引
3.序列
4.同义词
一、视图
视图:是一张虚拟的表,没有存储空间,是逻辑上的一张表,本身不包含数据。
通过它可以对表里面的数据进行查询和修改。视图基于的表称为基表。
视图的优点:
1.对数据库的访问,因为视图可以有选择性的选取数据库里的一部分。
2.用户通过简单的查询可以从复杂查询中得到结果。
3.维护数据的独立性,试图可从多个表检索数据。
4.对于相同的数据可产生不同的视图
视图分类: 简单视图、复杂视图
1、简单视图只从单表里获取数据,复杂视图从多表;
2、简单视图不包含函数和数据组,复杂视图包含;
3、简单视图可以实现DML操作,复杂视图不可以。
视图的定义关键词:view
语法:
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name [(alias[, alias]...)] AS subquery [WITH CHECK OPTION [CONSTRAINT constraint]] [WITH READ ONLY]
其中:OR REPLACE :若所创建的试图已经存在,ORACLE自动重建该视图;
FORCE:不管基表是否存在ORACLE都会自动创建该视图;
NOFORCE :只有基表都存在ORACLE才会创建该视图:
alias:为视图产生的列定义的别名;
subquery :一条完整的SELECT语句,可以在该语句中定义别名;
WITH CHECK OPTION :插入或修改的数据行必须满足视图定义的约束;
WITH READ ONLY :该视图上不能进行任何DML操作。
创建视图:
--创建视图: 查询出工资大于10000的员工的信息 create or replace view empsal_view as select * from employees where salary>10000;
视图使用DML操作的规则:
可以在简单视图中进行DML操作:
当视图定义中包含以下元素之一时不能使用delete:
组函数
GROUP BY 子句
DISTINCT 关键字
ROWNUM 伪列
当视图定义中包含以下元素之一时不能使用update :
组函数
GROUP BY子句
DISTINCT 关键字
ROWNUM 伪列
列的定义为表达式
当视图定义中包含以下元素之一时不能使用insert :
组函数
GROUP BY 子句
DISTINCT 关键字
ROWNUM 伪列
列的定义为表达式
表中非空的列在视图定义中未包括
删除视图:
删除视图只是删除视图的定义,并不会删除基表的数据
drop view 视图名
什么是临时视图: 临时视图就是嵌套在查询语句中的子查询就是临时视图。临时试图不是数据库对象。
二、索引
索引是数据库中一个对象。他可以加快查询效率。
索引是建立在表上的可选对象;索引的关键在于通过一组排序后的索引键来取代默认的全表扫描检索方式,从 而提高检索效率
索引在逻辑上和物理上都与相关的表和数据无关,当创建或者删除一个索引时,不会影响基本的表;
索引一旦建立,在表上进行DML操作时(例如在执行插入、修改或者删除相关操作时),oracle会自动管理索 引,索引删除,不会对表产生影响
索引对用户是透明的,无论表上是否有索引,sql语句的用法不变
oracle创建主键时会自动在该列上创建索引、如果这个列上有唯一约束也会自动在该列上创建索引。
索引的关键词:index
索引的创建:
create [UNIQUE] | [BITMAP] index index_name on table_name (column1,....)
删除索引:
drop index index_name;
创建索引的原则:
1. 如果有两个或者以上的索引,其中有一个唯一性索引,而其他是非唯一,这种情况下oracle将使用唯一性索引而完全忽略非唯一性索引
2. 至少要包含组合索引的第一列(即如果索引建立在多个列上,只有它的第一个列被where子句引用时,优化器才会使用该索引)
3. 小表不要简历索引
4. 对于基数大的列适合建立B树索引,对于基数小的列适合简历位图索引
5. 列中有很多空值,但经常查询该列上非空记录时应该建立索引
6. 经常进行连接查询的列应该创建索引
7. 使用create index时要将最常查询的列放在最前面
8. LONG(可变长字符串数据,最长2G)和LONG RAW(可变长二进制数据,最长2G)列不能创建索引
9.限制表中索引的数量(创建索引耗费时间,并且随数据量的增大而增大;索引会占用物理空间;当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度)
三、序列
Oracle中的序列是给主键提供唯一的数值的。因为Oracle中没有自增
创建序列:
CREATE SEQUENCE sequence [INCREMENT BY n] [START WITH n] [{MAXVALUE n | NOMAXVALUE}] [{MINVALUE n | NOMINVALUE}] [{CYCLE | NOCYCLE}] [{CACHE n | NOCACHE}]
sequence :序列名
INCREMENT BY n :自增长幅度
START WITH n :开始的数值
MAXVALUE n: 最大值
NOMAXVALUE:没有最大值
MINVALUE n: 最小值
NOMINVALUE:没有最小值
CYCLE :循环 NOCYCLE:不循环
CACHE n: 缓存n个数值
NOCACHE :不缓存
序列中有2个值: 当前值:CURRVAL 下一个值:NEXTVAL
序列首次使用时先使用NEXTVAL再使用CURRVAL
序列所有用户都可以使用:所有用户共享,序列使用后,值不会回到开始,想重写使用,则需要重新创建序列。
修改序列:
修改序列的增量, 最大值, 最小值, 循环选项, 或是否装入内存
ALTER SEQUENCE dept_deptid_seq
INCREMENT BY 20
MAXVALUE 999999
NOCACHE
NOCYCLE;
必须是序列的拥有者或对序列有 ALTER 权限
只有将来的序列值会被改变
改变序列的初始值只能通过删除序列之后重建序列的方法实现
删除序列:
使用DROP SEQUENCE 语句删除序列
删除之后,序列不能再次被引用
DROP SEQUENCE sequnce;
四、同义词
同义词:给数据中的对象起一个别名是永久性的。只要不删除同义词就有效。
使用同义词访问相同的对象:
方便访问其它用户的对象
缩短对象名字的长度
创建同义词:
CREATE [PUBLIC] SYNONYM synonym FOR object;
删除同义词:
drop SYNONYM synonym