MySQL按范围更改表分区 - 错误代码:1503。主键必须包含表的分区功能中的所有列

时间:2018-03-30 16:38:14

标签: mysql database partitioning

我有一个MySQL表(包含数据):

CREATE TABLE IF NOT EXISTS `lc6_words` (
  `jp_wkey` BIGINT NOT NULL AUTO_INCREMENT,
  `jp_word` varchar(255) NOT NULL,
  `jp_fcharascii` INT NOT NULL,
  `jp_word_occ` BIGINT NOT NULL DEFAULT 1,
  UNIQUE(`jp_word`),
  PRIMARY KEY (`jp_wkey`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

我想在其中添加分区(通过更改):

ALTER TABLE lc6_words PARTITION BY RANGE COLUMNS(jp_fcharascii)(
    PARTITION pw2486 VALUES LESS THAN (2486),
    PARTITION pw2487 VALUES LESS THAN (2487),
    PARTITION pw2488 VALUES LESS THAN (2488),
    PARTITION pw2489 VALUES LESS THAN (2489),
    PARTITION pwmax VALUES LESS THAN (MAXVALUE)
);

我收到错误:

  

错误代码:1503。主要键必须包含所有列   表格的分区功能

MySQL版本:5.7.19 / Win 10 64bit

实现分区保持表结构完整的任何方法?提前谢谢。

1 个答案:

答案 0 :(得分:1)

错误很清楚地解释了它。

https://dev.mysql.com/doc/refman/5.7/en/partitioning-limitations-partitioning-keys-unique-keys.html也说:

  

分区表达式中使用的所有列   table必须是表可能具有的每个唯一键的一部分。

     

换句话说,表中的每个唯一键都必须使用每个列   表的分区表达式。

该文档页面继续显示可能会或可能不会被分区的表格的几个示例,或者可能在某些更改后进行分区。

您的表类似于doc页面中的一个示例,该示例显示为无效分区请求的示例。

有两种解决方法,但都涉及更改表结构:

  • jp_fcharascii添加到PRIMARY KEY和jp_word上的UNIQUE KEY。
  • 从表中删除PRIMARY KEY和UNIQUE KEY约束(即使您保留定义约束的列)。

但你在问题中的条件"保持桌面结构完好无损"排除任何改动。