序列(Sequence)是数据库按照一定规则生成的自增数字序列号,通常是一组等间隔的数值(为数字类型)。因其自增的特性,通常被用作主键和唯一键。
序列的取值方法
您可以使用如下伪列引用 SQL 语句中的序列值:
CURRVAL:返回序列的当前值。NEXTVAL:返回序列的下一个自增值。
使用序列伪列时,必须在 CURRVAL 和 NEXTVAL 前带上序列的名称,并用句点(.)引用。
例如,序列的名称为 SEQ_FOO,则可以通过 SEQ_FOO.CURRVAL 获取 SEQ_FOO 序列的当前值。同样,可以通过 SEQ_FOO.NEXTVAL 获取 SEQ_FOO 序列的下一个自增值。
序列的使用
通过 CURRVAL 和 NEXTVAL 引用的序列值可以用于以下位置:
顶层
SELECT语句的选择列表中。INSERT语句中的VALUE子句中。UPDATE语句中的SET子句中。
单独使用查询 Sequence 的示例如下:
SELECT SEQUENCE_NAME.NEXTVAL FROM DUAL; /*每执行一次 Sequence 号就会增加*/
SELECT SEQUENCE_NAME.CURRVAL FROM DUAL; /*执行多少次 Sequence 号都不会变化*/
创建序列时,需要明确其初始值和步长。第一次引用 NEXTVAL 将返回序列的初始值,后续对 NEXTVAL 的引用将按照上一次序列的返回值加上序列定义的步长后返回一个新值。任何时候对 CURRVAL 的引用,都将返回当前序列的值,即最后一次对 NEXTVAL 引用时返回的值。
在会话中引用序列的 CURRVAL 伪列前,都应首先应用序列的 NEXTVAL 伪列来初始化本次会话的序列值。
创建序列时,可以定义其初始值以及其值之间的增量。对 NEXTVAL 的第一次引用将返回序列的初始值。对 NEXTVAL 的后续引用将会使序列值按照定义的增量递增,并返回新值。任何对 CURRVAL 的引用总是返回该序列的当前值,即最后一次对 NEXTVAL 引用时返回的值。
同一行内,多次引用 NEXTVAL,会生成同一个值。
obclient> SELECT seq1.NEXTVAL, seq1.NEXTVAL FROM DUAL;
+---------+---------+
| NEXTVAL | NEXTVAL |
+---------+---------+
| 3 | 3 |
+---------+---------+
1 row in set
同一行内,同时引用 NEXTVAL、CURRVAL,也会生成同一个值。
obclient> SELECT seq1.NEXTVAL, seq1.CURRVAL FROM DUAL;
+---------+---------+
| NEXTVAL | CURRVAL |
+---------+---------+
| 4 | 4 |
+---------+---------+
1 row in set



