Oubli auto_increment sur ID [SQL] - SQL/NoSQL - Programmation
Marsh Posté le 28-08-2008 à 16:17:44
#1062 - Duplicate entry '1' for key 1
=> t'as essayé de comprendre ce que veut dire ton erreur ?
t'as essayé de faire un index unique (ou une promary key) sur ton champ pour voir ? je suis prêt à parier que comme par enchantement t'auras la même erreur
Marsh Posté le 28-08-2008 à 16:18:50
sinon, si c'est ce que je crainds* (avec mysql faut s'attendre à tout), alors :
1/ shoote la PK que tu as déjà créé
2/ update tes ID à NULL
3/ passe en auto_incrément
4/ refait une PK
* j'ai presque peur que le ALTER tente de renuméroter tes ID déjà existants, et que du coup il crée des doublons. encore une bonne raison de mettre à la poubelle cette daube si c'est le cas
Marsh Posté le 28-08-2008 à 16:36:50
ALTER IGNORE TABLE `carte` CHANGE `id` `id` INT( 11 ) NOT NULL DEFAULT '0' AUTO_INCREMENT , ca te dégagera les entrées en double
Marsh Posté le 28-08-2008 à 16:41:05
j'ai donc bien l'impression que mon "*" n'était pas si hypothétique que ça...
franchement, ça fait peur mysql... tu changes un attrubut du type des données, et il te change leur valeurs, moi je vote et franchement j'ai peur
Marsh Posté le 28-08-2008 à 16:56:28
il change pas les valeurs
quand tu mets l'attribut ignore, il part du principe qu'il faut ignorer les erreurs, et supprimer les lignes qui font doublons.
Marsh Posté le 28-08-2008 à 17:01:31
joce a écrit : il change pas les valeurs |
(ouais ben c pas mieux si il supprime les lignes foireuses, normalement ignore ne devrait rien faire, juste laisser les données inconsistantes dans la table si je ne m'abuse )
mais surtout, la question que je me pose, c'est :
son erreur vient de ça :
|
et du coup mysql crée une contrainte unique sur le champ lorsqu'on passe en auto (et donc plante, ce qui est normal et ce que j'ai indiqué dans mon premier post)
ou si elle vient de ça :
|
=> et le faire de passer en auto-incrément fait que mysql tente de créer :
|
et donc plante quand il crée le doublon lors du premier update sur toto... ? parceque là, moi je vote, et j'appelle ça un énorme bug critique
Marsh Posté le 29-08-2008 à 16:17:45
choix 1), mysql est pas complétement crétin et va pas s'amuser à renuméroter les entrées
Et le IGNORE est là pour ignorer les erreurs tout en appliquant l'index, ce qui est bien pratique.
Laisser les données inconsistantes sans poser la PK, c'est le comportement par default, sans IGNORE.
Marsh Posté le 29-08-2008 à 16:31:18
joce a écrit : choix 1), mysql est pas complétement crétin et va pas s'amuser à renuméroter les entrées |
ouais mais bon avec mysql des fois on sait jamais autant y'a des trucs super, autant des fois c'est à se bouffer les couilles
Marsh Posté le 04-09-2008 à 11:47:13
Hello à toutes et à tous,
Mon problème à été réglé assez facilement, merci à vous.
J'ai essayé de remplacer 'change' par 'modify' dans l'instruction SQL. Même message d'erreur, même problème.
Ensuite j'ai essayé de shooter la PK par l'instruction :
ALTER TABLE `carte` DROP PRIMARY KEY
Message d'erreur :
#1075 - Incorrect table definition; There can only be one auto column and it must be defined as a key
Je savais pas qu'il fallait obligatoirement une PK dans une table...
Du coup, j'ai résolu mon problème en virant mon champs ID :
ALTER TABLE `carte` DROP `id`
puis j'ai recréé un nouveau champs 'id' cette fois ci sans oublier l'auto_increment en me disant que je renuméroterais manuellement ce nouveau champs id pour les entrées déjà existantes. SQL :
ALTER TABLE `carte` ADD `id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST
Chose bizarre : il m'a retrouvé les id qui existaient déjà avant la suppression du premier champs id. Mon nouveau champs id comporte donc les anciens id des entrées existantes... Cool mais bizarre ! Donc je n'ai pas eu besoin de renuméroter manuellement les id des entrées déjà existantes.
Merci de votre aide et à bientot
Clément
Marsh Posté le 28-08-2008 à 14:15:50
Hello à toutes et tous,
J'ai un petit souci sur PhpMyAdmin.
J'ai oublié connement de définir mon ID d'une table en auto_incrément. J'ai ensuite rempli ma table manuellement en indiquant a chaque fois l'id en l'incrémentant moi même (en me disant encore plus connement que je le ferais plus tard sans soucis). Mais maintenant, il veut plus passer mon ID en auto_increment. Le problème c'est que ma table contient une centaine d'entrées et que se les retaper c'est long, et puis je voudrais trouver un moyen de faire ça.
Du coup, par le biais de PhpMyAdmin, ma requète SQL ressemble à ça :
Et l'erreur retournée est :
#1062 - Duplicate entry '1' for key 1
Donc j'ai essayé en faisant un auto-incrément qui commence à partir d'une valeur d'ID qui n'existe pas, ça devait donner une requête du genre :
Mais il me répond que ma syntaxe n'est pas bonne (il n'aime pas le =108)... La version que j'utilise de MySQL est la 5.0 il me semble...
Help me please...
Merci d'avance aux personnes qui répondront, bonne journée et bon codage
Clément