各类表的能力对比
Key 列和排序键
| 主键表 (Primary Key table) | 明细表 (Duplicate Key table) | 聚合表 (Aggregate table) | 更新表 (Unique Key table) | |
|---|---|---|---|---|
| Key 列和唯一约束 | 主键 PRIMARY KEY 具有唯一约束和非空约束。 | DUPLICATE KEY 不具有唯一约束。 | 聚合键 AGGREGATE KEY 具有唯一约束。 | 唯一键 UNIQUE KEY 具有唯一约束。 |
| Key 列和数据变更的关系(逻辑关系) | 如果新数据的主键值与表中原数据的主键值相同,则存在唯一约束冲突,此时新数据会替代原数据。 与更新表相比 ,主键表增强了其底层存储引擎,已经可以取代更新表。 | Duplicate Key 不具有唯一约束,因此如果新数据的 Duplicate Key 与表中原数据相同,则新旧数据都会存在表中。 | 如果新数据与表中原数据存在唯一约束冲突,则会根据聚合键和 Value 列的聚合函数聚合新旧数据。 | 如果新数据与表中原数据存在唯一约束冲突,则新数据会替代原数据。 更新表实际可以视为聚合函数为 replace 的聚合表。 |
| Key 列和排序键的关系 | 自 3.0.0 起,主键表中两者解耦。主键表支持使用 ORDER BY 指定排序键和使用 PRIMARY KEY 指定主键。 | 自 3.3.0 起,明细表支持使用 ORDER BY 指定排序键,如果同时使用 ORDER BY 和 DUPLICATE KEY,则 DUPLICATE KEY 无效。 | 自 3.3.0 起,聚合表中两者解耦。聚合表支持使用 ORDER BY 指定排序键和使用 AGGREGATE KEY 指定聚合键。排序键和聚合键中的列需要保持一致,但是列的顺序不需要保持一致。 | 自 3.3.0 起,更新表中两者解耦。更新表支持使用 ORDER BY 指定排序键和使用 UNIQUE KEY 指定唯一键。排序键和唯一键中的列需要保持一致,但是列的顺序不需要保持一致。 |
| Key 列和排序键支持的数据类型 | 数值(包括整型、布尔)、字符串、时间日期。 | 数值(包括整型、布尔、Decimal)、字符串、时间日期。 | ||
| Key 和分区/分桶列的关系 | 分区列、分桶列必须在主键中。 | 无 | 分区列、分桶列必须在聚合键中。 | 分区列、分桶列必须在唯一键中。 |