ORACLE日常-序列

一、序列的概念:在oracle中就是一个对象,这个对象用来提供一个有序的数据列,这个有序数据列的值都不会重复。

1.序列可以自动生成唯一值;

2.是可以可以被共享的对象;

3.典型的被生成主键值的一个对象;

4.可以被替代的应用程序代码;

5.当sequence值存放在缓存中的时候可以提高访问效率。

二、创建序列的语法:

CREATE SEQUENCE name
[INCREMENT BY n]
[START WITH n]              
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE n | NOCACHE}]

参数值解析:

1.increment by n:表明值每次增长n(步长)

2.start with n: 从n开始

3.{MAXVALUE n | NOMAXVALUE}: 设置最大值

4.{MINVALUE n | NOMINVALUE}: 设置最小值,start with不能小于最小值。

5.CYCLE | NOCYCLE          : 是否循环,建议不使用

6.CACHE n | NOCACHE    : 是否启用缓存。

例如:

create sequence emp_id_seq
start with 100    //从100开始
increment by 1   //每次增长1
nomaxvalue       //没有最大值
nominvalue        //没有最小值
nocycle              //没有循环
nocache;           //不缓存

可以通过数据字典user_sequences来查看当前用户拥有的序列信息;

select sequence_name,min_value,max_value,last_number
from user_sequences
where sequence_name = 'EMP_ID_SEQ';

序列的属性:

1.nextval 返回下一个可用的序列值;

即使被不同的用户调用,每次也返回一个唯一的值;

select emp_id_seq.nextval from dual;

2.currval获取序列当前的值;

在currval调用之前,必须保证nextval已经获取过一次值。

select emp_id_seq.currval from dual;

3.缓存:使用缓存可以提高sequence的访问效率

三、修改序列:

ALTER SEQUENCE name
[INCREMENT BY n]      
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE n | NOCACHE}]

注意:

1.用户必须是序列的拥有者,或者有修改序列的权限;

2.修改后的序列,只能对之后的值起作用;

3.不能修改start with,如果想修改序列,只能删了重新建。

四、删除序列:

drop sequence seq_name;

例如:

drop sequence emp_id_seq;

参考内容:https://www.cnblogs.com/yzqm666/p/5886914.html

原文地址:https://www.cnblogs.com/hjwq/p/9378750.html