IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Problèmes sur clé primaire : auto index


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier Avatar de ultracoxy
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 116
    Points : 74
    Points
    74
    Par défaut Problèmes sur clé primaire : auto index
    Salut à vous tous,

    J'ai créé une simple table utilisateur nécessaire à mon application java via l'IDE NetBeans. Seulement, j'ai défini en clé le champ userID (key, index, not nullable, unique) comme étant de type INT et de taille 1. J'ai 2 soucis lorsque je teste mon application :

    - d'une part, le premier index est 0 et je souhaiterais savoir comment faire en sorte qu'il commence à 1 (sachant que le stockage est de type innodb).

    - d'autre part, le second index est 32, soit la taille d'un int. Comment déclarer la clé pour avoir pour index 1,2,3, etc... et non pas 0,32,64, etc...

    Merci de votre aide...et de votre patience avec !

  2. #2
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 89
    Points : 84
    Points
    84
    Par défaut
    Salut,

    Si tu déclares un champs auto-increment, çà devrait résoudre ton pb.

    Nico

  3. #3
    Membre régulier Avatar de ultracoxy
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 116
    Points : 74
    Points
    74
    Par défaut
    Voici la déclaration de ma table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    CREATE TABLE tusers
    (
      Uid			 INT		      NOT NULL	 AUTO_INCREMENT,
      Ulogin		VARCHAR(32)	NOT NULL,
      Upassword	     VARCHAR(32),
      Ufirstname	      VARCHAR(32)     NOT NULL,
      Ulastname	     VARCHAR(32)     NOT NULL,
      PRIMARY KEY (Uid)
    )TYPE=InnoDB;
    Lorsque que j'effectue un premier enregistrement, voilà ce qu'il en découle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Uid    Ulogin   Upassword    Ufirstname    Ulastname  
    ---   ------   ----------    -----------   ----------   
    32	toto	   NULL	          tonya	         polinski
    Ensuite, quand j'essaie de réaliser un second enregistrement, voilà le message d'erreur que j'obtient : java.sql.SQLException: Duplicate entry '32' for key 1

    Comment est ce que je peux remédier à ça, sachant que j'aimerais avoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Uid    Ulogin   Upassword    Ufirstname    Ulastname  
    ---   ------   ----------    -----------   ----------   
     1	toto	   NULL	          tonya	         polinski	
     2      lilou       NULL          liliane         dupont
    etc....

  4. #4
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 89
    Points : 84
    Points
    84
    Par défaut
    Bizarre, bizarre...
    Comment insères-tu tes données?
    As-tu essayé comme çà ?
    INSERT INTO tusers VALUES(0,'toto','tutu','tata','titi');
    Sinon, tu peux aussi modifier ta prmary key comme çà :
    Uid INT UNSIGNED AUTO_INCREMENT,
    Tiens-nous au courant.

    Nico

  5. #5
    Membre régulier Avatar de ultracoxy
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 116
    Points : 74
    Points
    74
    Par défaut
    J'ai fait : INSERT INTO tusers VALUES(' ', 'toto', 'tutu', 'tata', 'titi');...

  6. #6
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 89
    Points : 84
    Points
    84
    Par défaut
    C'est plus qu'étrange, dsl mais là je sèche...
    Un pro pourra surement te renseigner mieux que moi.

    Nico

  7. #7
    Membre régulier Avatar de ultracoxy
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 116
    Points : 74
    Points
    74
    Par défaut
    Un pro est demandé d'urgence, un pro ! merci !

  8. #8
    Membre expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Points : 3 001
    Points
    3 001
    Par défaut
    Merci de nous donner le résultat de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SHOW CREATE TABLE tusers;
    Eviter de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO tusers 
    VALUES(' ',  'toto',  'tutu',  'tata',  'titi');
    Préférez définir les champs et ne pas mentionner le champ autoincrémenté.
    En effet il sera automatiquement complété.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    INSERT INTO tusers ( Ulogin , Upassword ,  Ufirstname,  Ulastname     )
    VALUES('toto',  'tutu',  'tata',  'titi');
    Quelle est votre version de MySQL ?

  9. #9
    Membre régulier Avatar de ultracoxy
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 116
    Points : 74
    Points
    74
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SHOW CREATE TABLE tusers;
    Donne ce résultat :


    En réalité je n'ai pas fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO tusers 
    VALUES(' ',  'toto',  'tutu',  'tata',  'titi');
    mais j'ai défini les champs (je n'aurais pas dû en revanche mentionner le champ autoincrémenté).

    Ma version de MySQL est : 5.0

  10. #10
    Membre régulier Avatar de ultracoxy
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 116
    Points : 74
    Points
    74
    Par défaut
    Citation Envoyé par Alexandre T
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    INSERT INTO tusers ( Ulogin , Upassword ,  Ufirstname,  Ulastname     )
    VALUES('toto',  'tutu',  'tata',  'titi');
    Ca y est, si j'ignore l'index auto-incrémenté dans la requête d'insert, tout se passe bien...

    Merci !

  11. #11
    Membre expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Points : 3 001
    Points
    3 001
    Par défaut
    (je n'aurais pas dû en revanche mentionner le champ autoincrémenté).
    Faites le test pour voir SVP.

    Par contre autant pour moi je pensais que le fait de faire le SHOW CREATE TABLE me retournerait la prochaine valeur du champ autoincrémenté UID .

    Faites

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT max(UID) FROM tusers;
    Puis mettez à jour la valeur du prochain autoincrément. Car là je pense que votre valeur auto_increment est trop basse.

    [EDIT]Je n'ai pas vu votre réponse, j'arrive après la guerre[/EDIT]

  12. #12
    Membre régulier Avatar de ultracoxy
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 116
    Points : 74
    Points
    74
    Par défaut
    Citation Envoyé par Alexandre T
    Faites

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT max(UID) FROM tusers;
    Là j'ai fait 3 enregistrements et cette commande de select me renvoie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    +----------+
    | max(Uid) |
    +----------+
    |      3       |
    +----------+
    Citation Envoyé par Alexandre T
    Puis mettez à jour la valeur du prochain autoincrément. Car là je pense que votre valeur auto_increment est trop basse.

    [EDIT]Je n'ai pas vu votre réponse, j'arrive après la guerre[/EDIT]
    Je ne comprends pas "votre valeur auto_increment est trop basse"...

  13. #13
    Membre expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Points : 3 001
    Points
    3 001
    Par défaut
    En fait je n'avais pas vu que le problème était résolu. J'ai dû commencé mon post avant que vous ne publiez votre réponse...

    Bref je me disais que la plus grande valeur de lUID était 3 et que l'autoincrément essayait d'insérer une valeur à 2 déjà existante... C'est parfois possible quand on fait des développements et qu'on charcute la table.

    enfin là ca marche, donc oubliez ce que j'ai dit

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème sur l'utilisation d'index
    Par guicecal dans le forum SQL
    Réponses: 5
    Dernier message: 15/07/2010, 17h03
  2. Réponses: 11
    Dernier message: 06/08/2007, 16h22
  3. Réponses: 6
    Dernier message: 31/03/2006, 17h05
  4. [EJB2.1 Entity] [CMP] [MySQL] Problème avec clé primaire en auto increment
    Par tery dans le forum Java EE
    Réponses: 6
    Dernier message: 16/07/2004, 11h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo