PolarDB-X 1.0-SQL 手册-Sequence-Sequence限制及注意事项

本文涉及的产品
云原生数据库 PolarDB 分布式版,标准版 2核8GB
简介: 限制与注意事项转换 Sequence 类型时,必须指定 START WITH 起始值;单元化 Group Sequence 不支持作为源或目标的类型转换,也不支持起始值以外的参数修改;属于同一个全局唯一数字序列分配空间的每个单元化 Group Sequence,必须指定相同的单元数量和不同的单元索引;在 PolarDB-X 非拆分模式库(即后端仅关联一个已有的 RDS 物理库)、或拆分模式库中仅有单表(即所有表都是单库单表,且无广播表)的场景下执行 INSERT 时, PolarDB-X 会自动优化并直接下推语句,绕过优化器中分配 Sequence 值的部分。此时 INSERT INT

限制与注意事项

  • 转换 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:或者依赖于 PolarDB-X 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):
  1. mysql> SHOW SEQUENCES;
  2. +---------------------+-------+--------------+------------+-----------+-------+-------+
  3. | NAME                | VALUE | INCREMENT_BY | START_WITH | MAX_VALUE | CYCLE | TYPE  |
  4. +---------------------+-------+--------------+------------+-----------+-------+-------+
  5. | AUTO_SEQ_xkv_t_item |0     | N/A          | N/A        | N/A       | N/A   | GROUP |
  6. | AUTO_SEQ_xkv_shard  |0     | N/A          | N/A        | N/A       | N/A   | GROUP |
  7. +---------------------+-------+--------------+------------+-----------+-------+-------+
  8. 2 rows inset(0.04 sec)
  1. 比如 xkv_t_item 表有冲突,并且 xkv_t_item 表主键是 ID,那么从 PolarDB-X 获取这个表最大主键值:
  1. mysql> SELECT MAX(id) FROM xkv_t_item;
  2. +-----------+
  3. | MAX(id)   |
  4. +-----------+
  5. |8231      |
  6. +-----------+
  7. 1 row inset(0.01 sec)
  1. 更新 PolarDB-X Sequence 表中对应的值,这里更新成比 8231 要大的值,比如 9000,更新完成后,后续插入语句生成的自增主键将不再报错:
  1. mysql> ALTER SEQUENCE AUTO_SEQ_xkv_t_item START WITH 9000;
  2. Query OK,1 row affected (0.01 sec)
相关文章
|
2月前
|
SQL 数据可视化 关系型数据库
MCP与PolarDB集成技术分析:降低SQL门槛与简化数据可视化流程的机制解析
阿里云PolarDB与MCP协议融合,打造“自然语言即分析”的新范式。通过云原生数据库与标准化AI接口协同,实现零代码、分钟级从数据到可视化洞察,打破技术壁垒,提升分析效率99%,推动企业数据能力普惠化。
238 3
|
6月前
|
SQL 存储 关系型数据库
第二篇:关系型数据库的核心概念与 SQL 基础
本篇内容深入浅出地讲解了关系型数据库的核心概念与SQL基础,适合有一定计算机基础的学习者。文章涵盖数据库的基本操作(CRUD)、数据类型、表的创建与管理等内容,并通过实例解析SELECT、INSERT、UPDATE、DELETE等语句的用法。此外,还推荐了多种学习资源与实践建议,帮助读者巩固知识。学完后,你将掌握基础数据库操作,为后续高级学习铺平道路。
379 1
|
SQL 存储 关系型数据库
关系型数据库SQLserver基本 SQL 操作
【7月更文挑战第28天】
178 4
|
9月前
|
SQL 关系型数据库 分布式数据库
利用 PolarDB PG 版向量化引擎,加速复杂 SQL 查询!完成任务领发财新年抱枕!
利用 PolarDB PG 版向量化引擎,加速复杂 SQL 查询!完成任务领发财新年抱枕!
274 14
|
SQL 安全 关系型数据库
关系型数据库SQL server DELETE 语句
【8月更文挑战第3天】
359 10
|
SQL 关系型数据库 数据库
关系型数据库SQL server UPDATE 语句
【8月更文挑战第3天】
464 10
|
SQL 关系型数据库 BI
关系型数据库SQL server INSERT 语句
【8月更文挑战第3天】
404 9
|
SQL 关系型数据库 分布式数据库
PolarDB产品使用问题之遇到慢SQL问题,该如何解决
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
SQL 关系型数据库 数据库
|
SQL 关系型数据库 数据库

相关产品

  • 云原生分布式数据库 PolarDB-X