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?
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;
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.
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.
ALTER TABLE `user_customer_permission` MODIFY `id` INT;
ALTER TABLE `user_customer_permission` DROP PRIMARY KEY;
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.
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;
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 TABLE
user_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 !!
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.
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;
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.