Oracle 同义词Synonym和序列Sequence
- Synonym 它是用来简化用户对其它数据对象(表、函数、存储过程、视图等)的命名引用
-- 创建同义词对象
create synonym emp for scott.emp;
-- 等同于select * from scott.emp;
select * from emp;
同义词是用户自己的数据对象,不能和已有的表、视图、函数等数据对象重名!
-- 查看已有的同义词
select * from user_synonyms;
-- 删除同义词
drop synonym emp;
- Sequence 它是一个数据对象,用于存储和定义自增值
create sequence seq_student;
-- 查询并消耗了序列中的下一个自增值
select seq_student.nextval from dual;
注意:不要使用nextval来查看下一个自增序列值,因为查看后,当你调用insert时,nextval值又会递增!
select seq_student.currval from dual;
-- 注意:创建完序列后,currval无效(要先nextval执行一次)
-- 指定从1000开始每次递增2
create sequence seq_student
start with 1000
increment by 2;
循环序列(从最小到最大值之间循环自增)
肯定不适用于做主键!!!
create sequence seq_student
maxvalue 1000
cache 50
-- 如果没有设置缓冲,那么每次请求序列时,都会查询序列对象的下一个值
-- 如果设置缓冲,那么数据库会一次性预先分配指定数量的序列值,避免频繁的查询序列对象(优化执行)
-- 从缓冲/内存中读取预先分配的序列肯定要比查数据库来的快
cycle;
删除序列
drop sequence seq_student;
查看序列数据字典
select * from user_sequences where sequence_name = 'SEQ_STUDENT';
修改序列
alter sequence seq_student
maxvalue 10000 -- 因为没有指定cycle,因此一旦超过maxvalue报错
increment by 2;
select seq_student.nextval, seq_student.nextval, seq_student.nextval from dual;
-- 在同一个select语句中,多次调用nextval都是相同的值!
序列可以递减
create sequence seq_test maxvalue 1000 increment by -1;
select seq_test.nextval from dual;