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

 MySQL Discussion :

#1062 - Duplicate entry


Sujet :

MySQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 57
    Points : 50
    Points
    50
    Par défaut #1062 - Duplicate entry
    Serveur : 3.23.58
    PHP : 4.3.3
    bdd : mabase
    table : menu

    Bonjour,
    je débute avec MySQL et j'ai un petit souci.
    Je souhaites créer une table à l'aide d'une requête SQL, mais le serveur me renvoit une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Erreur
    requête SQL :  
    INSERT INTO `menu` 
    VALUES ( 128, 'Promotion de litalien - italie collège', 'http://site.voila.fr/italienlangueculture/litalie.htm', 'europ', 0, '0', 0 ) 
    MySQL a répondu:
    #1062 - Duplicate entry '127' for key 1
    Je dois comprendre qu'il y a une valeur en double :

    Ci-dessous la requête complète :
    ----------------------------------------------------

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    # requête SQL
    #
    CREATE TABLE `menu` (
      `m_id` tinyint(4) NOT NULL auto_increment,
      `m_titre` varchar(100) NOT NULL default '',
      `m_lien` varchar(100) NOT NULL default '',
      `m_m1` varchar(30) NOT NULL default '0',
      `m_t1` tinyint(4) NOT NULL default '0',
      `m_m2` varchar(30) NOT NULL default '0',
      `m_t2` tinyint(4) NOT NULL default '0',
      PRIMARY KEY  (`m_id`)
    ) TYPE=MyISAM AUTO_INCREMENT=159 ;
    #
    # contenu de la table 'menu'
    #
    INSERT INTO `menu` VALUES (1, 'Brevet', 'http://www.ac-poitier.fr/italien/exinter/xbrevet.htm', 'annales', 1, '0', 0);
    ...
    [Code édité par Maximilian]
    [
    234 lignes de code supprimées ]

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 61
    Points : 34
    Points
    34
    Par défaut
    J'avoue que le problème me semble étrange... et si tu introduis réllement "128", il est effectivement bizarre que le message d'erreur mentionne "127".


    Est-ce la seule insertion ou tu rencontres un problème? As-tu réussi à introduire des menus avec un m_id plus élevé?



    Mais ce qui m'interpelle particulièrement, c'est que j'ai l'impression qu'à chaqe fois le numéro de m_id est inséré alors qu'il est sensé être auto-incrément.

    Les cas ou une primary key auto-incrépentée doit être introduite sont assez rare.
    Si j'étais toi, je ne le préciserais pas lors de l'insertion, et alors tu ne rencontrerais pas de problème théoriquement. Ou alors, je changerais le type de ma clef primaire pour qu'elle ne soit pas auto-incrémentée.

    Maintenant, il est possible qu'il y ait une raison cachée à cela, et si c'est le cas, oublions ce que j'ai écrit...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 57
    Points : 50
    Points
    50
    Par défaut #1062 suite
    Merci DRAG pour tes idées ; j'ai éssayé pas mal de chose dans le même genre. Ne pas spécifier les entrées de la clef primaire (m_id) puisqu'elles sont auto-incrémentées, mais cela provoque une erreur #1064 (je les collectionne décidément) puisqu'il manque une valeur sur un champ NOTNULL.
    Le vrai problème n'est pas là, c'est que je ne parviens pas à cerner d'où vient le problème, si c'est la requête qui comporte un erreur, si c'est la table qui n'est pas correcte ou autre chose que j'ignore.
    J'usqu'à présent je me contentais de faire de petite table pour tester mes scripts PHP, je n'ai donc pas réalisé une table plus importante.

    merci pour la réponse

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 57
    Points : 50
    Points
    50
    Par défaut #1062 suite et fin
    Bon j'ai trouvé une solution à mon problème :

    Il suffit de changer la taille du champ (m_id) qui sert de clef primaire (auto-increment); le passer de TINYINT à INT :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE TABLE `menu` ( 
    `m_id` int(11) NOT NULL auto_increment, 
    `m_titre` varchar(100) NOT NULL default '', 
    `m_lien` varchar(100) NOT NULL default '', 
    `m_m1` varchar(30) NOT NULL default '0', 
    `m_t1` tinyint(4) NOT NULL default '0', 
    `m_m2` varchar(30) NOT NULL default '0', 
    `m_t2` tinyint(4) NOT NULL default '0', 
    PRIMARY KEY (`m_id`) 
    ) TYPE=MyISAM AUTO_INCREMENT=160 ;
    Bon je suis pas assez calé pour expliquer clairement le problème, mais je dirai qu'il était question d'une autorisation de codage sur une plage numérique devenu trop petite. En passant du TINYINT (1 octet) à INT (4 octets) ça marche.
    Si un expert peut nous donner une ecplication plus claire, elle sera bien venu

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 61
    Points : 34
    Points
    34
    Par défaut
    Bah, en fait, vu comme cela, l'explication est très simple Je n'avais pas remarqué que c'était un tinyint (alors que je te demandais pourtant si tu pouvais insérer des valeurs plus grandes. Je ne dois pas être très logique des fois. )


    tinyint est stocké sur un octet, soit 8 bits.

    Cela te permet d'avoir ( 2 exposant 8 ) valeurs, soit 256 valeurs.

    N'ayant pas précisé que ta valeur ne peut être que positive, tu perds un peu de mémoire, et au lieu de pouvoir aller de 0 à 255, tu ne pouvais aller que de
    -128 à 127. Il était donc logique que ton insertion pose un problème à partir du 128.


    Par contre je maintiens qu'il n'est pas logique de devoir insérer le numéro de menu alors que tu es en auto-incrémenté!
    Si j'étais toi, je préfèrerais même permettre à ce champ d'être null, de toute facon il se remplira obligatoirement seul (mais normalement, même sans permettre le null, ce devrait fonctionner).
    Parcequ'avoir un champ auto-incrémenté que l'on rempli à chaque fois soi-même, ce n'est pas très cohérent...


    J'avoue que je ne sais pas ce qu'est sensé faire le "AUTO_INCREMENT=160"...peut-être que cela a une influence...

    [édité pour cause de smiley involontaire. Celui-ci d'ailleurs: 8) ]

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 57
    Points : 50
    Points
    50
    Par défaut
    Je peux pas te dire Drag si c'est cohérent, en tout cas c'est le SQL exporter depuis MySQL pour sauvegarder les données. Ensuite quand j'ajoute de nouvelles valeurs soit par script PHP, soit directement via MySQL, l'auto-incrément fonctionne normalement, c'est à dire que je ne précise pas la valeur auto-incrémentée.

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Juin 2004
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Duplicate entry '127' for key 3
    changer tinyint to int.
    bonne chance

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

Discussions similaires

  1. Erreur: #1062 - Duplicate entry '1' for key 1
    Par aiss57 dans le forum Requêtes
    Réponses: 8
    Dernier message: 01/04/2009, 11h36
  2. PHP MYADMIN erreur 1062 duplicate entry
    Par carelha dans le forum Débuter
    Réponses: 3
    Dernier message: 12/06/2008, 22h06
  3. [SQL] 1062 - Duplicate entry '0' for key 1
    Par kervano dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 21/03/2008, 08h51
  4. [SQL] #1062 - Duplicate entry '1' for key 1
    Par gozu13 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 22/02/2008, 20h01
  5. Error 1062: Duplicate entry
    Par Paulinho dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 17/12/2005, 17h01

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