MySQL - 一个独特的索引必须包含表中分区函数

时间:2017-02-03 17:10:53

标签: mysql sql indexing database-partitioning

我有以下表格设置(示例中简化了列名称):

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定义中。我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

SERIAL更改为INT UNSIGNED AUTO_INCREMENT(或等同的任何内容)。 manual说:

  

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

这意味着存在隐含的

UNIQUE(i)

其中不包括d,分区键。

需要

CHARACTER SET latin1以避免有关索引长度的其他错误。 (对于索引,8列通常“太长”。)

(并查看我的评论。)