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 :

Duplicate entry '0.00' for key 'primary'


Sujet :

Requêtes MySQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Militaire
    Inscrit en
    Mai 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Militaire
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2011
    Messages : 7
    Points : 3
    Points
    3
    Par défaut Duplicate entry '0.00' for key 'primary'
    Bonjour à tous, voici mon problème, qui me fait m'arracher les cheveux depuis 3 jours!

    Tout d'abord la petite mise en situation:

    Je tente de copier les données d'une base de donnée vers une autre, allégée et plus propre, jusque là ca marche très bien, j'utilise la formule suivante
    INSERT INTO bdb2.table1 (col1, col2, ...) SELECT col1, col2, ... FROM bdb1.table1

    je viens de faire une bonne soixantaine de tables sans aucuns problèmes.

    Puis j'arrive à une table appelée d.precision qui contient uniquement 5 données en DECIMAL.

    CREATE TABLE `d_precision` (
    `precision` decimal(5,2) NOT NULL COMMENT 'Possible precisions for a test',
    /* Keys */
    PRIMARY KEY (`precision`)
    ) ENGINE = InnoDB
    DELAY_KEY_WRITE = 1
    CHARACTER SET `utf8` COLLATE `utf8_general_ci`;



    Les données sont les suivantes:

    0.01
    0.1
    0.25
    0.5
    1.00

    Lorsque je fais la copie, j'obtiens le message d'erreur suivant:
    SQL Error: Duplicate entry '0.00' for key 'PRIMARY'
    ce qui est déjà surprenant étant donné que je n'ai pas de donnée 0.00


    Sans cette table, il y a 3 autres tables que je ne peut copier car une des tables(t.evaluation) est liée à la table d.precision par un foreign key, et les deux autres sont liées à t.evaluation.

    Du coup, afin de vérifier si mes query fonctionnent pour la copie des 3 dernières tables fonctionnent, j'ai introduit manuellement les données dans d.precision (j'avoue, je ne me suis pas trop fatigué à le faire!!!)
    Et lorsque je copie les données dans t.evaluation de la bdb1 à la bdb2, toutes les données se rapportant à d.precision se mettent à 0

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    On peut voir la requête de copie (encadrée par des balises code) la structure de la table d'origine et le jeu de données de la table d'origine ?

  3. #3
    Candidat au Club
    Homme Profil pro
    Militaire
    Inscrit en
    Mai 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Militaire
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2011
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    tu parles de la table d_precision?

    j'utilise ceci pour copier:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    insert into  smp_9.d_precision (precision_id) 
    SELECT 'precision' 
    FROM smp.d_precision;
    structure de la table d origine:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE TABLE `d_precision` (
      `precision`  decimal(5,2) NOT NULL COMMENT 'Possible precisions for a test',
      /* Keys */
      PRIMARY KEY (`precision`)
    ) ENGINE = InnoDB
      DELAY_KEY_WRITE = 1
      CHARACTER SET `utf8` COLLATE `utf8_general_ci`;

    et de la table de destination
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE `d_precision` (
      `precision_id`  decimal(5,2) NOT NULL,
      /* Keys */
      PRIMARY KEY (`precision_id`)
    ) ENGINE = InnoDB
      CHARACTER SET `utf8` COLLATE `utf8_general_ci`;

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Avec la coloration syntaxique donnée par l'emploi des balises code, tu peux voir que le nom de la colonne precision est interprété comme une chaîne de caractères car tu l'as entouré d'apostrophes.

    Au passage, ces saloperies d'apostrophes inversées mises par MySQL sont généralement inutiles.

    Si c'est vraiment ta requête, ça veut dire que le mauvais MySQL ne renvoie même pas de message d'erreur quand tu essaies d'insérer une chaîne dans une colonne DECIMAL !

    Comme ça, ce sera mieux !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO  smp_9.d_precision (precision_id) 
    SELECT precision 
    FROM smp.d_precision;

  5. #5
    Candidat au Club
    Homme Profil pro
    Militaire
    Inscrit en
    Mai 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Militaire
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2011
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Voila l'erreur obtenue lorsque je le fais comme ca:

    SQL Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'precision FROM smp.d_precision' at line 1

  6. #6
    Candidat au Club
    Homme Profil pro
    Militaire
    Inscrit en
    Mai 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Militaire
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2011
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Un tout grand merci,

    sans le vouloir peut etre, tu m'as donné la solution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    insert into  smp_9.d_precision (precision_id) 
    SELECT `precision` 
    FROM smp.d_precision;
    c'est justement en mettant ces "saloperies d'apostophes inversées qui ne servent souvent à rien" à la place des apostrophes que çà a fonctionné


    encore une fois, un tout grand merci!!!!

  7. #7
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Ah oui tiens ! "precision" est un mot clé du langage SQL !

    Comme ce genre de cjhose ne peut jamais m'arriver vu mon standard de nommage, je ne me pose même plus la question s'il faut mettre ces saloperies d'apostrophes inversées ou non !

  8. #8
    Candidat au Club
    Homme Profil pro
    Militaire
    Inscrit en
    Mai 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Militaire
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2011
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    oui c est bcp plus facile en faisant comme toi, un standard de nommage!!!

    ici ce n'est pas moi qui est nommé les tables et les champs... ca devient bcp plus casse tete

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

Discussions similaires

  1. [MySQL] UPDATE: ERROR DUPLICATE ENTRY FOR KEY PRIMARY
    Par Blackcocktail dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 19/12/2011, 15h07
  2. Duplicate entry '0' for key 'PRIMARY'
    Par gege48 dans le forum Requêtes
    Réponses: 2
    Dernier message: 11/07/2011, 09h48
  3. Réponses: 3
    Dernier message: 02/06/2011, 16h47
  4. [phpMyAdmin] #1062 - Duplicate entry '10123' for key 'PRIMARY'
    Par cobolons dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 6
    Dernier message: 19/07/2010, 13h55
  5. duplicate entry for key 'primary'
    Par mariek dans le forum Requêtes
    Réponses: 4
    Dernier message: 12/09/2009, 16h43

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