MySQL分区BY RANGE不适用于主键?

时间:2012-11-05 15:29:26

标签: mysql

Partition BY RANGE是否不能应用于具有自动递增主键的表? 我问它是因为看到了一些(12)create table语句的例子,它没有主键定义。而且我的create table语句给了我错误:

  

PRIMARY KEY必须包含表格分区函数中的所有列

这是我的陈述

CREATE TABLE `tbl_point` (
   `id` int(11) NOT NULL AUTO_INCREMENT,
   `cord_x` double DEFAULT NULL,
   `cord_y` double DEFAULT NULL,
   `angle` int DEFAULT NULL,
   PRIMARY KEY (`id`)
)
PARTITION BY RANGE (angle) (
   PARTITION p0 VALUES LESS THAN (91),
   PARTITION p1 VALUES LESS THAN (181),
   PARTITION p2 VALUES LESS THAN (271),
   PARTITION p3 VALUES LESS THAN (361)
) 

还有一个问题:角度列可以是双重类型吗?因为我把它设置为double时出现了这个错误:

  

PARTITION函数返回错误的类型

感谢。

1 个答案:

答案 0 :(得分:1)

第一条错误消息非常明确:

  

PRIMARY KEY必须包含表格分区函数中的所有列

您必须按主键分区,或在主键中包含angle

我想你不想要后者,所以前者就是解决方案。

至于第二个错误:

  

PARTITION函数返回错误的类型

实际上,分区函数(这里,“angle”是所谓的“函数”,将其视为标识函数)必须返回一个整数,如in the manual所述:

  

分区键必须是整数列或解析为整数的表达式。