序列

简介

  1. 序列是oracle用于提供一系列唯一的数字序列的对象。序列会自动生成顺序递增的序列号,以实现自动提供唯一的主键值。

  2. 优点

  • 可以在多用户并发环境中使用,分别为所有用户提供唯一的序列而不产生关联。
  • 与视图等一样,不占表空间,只是在数据字典中保存其定义。

创建


create sequence sequence_name
[start with n]
[increment by step]
[minvalue n| nominvalue]
[maxvalue n|nomaxvalue]
[cache n | nocache]
[cycle | nocycle ]
[order | noorder]

  1. 解析

cache 决定是否生成序列号预分配,并存储在内存中
cycle 当带到最大值决定是否重新开始或者从最大致开始倒着开始,nocycle将导致最大值时再获取下一个序列会报错。
order 有序生成序列 noorder 只保证序列的没一个数字唯一性但不保证有序

使用序列

sequence_name. nextval 返回下一个序列号
sequence_name. currval 返回当前序列号
select sequence_name.nextval from dual.
注意:首次使用序列必须先使用nextval(与迭代器一样)。

修改序列

注意事项:

  1. 删除序列必须是序列的拥有者或对序列有 ALTER any sequence权限

  2. 只有将来的序列值会被改变

  3. 改变序列的初始值(start with)只能通过删除序列之后重建序列的方法实现,其他都能修改


alter sequence sequence_name
maxvalue newvalue
minvalue newvalue
increment by newvalue
...

查看序列

desc user_sequences;

名称            空值?      类型            
------------- -------- -------------
SEQUENCE_NAME NOT NULL VARCHAR2(128)
MIN_VALUE NUMBER
MAX_VALUE NUMBER
INCREMENT_BY NOT NULL NUMBER
CYCLE_FLAG VARCHAR2(1)
ORDER_FLAG VARCHAR2(1)
CACHE_SIZE NOT NULL NUMBER
LAST_NUMBER NOT NULL NUMBER --保存最新值
SCALE_FLAG VARCHAR2(1)
EXTEND_FLAG VARCHAR2(1)
SESSION_FLAG VARCHAR2(1)
KEEP_VALUE VARCHAR2(1)