Je dois partitionner une table MySQL parmi les données temporelles (le champ commence dans le tableau suivant).Modification de la clé primaire AUTO_INCREMENT pour le partitionnement
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
Lorsque je tente de partition comme ceci:
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
);
J'obtiens une erreur MySQL: ERROR 1503 (HY000): A PRIMARY KEY must include all columns in the table's partitioning function
Si je comprends bien le mysql doc, une colonne de partitionnement devrait appartient à la clé primaire . Le problème pour moi est que je veux changer le PRIMARY_KEY pour être un composé PRIMARY KEY ('id','fk_id','begin')
sans changer les colonnes id existantes (parce que c'est un champ qui est utilisé dans l'application pour générer des URL bookmarkable, donc renuméroter les ID n'est pas une option
Comment puis-je modifier PRIMARY_KEY afin de pouvoir effectuer mon partitionnement?
Pourquoi avez-vous besoin de laisser tomber la incrémentation automatique? Ne devriez-vous pas être en mesure de laisser tomber sa clé primaire tout en conservant l'incrément automatique? –