复古 护眼 海天 深邃 暗黑 默认

CREATE SHARDING KEY GENERATE STRATEGY

描述

CREATE SHARDING KEY GENERATE STRATEGY 语法用于为当前所选逻辑库创建分片主键生成策略。

语法定义

CreateShardingKeyGenerateStrategy ::=
  'CREATE' 'SHARDING' 'KEY' 'GENERATE' 'STRATEGY' ifNotExists? keyGenerateStrategyName '(' keyGenerateStrategyDefinition ')'

ifNotExists ::=
  'IF' 'NOT' 'EXISTS'

keyGenerateStrategyDefinition ::=
  columnKeyGenerateStrategyDefinition
  | sequenceKeyGenerateStrategyDefinition

columnKeyGenerateStrategyDefinition ::=
  'TABLE' '=' tableName ',' 'COLUMN' '=' columnName ',' keyGenerateAlgorithmDefinition

sequenceKeyGenerateStrategyDefinition ::=
  'SEQUENCE' '=' sequenceName ',' keyGenerateAlgorithmDefinition

keyGenerateAlgorithmDefinition ::=
  algorithmDefinition
  | 'GENERATOR' '=' keyGeneratorName

algorithmDefinition ::=
  'TYPE' '(' 'NAME' '=' algorithmType (',' propertiesDefinition)? ')'

propertiesDefinition ::=
  'PROPERTIES' '(' key '=' value (',' key '=' value)* ')'

key ::=
  string

value ::=
  literal

keyGenerateStrategyName ::=
  identifier

tableName ::=
  identifier

columnName ::=
  identifier

sequenceName ::=
  identifier | string

keyGeneratorName ::=
  identifier

algorithmType ::=
  string

补充说明

  • columnKeyGenerateStrategyDefinition 用于定义基于逻辑表和列的主键生成策略;
  • sequenceKeyGenerateStrategyDefinition 用于定义基于序列名称的主键生成策略;
  • keyGenerateAlgorithmDefinition 支持两种方式:
    • 通过 TYPE(NAME=..., PROPERTIES(...)) 直接内联定义主键生成算法;
    • 通过 GENERATOR=... 引用已有的分片主键生成器;
  • 当使用内联算法定义时,系统会自动生成并关联对应的分片主键生成器;
  • algorithmType 为主键生成算法类型,详细信息请参考分布式主键
  • ifNotExists 子句用于避免出现 Duplicate sharding key generate strategy 错误。

示例

  • 创建列维度的分片主键生成策略,并内联定义算法
CREATE SHARDING KEY GENERATE STRATEGY order_id_strategy (
TABLE=t_order,
COLUMN=order_id,
TYPE(NAME="snowflake",PROPERTIES("worker-id"=1))
);
  • 创建列维度的分片主键生成策略,并引用已有主键生成器
CREATE SHARDING KEY GENERATE STRATEGY order_id_strategy (
TABLE=t_order,
COLUMN=order_id,
GENERATOR=snowflake_generator
);
  • 创建序列维度的分片主键生成策略
CREATE SHARDING KEY GENERATE STRATEGY order_sequence_strategy (
SEQUENCE="order_seq",
TYPE(NAME="uuid")
);
  • 使用 ifNotExists 子句创建分片主键生成策略
CREATE SHARDING KEY GENERATE STRATEGY IF NOT EXISTS order_id_strategy (
TABLE=t_order,
COLUMN=order_id,
GENERATOR=snowflake_generator
);

保留字

CREATESHARDINGKEYGENERATESTRATEGYTABLECOLUMNSEQUENCETYPENAMEPROPERTIESGENERATOR

相关链接