New in v2.0:ALTER SEQUENCE语句更改序列的名称,增量值和其他设置。

想了解CockroachDB变更scheme时如何做到不锁表,不停机,请查看CockroachDB在线变更Schema

权限需求

用户必须具有所在数据库的CREATE权限。

概要

图片

参数

Parameter Description
IF EXISTS 仅当sequence存在时修改,若不存在,则返回错误。
sequence_name 你需要修改的sequence的名称
INCREMENT sequence递增的新值。 负数会创建降序。 正数表示升序。
MINVALUE sequence的最小值

Default: 1
MAXVALUE sequence的最大值

Default: 9223372036854775807
START 当你RESTART或者当sequence 达到MAXVALUE并且设置了CYCLE时sequence的值。

RESTARTCYCLE 尚未实现。
CYCLE 当sequence值达到最大值或者最小值时,将会循环开始. 如果设置了 NO CYCLE则不会。

举例

更改Sequence的增量值

在这个例子中,我们将修改sequence的增量值,从当前的状态(例如1)修改为2。

> ALTER SEQUENCE customer_seq INCREMENT 2;

然后,我们将在表格添加另一条记录,并且检查新的记录是否符合新序列。

> INSERT INTO customer_list (customer, address) VALUES ('Marie', '333 Ocean Ave');
> SELECT * FROM customer_list;
+----+----------+--------------------+
| id | customer |      address       |
+----+----------+--------------------+
|  1 | Lauren   | 123 Main Street    |
|  2 | Jesse    | 456 Broad Ave      |
|  3 | Amruta   | 9876 Green Parkway |
|  5 | Marie    | 333 Ocean Ave      |
+----+----------+--------------------+

设置Sequence的下一个值

在这个例子中,我们将修改sequencecustomer_seq的下一个值。目前,下一个值将会是7,(例如5+increment 2)。我们将它下一个值修改为20

设置的值不能超过MAXVALUEMINVALUE定义的范围。

> SELECT setval('customer_seq', 20, false);
+--------+
| setval |
+--------+
|     20 |
+--------+

CockroachDB SQL 里的setval('seq_name', value, is_called) 函数是参照 PostgreSQL的setval() 函数 不过它并不存储 is_called 标识. 而是将 val - increment 设置为 false 或者将 val 设置为true.

让我们在表格中添加另一条记录,以检查新记录是否符合新的下一个值。

> INSERT INTO customer_list (customer, address) VALUES ('Lola', '333 Schermerhorn');
+----+----------+--------------------+
| id | customer |      address       |
+----+----------+--------------------+
|  1 | Lauren   | 123 Main Street    |
|  2 | Jesse    | 456 Broad Ave      |
|  3 | Amruta   | 9876 Green Parkway |
|  5 | Marie    | 333 Ocean Ave      |
| 20 | Lola     | 333 Schermerhorn   |
+----+----------+--------------------+

See Also