簡體   English   中英

修改AUTO_INCREMENT PRIMARY KEY進行分區

[英]Modifying AUTO_INCREMENT PRIMARY KEY for partitioning

我需要在時態數據中對MySQL表進行分區(字段從下表開始)。

CREATE TABLE `table1` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT, 
  `fk_id` bigint(20) NOT NULL,  
  `begin` bigint(20) NOT NULL,     
  PRIMARY KEY (`id`),
  KEY `FK1E57078DB20EC268` (`fk_id`)
) ENGINE=MyISAM AUTO_INCREMENT=10443288 DEFAULT CHARSET=latin1

當我嘗試像這樣分區時:

alter table table1 partition by range (begin) (
PARTITION until_2010_07 VALUES LESS THAN (1280620800000),
PARTITION 2010_08 VALUES LESS THAN (1283299200000),
PARTITION 2010_09 VALUES LESS THAN (1285891200000),
PARTITION 2010_10 VALUES LESS THAN (1288569600000),
PARTITION 2010_11 VALUES LESS THAN (1291161600000),
PARTITION 2010_12 VALUES LESS THAN (1293840000000),
PARTITION from_2011 VALUES LESS THAN MAXVALUE
);

我收到MySQL錯誤: ERROR 1503 (HY000): A PRIMARY KEY must include all columns in the table's partitioning function

據我所知,從mysql doc中,分區列應該屬於主鍵。 對我來說問題是我想要將PRIMARY_KEY更改為復合的,即PRIMARY KEY ('id','fk_id','begin')而不更改現有的id列(因為它是應用程序中使用的字段)生成可收藏的網址,因此重新編號ID不是一個選項)

如何更改PRIMARY_KEY以便我可以進行分區?

我終於找到了辦法,我為其他遇到這個問題的人回答

//drop auto_increment capability
alter table table1 change column id id BIGINT NOT NULL;
//in one line, drop primary key and rebuild one
alter table table1 drop primary key, add primary key(id,fk_id,begin);
//re add the auto_increment capability, last value is remembered
alter table table1 change column id id BIGINT NOT NULL AUTO_INCREMENT;
//build the partition
alter table table1 partition by range (begin) ( 
    PARTITION until_2010_07 VALUES LESS THAN (1280620800000), 
    PARTITION 2010_08 VALUES LESS THAN (1283299200000), 
    PARTITION 2010_09 VALUES LESS THAN (1285891200000), 
    PARTITION 2010_10 VALUES LESS THAN (1288569600000), 
    PARTITION 2010_11 VALUES LESS THAN (1291161600000), 
    PARTITION 2010_12 VALUES LESS THAN (1293840000000), 
    PARTITION from_2011 VALUES LESS THAN MAXVALUE 
);

分區確實很容易,但我建議人們在生成實際使用數據庫之前創建主鍵時要考慮它:-)

我的筆記本電腦每步需要3分鍾,然后我必須停止服務以保持數據庫的一致性

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM