J'ai le schéma de table suivant qui mappe user_customers aux 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 j'exécute la commande:
alter table user_customer_permission drop primary key;
J'obtiens 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?
@markb
: si vous restaurez la clé primaire, vous pouvez certainement la rétablirAUTO_INCREMENT
.AUTO_INCREMENT
mécanisme avec une table InnoDB, uneAUTO_INCREMENT
colonneai_col
doit être définie dans le cadre d'un index de sorte qu'il soit possible d'effectuer l'équivalent d'uneSELECT MAX(ai_col)
recherche indexée sur la table pour obtenir la valeur maximale de la colonne. En règle générale, cela est réalisé en faisant de la colonne la première colonne d'un index de table.Une ligne:
Vous ne perdrez pas non plus l'incrémentation automatique et devrez le rajouter, ce qui pourrait avoir des effets secondaires.
la source
Je pense que Quassnoi a répondu à votre question directe. Juste une remarque: peut-être que ce n'est qu'une formulation maladroite de votre part, mais vous semblez avoir l'impression que vous avez trois clés primaires, 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 "déposer la clé primaire sur une colonne". Vous pouvez supprimer la clé primaire ou ne pas supprimer la clé primaire. Si vous voulez une clé primaire qui n'inclut qu'une seule colonne, vous pouvez déposer la clé primaire existante sur 3 colonnes et créer une nouvelle clé primaire sur 1 colonne.
la source
la source
Si vous avez une clé primaire composite, faites comme ceci:
ALTER TABLE table_name DROP PRIMARY KEY,ADD PRIMARY KEY (col_name1, col_name2);
la source
"si vous restaurez la clé primaire, vous pouvez certainement la rétablir à AUTO_INCREMENT"
Il ne devrait pas être 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.
Étant donné qu'il s'agissait d'un auto-incrémentation dans la définition précédente de la table, il est fort probable qu'il existe un programme qui 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 programme sera interrompue en ne restaurant pas la propriété d'auto-incrémentation.
la source
Commencez par modifier la colonne pour supprimer le champ auto_increment comme ceci: alter table user_customer_permission modifier id de colonne int;
Ensuite, déposez la clé primaire. alter table user_customer_permission drop clé primaire;
la source
la source
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)
le 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 !!
la source
Pour ajouter une clé primaire dans la colonne.
Pour supprimer la clé primaire de la table.
la source
Sauvegardez d'abord la base de données. Supprimez ensuite toute clé étrangère associée à la table. tronquer la table de clé étrangère.Truncate la table actuelle. Supprimez les clés primaires requises. Utilisez sqlyog ou workbench ou heidisql ou dbeaver ou phpmyadmin.
la source
Recherchez la table dans le gestionnaire SQL, cliquez dessus avec le bouton droit de la souris et sélectionnez le design, puis cliquez avec le bouton droit sur l'icône de la petite clé et sélectionnez supprimer la clé primaire.
la source