Maison >base de données >tutoriel mysql >Comment supprimer plusieurs clés primaires dans MySQL tout en en gardant une ?

Comment supprimer plusieurs clés primaires dans MySQL tout en en gardant une ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-28 04:35:10587parcourir

How to Remove Multiple Primary Keys in MySQL While Keeping One?

Suppression de clés primaires dans MySQL

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 :

  1. Supprimez le propriété d'auto-incrémentation à partir de l'identifiant :

    ALTER TABLE user_customer_permission MODIFY id INT NOT NULL;
  2. 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn