Maison >base de données >tutoriel mysql >Comment supprimer plusieurs clés primaires dans MySQL tout en en gardant une ?
Question :Comment supprimer les clés primaires des colonnes d'une table MySQL tout en préservant une clé primaire ?
Scénario :
Considérez le schéma de tableau suivant qui mappe les clients utilisateurs aux autorisations dans une base de données MySQL en direct :
mysql> describe user_customer_permission; +------------------+---------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------------+---------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | user_customer_id | int(11) | NO | PRI | NULL | | | permission_id | int(11) | NO | PRI | NULL | | +------------------+---------+------+-----+---------+----------------+ 3 rows in set (0.00 sec)
Vous souhaitez supprimer les clés primaires pour user_customer_id et permission_id tout en conservant l'identifiant comme clé primaire. Cependant, en essayant de le faire avec la commande alter table user_customer_permission dropprimary key; entraîne l'erreur :
ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
Réponse :
Les colonnes à incrémentation automatique nécessitent un index. Sans index, la maintenance d'une colonne d'auto-incrémentation devient trop coûteuse. Par conséquent, MySQL exige qu'une colonne d'auto-incrémentation soit la partie la plus à gauche d'un index.
Pour supprimer la clé primaire de user_customer_id et permission_id, suivez ces étapes :
Supprimez le propriété d'auto-incrémentation à partir de l'identifiant :
ALTER TABLE user_customer_permission MODIFY id INT NOT NULL;
Supprimez le principal clé :
ALTER TABLE user_customer_permission DROP PRIMARY KEY;
Notez que la CLÉ PRIMAIRE composite couvrait à l'origine les trois colonnes et qu'il n'est pas garanti que l'identifiant soit unique. Cependant, si l'identifiant s'avère unique, vous pouvez en faire à nouveau une CLÉ PRIMAIRE et un AUTO_INCREMENT :
ALTER TABLE user_customer_permission MODIFY id INT NOT NULL PRIMARY KEY AUTO_INCREMENT;
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!