A primary must include all columns in the table's partitioning location error?

匿名 (未验证) 提交于 2019-12-03 02:20:02

问题:

I tried to create a table with range partitioning. But it shows the following error:

A primary must include all columns in the table's partitioning location.

This is my SQL statement:

CREATE TABLE `tbl_emp_confirmation` (   `fld_id` int(11) NOT NULL AUTO_INCREMENT,   `fldemp_id` varchar(100) DEFAULT NULL,   `fldempname` varchar(100) DEFAULT NULL,   `fldjoindate` varchar(100) DEFAULT NULL,   `fldconfirmdate` Date NOT NULL,   `fldresigndate` varchar(100) DEFAULT NULL,   `fldstatus` varchar(50) DEFAULT NULL,   `fldcon_status` varchar(100) DEFAULT NULL,   UNIQUE KEY `fld_id` (`fld_id`),   KEY `in_empconfirmation` (`fldemp_id`,`fldempname`,`fldjoindate`,`fldconfirmdate`)   ) PARTITION BY RANGE ( Month(fldconfirmdate))   (PARTITION p_JAN VALUES LESS THAN (TO_DAYS('2011-01-01')),  PARTITION p_FEB VALUES LESS THAN (TO_DAYS('2011-02-01')),  PARTITION p_MAR VALUES LESS THAN (TO_DAYS('2011-03-01')),  PARTITION p_APR VALUES LESS THAN (TO_DAYS('2011-04-01')),  PARTITION p_MAY VALUES LESS THAN (TO_DAYS('2011-05-01')),  PARTITION p_MAX VALUES LESS THAN MAXVALUE ); 

回答1:

You are partitioning data using fldconfirmdate, which is part of your PK, but not a part of your UNIQUE KEY fld_id.

This is extracted from the MySQL manual:

In other words, every unique key on the table must use every column in the table's partitioning expression.

CREATE TABLE `tbl_emp_confirmation` (   `fld_id` int(11) NOT NULL AUTO_INCREMENT,   `fldemp_id` varchar(100) DEFAULT NULL,   `fldempname` varchar(100) DEFAULT NULL,   `fldjoindate` varchar(100) DEFAULT NULL,   `fldconfirmdate` Date NOT NULL,   `fldresigndate` varchar(100) DEFAULT NULL,   `fldstatus` varchar(50) DEFAULT NULL,   `fldcon_status` varchar(100) DEFAULT NULL,   UNIQUE KEY `fld_id` (`fld_id`, `fldconfirmdate`),   KEY `in_empconfirmation` (`fldemp_id`,`fldempname`,`fldjoindate`,`fldconfirmdate`)   ) PARTITION BY RANGE ( Month(fldconfirmdate))   (PARTITION p_JAN VALUES LESS THAN (TO_DAYS('2011-01-01')),  PARTITION p_FEB VALUES LESS THAN (TO_DAYS('2011-02-01')),  PARTITION p_MAR VALUES LESS THAN (TO_DAYS('2011-03-01')),  PARTITION p_APR VALUES LESS THAN (TO_DAYS('2011-04-01')),  PARTITION p_MAY VALUES LESS THAN (TO_DAYS('2011-05-01')),  PARTITION p_MAX VALUES LESS THAN MAXVALUE ); 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!