You need to enable JavaScript to run this app.
文档中心
云数据库 MySQL 版

云数据库 MySQL 版

复制全文
下载 pdf
功能
Sequence Engine
复制全文
下载 pdf
Sequence Engine
本文介绍云数据库 MySQL 版提供的 Sequence Engine。​
背景信息​
云数据库 MySQL 版提供了 Sequence Engine,用于获取唯一递增序列值。Sequence Engine 是一个逻辑引擎,底层仍使用 InnoDB 存储引擎进行数据持久化,可以兼容现有的数据备份恢复工具。上层通过封装,实现了序列值生成、缓存等等功能。​
支持版本​
  • MySQL 5.7 版本,内核小版本为 MySQL 5.7.32_20241215 及以上。​
  • MySQL 8.0 版本,内核小版本为 MySQL 8.0.32_20250215 及以上。​
  • MySQL 8.4 版本,内核小版本为 MySQL 8.4.7_20260415 及以上。​
说明​
您可通过查看实例信息查看实例的内核小版本。如您实例的内核小版本未在受支持的内核小版本范围内,您可手动升级实例内核小版本。​
前提条件​
已创建实例且实例处于运行中状态。具体操作,请参见创建实例。​
创建 Sequence​
通过 CREATE SEQUENCE 语句创建 Sequence。​
​
CREATE SEQUENCE [IF NOT EXISTS] <数据库名>.<Sequence名称>​
[START WITH <constant>]​
[MINVALUE <constant>]​
[MAXVALUE <constant>]​
[INCREMENT BY <constant>]​
[CACHE <constant> | NOCACHE]​
[CYCLE | NOCYCLE]​
;​
​
语句中各参数的说明如下:​
​
参数​
说明​
默认值​
START WITH​
Sequence 的起始值。​
说明​
START WITH 需大于等于 MINVALUE,且小于 MAXVALUE。​
1​
MINVALUE​
Sequence 的最小值。​
说明​
MINVALUE 需小于等于 MAXVALUE。​
1​
MAXVALUE​
Sequence 的最大值。​
说明​
MAXVALUE 需大于等于 MINVALUE。​
9223372036854775807​
INCREMENT BY​
Sequence 每次增加的值(补偿)。​
说明​
INCREMENT BY 需大于等于 1。​
1​
CACHE | NOCACHE​
Sequence 缓存的大小,避免每次获取 nextval 都需要更新磁盘数据,提高性能。重启后缓存中的数据会丢失,nextval 会跳变到下一个 cache 的值。​
10000​
CYCLE | NOCYCLE​
表示 Sequence 如果用完了后,是否允许从 MINVALUE 重新开始。​
0​
​
说明​
以上参数均不能为负数。​
​
为了兼容 MySQL Dump 的备份方式,您也可以使用 Engine=Sequence 的方式创建 Sequence。通过插入一行初始数据的方式指定 Sequence 的参数,Sequence 的参数以第一行记录为准。通过 Engine=Sequence 的方式创建的 Sequence,支持用户使用 MySQL Dump 这类工具进行下载、备份和恢复。示例如下:​
​
CREATE TABLE <数据库名>.<Sequence名称> (​
`currval` bigint(21) NOT NULL COMMENT 'current value',​
`nextval` bigint(21) NOT NULL COMMENT 'next value',​
`minvalue` bigint(21) NOT NULL COMMENT 'min value',​
`maxvalue` bigint(21) NOT NULL COMMENT 'max value',​
`start` bigint(21) NOT NULL COMMENT 'start value',​
`increment` bigint(21) NOT NULL COMMENT 'increment value',​
`cache` bigint(21) NOT NULL COMMENT 'cache size',​
`cycle` bigint(21) NOT NULL COMMENT 'cycle state',​
`round` bigint(21) NOT NULL COMMENT 'already how many round'​
) ENGINE=Sequence DEFAULT CHARSET=latin1;​
INSERT INTO <数据库名>.<Sequence名称> VALUES(0, 0, 1, 9223372036854775807, 1, 1, 10000, 0, 0);​
​
删除 Sequence​
可通过 DROP SEQUENCE 和 DROP TABLE语句删除 Sequence。​
  • 通过 DROP SEQUENCE 语句​
  • ​
    DROP SEQUENCE <数据库名>.<Sequence名称>;​
    ​
  • 通过DROP TABLE语句​
  • ​
    DROP TABLE <数据库名>.<Sequence名称>;​
    ​
​
获取 nextval​
可通过 nextval() 函数或访问 Sequence 表中的 nextval 列来获取 nextval。​
  • 通过 nextval() 函数​
  • ​
    SELECT nextval(<数据库名>.<Sequence名称>);​
    ​
  • 通过访问 Sequence 表中的 nextval 列​
  • ​
    SELECT <数据库名>.<Sequence名称>.nextval from dual;​
    ​
注意​
SELECT nextval from <数据库名>.<Sequence名称>; 等同于查询 Sequence 表中的记录,而不是获取 Sequence 的下一个值。​
获取 currval​
可通过 currval() 函数或访问 Sequence 表中的 currval 列来获取 currval(当前会话中上一次获取的 nextval 的值)。​
  • 通过 currval() 函数​
  • ​
    SELECT currval(<数据库名>.<Sequence名称>);​
    ​
  • 通过访问 Sequence 表中的 currval 列​
  • ​
    SELECT <数据库名>.<Sequence名称>.currval from dual;​
    ​
注意​
  • SELECT currval from <数据库名>.<Sequence名称>;等同于查询 Sequence 表中的记录,而不是获取 Sequence 的当前值。​
  • 对于新创建的 Sequence,需要先调用一次该 Sequence 的 NEXTVAL 才能正常进行查询,否则会报 Sequence 'xxx' is not yet defined in current session 错误。​
  • 如果代理终端的连接池模式为事务级连接池,可能会导致获取的 currval 值不对。如需获取准确的 currval 值,请使用直连模式的代理终端,或关闭实例的数据库代理。​
查看 Sequence​
可以通过SHOW语句查看到 Sequence 的具体属性。​
​
SHOW CREATE SEQUENCE <数据库名>.<Sequence名称>;​
​
​
​
最近更新时间:2026.10.09 18:07:11
这个页面对您有帮助吗?
有用
有用
无用
无用