从 MySQL 到 OBOracle:如何处理自增列?
业务需要将数据库转换为 OceanBase 数据库,但源端涉及到 Oracle 及 MySQL 两种不同数据库,需要合并为 OceanBase 中单一的 Oracle 模式,其中源端 MySQL 数据库需要改造为 OB Oracle 并做异构数据迁移。在数据迁移中发现,MySQL 中的自增列(AUTO_INCREMENT
)在 OB Oracle 中是不支持的,在 OB Oracle 对应 MySQL 自增列的功能是通过序列实现的。通过测试以及阅读相关文章,共测试完成了以下四种 OB Oracle 创建并使用序列的方法。
作者:杨敬博
爱可生 DBA 团队成员,一位会摄影、会铲屎、会打球、会骑车、生活可以自理的 DBA。
背景描述
OceanBase 数据库中分为 MySQL 租户与 Oracle 租户,本文针对 OceanBase 中 Oracle 租户怎样创建自增列,以及如何更简单方便的处理自增列的问题展开介绍。OceanBase 的 Oracle 租户以下简称:OBOracle。
发现问题场景
业务需要将数据库转换为 OceanBase 数据库,但源端涉及到 Oracle 及 MySQL 两种不同数据库,需要合并为 OceanBase 中单一的 Oracle 模式,其中源端 MySQL 数据库需要改造为 OB Oracle 并做异构数据迁移。在数据迁移中发现,MySQL 中的自增列(AUTO_INCREMENT
)在 OB Oracle 中是不支持的,在 OB Oracle 对应 MySQL 自增列的功能是通过序列实现的。通过测试以及阅读相关文章,共测试完成了以下四种 OB Oracle 创建并使用序列的方法。
四种 OBOracle 创建序列方法
方法一:SEQUENCE + DML
在 OceanBase 中 Oracle 数据库,我们可以通过以下语法创建序列:
CREATE SEQUENCE sequence_name
[
MINVALUE value -- 序列最小值
MAXVALUE value -- 序列最大值
START WITH value -- 序列起始值
INCREMENT BY value -- 序列增长值
CACHE cache -- 序列缓存个数
CYCLE | NOCYCLE -- 序列循环或不循环
]
语法解释:
sequence_name
是要创建的序列名称START WITH
指定使用该序列时要返回的第一个值,默认为 1INCREMENT BY
指定序列每次递增的值,默认为 1MINVALUE
和MAXVALUE
定义序列值的最小值和最大值- 如果序列已经递增到最大值或最小值,则会根据你的设置进行循环或停止自增长。
CACHE
设置序列预读缓存数量。
- 如果序列已经递增到最大值或最小值,则会根据你的设置进行循环或停止自增长。
CYCLE
表示循环序列NOCYCLE
则表示不循环序列