---
title: "序列伪列 - OceanBase 数据库 V4.5.0 | OceanBase 文档中心"
description: 序列伪列 序列（Sequence）是数据库按照一定规则生成的自增数字序列号，通常是一组等间隔的数值(为数字类型)。因其自增的特性，通常被用作主键和唯一键。 序列的取值方法 序列有如下两种取值方法： CURRVAL ：返回序列的当前值。 NEXTVAL ：返回序列的下一个自增值。 使用序列时，必须在 CURRVAL 和…
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.5.0

# 序列伪列

更新时间：2026-02-14 09:34:38

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.5.0/zh-CN/700.reference/500.sql-reference/100.sql-syntax/200.common-tenant-of-mysql-mode/800.overview-of-pseudo-columns-of-mysql-mode/300.sequence-pseudo-column-of-mysql-mode.md)  

序列（Sequence）是数据库按照一定规则生成的自增数字序列号，通常是一组等间隔的数值(为数字类型)。因其自增的特性，通常被用作主键和唯一键。

## 序列的取值方法

序列有如下两种取值方法：

- `CURRVAL`：返回序列的当前值。
 - `NEXTVAL`：返回序列的下一个自增值。

使用序列时，必须在 `CURRVAL` 和 `NEXTVAL` 前带上序列的名称，并用句点（.）引用。

例如，序列的名称为 `SEQ_FOO`，则可以通过 `SEQ_FOO.CURRVAL` 获取 `SEQ_FOO` 序列的当前值。同样，可以通过 `SEQ_FOO.NEXTVAL` 获取 `SEQ_FOO` 序列的下一个自增值。

## 序列的使用限制

- 不能与 `HAVING`、`ORDER BY` 和 `GROUP BY` 等语句同时使用。
 - 不能在子查询中出现（`INSERT INTO SELECT` 的情况除外）。
 - 不能出现在 `WHERE` 表达式中。

## 序列的使用

序列 `CURRVAL` 和 `NEXTVAL` 的值可以用于以下位置：

- 顶层 `SELECT` 语句的选择列表中。
 - `INSERT` 语句中的 `VALUE` 子句中。
 - `UPDATE` 语句中的 `SET` 子句中。

单独使用查询 Sequence 的示例如下：

```sql
SELECT SEQUENCE_NAME.NEXTVAL FROM DUAL;      /*每执行一次 Sequence 号就会增加*/

SELECT SEQUENCE_NAME.CURRVAL FROM DUAL;     /*执行多少次 Sequence 号都不会变化*/

```

创建序列时，需要明确其初始值和步长。第一次引用 `NEXTVAL` 将返回序列的初始值，后续对 `NEXTVAL` 的引用将按照上一次序列的返回值加上序列定义的步长后返回一个新值。任何时候对 `CURRVAL` 的引用，都将返回当前序列的值，即最后一次对 `NEXTVAL` 引用时返回的值。

在会话中引用序列的 `CURRVAL` 伪列前，都应首先应用序列的 `NEXTVAL` 伪列来初始化本次会话的序列值。

创建序列时，可以定义其初始值以及其值之间的增量。对 `NEXTVAL` 的第一次引用将返回序列的初始值。对 `NEXTVAL` 的后续引用将会使序列值按照定义的增量递增，并返回新值。任何对 `CURRVAL` 的引用总是返回该序列的当前值，即最后一次对 `NEXTVAL` 引用时返回的值。对序列的创建和删除的相关内容，请参见 [CREATE SEQUENCE](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004479625) 和 [DROP SEQUENCE](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004479615)。

## 示例

```sql
obclient> CREATE SEQUENCE s1 START WITH 95 INCREMENT BY 1 NOORDER CACHE 10000;
Query OK, 0 rows affected

obclient> CREATE TABLE tbl1 (i INT,j INT);
Query OK, 0 rows affected

obclient> INSERT INTO tbl1 VALUES(1,70),(2,71),(3,3),(4,4);
4 rows affected

obclient> SELECT * FROM tbl1;
+---+------+
| I | J    |
+---+------+
| 1 |   70 |
| 2 |   71 |
| 3 |    3 |
| 4 |    4 |
+---+------+
4 rows in set

obclient> SELECT s1.nextval, i, j FROM tbl1;
+------------+---+------+
| S1.NEXTVAL | I | J    |
+------------+---+------+
|         95 | 1 |   70 |
|         96 | 2 |   71 |
|         97 | 3 |    3 |
|         98 | 4 |    4 |
+------------+---+------+
4 rows in set

obclient> SELECT s1.nextval, i, j FROM tbl1;
+------------+---+------+
| S1.NEXTVAL | I | J    |
+------------+---+------+
|        99  | 1 |   70 |
|        100 | 2 |   71 |
|        101 | 3 |    3 |
|        102 | 4 |    4 |
+------------+---+------+
4 rows in set

obclient> UPDATE tbl1 SET i = s1.nextval;
Query OK, 4 rows affected
Rows matched: 4  Changed: 4  Warnings: 0

obclient> SELECT * FROM tbl1;
+-----+------+
| I   | J    |
+-----+------+
| 103 |   70 |
| 104 |   71 |
| 105 |    3 |
| 106 |    4 |
+-----+------+
4 rows in set

obclient> SELECT s1.currval FROM DUAL;
+---------+
| currval |
+---------+
| 106     |
+---------+
1 row in set

```

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
