暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

关于序列

SQL新手 2022-12-08
282

序列(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

同一行内,同时引用 NEXTVALCURRVAL,也会生成同一个值。

obclient> SELECT seq1.NEXTVAL, seq1.CURRVAL FROM DUAL;
+---------+---------+
| NEXTVAL | CURRVAL |
+---------+---------+
|       4 |       4 |
+---------+---------+
1 row in set
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论