#1062 - Duplicate entry '1' for key 1 - Pas de dupliquer les entrées trouvées
Donc, lorsque vous essayez d'ajouter un auto-incrémentation d'un champ, il est livré avec de #1062 - Duplicate entry '1' for key 1 . J'ai essayé de supprimer la clé primaire et re-ajouter et qui fonctionne très bien (ce qui je suppose ne serait pas si il y a des doublons?)
Mais quand j'essaie d'ajouter un autoincrement pour le terrain, il renvoie une erreur. Il me donne une option de navigation qui exécute la requête SQL suivante:
SELECT *
FROM `myTbl`
WHERE CONCAT_WS( "-", 11 ) = "1"
ORDER BY 11
LIMIT 0 , 30
Toutefois cela renvoie un jeu de résultats vide.. ce qui suggère il n'y a pas de doublons. Donc, si il n'y a pas de doublons, comment ne puis-je pas ajouter un auto-incrément?
Qu'attendez-vous la suite de
Merci de poster le résultat de
Donc, vous ne pensez pas que je suis ditzy, je ne l'ai pas écrit SQL - il a été généré par phpMyAdmin en appuyant sur le bouton parcourir après avoir généré l'erreur. Je pense que le dessous de l'affiche (Michael Mior) est à droite et je suis maintenant essayer cette solution.
CONCAT_WS( "-", 11 )
? Je reçois toujours des 11...Merci de poster le résultat de
SHOW CREATE TABLE myTbl
et la commande que vous utilisez pour ajouter autoincrement. Notez également que CONCAT_WS('-', 11) = '1'
toujours évaluer à FALSE
. Vous ne pouvez pas utiliser le champ ordinale dans la WHERE
clause de la façon dont vous le faites dans ORDER BY
.Donc, vous ne pensez pas que je suis ditzy, je ne l'ai pas écrit SQL - il a été généré par phpMyAdmin en appuyant sur le bouton parcourir après avoir généré l'erreur. Je pense que le dessous de l'affiche (Michael Mior) est à droite et je suis maintenant essayer cette solution.
OriginalL'auteur Ashley | 2011-11-03
Vous devez vous connecter pour publier un commentaire.
Avez-vous des lignes avec la valeur
0
ouNULL
de cette colonne?ALTER TABLE
peut causer des clés primaires être données. Dans le cas d'une clé de 0, MySQL va essayer de lui donner la valeur 1, qui échouera si la clé 1 existe déjà.Essayez de changer l'un
0
ouNULL
valeurs dans la colonne de quelque chose de plus (et non utilisés).0
.Bon point. Cependant, je crois que cela va résoudre le problème.
Cette travaillé, eu un 0 en y; merci!
Pas de problème. Heureux de vous aider!
Merci @MichaelMior
OriginalL'auteur Michael Mior
Michael Mior réponse si vous pouvez modifier les données dans la table. Cependant, il y a aussi une solution qui vous permet de garder l'intégrité des données (j'ai testé cela sur MySQL 5.5). Rappelez-vous que le fait d'avoir une valeur de zéro comme clé primaire dans MySQL n'est pas une pratique recommandée seulement pour cette raison. Si vous pouvez vous débarrasser de zéro, puis le faire.
Désactiver automatique de génération de valeur quand un zéro est inséré:
Ajouter AUTO_INCREMENT à votre colonne:
Ré-activer la commande automatique de génération de valeur:
Il devrait être évident que l'insertion des données de la table pendant toute cette opération ne peut pas être autorisé. Sinon, il y aura indésirables les valeurs zéro dans la colonne.
OriginalL'auteur Torben
réécrire la requête pour
Si vous souhaitez insérer une ligne utilisez un code comme ceci:
Si vous voulez sélectionner toutes les lignes en double utilisation:
Vous aurez besoin de mettre à jour ces id sont répertoriés comme en double.
Une autre option est d'ajouter une colonne supplémentaire et de la chute de l'ancienne PK.
AUTO_INCREMENT
à une colonne. Je ne vois pas en quoi cela résout le problème.OriginalL'auteur Johan