开发指南—Sequence—使用限制

本文涉及的产品
云原生数据库 PolarDB 分布式版,标准版 2核8GB
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 本文将介绍使用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;
相关文章
|
运维 监控 负载均衡
ACS
阿里云容器计算服务ACS(Alibaba Cloud Container Compute Service,ACS)是一种基于容器技术的云计算服务,它可以帮助用户快速构建、部署和管理容器化应用程序。ACS提供了容器镜像、容器编排、负载均衡、日志监控等功能,使得用户可以专注于应用程序的开发和迭代,而无需关注底层的基础设施和运维。
550 3
|
网络性能优化
基于MQTT.fx的ESP8266主题发布订阅
本篇文章主要以ESP8266-12E作为开发板,带你了解MQTT发布、订阅、取消订阅的基础知识。
618 0
基于MQTT.fx的ESP8266主题发布订阅
|
6月前
|
Web App开发 编解码 前端开发
《探索React Native社交应用中WebRTC实现低延迟音视频通话的奥秘》
WebRTC(Web Real-Time Communication)是一项开源技术,支持Web和移动应用的实时通信。结合React Native框架,它为社交应用提供了低延迟、高质量的音视频通话功能。WebRTC通过MediaStream捕获媒体流,RTCPeerConnection建立连接,RTCDataChannel传递数据,并采用UDP协议优化传输。在React Native中,虚拟DOM与WebRTC高效协作,提升性能并降低开发成本。然而,实际应用面临兼容性、安全性和网络适应性挑战,需通过测试优化和加密手段解决。未来,随着技术进步,WebRTC将为社交应用带来更卓越的实时通信体验。
193 23
|
10月前
|
运维 监控 安全
《筑牢安全防线:鸿蒙Next ArkTS中的模型安全审计与漏洞检测》
在鸿蒙Next ArkTS开发中,模型的安全审计和漏洞检测至关重要。本文探讨如何利用HiChecker进行基础检测、审计日志管理与分析、静态代码分析、模型加密与签名及实时监控与异常检测等手段,确保模型的安全可靠运行,保护用户数据安全,提升应用稳定性。
388 32
|
11月前
|
存储 弹性计算 安全
阿里云服务器配置选择策略参考及后期使用注意事项
对于初次购买阿里云服务器的一些新手用户来说,在云服务器配置选择和后期使用过程中有一些不清楚的地方,小编分享几点阿里云服务器配置选择策略,以及后期使用注意事项,购买过程中注意好下面这些事项,能让我们选对选好阿里云服务器,购买之后,在使用过程中,注意下面这些事项,能够让我们更好、更安全的使用阿里云服务器。下面是小编分享的一份详尽的阿里云服务器配置与使用指南,以供参考和借鉴。
|
人工智能 搜索推荐 算法
技术与人性:在数字时代探索人文关怀####
身处技术日新月异的今天,我们享受着科技带来的便捷,却也面临着前所未有的挑战——如何在冰冷的代码与算法中融入温暖的人性?本文旨在探讨技术背后的人文价值,通过剖析当前技术发展趋势,揭示技术进步对个体和社会的双重影响,并提出构建以人为本的技术发展观。不涉及具体技术细节,而是从更宏观的视角审视技术与人性的关系,强调在追求技术创新的同时,不应忽视对人类情感、伦理及社会责任的考量。 ####
|
机器学习/深度学习 人工智能 自然语言处理
【AI智能助手】与人类互动的下一代人工智能技术
【AI智能助手】与人类互动的下一代人工智能技术
3131 0
|
弹性计算 网络协议 网络安全
内网DNS解析&VPN网关联动实现云上访问云下资源
内网DNS解析&VPN网关联动实现云上访问云下资源
|
数据可视化 Java 关系型数据库
01-认识Activiti
类似如请假、离职、出差、报销这种有审批流程的业务,我们都可以称之为工作流(也叫流程引擎),它可以帮助用户实现一个审批流程的可视化,借助于工作流引擎可以搭建客户关系管理系统(CRM)、运输管理系统(TMS)、仓储管理系统(WMS)、财务费用系统等多种复杂业务系统。
312 0
|
存储 缓存 安全
【C/C++ 基础 数组容器比较】深入探究C++容器:数组、vector与array之间的异同
【C/C++ 基础 数组容器比较】深入探究C++容器:数组、vector与array之间的异同
513 0
下一篇
oss云网关配置