mysql - Mysql 每月分区 - 错误代码:1503 A PRIMARY KEY must include all columns in the table's partitioning function
问题描述
这里有类似的案例,但对我没有任何帮助。我创建了表:
CREATE TABLE `message` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`message_content` longtext,
`recipient` varchar(255) DEFAULT NULL,
`send_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `send_time` (`send_time`, `id`))
ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
我需要添加分区 - 每月创建新分区:
ALTER TABLE messages.message
PARTITION BY RANGE(TO_DAYS(`send_time`))
(PARTITION p01 VALUES LESS THAN (TO_DAYS('2019-01-01')) ENGINE = InnoDB,
PARTITION p02 VALUES LESS THAN (TO_DAYS('2019-02-01')) ENGINE = InnoDB,
PARTITION p03 VALUES LESS THAN (TO_DAYS('2019-03-01')) ENGINE = InnoDB,
PARTITION p04 VALUES LESS THAN (TO_DAYS('2019-04-01')) ENGINE = InnoDB,
PARTITION p05 VALUES LESS THAN (TO_DAYS('2019-05-01')) ENGINE = InnoDB,
PARTITION p06 VALUES LESS THAN (TO_DAYS('2019-06-01')) ENGINE = InnoDB,
PARTITION p07 VALUES LESS THAN (TO_DAYS('2019-07-01')) ENGINE = InnoDB,
PARTITION p08 VALUES LESS THAN (TO_DAYS('2019-08-01')) ENGINE = InnoDB,
PARTITION p09 VALUES LESS THAN (TO_DAYS('2019-09-01')) ENGINE = InnoDB,
PARTITION p10 VALUES LESS THAN (TO_DAYS('2019-10-01')) ENGINE = InnoDB,
PARTITION p11 VALUES LESS THAN (TO_DAYS('2019-11-01')) ENGINE = InnoDB,
PARTITION p12 VALUES LESS THAN (TO_DAYS('2019-12-01')) ENGINE = InnoDB)
我已经尝试过其他答案的解决方案(例如添加UNIQUE KEY
),但对我没有任何帮助。这是我得到的:
SQL State : HY000
Error Code : 1503
Message : A PRIMARY KEY must include all columns in the table's partitioning function
解决方案
您的分区列必须是您的主键的一部分,拥有唯一索引是不够的。请参阅mysql 文档:
管理这种关系的规则可以表示如下:分区表的分区表达式中使用的所有列必须是该表可能具有的每个唯一键的一部分。[...] 这还包括表的主键,因为它根据定义是唯一键。
您可能希望将唯一键设为主键,例如:
PRIMARY KEY (`id`, `send_time`)
推荐阅读
- javascript - 使用javascript的所有网页中的静态导航栏
- r - 具有因子的数据帧的复杂计数
- excel - 将 INDIRECT 插入另一个公式以替换固定值
- python - 如何根据预定义列表排列集合的输出
- python - Django 创建新用户失败
- linux - 为什么这种使用 sys_write 的尝试没有做任何事情?
- jquery - 我的 Jquery 点击功能针对具有相同类名的所有元素
- c - 从 R 到 C 处理列表并访问它
- azure - 如何在 API-Management 的开发者门户中对 API 调用进行分组
- json - 具有子节点元素列表的杰克逊 json 反序列化器