开发指南—Sequence—使用限制

简介: 本文将介绍使用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;
相关文章
|
easyexcel
你要的不固定列excel导入导出,它来啦!(四)
在上篇文章中,我们简单的介绍了 excel 导入导出技术实践方案,就目前而已,使用最多的开源框架主要有以下三类,分别是:
1090 1
|
安全 网络协议 测试技术
firewalld高级配置,富语言、以及防火墙应用
firewalld高级配置,富语言、以及防火墙应用
805 0
|
缓存 弹性计算 编解码
阿里云服务器s6/c6/g6/r6/u1/c7/g7/r7实例规格适用场景汇总
目前通过阿里云活动购买云服务器时,除了轻量应用服务器之外,活动内的云服务器实例规格主要以s6/c6/g6/r6/u1/c7/g7/r7这几种为主,本文主要为大家介绍了阿里云服务器的实例规格是什么,有什么用?并汇总了阿里云轻量应用服务器和阿里云服务器s6/c6/g6/r6/u1/c7/g7/r7实例规格适用场景,以供大家了解和选择适合自己的需求的实例规格。
阿里云服务器s6/c6/g6/r6/u1/c7/g7/r7实例规格适用场景汇总
|
Web App开发 自然语言处理 机器人
十行代码即可为你的网站添加语音小助手,无需任何外部依赖
前面一篇文章有讲到通过 Web Speech API 来朗诵诗歌,写了个诗歌朗诵的小网站。 而 Web Speech API 除了语音输出外,还支持语音识别,你可以通过 Web Speech API 收集用户的语音指令,为你的网站添加一些有趣的功能:比如在小说阅读网站上添加语音指令,让你可以语音控制翻书、下一章等,让你可以更方便的一边看小说一边吃薯片。🐶
十行代码即可为你的网站添加语音小助手,无需任何外部依赖
|
测试技术 数据库 数据安全/隐私保护
Jmeter系列(47)- 针对需要登录的接口如何做性能测试?
Jmeter系列(47)- 针对需要登录的接口如何做性能测试?
668 0
Jmeter系列(47)- 针对需要登录的接口如何做性能测试?
|
数据库
NuGet的使用和服务搭建
NuGet的使用和服务搭建
818 0
NuGet的使用和服务搭建
|
Shell 网络安全 Apache
ansible playbook剧本编写以及综合案例详解(十二)
ansible playbook剧本 1.Ad-Hoc简介 Ad-Hoc其实是一个概念性的名字,是相对于写ansible playbook来说的,类似于命令行敲入shell命令和写shell脚本两者之间的关系。 如果我们敲入一些目录去比较快的完成一些事情,而不需要将这些命令保存下来,这样的命令叫做ad-hoc命令,说白了就是ansible的模块。
1034 0
ansible playbook剧本编写以及综合案例详解(十二)
|
传感器 数据采集 监控
打造智能化的园区管理系统
本系统通过海创物联网综合管控平台授权感知视频监控、门禁、人脸识别、梯控、水电表、大门人行通道、车辆管理、动环监控、充电桩、系统集成安装等实现设备的综合管控。有效提升园区管理水平服务能力、提高智能设备的运行保障能力、促进园区经济与环境协调发展。
10517 1