[SQL] Oubli auto_increment sur ID

Oubli auto_increment sur ID [SQL] - SQL/NoSQL - Programmation

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 :

Code :
  1. ALTER TABLE `carte` CHANGE `id` `id` INT( 11 ) NOT NULL DEFAULT '0' AUTO_INCREMENT


 
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 :

Code :
  1. ALTER TABLE `carte` CHANGE `id` `id` INT( 11 ) NOT NULL DEFAULT '0' AUTO_INCREMENT=108


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

Reply

Marsh Posté le 28-08-2008 à 14:15:50   

Reply

Marsh Posté le 28-08-2008 à 15:56:12    

Hello,
 
Essaye avec modify au lieu de change :
 
ALTER TABLE `carte` modify `id` INT( 11 ) NOT NULL DEFAULT '0' AUTO_INCREMENT;


---------------
When it's from Finland it's good.  - Mon blog
Reply

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 :o

Reply

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


Message édité par MagicBuzz le 28-08-2008 à 16:19:45
Reply

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


Message édité par joce le 28-08-2008 à 16:37:16

---------------
Protèges carnets personnalisés & accessoires pour bébé
Reply

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 :o


Message édité par MagicBuzz le 28-08-2008 à 16:41:53
Reply

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.


---------------
Protèges carnets personnalisés & accessoires pour bébé
Reply

Marsh Posté le 28-08-2008 à 17:01:31    

joce a écrit :

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.


(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 :
 


1  toto
1  titi
2  tata
3  tutu


 
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 :
 


4 toto
2 titi
3 tata
1 tutu


 
=> et le faire de passer en auto-incrément fait que mysql tente de créer :
 


1 toto
2 titi
3 tata
4 tutu


 
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


Message édité par MagicBuzz le 28-08-2008 à 17:03:00
Reply

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 :p
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.


---------------
Protèges carnets personnalisés & accessoires pour bébé
Reply

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 :p
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.


ouais mais bon avec mysql des fois on sait jamais :o autant y'a des trucs super, autant des fois c'est à se bouffer les couilles :sweat:

Reply

Marsh Posté le 29-08-2008 à 16:31:18   

Reply

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed