2017-02-03 41 views
0

我有以下的表格设置(简化的例子列名):MySQL的 - 唯一索引必须包括表的分区函数的所有列

CREATE TABLE data_2016 
(`a` INTEGER , 
    `b` INTEGER, 
    `c` VARCHAR(255), 
    `d` BIGINT, 
    `e` VARCHAR(255) NOT NULL, 
    `f` INTEGER , 
    `g` BIGINT , 
    `h` BIGINT , 
    `i` SERIAL, 
PRIMARY KEY (`d`,`i`), 
UNIQUE KEY(`b`, `c`, `d`, `e`, `f`,`g`,`h`,`i`), 
INDEX `idx1` (`b`,`c`) 
) 
PARTITION BY RANGE (`d`) (
PARTITION p1 VALUES LESS THAN (...) 
... 
PARTITION px VALUES LESS THAN (MAXVALUE) 
) 

但我得到异常A UNIQUE INDEX must include all columns in the table's partitioning function

我通过文档阅读,并从我可以告诉,我有正确的设置。分区列d包含在PRIMARY KEYUNIQUE KEY定义中。我在这里做错了什么?

+0

我认为在这种情况下,唯一索引指的是主键,而不是唯一的关键。 –

+0

@GordonLinoff但分区列在 – aarbor

+0

。 。 '我'列。 –

回答

1

更改SERIALINT UNSIGNED AUTO_INCREMENT(或任何等价物)。 manual说:

SERIAL是BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE的别名。

这意味着有一个隐含的

UNIQUE(i) 

不包括d,分区键。

CHARACTER SET latin1是需要的,以避免关于索引长度的另一个错误。 (8列通常是“太长”的一个指标。)

(看看我的意见。)

+0

是的,就是这样!谢谢! – aarbor

相关问题