Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2695 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL] Oubli auto_increment sur ID

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SQL] Oubli auto_increment sur ID

n°1779116
pitcho
Posté le 28-08-2008 à 14:15:50  profilanswer
 

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

mood
Publicité
Posté le 28-08-2008 à 14:15:50  profilanswer
 

n°1779216
cgo2
Dum spiro spero
Posté le 28-08-2008 à 15:56:12  profilanswer
 

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
n°1779247
MagicBuzz
Posté le 28-08-2008 à 16:17:44  profilanswer
 

#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

n°1779248
MagicBuzz
Posté le 28-08-2008 à 16:18:50  profilanswer
 

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
n°1779271
joce
Architecte / Développeur principal
"BugHunter"
Posté le 28-08-2008 à 16:36:50  profilanswer
 

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é
n°1779279
MagicBuzz
Posté le 28-08-2008 à 16:41:05  profilanswer
 

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
n°1779291
joce
Architecte / Développeur principal
"BugHunter"
Posté le 28-08-2008 à 16:56:28  profilanswer
 

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é
n°1779298
MagicBuzz
Posté le 28-08-2008 à 17:01:31  profilanswer
 

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
n°1780093
joce
Architecte / Développeur principal
"BugHunter"
Posté le 29-08-2008 à 16:17:45  profilanswer
 

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é
n°1780110
MagicBuzz
Posté le 29-08-2008 à 16:31:18  profilanswer
 

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:

mood
Publicité
Posté le 29-08-2008 à 16:31:18  profilanswer
 

n°1782489
pitcho
Posté le 04-09-2008 à 11:47:13  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL] Oubli auto_increment sur ID

 

Sujets relatifs
editeur SQL pour AccessCommentaire de code ? Auto génération ?
Executer du php dans du SQL ?Execution a l ouverture d'un classeur (pas auto_open)
Problème avec windev et SQLRequete SQL Datetime
[SQL]trié plusieur count dans une requete union[SQL] mailing et newsletter
Exception PL/SQL[SQL] deux count dans une requette
Plus de sujets relatifs à : [SQL] Oubli auto_increment sur ID


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR