我有一个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
实现分区保持表结构完整的任何方法?提前谢谢。
答案 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。但你在问题中的条件"保持桌面结构完好无损"排除任何改动。