MySQL - UNIQUE INDEX 必须包含 table 分区函数中的所有列
MySQL - A UNIQUE INDEX must include all columns in the table's partitioning function
我有以下 table 设置(为示例简化了列名):
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 KEY
和 UNIQUE KEY
定义中。我在这里做错了什么?
将 SERIAL
更改为 INT UNSIGNED AUTO_INCREMENT
(或任何等效项)。 manual 表示:
SERIAL is an alias for BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE.
这意味着有一个隐含的
UNIQUE(i)
其中不包括 d
分区键。
需要 CHARACTER SET latin1
以避免另一个关于索引长度的错误。 (对于一个索引,8 列通常是 "too long"。)
(并查看我的评论。)
我有以下 table 设置(为示例简化了列名):
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 KEY
和 UNIQUE KEY
定义中。我在这里做错了什么?
将 SERIAL
更改为 INT UNSIGNED AUTO_INCREMENT
(或任何等效项)。 manual 表示:
SERIAL is an alias for BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE.
这意味着有一个隐含的
UNIQUE(i)
其中不包括 d
分区键。
CHARACTER SET latin1
以避免另一个关于索引长度的错误。 (对于一个索引,8 列通常是 "too long"。)
(并查看我的评论。)