oracle文档:​​https://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_6015.htm#SQLRF01314​

一、序列的特点:

1。 可以为表中的记录自动产生唯一序号;
2。 由用户创建并且可以被多个用户共享;
3。典型应用是生成主键值,用于标识记录的唯一性;
4。允许同时生成多个序列号,而每一个序列号是唯一的。
5。使用缓存可以加速序列的访问速度。


二、创建序列:

CREATE SEQUENCE [ schema. ] sequence
[ { INCREMENT BY | START WITH } integer
| { MAXVALUE integer | NOMAXVALUE }
| { MINVALUE integer | NOMINVALUE }
| { CYCLE | NOCYCLE }
| { CACHE integer | NOCACHE }
| { ORDER | NOORDER }
]…

START WITH:设置序列初始值,默认值为1。

INCREMENT BY:设置相邻两个元素之间的差值,默认为 1。

NOMAXVALUE:默认情况下,递增序列的最大值为10^28 - 1

NOMINVALUE:最大值:-1, 最小值为 -(10^27 - 1)

【Oracle学习】之 序列(Sequence)_sequence


三、序列的使用:

序列具有CURRVAL和NEXTVAL两个伪列。(均返回NUMBER类型)

①CURRVAL:返回序列的当前值

②NEXTVAL:在序列中产生新值并返回此值

++++以下语句可以使用序列的NEXTVAL和CURRVAL:+++++

①SELECT语句的目标列中;

②INSERT:语句的子查询的目标列中;

③INSERT:语句的VALUES子句中;

④UPDATE:语句的SET子句中。

++++以下语句不可以使用序列的NEXTVAL和CURRVAL:+++++

①对视图查询的SELECT目标列中;

②使用了DISTINCT关键字的SELECT语句中;

③SELECT语句中使用GROUP BY、HAVING或ORDER BY子句时;

④在SELECT、DELETE或UPDATE语句的子查询中;

⑤在CREATE TABLE 或 ALTER TABLE 语句中的默认值表达式中。


Tips:

(1)

【Oracle学习】之 序列(Sequence)_子查询_02

【Oracle学习】之 序列(Sequence)_oracle_03

(2)在访问序列中的序号时,可能会发生序号不连续的情况,不连续的原因可能是事务发生了回滚,或者多个用户共同访问同一个序列。


四、修改序列:

除了不能修改序列的START WITH参数外,可以对序列其他参数进行修改。如果要修改MAXVALUE参数,需要保证修改后的最大值大于序列的当前值(CURRVAL)。此外,序列的修改只影响以后生成的序列值。

【Oracle学习】之 序列(Sequence)_序列_04


【Oracle学习】之 序列(Sequence)_oracle_05


五、查看序列信息

①dba_sequences

②all_sequences

③user_sequences(一般使用这个查看)


六、删除

【Oracle学习】之 序列(Sequence)_sequence_06