创建表(CREATE TABLE) 参数说明 tablename:待创建的数据表名称。 columnname:指定数据列名称。 columndefinition:指定数据列定义,可包括类型、能否为空、默认值等属性。 indexname:指定索引名称。 indextype:指定索引类型。 keypart:指定组成索引的数据列。 enginename:指定要使用的存储引擎,常用的引擎有innodb等。 charsetname:指定数据库的字符集。支持设置为utf8和utf8mb4字符集。 collationname:指定数据库的排序规则。支持设置为utf8generalci和utf8mb4bin排序规则。 其中: partitionoption以SQL风格写法来指定分库分表信息,shardinghint以HINT风格来指定分库分表信息,两者虽然写法不同,但作用相同。在简单使用场景可以使用SQL风格分片写法或HINT风格分片写法任意一种,而由于HINT风格分片写法支持更多的分库分表算法,功能更强大一些,如在复杂使用场景只能用HINT风格分片写法。 partitionoption和shardinghint支持的分库分表算法存在差异,详情如下: 说明 更多算法信息,请参见分片算法。 分库分表算法 partitionoption shardinghint (整数)取模(PartitionByMod) 支持(关键字HASH) 支持 字符串hashCode取模(PartitionByStringMod) 支持(关键字HASHSTRING) 支持 枚举(PartitionByFileMap) 不支持 支持 时间范围(PartitionByDateRange) 不支持 支持 枚举分组取模分片(PartitionByEnumAndMod) 不支持 支持 枚举分组字符串hashCode取模分片(PartitionByEnumAndStringMod) 不支持 支持 数值范围(PartitionByIntRange) 支持(关键字RANGE) 支持 partitionoption语法: 参数说明 GLOBAL:用于创建全局表。 SINGLE:用于创建单片表,且只能为单个逻辑库创建单个物理表。 DN: 用于指定待使用的RDS ,对于单片表只能使用一个RDS。仅当逻辑数据库只包含一个RDS时可省略此参数,将会使用已绑定的唯一RDS。 UDALPARTITION BY:用于创建分片(分库)表。仅支持整数取模(PartitionByMod)、字符串hashCode取模(PartitionByStringMod)和数值范围(PartitionByIntRange)三种算法。 HASH(columnname):用于指定分片算法为整数取模(PartitionByMod),columnname指定用于计算分片的数据列,此处只允许单个列。 HASHSTRING(columnname): 用于指定分片算法为字符串hashCode取模(PartitionByStringMod),columnname指定用于计算分片的数据列,这里只允许单个列。 RANGE(columnname):用于指定分片算法为数值范围(PartitionByIntRange),columnname指定用于计算分片的数据列,这里只允许单个列。 RANGEVALUES:用于指定数值范围分片算法的各个范围值,只允许int值。且数量必须与DN数量保持一致。 DN:用于指定要使用的RDS,默认值为当前逻辑数据库包含的所有RDS。 PARTITIONS:用于指定分表的数量,默认值为1。当省略时,将使用默认值。 BUCKETS:用于指定分桶的数量,无默认值,必须显式指定。 建表语句说明 分片表从类型上来说主要分成3类,分别为库内分表、库内分桶、既不分表也不分桶。本文将按照分片表类型来简单为您介绍建表语句。 库内分表 既分库(分片)也分表,通过在UDALPARTITION BY指定两次分片算法来依次指定分库算法和分表算法,主要语法格式为: plaintext UDALPARTITION BY 算法1(column1), 算法2(column2) 此处的算法是指上文介绍的HASH或HASHSTRING。另外可搭配PARTITIONS参数来指定分表数量,搭配DN参数指定待使用的RDS列表。 库内分桶 既分库(分片)也分桶,由于分桶是通过虚拟分片来实现,因此只需要指定一次分片算法即可,主要语法格式为: plaintext UDALPARTITION BY 算法(column) 此处的算法是指上文介绍的HASH或HASHSTRING。注意,必须添加BUCKETS参数来指定分桶数量,也可搭配DN参数指定待使用的RDS列表。 既不分表也不分桶 对应只分库的情况,只需指定一次分片算法,主要语法格式为: plaintext UDALPARTITION BY 算法(column) 由于不需要分表或分桶,因此无需使用PARTITIONS或BUCKETS参数,但可搭配DN参数指定待使用的RDS列表。 shardinghint语法: @@table name’{tablename}’:指定数据表名称。 type:指定表的类型。 支持的类型及对应的关键字如下: 全局表:global 单片表:single 分库分表:inner 库内分桶或既不分表也不分库:sharding dn:指定要使用的RDS列表。对于单片表只能使用一个RDS。当忽略此项时默认使用当前逻辑数据库包含的所有RDS。 shardingalgo:指定分片算法。 注意 该参数必须与shardingid搭配使用。 shardingid:指定用于计算分片的数据列。 注意 该参数必须与shardingalgo搭配一起使用。 buckets:指定分桶数量,合法取值范围为[1, 128]。 注意 当创建库内分桶(分库分桶)类型的数据表时必须指定此项。 shardingarea: 用于枚举分组取模分片(PartitionByEnumAndMod)和枚举分组字符串hashCode取模分片(PartitionByEnumAndStringMod)算法,指定分组列。使用这两种算法时必须指定此项。 rangevalues:用于指定数值范围(PartitionByIntRange)分片算法的各个范围值。 mapfile: 用于分片的枚举算法中指定各个枚举值对应的分片序号,枚举算法包括枚举(PartitionByFileMap)、枚举分组取模分片(PartitionByEnumAndMod)和枚举分组字符串hashCode取模分片(PartitionByEnumAndStringMod)。 defaultnode:用于分片的枚举算法中指定默认节点,枚举算法包括枚举(PartitionByFileMap)、枚举分组取模分片(PartitionByEnumAndMod)和枚举分组字符串hashCode取模分片(PartitionByEnumAndStringMod)。 startdate:用于分片的时间范围(PartitionByDateRange)算法中指定开始日期。 timeunittype:用于分片的时间范围(PartitionByDateRange)算法中指定时间单元类型,支持设置为day、 week,、month和year。 timeunitlen:用于分片的时间范围(PartitionByDateRange)算法中指定时间单元值。 innershardingalgo:指定分表算法。 注意 该参数必须与innershardingid搭配一起使用。 innershardingid:指定用于计算分表的数据列。 注意 该参数必须与innershardingalgo搭配一起使用。 innertotal:指定分表数量。 注意 当创建分库分表类型的数据表时必须指定此项。 innermapfile:用于分表的枚举算法中指定各个枚举值对应的分片序号,枚举算法包括枚举(PartitionByFileMap)、枚举分组取模分片(PartitionByEnumAndMod)和枚举分组字符串hashCode取模分片(PartitionByEnumAndStringMod)。 innerdefaultnode:用于分表的枚举算法中指定默认节点,枚举算法包括枚举(PartitionByFileMap)、枚举分组取模分片(PartitionByEnumAndMod)和枚举分组字符串hashCode取模分片(PartitionByEnumAndStringMod)。 innerstartdate:用于分表的时间范围(PartitionByDateRange)算法中指定开始日期。 innertimeunittype:用于分表的时间范围(PartitionByDateRange)算法中指定时间单元类型,支持设置为day、 week,、month和year。 innertimeunitlen:用于分表的时间范围(PartitionByDateRange)算法中指定时间单元值。