目录
4、查询序列:查询数据字典视图user_sequences获取序列定义信息。
6、修改序列:alter sequence(注意:序列的初始值不能修改)
一、Oracle的数据库对象—序列
1、什么是序列?
一种用于自动生成唯一数字的数据库对象。主要用于提供主键值。
2、创建序列:
create sequence deptno_seq
start with 50
increment by 10
maxvalue 70
cache 3;
3、使用序列
必须通过伪列nextval和currval来引用序列。(nextval用于引用返回下一个序列值,currval用于引用返回当前序列值。)
create table deptnew
as
select * from dept;
insert into deptnew(deptno,dname,loc)values(deptno_seq.nextval,'test_dname','text_loc');
select * from deptnew;
select deptno_seq.currval from dual;
4、查询序列:查询数据字典视图user_sequences获取序列定义信息。
select sequence_name,min_value,max_value,increment_by,cycle_flag,cache_size,last_number
from user_sequences;
5、注意事项:
- 如果指定cache值,可以提高访问效率,但使用cache也会出现跳号的可能。(序列不连续)
- 序列再下列情况下会出现序列缺口(裂缝):
- 回滚
- 系统异常
- 多个表同时使用同一序列
6、修改序列:alter sequence(注意:序列的初始值不能修改)
alter sequence deptno_seq
maxvalue 90;
7、删除序列:drop sequence
drop sequence deptno_seq;
二、Oracle的数据库对象—索引
1、什么是索引?
索引是为了加速对表中数据行的检索而创建的一种存储结构。
2、索引的分类:
- 按索引列的个数:
- 单列索引:基于单个列建立的索引。
- 复合索引:基于两列或多列建立的索引。
- 按索引列值的唯一性:
- 唯一索引:索引的列值不能重复。(当建立主键约束或唯一约束的时候,会自动的在相应的列上建立唯一索引)
- 非唯一索引:索引的列值可以重复。
3、创建索引:
在一个或多个列上创建索引:
--创建单列索引
create index idx_name on emp(ename);
--创建复合索引
create index idx_deptno_job on emp(deptno,job);
--创建唯一索引
create unique index idx_dname on dept(dname);
--创建非唯一索引
create index idx_job on emp(job);
4、什么时候可以创建索引?什么时候不能创建索引?
以下情况可以创建索引:
- where子句经常引用的表列上。
- 为了提高多表连接的性能,应该在连接列上建立索引。
- 经常排序的列上创建索引,可以加快数据排序的速度。
下列情况不要创建索引:
- 表很小
- 列不经常作为连接条件或出现在where子句中
- 表经常更新
5、查询索引
可以使用数据字典视图user_indexes和user_ind_columns查看索引的信息。
select uic.index_name, uic.column_name, uic.column_position, ui.uniqueness
from user_indexes ui, user_ind_columns uic
where uic.index_name = ui.index_name and ui.table_name='EMP';
6、删除索引
drop index idx_dname;
三、Oracle的数据库对象—同义词
1、什么是同义词?
同义词是数据库方案对象的一个别名。
- 方案对象:表、索引、视图、触发器、序列、同义词、存储过程等。
- 非方案对象:表空间、用于、角色等。
2、同义词的作用
- 简化对象访问。
- 提供对象访问的安全性:多用户协同开发中,可以通过同义词屏蔽对象的名字及其持有者。
3、同义词的分类
- 公共同义词:是指数据库中所有的用户都可以使用。(公共同义词往往用来标识一些比较普通的数据库对象,这些对象往往需要引用)
- 私有同义词:只能被创建它的用户所拥有,其他用户在引用时必须带有方案名。
4、创建同义词
--创建同义词的用户必须要有创建同义词的权限
grant create public synonym to scott;
grant create synonym to scott;
--创建公共同义词
create public synonym dn for scott.deptnew;
--使用同义词
select * from dn;
--创建私有同义词
create synonym en for scott.empnew;
select * from en;
--在(其它)用户system下访问私有同义词,必须带上方案名;公共同义词可以直接访问
select * from scott.en;
select * from dn;
6、查看同义词
Oracle对下列数据字典视图提供的同义词:
当建立同义词时,Oracle会将同义词的信息存放到数据字典中。通过查询数据字典视图user_synonyms,可以显示当前用户所有同义词的详细信息。
--查看私有同义词
select synonym_name,table_owner,table_name
from syn
where synonym_name = 'EN';
--查看公共同义词
select synonym_name,table_owner,table_name
from all_synonyms
where synonym_name = 'DN';
7、删除同义词
--删除公共同义词(必须具有删除公共同义词的权限)
grant drop public synonym to scott;--system用户下
drop public synonym dn;
--删除私有同义词(可以直接删除)
drop synonym en;