SEQUENCE

最近更新时间:2024-11-25 19:27:01

我的收藏

CREATE

-- 建表语句
CREATE TDSQL_SEQUENCE {DATABASE | SCHEMA} sequence_name
[ TDSQL_INCREMENT BY increment ]
[ START WITH startvalue ]
[ TDSQL_MINVALUE minvalue] | [ TDSQL_NOMINVALUE ]
[ TDSQL_MAXVALUE maxvalue] | [ TDSQL_NOMAXVALUE ]
[ TDSQL_CACHE cachevalue ] | [ TDSQL_NOCACHE ]
[ TDSQL_CYCLE ] | [ TDSQL_NOCYCLE ]
[ TDSQL_ORDER ] | [ TDSQL_NOORDER ]
-- 查看 sequence 元数据
SHOW CREATE TDSQL_SEQUENCE sequence_name;
关键字解释
TDSQL_SEQUENCE:标识为序列操作。
TDSQL_INCREMENT BY:设置序列步长,正数表示升序序列,负数表示降序序列。缺省则默认为1。
START WITH:设置序列起始值,缺省则默认为1。
TDSQL_MAXVALUE 和 TDSQL_NOMAXVALUE:设置序列最大值,TDSQL_MAXVALUE 缺省或者设置 TDSQL_NOMAXVALUE 时,递增序列最大值为 9223372036854775807,递减序列最大值为-1。
TDSQL_MINVALUE 和 TDSQL_NOMINVALUE:设置序列最小值,TDSQL_MINVALUE 缺省或者设置 TDSQL_NOMINVALUE 时,递增序列最小值为1,递减序列最小值为-9223372036854775808。
TDSQL_CYCLE 和 TDSQL_NOCYCLE:设置序列是否循环,缺省默认不循环。
TDSQL_CACHE 和 TDSQL_NOCACHE:设置缓存序列数量,缺省默认缓存20。
TDSQL_ORDER 和 TDSQL_NOORDER:设置序列对于并发请求保证完全有序。TDSQL 目前仅支持无序。
语法示例
-- 设置最大值,其他未定义项均选择默认值,创建序列成功后,可在 MYSQL.TDSQL_SEQUENCES 表中查看到序列元数据
> CREATE DATABASE dbtest_seq_alter_start;
> use dbtest_seq_alter_start;
> CREATE TDSQL_SEQUENCE sequence_01 maxvalue 100;

-- 查看到序列元数据使用SHOW CREATE SEQUENCE或mysql.tdsql_sequences
> SHOW CREATE TDSQL_SEQUENCE sequence_01;
Sequence Create Sequence
sequence_01 CREATE SEQUENCE `dbtest_seq_alter_start`.`sequence_01` start with 1 minvalue 1 maxvalue 100 increment by 1 cache 20 nocycle

> SELECT * from mysql.tdsql_sequences where name='sequence_01';
+------+-------------+----------------------+-------+------+-----------+-----------+----------+---------+
| db | name | curval | start | step | max_value | min_value | do_cycle | n_cache |
+------+-------------+----------------------+-------+------+-----------+-----------+----------+---------+
| test | sequence_01 | -9223372036854775808 | 1 | 1 | 100 | 1 | 0 | 20 |
+------+-------------+----------------------+-------+------+-----------+-----------+----------+---------+

-- 创建升序序列
CREATE TDSQL_SEQUENCE sequence_001 TDSQL_INCREMENT BY 1 START WITH 1 TDSQL_MAXVALUE 10000000 TDSQL_MINVALUE 1 TDSQL_CYCLE TDSQL_CACHE 100 TDSQL_NOORDER;

-- 创建降序序列,是否为降序序列,通过TDSQL_INCREMENT BY 步长决定,步长为负时表示此序列为降序序列
CREATE TDSQL_SEQUENCE sequence_002 TDSQL_INCREMENT BY -1 START WITH 10000000 TDSQL_MAXVALUE 10000000 TDSQL_MINVALUE 1 TDSQL_CYCLE TDSQL_CACHE 100 ;


ALTER

