Erreur Mysql lors de l'ajout de partition, raison de l'erreur "1503" : Les colonnes de la formule dans chaque table de partition doivent être incluses dans la clé primaire "clé unique", sinon une erreur sera signalée ; Le mot-clé "first" PRIMARY KEY" crée une clé primaire composite, ajoute le champ de partitionnement à la clé primaire, puis effectue des opérations de partitionnement.
(Tutoriel recommandé : Tutoriel vidéo mysql )
Si le champ de partition n'est pas inclus dans le champ de clé primaire , tel que table La clé primaire de A est ID, le champ de partition est createtime et il est partitionné par plage de temps. Le code est le suivant :
CREATE TABLE T1 ( id int(8) NOT NULL AUTO_INCREMENT, createtime datetime NOT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 PARTITION BY RANGE(TO_DAYS (createtime)) ( PARTITION p0 VALUES LESS THAN (TO_DAYS('2010-04-15')), PARTITION p1 VALUES LESS THAN (TO_DAYS('2010-05-01')), PARTITION p2 VALUES LESS THAN (TO_DAYS('2010-05-15')), PARTITION p3 VALUES LESS THAN (TO_DAYS('2010-05-31')), PARTITION p4 VALUES LESS THAN (TO_DAYS('2010-06-15')), PARTITION p19 VALUES LESS ThAN MAXVALUE);
Invite d'erreur : #1503
A PRIMARY KEY MUST INCLUDE ALL COLUMNS IN THE TABLE'S PARTITIONING FUNCTION
18.5.1. Clés de partitionnement, clés primaires et clés uniquesLe champ de partition doit être contenu dans le champ de clé primaire, c'est pourquoi MYSQL le considérera de cette façon :Cette section traite de la relation des clés de partitionnement avec les clés primaires et les clés uniques. La règle régissant cette relation peut être exprimée comme suit : Toutes les colonnes utilisées dans l'expression de partitionnement d'une table partitionnée doivent faire partie de chaque clé unique que la table peut avoir En d'autres termes, chaque clé unique de la table doit utiliser chaque colonne de l'expression de partitionnement de la table (. Cela inclut également la clé primaire de la table, puisqu'il s'agit par définition d'une clé unique. Ce cas particulier est abordé plus loin dans cette section.) Par exemple, chacune des instructions de création de table suivantes n'est pas valide :
Méthode 1 :
Conformément aux exigences de MYSQL, ajoutez le champ de partition à la clé primaire pour former une clé primaire compositeCREATE TABLE T1 ( id int(8) NOT NULL AUTO_INCREMENT, createtime datetime NOT NULL, PRIMARY KEY (id,createtime) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 PARTITION BY RANGE(TO_DAYS (createtime)) ( PARTITION p0 VALUES LESS THAN (TO_DAYS('2010-04-15')), PARTITION p1 VALUES LESS THAN (TO_DAYS('2010-05-01')), PARTITION p2 VALUES LESS THAN (TO_DAYS('2010-05-15')), PARTITION p3 VALUES LESS THAN (TO_DAYS('2010-05-31')), PARTITION p4 VALUES LESS THAN (TO_DAYS('2010-06-15')), PARTITION p19 VALUES LESS ThAN MAXVALUE);
Méthode 2 :
Puisque MYSQL doit inclure le champ de partition dans la clé primaire pour créer une partition, est-il possible de ne pas spécifier le champ de clé primaire lors de la création du une table ? Du drap de laine ? ? Le test est le suivant :CREATE TABLE T1 ( id int(8) NOT NULL , createtime datetime NOT NULL ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 PARTITION BY RANGE(TO_DAYS (createtime)) ( PARTITION p0 VALUES LESS THAN (TO_DAYS('2010-04-15')), PARTITION p1 VALUES LESS THAN (TO_DAYS('2010-05-01')), PARTITION p2 VALUES LESS THAN (TO_DAYS('2010-05-15')), PARTITION p3 VALUES LESS THAN (TO_DAYS('2010-05-31')), PARTITION p4 VALUES LESS THAN (TO_DAYS('2010-06-15')), PARTITION p19 VALUES LESS ThAN MAXVALUE);
alter table t1 add PRIMARY KEY(ID)
alter table t1 add PRIMARY KEY(ID,createtime)
alter table t1 change id id int not null auto_increment; alter table t1 auto_increment=1;
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!