---
title: "管理序列 - OceanBase 数据库 V4.6.0 | OceanBase 文档中心"
description: 管理序列 本节主要介绍如何创建、查看、修改和删除 Oracle 模式中序列。 在 OceanBase 数据库中，序列（Sequence）是 Oracle 租户的数据库对象，可以产生不重复的值，在表需要不重复的列做主键时很有用。 序列可以提供两个伪列 CURRVAL 和 NEXTVAL ，用于返回当前的序列值和下一个序…
---
切换语言

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

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

# 管理序列

更新时间：2026-06-22 15:43:14

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.6.0/zh-CN/700.reference/300.database-object-management/200.manage-object-of-oracle-mode/600.management-sequence-of-oracle-mode.md)  

本节主要介绍如何创建、查看、修改和删除 Oracle 模式中序列。

在 OceanBase 数据库中，序列（Sequence）是 Oracle 租户的数据库对象，可以产生不重复的值，在表需要不重复的列做主键时很有用。

序列可以提供两个伪列 `CURRVAL`和 `NEXTVAL`，用于返回当前的序列值和下一个序列值。每当查询 `NEXTVAL` 都会推进 `CURRVAL` 值。

## 序列的使用限制

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

## 创建序列

您可以使用 `CREATE SEQUENCE` 语句来创建序列。语法格式如下：

```sql
CREATE SEQUENCE sequence_name
[MINVALUE value | NOMINVALUE]
[MAXVALUE value | NOMAXVALUE]
[START WITH value]
[INCREMENT BY value]
[CACHE value | NOCACHE]
[ORDER | NOORDER]
[CYCLE | NOCYCLE];

```

其中：

- `MINVALUE` 和 `MAXVALUE` 用于指定最小值和最大值。
 - `START WITH` 用于指定起始值。
 - `INCREMENT BY` 用于指定步长，可以为负数，默认为 1。
 - `CACHE` 是为了性能缓存部分序列值，在并发高的时候使用。

  #### 说明

  在分布式系统中使用 Sequence 时，如果您使用了 `CACHE` + `NOORDER` 选项，那么连接到不同机器时获得的序列不是有序递增的，但是可以保证唯一。
 - `CYCLE` 用于指定序列值是否循环。如果序列值循环，则需要指定最大值或最小值。

更多 `CREATE SEQUENCE` 语句的信息，请参见 [CREATE SEQUENCE](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005687557)。

示例：创建序列，实现表的列自增。

```sql
obclient> CREATE TABLE t1(id number NOT NULL PRIMARY KEY, name varchar(50) , gmt_create date NOT NULL DEFAULT SYSDATE);
Query OK, 0 rows affected

obclient> CREATE SEQUENCE seq_t1 START WITH 10000 INCREMENT BY 1 CACHE 50 NOCYCLE;
Query OK, 0 rows affected

obclient> INSERT INTO t1(id,name) VALUES(seq_t1.nextval, 'A');
Query OK, 1 row affected (0.02 sec)

obclient> INSERT INTO t1(id,name) VALUES(seq_t1.nextval, 'B');
Query OK, 1 row affected (0.00 sec)

obclient> INSERT INTO t1(id,name) VALUES(seq_t1.nextval, 'C');
Query OK, 1 row affected (0.00 sec)

obclient> SELECT * FROM t1;
+-------+------+---------------------+
| ID    | NAME | GMT_CREATE          |
+-------+------+---------------------+
| 10000 | A    | 2020-04-02 18:30:29 |
| 10001 | B    | 2020-04-02 18:30:34 |
| 10002 | C    | 2020-04-02 18:30:39 |
+-------+------+---------------------+
3 rows in set (0.01 sec)

```

## 查看序列

序列创建成功后，可以通过 USER_SEQUENCES、ALL_SEQUENCES 和 DBA_SEQUENCES 视图来查看自己创建的序列。

示例如下：

