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

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

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

# 管理序列

更新时间：2023-07-19 13:03:06

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

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

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

## 创建序列

您可以使用 `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];

```

语句使用说明：

- 执行该语句的用户需要具备 `CREATE SEQUENCE` 权限。
 - `MINVALUE` 和 `MAXVALUE` 用于指定最小值和最大值。
 - `START WITH` 用于指定起始值。
 - `INCREMENT BY` 用于指定步长，可以为负数，默认为 1。
 - `CACHE` 是为了性能缓存部分序列值，在并发高的时候使用。

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

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

```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

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

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

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

```

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

## 查看序列

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

示例如下：

```sql
obclient> SELECT * FROM USER_SEQUENCES \G
*************************** 1. row ***************************
SEQUENCE_NAME: SEQ1
    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

```

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

## 修改序列

序列创建成功后，您可以使用 `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` 对象权限或 `ALTER ANY SEQUENCE` 系统权限。

示例：

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

   ```

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

## 删除序列

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

```sql
DROP SEQUENCE sequence_name;

```

执行该语句的用户需要具备 `DROP` 对象权限或 `DROP ANY SEQUENCE` 系统权限。

示例：删除自增列 `seq5`。

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

```

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

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