OceanBase里怎么新建序列,树叶云带你一步步搞定教程
- 问答
- 2026-01-13 10:13:32
- 4
开始)
大家好,我是树叶云的向导,今天我们来聊聊在OceanBase数据库里怎么新建一个序列,序列这个东西,你可以把它想象成一个自动发号的机器,你每次去取号,它都会给你一个比上一个号更大的数字,而且保证不会重复,这个功能在做数据表的主键,或者需要生成唯一订单号的时候,特别有用。
在OceanBase里,我们主要使用一条叫做CREATE SEQUENCE的SQL命令来创建序列,别看这个名字听起来很专业,其实用起来很简单,下面我就带你一步步搞定它。
你得能连接到你的OceanBase数据库,不管你是用OBClient命令行工具,还是用DBeaver、Navicat这种图形化界面,只要能执行SQL语句就行,树叶云的教程里假设你已经在你的操作环境里了。
最基础、最简单的创建序列命令长这样:
CREATE SEQUENCE seq_example;

这条命令的意思是:创建一个名字叫“seq_example”的序列,你执行完之后,OceanBase就会用默认的设置帮你把这个序列建好,那么默认设置是什么呢?树叶云这里给你列一下:
- 起始值: 就是从多少开始编号,默认是1,也就是说第一个号是1。
- 步长: 每次增加多少,默认是1,也就是说你取完1,下一个就是2,然后是3,依次类推。
- 最大值: 这个序列最多能发到多少号,默认是一个非常大的数,对于绝大多数情况都够用了。
- 是否循环: 当号码达到最大值之后怎么办,默认是“不循环”,也就是说发到最大号之后,你再取号就会报错了。
- 缓存大小: 为了提高性能,数据库可以一次性在内存里预分配多个号码,默认是20,意思是数据库会一次取20个号放在内存里,你用的时候直接从内存拿,这样更快。
你看,虽然我们只写了一行简单的命令,但OceanBase已经帮我们把所有细节都设置好了,如果我们有特殊要求,比如我想让订单号从10001开始,每次增加1,但不想让它缓存,那该怎么办呢?这时候我们就需要更详细的设置了。
树叶云教你使用完整的语法,让你能定制自己的序列:
CREATE SEQUENCE 你的序列名字 START WITH 起始数字 INCREMENT BY 步长 MINVALUE 最小值 | NOMINVALUE MAXVALUE 最大值 | NOMAXVALUE CACHE 缓存数量 | NOCACHE CYCLE | NOCYCLE;
我们来一个个解释:

- 你的序列名字: 这个你自己起,比如
seq_order_id(订单ID序列),要有意义,好辨认。 - START WITH: 后面跟起始数字,比如
START WITH 10001。 - INCREMENT BY: 后面跟步长,可以是正数,比如每次加2;也可以是负数,这样序列就是递减的。
- MINVALUE / NOMINVALUE: 设置序列的最小值,如果不设置,或者用
NOMINVALUE,对于递增序列默认就是1。 - MAXVALUE / NOMAXVALUE: 设置序列的最大值。
NOMAXVALUE是默认值。 - CACHE / NOCACHE:
CACHE 100表示一次缓存100个号码,性能好。NOCACHE表示不缓存,每个号都实时生成,能避免跳号(比如缓存了100个号,但数据库重启了,内存里的号就丢了,下次会从新的地方开始),但性能稍差,根据你的业务需求来选。 - CYCLE / NOCYCLE:
CYCLE表示循环,达到最大值(或最小值,对于递减序列)后,会从头开始。NOCYCLE是不循环,是默认值。
举个例子,树叶云想创建一个用于订单的序列,要求是:从100000开始,每次增加1,最大到999999,不循环,为了提高性能缓存50个号,那么SQL语句就应该这么写:
CREATE SEQUENCE seq_order_no START WITH 100000 INCREMENT BY 1 MAXVALUE 999999 NOCYCLE CACHE 50;
执行这条命令,一个符合你心意的序列就创建好了。
序列建好了,怎么用呢?很简单,有两个关键的“函数”:
- 获取下一个号码:
序列名.NEXTVAL,每次调用,序列的值就会增加你设定的步长,并返回新的值。 - 查看当前号码:
序列名.CURRVAL,这个只是看看现在到多少了,并不会让序列增加。
注意啦,树叶云这里要提醒一个重要的点:在一个新的数据库会话里,你必须先调用一次NEXTVAL,然后才能使用CURRVAL,因为一开始序列还没有“当前值”这个概念。

我们可以这样用:
-- 向订单表插入一条新记录,主键ID使用序列自动生成 INSERT INTO orders (order_id, customer_name, amount) VALUES (seq_order_no.NEXTVAL, '树叶云', 99.90);
-- 查询我们刚才插入的订单ID是多少(假设这是同一次会话连接) SELECT seq_order_no.CURRVAL FROM DUAL;
如果你不小心建错了序列,或者这个序列不再需要了,怎么删除呢?用DROP命令:
DROP SEQUENCE seq_example;
这样,这个序列就被彻底删除了,请谨慎操作哦。
好了,以上就是树叶云带你搞定的在OceanBase中新建和使用序列的全过程,总结一下就是:先用CREATE SEQUENCE创建,然后用序列名.NEXTVAL来取号使用,是不是没有想象中那么难?希望这个教程对你有帮助!
结束)
本文由雪和泽于2026-01-13发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:http://www.haoid.cn/wenda/79867.html
