2017-02-03 40 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

相關問題