更新时间:2020-08-14 16:26
本文介绍如何用 DDL 语句创建、修改、删除、查询 Sequence, 以及如何获取显式 Sequence 的值。
CREATE [ GROUP ] SEQUENCE <name>
[ START WITH <numeric value> ]
参数 | 说明 |
---|---|
START WITH | Group Sequence 的起始值,若未指定,则默认起始值为100001。 |
CREATE [ GROUP ] SEQUENCE <name>
[ START WITH <numeric value> ]
[ UNIT COUNT <numeric value> INDEX <numeric value> ]
参数 | 说明 |
---|---|
START WITH | 单元化 Group Sequence 的起始值,默认起始值依赖于单元数量和单元索引;若单元数量和单元索引未被指定或为默认值,则默认起始值为100001。 |
UNIT COUNT | 单元化 Group Sequence 的单元数量,默认值为1 |
INDEX | 单元化 Group Sequence 的单元索引,取值范围为 [ 0, 单元数量 - 1 ],默认值为0 |
注意:
CREATE TIME SEQUENCE <name>
注意:存储 Time-based Sequence 值的列必须为 BIGINT 类型。
CREATE SIMPLE SEQUENCE <name>
[ START WITH <numeric value> ]
[ INCREMENT BY <numeric value> ]
[ MAXVALUE <numeric value> ]
[ CYCLE | NOCYCLE ]
参数 | 说明 |
---|---|
START WITH | Simple Sequence 的起始值,若未指定,则默认起始值为1。 |
INCREMENT BY | Simple Sequence 每次增长时的增量值(或称为间隔值或步长),若未指定,则默认值为1。 |
MAXVALUE | Simple Sequence 允许的最大值,若未指定,则默认值为有符号长整型(Signed BIGINT)的最大值,即 9223372036854775807。 |
CYCLE 或 NOCYCLE | 两者只能选择其一,代表当 Simple Sequence 增长到最大值后,是否允许继续循环(即从 START WITH 重新开始)使用该 Simple Sequence。若未指定,则默认值为 NOCYCLE。 |
START WITH
参数对于它们仅具有指导意义,Group Sequence 和单元化 Group Sequence 不会严格按照该参数作为起始值,但是保证起始值比该参数大;示例一:创建一个 Group Sequence。
mysql> CREATE SEQUENCE seq1;
Query OK, 1 row affected (0.01 sec)
mysql> CREATE GROUP SEQUENCE seq1;
Query OK, 1 row affected (0.01 sec)
示例二:创建包含3个单元的全局唯一数字序列(将3个同名的、指定了相同单元数量和不同单元索引的单元化 Group Sequence,分别用于3个不同的实例或库,组成一个全局唯一数字序列)。
实例1/库1:
mysql> CREATE GROUP SEQUENCE seq2 UNIT COUNT 3 INDEX 0;
Query OK, 1 row affected (0.01 sec)
实例2/库2:
mysql> CREATE GROUP SEQUENCE seq2 UNIT COUNT 3 INDEX 1;
Query OK, 1 row affected (0.01 sec)
实例3/库3:
mysql> CREATE GROUP SEQUENCE seq2 UNIT COUNT 3 INDEX 2;
Query OK, 1 row affected (0.01 sec)
示例三:创建一个 Time-based Sequence。
mysql> CREATE TIME SEQUENCE seq3;
Query OK, 1 row affected (0.03 sec)
示例四: 创建一个 Simple Sequence,起始值是 1000,步长为 2,最大值为 99999999999,增长到最大值后不继续循环。
mysql> CREATE SIMPLE SEQUENCE seq4 START WITH 1000 INCREMENT BY 2 MAXVALUE 99999999999 NOCYCLE;
Query OK, 1 row affected (0.03 sec)
DRDS 支持对 Sequence 的以下几个方面进行修改:
ALTER SEQUENCE <name> [ CHANGE TO SIMPLE | TIME ]
START WITH <numeric value>
[ INCREMENT BY <numeric value> ]
[ MAXVALUE <numeric value> ]
[ CYCLE | NOCYCLE ]
参数 | 说明 |
---|---|
START WITH | Sequence 的起始值,无默认值,若未指定则忽略该参数,在转换类型时必须指定。 |
INCREMENT BY | 仅在将 Group Sequence 转换为 Simple Sequence 时有效,是 Simple Sequence 每次增长时的增量值(或称为间隔值或步长),若未指定,则默认值为1。 |
MAXVALUE | 仅在将 Group Sequence 转换为 Simple Sequence 时有效,是 Simple Sequence 允许的最大值,若未指定,则默认值为有符号长整型(Signed BIGINT)的最大值,即 9223372036854775807。 |
CYCLE 或 NOCYCLE | 仅在将 Group Sequence 转换为 Simple Sequence 时有效,两者只能选择其一,代表当 Simple Sequence 值增长到最大值后,是否允许继续循环(即从 START WITH 重新开始)使用该 Simple Sequence,若未指定,则默认值为 NOCYCLE。 |
注意:当修改的目标类型为 TIME 时,不支持上述参数。
ALTER SEQUENCE <name>
START WITH <numeric value>
参数 | 说明 |
---|---|
START WITH | 单元化 Group Sequence 的起始值,无默认值,若未指定则忽略该参数。 |
注意:单元化 Group Sequence 不支持转换到其它类型或修改单元化相关的参数。
ALTER SEQUENCE <name> [ CHANGE TO GROUP | SIMPLE ]
START WITH <numeric value>
[ INCREMENT BY <numeric value> ]
[ MAXVALUE <numeric value> ]
[ CYCLE | NOCYCLE ]
参数 | 说明 |
---|---|
START WITH | Sequence 的起始值,无默认值,若未指定则忽略该参数,在转换类型时必须指定。 |
INCREMENT BY | Simple Sequence 每次增长时的增量值(或称为间隔值或步长),若未指定,则默认值为1,将 Simple Sequence 转换为 Group Sequence 时该参数无效。 |
MAXVALUE | Simple Sequence 允许的最大值,若未指定,则默认值为有符号长整型(Signed BIGINT)的最大值,即 9223372036854775807,将 Simple Sequence 转换为 Group Sequence 时该参数无效。 |
CYCLE 或 NOCYCLE | 两者只能选择其一,代表当 Simple Sequence 值增长到最大值后,是否允许继续循环(即仍从 START WITH 开始)使用该 Simple Sequence,若未指定,则默认值为 NOCYCLE,将 Simple Sequence 转换为 Group Sequence 时该参数无效。 |
ALTER SEQUENCE <name> [ CHANGE TO GROUP | TIME ]
START WITH <numeric value>
[ INCREMENT BY <numeric value> ]
[ MAXVALUE <numeric value> ]
[ CYCLE | NOCYCLE ]
参数 | 说明 |
---|---|
START WITH | Sequence 的起始值,无默认值,若未指定则忽略该参数,在转换类型时必须指定。 |
INCREMENT BY | Simple Sequence 每次增长时的增量值(或称为间隔值或步长),若未指定,则默认值为1,将 Simple Sequence 转换为 Group Sequence 时该参数无效。 |
MAXVALUE | Simple Sequence 允许的最大值,若未指定,则默认值为有符号长整型(Signed BIGINT)的最大值,即 9223372036854775807,将 Simple Sequence 转换为 Group Sequence 时该参数无效。 |
CYCLE 或 NOCYCLE | 两者只能选择其一,代表当 Simple Sequence 值增长到最大值后,是否允许继续循环(即仍从 START WITH 开始)使用该 Simple Sequence,若未指定,则默认值为 NOCYCLE,将 Simple Sequence 转换为 Group Sequence 时该参数无效。 |
注意:当修改的目标类型为 TIME 时,不支持上述参数。
START WITH
参数对于它们仅具有指导意义,Group Sequence 和单元化 Group Sequence 不会严格按照该参数作为起始值,但是保证起始值比该参数大;ALTER SEQUENCE
的 CHANGE TO <sequence_type>
子句实现;CHANGE TO
子句,则强制必须加上 START WITH 参数,避免忘记指定起始值而造成取值时得到重复值;若没有 CHANGE TO(可选参数),则不强制;示例一:将 Simple Sequence seq4 的起始值改为 3000,步长改为 5,最大值改为 1000000,增长到最大值后改为继续循环。
mysql> ALTER SEQUENCE seq4 START WITH 3000 INCREMENT BY 5 MAXVALUE 1000000 CYCLE;
Query OK, 1 row affected (0.01 sec)
示例二:将 Group Sequence 转换为 Simple Sequence。
mysql> ALTER SEQUENCE seq1 CHANGE TO SIMPLE START WITH 1000000;
Query OK, 1 row affected (0.02 sec)
DROP SEQUENCE <name>
mysql> DROP SEQUENCE seq3;
Query OK, 1 row affected (0.02 sec)
SHOW SEQUENCES
结果集中的 TYPE 列,显示的是 Sequence 类型的缩写。
mysql> SHOW SEQUENCES;
+------+--------+------------+------------+------------+--------------+------------+-------------+-------+--------+
| NAME | VALUE | UNIT_COUNT | UNIT_INDEX | INNER_STEP | INCREMENT_BY | START_WITH | MAX_VALUE | CYCLE | TYPE |
+------+--------+------------+------------+------------+--------------+------------+-------------+-------+--------+
| seq1 | 100000 | 1 | 0 | 100000 | N/A | N/A | N/A | N/A | GROUP |
| seq2 | 400000 | 3 | 1 | 100000 | N/A | N/A | N/A | N/A | GROUP |
| seq3 | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | TIME |
| seq4 | 1006 | N/A | N/A | N/A | 2 | 1000 | 99999999999 | N | SIMPLE |
+------+--------+------------+------------+------------+--------------+------------+-------------+-------+--------+
4 rows in set (0.00 sec)
[<schema_name>.]<sequence name>.NEXTVAL
SELECT sample_seq.nextval FROM dual;
+--------------------+
| SAMPLE_SEQ.NEXTVAL |
+--------------------+
| 101001 |
+--------------------+
1 row in set (0.04 sec)
或者可以把这个 sample_seq.nextval 当做一个值写入 SQL 中:
mysql> INSERT INTO some_users (name,address,gmt_create,gmt_modified,intro) VALUES ('sun',sample_seq.nextval,now(),now(),'aa');
Query OK, 1 row affected (0.01 sec)
注意:如果建表时已经指定了 AUTO_INCREMENT 参数,INSERT 时不需要指定自增列,可以让 DRDS 自动维护。
SELECT [<schema_name>.]<sequence name>.NEXTVAL FROM DUAL WHERE COUNT = <numeric value>
mysql> SELECT sample_seq.nextval FROM dual WHERE count = 10;
+--------------------+
| SAMPLE_SEQ.NEXTVAL |
+--------------------+
| 101002 |
| 101003 |
| 101004 |
| 101005 |
| 101006 |
| 101007 |
| 101008 |
| 101009 |
| 101010 |
| 101011 |
+--------------------+
10 row in set (0.04 sec)
在文档使用中是否遇到以下问题
更多建议
匿名提交