Oracle数据库对象—序列、索引、视图、同义词
1.序列
什么是序列?
序列是Oracle里面的对象,用来生成一个连续有规律的数值,常用来设置主键的值
创建序列的基本语法:
CREATE SEQUENCE sequence_name --sequence_name序列的名字
[START WITH start_num] --start_num数值,表示序列起始值
[INCREMENT BY increment_num] --increment_num序列的增长值
[ { MAXVALUE maximum_num | NOMAXVALUE } ] --设置序列的最大值,
[ { MINVALUE minimum_num | NOMINVALUE } ] --设置序列的最小值
[ { CYCLE | NOCYCLE } ] --序列达到最大值之后是否重新生成
[ { CACHE cache_num | NOCACHE } ] --是否缓存序列
[ { ORDER | NOORDER } ]; --序列是否是有序的
/**其中带中括号的都是可选内容,一般采用默认值就可以**/
- 创建序列:
--创建一个简单的序列
CREATE SEQUENCE seq1 ; /**创建一个名为seq1的序列**/
--创建序列,指定参数
CREATE SEQUENCE seq1 START WITH 1 INCREMENT BY 2 ; /**序列名为seq1,起始值为1,递增量为2**/
- 序列的使用:
--序列名.nextval 获取序列的下一个值
SELECT seq1.nextval FROM dual;
--序列名.currval 获取序列当前的值(必须要初始化序列,也就是必须要执行过序列的nextval属性)
SELECT seq1.currval FROM dual;
--查看序列
SELECT * FROM user_sequences WHERE sequence_name=upper('seq1')
/**upper是Oracle数据库中转大写的函数,因为Oracle数据库中字段名和表名都以大写形式存储,所以需要转大写后比较**/
--序列的修改
ALTER SEQUENCE seq1 INCREMENT BY 1
--使用序列填充主键
INSERT INTO seqtab(id,name) VALUES(seq1.nextval,'aaa')
--删除序列
DROP SEQUENCE seq1;
2.索引
- 什么是索引?
索引是与表相关联的可选对象,类似于字典里的目录,使用索引主要是为了提高查询的效率
- 如何使用索引?
虽然索引可以提高查询效率,但并不是什么情况下都适合创建索引的。
使用索引:1、经常需要搜索的列 2、主键列 3、连接查询的条件列 4、排序的列 5、where条件的列
不使用索引:1、查询中很少使用的列 2、很少值 3、blob数据 4、修改性能>查询性能
索引的优点 :提高查询的效率
索引的缺点 :1、降低增删改的效率(因为每次增删改数据时都需要维护索引,就像字典中增删改字的时候就需要更新目录一样)
2、增加存储的物理空间(索引也是需要一定空间来存储的)
注意:索引不一定能提高查询效率,某些情况下创建索引可能还会降低查询效率,比如当一个表的数据很少的时候,使用索引的话要先去索引中查询,然后去表中查询,这可能会比直接查询还要慢,所以要根据实际情况决定是否需要创建索引。
- 索引的使用:
--创建B-Tree索引(适合数据重复度低的字段)语法:
CREATE [UNIQUE] [BITMAP] INDEX index_name ON
table_name(column_name[, column_name ...])
--创建索引
create index id_indextab_id on indextab(id);
--创建唯一索引(列的值必须是唯一的)
--创建主键的时候,会自动的增加唯一索引
create unique index id_index_temp_name on index_temp(name);
--创建函数索引
--查询的时候重复使用某个函数进行查询,可以创建针对于该函数的一个函数索引
create index id_indextab_name on indextab(lower(name));
--查看索引信息
select * from user_indexes where table_name=upper('indextab'); /**查看整个表的索引信息**/
select * from user_ind_columns where table_name=upper('indextab'); /**查看具体列的索引信息**/
--删除索引
drop index id_indextab_name;
--创建位图索引[BITMAP ](列的基数很少,重复值很多,数据不会被经常更新)
create bitmap index in_stu_sex on stu(sex);
3.视图
- 什么是视图?
视图是基于已知的一张或多张表的查询结果,等于表查询,不存在真实的数据,数据来源于数据库中实际的表;使用视图其实是为了简化查询语句,将复杂的查询封装成一个视图,然后查询的时候直接使用视图作为查询的对象就可以。
视图一般是用来查询的,虽然增删改也可以用视图,但不建议这么做,这里也不演示视图的增删改。
- 创建视图的语法:
CREATE [OR REPLACE] [{FORCE | NOFORCE}] VIEW view_name
[(alias_name[, alias_name ...])] AS subquery
[WITH {CHECK OPTION | READ ONLY} CONSTRAINT constraint_name];
--------OR REPLACE 覆盖已经存在的视图
--------{FORCE | NOFORCE}视图查询的表如果不存在,是否强制创建视图
--------view_name 视图的名字
--------subquery 一个查询语句
--------WITH {CHECK OPTION | READ ONLY} CONSTRAINT constraint_name 是的约束
- 视图的使用:
--创建一个简单的视图
create or replace view v_stu as select id,name from stu ;
--创建有条件的视图
create or replace view v_stu as select * from stu a left join class b on a.classid = b.id ;
/**这里创建的视图其实就是一个联表查询的结果,这种视图是经常使用的**/
--使用视图
select * from v_stu ;
/**查询结果等同于 select * from stu a left join class b on a.classid = b.id ; **/
/**可以看出,创建视图后,对于复杂查询时的操作就比较简单了,只是简化了查询语句,但并不会提高查询效率**/
--查看视图定义
select * from 视图名字;
--删除视图
drop view 视图名字;
4.同义词
什么是同义词?
同义词就是给表、视图取的别名
创建同义词的语法
CREATE SYNONYM 别名 for 原名称(表/视图)
- 同义词的使用
--创建一个同义词
create synonym stu for student; /**给student 取了一个stu的新的名字**/
--使用同义词
select * from stu; -- /**等同于select * from stu**/