web-dev-qa-db-fra.com

Supprimer la clé primaire dans MySQL

J'ai le schéma de table suivant qui mappe les utilisateurs à des autorisations sur 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)

Je voudrais supprimer les clés primaires pour user_customer_id et permission_id et conserver la clé primaire pour id.

Quand je lance la commande:

alter table user_customer_permission drop primary key;

Je reçois l'erreur suivante:

ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key

Comment puis-je supprimer la clé primaire d'une colonne?

165
markb

Sans index, la maintenance d'une colonne auto-incrémentée devient trop coûteuse, c'est pourquoi MySQL nécessite qu'une colonne auto-incrémentée soit la partie la plus à gauche d'un index.

Vous devez supprimer la propriété autoincrement avant de déposer la clé:

ALTER TABLE user_customer_permission MODIFY id INT NOT NULL;
ALTER TABLE user_customer_permission DROP PRIMARY KEY;

Notez que vous avez un composé PRIMARY KEY qui couvre les trois colonnes et il n'est pas garanti que id soit unique.

Si cela se trouve être unique, vous pouvez en faire un PRIMARY KEY et AUTO_INCREMENT à nouveau:

ALTER TABLE user_customer_permission MODIFY id INT NOT NULL PRIMARY KEY AUTO_INCREMENT;
264
Quassnoi

Une ligne:

ALTER TABLE  `user_customer_permission` DROP PRIMARY KEY , ADD PRIMARY KEY (  `id` )

De plus, vous ne perdrez pas l'incrémentation automatique et devrez le rajouter, ce qui pourrait avoir des effets secondaires.

115
mluebke

Je crois que Quassnoi a répondu à votre question directe. Juste une note de côté: Peut-être que ceci est juste une formulation maladroite de votre part, mais vous semblez avoir l’impression que vous avez trois clés principales, une sur chaque champ. Ce n'est pas le cas. Par définition, vous ne pouvez avoir qu'une seule clé primaire. Ce que vous avez ici est une clé primaire composée de trois champs. Ainsi, vous ne pouvez pas "supprimer la clé primaire d'une colonne". Vous pouvez supprimer la clé primaire ou ne pas supprimer la clé primaire. Si vous souhaitez une clé primaire ne comprenant qu'une colonne, vous pouvez supprimer la clé primaire existante sur 3 colonnes et créer une nouvelle clé primaire sur 1 colonne.

14
Jay
ALTER TABLE `user_customer_permission` MODIFY `id` INT;
ALTER TABLE `user_customer_permission` DROP PRIMARY KEY;
10
Alix Axel

Si vous avez une clé primaire composite, procédez comme suit: ALTER TABLE table_name DROP PRIMARY KEY,ADD PRIMARY KEY (col_name1, col_name2);

"si vous restaurez la clé primaire, vous pourrez sûrement la rétablir en AUTO_INCREMENT"

Il ne devrait y avoir aucune question de savoir s'il est souhaitable ou non de "restaurer la propriété PK" et de "restaurer la propriété d'auto-incrémentation" de la colonne ID.

Etant donné qu’il s’agissait d’un incrustation automatique dans la définition précédente de la table, il est fort probable qu’un programme s’insère dans cette table sans fournir de valeur d’ID (car la colonne ID est de toute façon auto-incrémentée).

Toute opération de ce type sera interrompue si la propriété auto-incrémentée n'est pas restaurée.

5
Erwin Smout

Commencez par modifier la colonne pour supprimer le champ auto_increment de la manière suivante: alter table user_customer_permission modify column id int;

Ensuite, déposez la clé primaire. alter table user_customer_permission déposer la clé primaire;

3
John Gunderman

J'ai eu le même problème et à côté de certaines valeurs à l'intérieur de ma table. Bien que j'ai changé ma clé primaire avec

ALTER TABLEuser_customer_permissionDROP PRIMARY KEY , ADD PRIMARY KEY (id)

problème a continué sur mon serveur. J'ai créé un nouveau champ à l'intérieur de la table. J'ai transféré les valeurs dans un nouveau champ et supprimé l'ancien, problème résolu !!

1
Sam

Recherchez la table dans le gestionnaire SQL, cliquez dessus avec le bouton droit de la souris et sélectionnez Conception, puis cliquez avec le bouton droit de la souris sur la petite icône de clé et sélectionnez Supprimer la clé primaire.

0
Noob Helper

Pour ajouter clé primaire dans la colonne.

ALTER TABLE table_name ADD PRIMARY KEY (column_name);

Pour supprimer clé primaire de la table.

ALTER TABLE table_name DROP PRIMARY KEY;
0
sumit katiyar

Commencez par sauvegarder la base de données. Ensuite, supprimez toute clé étrangère associée à la table. tronquer la table de clé étrangère. tronquer la table actuelle. Supprimez les clés primaires requises. Utilisez sqlyog ou workbench ou heidisql ou dbeaver ou phpmyadmin.

0
Noby Nirmal