序列

95 阅读1分钟

序列

创建

CREATE SEQUENCE [schema.] 序列名
[INCREMENT BY n]	# 序列连续两个值之间的间隔n,默认为1
[START WITH n]	# 序列起始值n该项省略起始值为1
[MAXVALUE n | NOMAXVALUE]
[MINVALUE n | NOMINVALUE]
[CYCLE | NOCYCLE]	# 表示序列在达到最大值或最小值之后是否继续产生序列值,NOCYLE表示不再产生,NOCYLE是默认选项。
[CACHE n | NOCACHE];	# 表示序列值被服务器预先分配并存储在内存中,NOCACHE表示不预先分配并存储,CACHE 20是默认选项

# MAXVALUE n :序列最大值;
# MINVALUE n:序列最小值;
# NOMINVALUE:指定序列无最小值 
#创建序列test_seq,起始值为10,每次增长 2最大值100最小值9循环序列每次缓存 2,最大值100,最小值9,循环序列,每次缓存 10

# 创建
create sequence test_seq
start with 1
increment by 1
maxvalue 1000
cache 5;

# 使用
insert into student (id,name,sex)
values
(test_seq.nextval,'hanf','男');

select test_seq.currval from dual;

序列属性

CURRVAL:表示序列返回的当前值;

NEXTVAL:表示序列返回的下一个值;

CURRVAL在被引用之前,必须先使用NEXTVAL来产生一个序列值;

可用语句序列名.CURRVAL或序列名.NEXTVAL来访问序列;

使用规则(不能使用):

您可以在下列情况使用NEXTVAL 和CURRVAL:

  • 在视图的SELECT列表中
  • 包含DISTINCT关键字的SELECT语句中
  • 含有GROUP BY, HAVING, ORDER BY子句的SELECT语句中
  • SELECT, DELETE, UPDATE 语句的子查询中
  • 含有DEFAULT表达式的CREATE TABLE、ALTER TABLE 语句中

修改序列

ALTER  SEQUENCE [schema.]sequencename
[INCREMENT BY n]
[MAXVALUE n | NOMAXVALUE]
[MINVALUE n | NOMINVALUE]
[CYCLE | NOCYCLE]
[CACHE n | NOCACHE];

# 修改序列的语法没有start with语句

删除序列

DROP SEQUENCE [schema.]序列名;