ALTER TDSQL_SEQUENCE {DATABASE | SCHEMA} sequence_name
[ TDSQL_INCREMENT BY increment ]
[ TDSQL_MINVALUE minvalue ] | [ TDSQL_NOMINVALUE ]
[ TDSQL_MAXVALUE maxvalue ] | [ TDSQL_NOMAXVALUE ]
[ TDSQL_CACHE cachevalue ] | [ TDSQL_NOCACHE ]
[ TDSQL_CYCLE ] | [ TDSQL_NOCYCLE ]
[ TDSQL_ORDER ] | [ TDSQL_NOORDER ]
[ START WITH startvalue ]
[ RESTART [WITH restartvalue] ]
关键字说明:
TDSQL_INCREMENT BY:设置序列步长,正数表示升序序列,负数表示降序序列。缺省则默认1。
TDSQL_MAXVALUE 和 TDSQL_NOMAXVALUE:设置序列最大值,TDSQL_MAXVALUE 缺省或者设置 TDSQL_NOMAXVALUE 时,递增序列最大值为 9223372036854775807,递减序列最大值为-1。
TDSQL_MINVALUE 和 TDSQL_NOMINVALUE:设置序列最小值,TDSQL_MINVALUE 缺省或者设置 TDSQL_NOMINVALUE 时,递增序列最小值为1,递减序列最小值为-9223372036854775808。
TDSQL_CYCLE 和 TDSQL_NOCYCLE:设置序列是否循环,缺省默认不循环。
TDSQL_CACHE 和 TDSQL_NOCACHE:设置缓存序列数量,缺省默认缓存20。
START WITH 设置序列起始值,缺省则默认为1。设置 TDSQL_CYCLE 时下一次循环生效。
RESTART WITH 重置序列的值,下次调用 nextval 则按照设置的值重新开始,如未设置,取 START 当前值。
注意:
START WITH | RESTART WITH 设置范围需在 [ TDSQL_MINVALUE,TDSQL_MAXVALUE] 区间。
RESTART WITH 语法10.3.22.2及之后版本开始支持。
RESTART WITH 在 TDSQL_NOCYCLE 下不支持回退取号。
语法示例
--更新序列步长
> ALTER TDSQL_SEQUENCE sequence_001 TDSQL_INCREMENT BY 2;

-- 修改tdsql sequence的起始值
> ALTER tdsql_sequence sequence_001 start with 110;

-- 重置tdsql sequence的序列号
> ALTER tdsql_sequence sequence_001 restart with 1;

-- 在由TDSQL_CYCLE 变为 TDSQL_NOCYCLE时,数值不允许回退。当前值55, restart 语句想回退到50,restart不满足约束条件, 导致报错
> alter tdsql_sequence sequence_01 increment by 1 restart start with 50 maxvalue 100 cycle;
> SELECT sequence_01.CURRVAL;
+---------------------+
| sequence_01.CURRVAL |
+---------------------+
| 55 |
+---------------------+
> alter tdsql_sequence sequence_01 increment by 1 restart start with 50 maxvalue 100 nocycle;
ERROR HY000: Wrong sequence argument(restart) value specified: restart valueexceeds [min, max] without cycle option given


DROP

语法示例

-- 更新序列步长
DROP TDSQL_SEQUENCE sequence_001;

SELECT

-- 使用Sequence获取下一个数值
select sequence_001.nextval
-- 查看序列值:
查看当前序列值:
SELECT sequence_001.CURRVAL;
-- 查看下一序列值:
SELECT sequence_001.NEXTVAL;
-- 批量使用SEQUENCE,使SEQUENE递增,sequence_same_nextval_in_query 需为OFF,默认为ON保持相同。在赤兔-数据库参数中设置该参数为OFF状态
> show variables like '%same%';
+--------------------------------+-------+
| Variable_name | Value |
+--------------------------------+-------+
| sequence_same_nextval_in_query | OFF |
+--------------------------------+-------+
1 row in set (0.00 sec)

> select * from s1;
+------+
| name |
+------+
| Amy |
| Bob |
+------+
2 rows in set (0.00 sec)

-- 可以看到SEQUENCE为递增显示


> select seq1.nextval seq,name from s1;
+-----+------+
| seq | name |
+-----+------+
| 1 | Amy |
| 2 | Bob |
+-----+------+
2 rows in set (0.01 sec)