2013-07-31 31 views
1

我想根據年份範圍對錶進行分區。根據年份對MYISAM eninge的mysql表進行分區

但我收到以下錯誤「#1503 - 主鍵必須包括表的分區功能中的所有列」。

以下是我的查詢

CREATE TABLE IF NOT EXISTS `t2123` (
    `j_id` int(11) NOT NULL AUTO_INCREMENT, 
    `u_id` int(11) NOT NULL, 
    `w_id` int(5) NOT NULL, 
    `p_id` int(5) NOT NULL, 
    `s_p_id` int(5) NOT NULL, 
    `p_t` tinyint(3) unsigned NOT NULL, 
    `a_n` int(5) NOT NULL,  
    `type` enum('GP','NGP','PGP','PAGP') NOT NULL, 
    `p_p` int(11) NOT NULL, 
    `s_p` int(11) NOT NULL, 
    `p_c` float NOT NULL, 
    `s_c` float NOT NULL, 
    `s_p_p_c` float NOT NULL DEFAULT '0', 
    `g_d` date NOT NULL, 
`datetimes` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00', 
    `c_c` double DEFAULT '0', 
    `c_m` double DEFAULT '0', 
    `c_y` double DEFAULT '0', 
    `c_k` double DEFAULT '0' , 
    `c_total` double DEFAULT '0' , 
    `p_a` float DEFAULT '0', 
    PRIMARY KEY (`j_id`), 
    UNIQUE KEY(j_id, g_d), 

    KEY `u_id` (`u_id`), 
    KEY `w_id` (`w_id`), 
    KEY `p_id` (`p_id`), 
    KEY `s_p_id` (`s_p_id`), 
    KEY `a_n` (`a_n`), 
    KEY `g_d` (`g_d`) 
) engine=myisam PARTITION BY RANGE (j_id + year(g_d)) (
    PARTITION t2_2012 VALUES LESS THAN (2012), 
    PARTITION t2_2013 VALUES LESS THAN (2013) 
); 

請建議我我如何才能創建分區?

+2

主鍵請,請,請,使用更明確的列名,或者你的同事會恨你。 – RandomSeed

回答

1

隨着錯誤消息建議:

主鍵必須包括在表的分區函數的所有列

你的分區功能是指j_idg_d,而你的主鍵只涵蓋j_id

順便說一句,你UNIQUE約束是無用的(UNIQUE KEY(j_id, g_d)),因爲j_id是定義已經是唯一的(這是主鍵)。

事實上,你可能希望你的上(j_id, g_d)

相關問題