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)
三、序列的使用:
序列具有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)
(2)在访问序列中的序号时,可能会发生序号不连续的情况,不连续的原因可能是事务发生了回滚,或者多个用户共同访问同一个序列。
四、修改序列:
可以使用ALTER SEQUENCE 语句修改序列。除了不能修改序列的START WITH参数外,可以对序列其他参数进行修改。如果要修改MAXVALUE参数,需要保证修改后的最大值大于序列的当前值(CURRVAL)。此外,序列的修改只影响以后生成的序列值。