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 Sequencesequence_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)