# ALTER SEQUENCE
#### 功能描述
修改序列定义。
#### 注意事项
- 使用ALTER SEQUENCE的用户必须是该序列的所有者。
- 用户要修改序列的所有者，必须是新角色的直接或者间接成员，并且所有者角色必须有序列所在模式上的CREATE权限。
- 当前版本仅支持修改拥有者、归属列和最大值。若要修改其他参数，可以删除重建，并用Setval函数恢复当前值。
- ALTER SEQUENCE MAXVALUE不支持在事务、函数和存储过程中使用。
- 修改序列的最大值后，会清空该序列在所有会话的cache。
- ALTER SEQUENCE会阻塞nextval、setval、currval和lastval的调用。
 
#### 语法格式
修改序列最大值或归属列。
```
ALTER SEQUENCE [ IF EXISTS ] name 
    [ MAXVALUE maxvalue | NO MAXVALUE | NOMAXVALUE ]
    [ CACHE cache ]
    [ OWNED BY { table_name.column_name | NONE } ] ;
```
修改序列的所有者。
```
ALTER SEQUENCE [ IF EXISTS ] name OWNER TO new_owner;
```
#### 参数说明
表1ALTER SEQUENCE参数说明 
| 参数                               | 描述                                                                                                                                                                                                                                     | 取值范围                                                                                                                                                                                                                                                         |
|:---|:---|:---|
| IF EXISTS                       | 如果序列不存在时返回一个提示而不是错误。                                                                                                                                                                                                                   | -                                                                                                                                                                                                                                                           |
| name                              | 需要修改的序列的名称。                                                                                                                                                                                                                          | 已存在的序列名称。                                                                                                                                                                                                                                                    |
| MAXVALUE maxvalue \| NO MAXVALUE | 序列所能达到的最大值。如果指定了NO MAXVALUE，则递增序列的缺省值为2^63^-1，递减序列的缺省值为-1。NOMAXVALUE等价于NO MAXVALUE。                                                                                                                                | -                                                                                                                                                                                                                                         |
| CACHE cache                   | 指定要预先分配多少序列号并存储在内存中，以加快访问速度。该参数仅8.2.1.100及以上集群版本支持。                                                                                                                                                                                    | - cachevalue最小值为 1（一次只能生成一个值，即NOCACHE）。  - 如果未指定，则保留旧缓存值。   |
| OWNED BY                        | 将序列和表的指定字段进行关联。这样，在删除指定字段或其所在表的时候会自动删除已关联的序列。 如果序列已经和表有关联后，使用OWNED BY参数后新的关联关系会覆盖旧的关联。关联的表和序列的所有者必须是同一个用户，并且在同一个模式中。使用OWNED BY NONE将删除任何已经存在的关联。 | -                                                                                                                                                                                                                                                             |
| new_owner                      | 序列新所有者的用户名。                                                                                                                                                                                                                            | 已存在的用户名。                                                                                                                                                                                                                                                      |
   
#### 示例
创建示例序列seq_test和示例表t1。
```
CREATE SEQUENCE seq_test START 101;
```
```
DROP TABLE IF EXISTS t1;
CREATE TABLE t1(c1 bigint default nextval('seq_test'));
```
将序列serial的最大值修改为200。
```
ALTER SEQUENCE seq_test MAXVALUE 200;
```
将序列seq_test的归属列变为t1.c1。
```
ALTER SEQUENCE seq_test OWNED BY t1.c1;
```
#### 相关链接
[CREATE SEQUENCE](https://support.huaweicloud.com/sqlreference-dws/dws_06_0174.html)，[DROP SEQUENCE](https://support.huaweicloud.com/sqlreference-dws/dws_06_0205.html)
