本文将为您介绍PolarDB-X中自增列的相关概念和原理。

概念

PolarDB-X支持通过关键字AUTO_INCREMENT为列设置自增属性,能够自动为列填充全局唯一值。

  • INSERT语句没有包含自增列,或者为自增列指定的值是0或NULL时,PolarDB-X会自动为该列分配一个全局唯一的值;
  • INSERT语句显式为自增列插入值时,PolarDB-X会使用指定的显式值,并自动跟随插入的显式值,使后续自动填充的值大于已插入的显式值;
  • 在AUTO模式数据库中,默认的自增列行为,在各方面(唯一性、单调性、连续性等)与MySQL已经一致。
说明 关于AUTO模式数据库与DRDS模式数据库的介绍,请参见AUTO模式数据库与DRDS模式数据库

原理

PolarDB-X中,如果创建表时通过AUTO_INCREMENT指定了自增列,为了保证自增列的全局唯一性,则自动为该表创建并关联一个Sequence对象,在插入数据时使用关联的Sequence对象分配全局唯一值并进行自动填充。

根据数据库模式的不同,PolarDB-X在创建表时自动关联了不同的默认Sequence类型:
  • 在AUTO模式库中,默认关联的是New Sequence,具备以下特性:
    • 唯一性:保证全局唯一;
    • 单调性:保证全局单调递增;
    • 连续性:保证全局连续(没有异常报错或者实例重启等情况下);
    • 兼容性:与MySQL自增列的特性很好地兼容。
  • 在DRDS模式库中,默认关联的是Group Sequence,具备以下特性:
    • 唯一性:保证全局唯一;
    • 单调性:在计算节点内部保证单调递增,不保证全局单调递增;
    • 连续性:在连接计算节点的会话和缓存区间范围内,保证连续(没有异常报错或者实例重启等情况下);
    • 兼容性:与MySQL自增列的唯一性兼容,其它特性与MySQL有所差异。

可以根据实际需求自定义想要关联的Sequence类型,具体方法请参见关联Sequence,不同类型的Sequence特性和适用场景,请参见概述