开发指南—Sequence—使用限制

本文涉及的产品
云原生数据库 PolarDB 分布式版,标准版 2核8GB
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 本文将介绍使用Sequence过程中的注意事项及问题处理的方法。

限制与注意事项

在使用Sequence时,您需要注意如下事项:

  • 转换Sequence类型时,必须指定START WITH起始值。
  • 单元化Group Sequence不支持作为源或目标的类型转换,也不支持起始值以外的参数修改。
  • 属于同一个全局唯一数字序列分配空间的每个单元化Group Sequence ,必须指定相同的单元数量和不同的单元索引。
  • 在PolarDB-X非拆分模式库(即后端仅关联一个已有的RDS物理库)、或拆分模式库中仅有单表(即所有表都是单库单表,且无广播表)的场景下执行INSERT时, PolarDB-X会自动优化并直接下推语句,绕过优化器中分配Sequence值的部分。此时INSERT INTO ... VALUES (seq.nextval, ...)这种用法不支持,建议使用后端RDS/MySQL自增列机制代替。
  • 如果将指定分库的Hint用在INSERT语句上,比如INSERT INTO ... VALUES ... 或INSERT INTO ... SELECT ...,且目标表使用了Sequence,则PolarDB-X会绕过优化器直接下推语句,使Sequence不生效,目标表最终会使用后端RDS/MySQL表中的自增机制生成id。
  • 必须对同一个表采用一种统一的方式分配自增id:或者依赖于Sequence,或者依赖于后端RDS/MySQL表的自增列;应避免两种机制混用,否则很可能会造成id冲突(INSERT时产生重复id)的情况,且难于排查。
  • 将Time-based Sequence用于表中自增列时,该列必须使用BIGINT类型。

如何处理主键冲突

如果直接在RDS中写入了数据,而对应的主键值不是PolarDB-X生成的Sequence值,那么后续让PolarDB-X自动生成主键写入数据库,可能会和这些数据发生主键冲突,您可以通过如下步骤解决此问题:

  1. 通过SHOW SEQUENCES来查看当前已有Sequence。AUTO_SEQ_ 开头的Sequence是隐式Sequence(创建表时加上AUTO_INCREMENT参数的字段产生的Sequence)。请在命令行输入如下代码:
mysql> SHOW SEQUENCES;
  1. 返回结果如下:
+---------------------+-------+--------------+------------+-----------+-------+-------+

| NAME | VALUE | INCREMENT_BY | START_WITH | MAX_VALUE | CYCLE | TYPE |
+---------------------+-------+--------------+------------+-----------+-------+-------+
| AUTO_SEQ_xkv_t_item | 0 | N/A | N/A | N/A | N/A | GROUP |
| AUTO_SEQ_xkv_shard | 0 | N/A | N/A | N/A | N/A | GROUP |
+---------------------+-------+--------------+------------+-----------+-------+-------+
2 rows in set (0.04 sec)
  1. 若xkv_t_item表有冲突,并且xkv_t_item表主键是ID,那么从PolarDB-X获取这个表最大主键值。请在命令行输入如下代码:
mysql> SELECT MAX(id) FROM xkv_t_item;
  1. 返回结果如下:
+-----------+ 
| MAX(id) |
+-----------+
| 8231 |
+-----------+
1 row in set (0.01 sec)
  1. 更新Sequence表中对应的值,这里更新成比8231要大的值,比如9000,更新完成后,后续插入语句生成的自增主键将不再报错。请在命令行输入如下代码:
mysql> ALTER SEQUENCE AUTO_SEQ_xkv_t_item START WITH 9000;
相关文章
|
7月前
|
Linux 虚拟化 iOS开发
Windows Server 2008 R2 OVF (2025 年 4 月更新) - VMware 虚拟机模板
Windows Server 2008 R2 OVF (2025 年 4 月更新) - VMware 虚拟机模板
252 29
Windows Server 2008 R2 OVF (2025 年 4 月更新) - VMware 虚拟机模板
|
算法 计算机视觉
指针式仪表的表盘自动识别算法
指针式仪表的表盘自动识别算法
2287 0
指针式仪表的表盘自动识别算法
|
Unix Linux
如何免费在线试用 200+ Linux 和 Unix 发行版?
Linux 和 Unix 都有着各种各样的发行版,有的界面美观,有的功能强大。如果你想要尝试不同的 Linux 和 Unix 发行版,传统的作法是先在本地安装对应版本,再进行体验。这样效率非常低下,不仅需要下载镜像,还要进行安装,比较费时。
639 0
如何免费在线试用 200+ Linux 和 Unix 发行版?
|
vr&ar 网络架构
SIP能否成为主流? 三种IP电话协议比较
SIP能否成为主流? 三种IP电话协议比较   随着IP电话应用的普及,建立终端设备和网关的可扩展网络已成为业界面临的一大技术挑战。目前IP电话技术已完美实现了对语音和传真信息的编码和传输,但仍需进一步发展为大型公司和服务提供平台的呼叫控制和地址管理技术。
2006 0
|
JSON 数据处理 数据安全/隐私保护
百宝箱,这款小工具能够覆盖95%的文件处理功能!
在日常工作和学习过程中,经常要和大量的文件处理打交道。 PDF、Word、Excel、TxT、图片....需要频繁的对这些文件进行转换、编辑、批量处理等操作。
百宝箱,这款小工具能够覆盖95%的文件处理功能!
|
Android开发 开发者
半自动开启adb无线调试(二)
牙叔教程 简单易懂
735 0
|
移动开发 前端开发 JavaScript
xy哥怒肝,前端学习路线一条龙【内含入门到进阶到高级精选资源】无套路获取!!!
xy哥怒肝,前端学习路线一条龙【内含入门到进阶到高级精选资源】无套路获取!!!
|
Ubuntu IDE Unix
Linux 命令行下搜索工具大盘点,效率提高不止一倍!
Linux 命令行下搜索工具大盘点,效率提高不止一倍!
392 0
|
流计算 网络协议 Apache
咱们从头到尾讲一次 Flink 网络流控和反压剖析
文章将从网络流控的概念与背景、TCP的流控机制、Flink TCP-based 反压机制(before V1.5)、Flink Credit-based 反压机制 (since V1.5)、总结与思考等几个方面进行分享。