```sql
obclient> SELECT * FROM USER_SEQUENCES \G
*************************** 1. row ***************************
SEQUENCE_NAME: SEQ_T1
    MIN_VALUE: 1
    MAX_VALUE: 9999999999999999999999999999
 INCREMENT_BY: 1
   CYCLE_FLAG: N
   ORDER_FLAG: N
   CACHE_SIZE: 50
  LAST_NUMBER: 10100
1 row in set (0.00 sec)
obclient>

```

- 更多 DBA_SEQUENCES 视图的字段及说明信息请参见 [DBA_SEQUENCES](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005683874)。
 - 更多 ALL_SEQUENCES 视图的字段及说明信息请参见 [ALL_SEQUENCES](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005683557)。
 - 更多 USER_SEQUENCES 视图的字段及说明信息请参见 [USER_SEQUENCES](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005683718)。

## 修改序列

序列创建成功后，您可以使用 `ALTER SEQUENCE` 语句来修改序列的属性。

OceanBase 数据库支持修改序列的起始值、最小值、最大值、步长和循环属性。修改序列的 SQL 语法如下：

```sql
ALTER SEQUENCE sequence_name
  {
  [RESTART]
  |[START WITH int_value]
  |[ MINVALUE value | NOMINVALUE ]
  |[ MAXVALUE value | NOMAXVALUE ]
  |[ INCREMENT BY value ]
  |[ CACHE value | NOCACHE ]
  |[ ORDER | NOORDER ]
  |[ CYCLE | NOCYCLE]
  };

```

更多 `ALTER SEQUENCE` 语句的信息，请参见 [ALTER SEQUENCE](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005687526)。

示例：

1. 修改序列 `seq2` 的最大值，并指定自增值循环生成。

   ```sql
   obclient> ALTER SEQUENCE seq2 MAXVALUE 1024 CYCLE;

   ```
 2. 修改序列的起始值。

      - 如果 `INCREMENT BY` 的值大于 `0`，则可以重置序列后，让其取值从 `MINVALUE` 开始；如果 `INCREMENT BY` 的值小于 `0`，则可以重置序列后，让其取值从 `MAXVALUE` 开始，语句如下：

       ```sql
       obclient> ALTER SEQUENCE seq3 RESTART;
       Query OK, 0 rows affected

       ```
      - 重置序列，并让其取值从 `3` 开始，语句如下：

       ```sql
       obclient> ALTER SEQUENCE seq4 RESTART START WITH 3;
       Query OK, 0 rows affected

       ```

   修改序列的起始值时，`RESTART` 在语句中的位置并不一定要求在序列名后，它可以在语句中的任意位置，示例如下：

   ```sql
   obclient> ALTER SEQUENCE seq4 START WITH 3 RESTART MINVALUE -100 CYCLE;
   Query OK, 0 rows affected

   ```

## 删除序列

您可以使用`DROP SEQUENCE`语句来删除序列，语法格式如下：

```sql
DROP SEQUENCE sequence_name;

```

更多 `DROP SEQUENCE` 语句的信息，请参见 [DROP SEQUENCE](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005687566)。

示例：删除序列 S1。

```sql
obclient> DROP SEQUENCE S1;
Query OK, 0 rows affected

```

## 清除 Sequence 缓存

为防止其他的 Sequence 缓存过期问题，OceanBase 数据库从 V4.4.1 版本开始引入 `ALTER SYSTEM FLUSH SEQUENCE CACHE` 语句，用于主动清除 Sequence 缓存，以便发生问题后能快速恢复。语法格式如下：

```sql
ALTER SYSTEM FLUSH SEQUENCE CACHE
    SEQUENCE_NAME = sequence_name
    [GLOBAL];

```

更多有关清除 Sequence 缓存语句的信息，参见 [ALTER SYSTEM FLUSH SEQUENCE CACHE](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005687560)。

**示例如下：**

在当前租户及 DataBase 下，清除本节点上名为 `test_seq1` 的 Sequence 的缓存。

```shell
obclient> ALTER SYSTEM FLUSH SEQUENCE CACHE
    SEQUENCE_NAME = test_seq1;

```

 上一篇 下一篇 ![有帮助](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) 咨询热线
