首页 > 解决方案 > 如何在给定的表结构中创建月份分区

问题描述

如何创建月份分区

CREATE TABLE `now_articles` (
  `articleId` bigint(19) NOT NULL AUTO_INCREMENT,
  `author` varchar(255) NOT NULL,
  `title` varchar(255) NOT NULL DEFAULT '',
  `title_md5` varchar(35) NOT NULL,
  `description` longtext NOT NULL,
  `url` varchar(255) NOT NULL,
  `urltoImage` varchar(255) NOT NULL,
  `publishedAt` datetime NOT NULL,
  `source` varchar(255) NOT NULL,
  `sub_source_name` varchar(255) NOT NULL,
  `categories` varchar(255) NOT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `keywords` varchar(255) NOT NULL,
  `categoryOrder` enum('0','1','-1') DEFAULT '0',
  `homeOrder` enum('0','1','-1') DEFAULT '0',
  PRIMARY KEY (`articleId`),
  UNIQUE KEY `title_md5` (`title_md5`),
  KEY `categories` (`categories`),
  KEY `source` (`source`),
  KEY `publishedAt` (`publishedAt`)
) ENGINE=MyISAM 

标签: mysql

解决方案


我没有 5.6,但在 5.7 中,alter 表的正确语法是

更改表 now_articles PARTITION BY HASH(month(publishedat)) PARTITIONS 12;

但是当你运行它时,你会得到两个错误

ERROR 1503 (HY000): PRIMARY KEY 必须包含表分区函数中的所有列 ERROR 1503 (HY000): UNIQUE INDEX 必须包含表分区函数中的所有列

这意味着您必须修改您的主键和唯一键以包含 publishat。


推荐阅读