Partage
  • Partager sur Facebook
  • Partager sur Twitter

Duplicate KEY probleme avec update

Sujet résolu
    15 janvier 2019 à 18:11:35

    Bonjour,

    Petit problème avec un DUPLICAT KEY dans mysql :

    Table :

    CREATE TABLE IF NOT EXISTS `card_action_vote_a` (
      `id_vote` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
      `id_card_title` bigint(20) UNSIGNED NOT NULL,
      `id_account` bigint(20) UNSIGNED NOT NULL,
      PRIMARY KEY (`id_vote`)
    ) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=latin1;



    requête :

    connection.query('INSERT INTO card_action_vote_a (id_card_title, id_account) VALUES (?, ?) ON DUPLICATE KEY UPDATE id_account = ?', [data.array_vg[0].id_card_title, data.getRef, data.getRef], function (error, results3) {
    //Actions
    });
    

    Ma requête ne fait que insérer même si les valeurs sont déjà présentes dans la table.

    Seriez-vous ou peut se trouver mon erreur ?

    • Partager sur Facebook
    • Partager sur Twitter
      15 janvier 2019 à 18:24:31

      Bonjour,

      La clé primaire est id_vote et elle est auto incrémentée ... donc tu ne pourras jamais avoir de "duplicate key" à moins d'essayer d'insérer en donnant un id_vote existant ...

      Du coup qu'appelles-tu un doublon ? Un enregistrement qui existe déjà avec le même id_card_title et id_account ? Si oui, alors il faut mettre une contrainte UNIQUE( id_card_title, id_account ) sur ta table ...

      Mais cela pose la question alors de cette clé primaire id_vote ... est-elle vraiment utile ? Ta table card_action_vote_a n'est-elle pas une table de relation entre les table vote et card_title ? Si oui, alors id_vote est inutile, ta clé primaire sera composé des deux colonnes :

      CREATE TABLE IF NOT EXISTS `card_action_vote_a` (
        `id_card_title` bigint(20) UNSIGNED NOT NULL,
        `id_account` bigint(20) UNSIGNED NOT NULL,
        PRIMARY KEY (`id_card_title`, `id_account` )
      ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

      Sans parler des clés étrangères ... Mais bon ... te connaissant ...

      -
      Edité par Benzouye 15 janvier 2019 à 18:25:43

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        16 janvier 2019 à 9:27:09

        Benzouye a écrit:

        Sans parler des clés étrangères ... Mais bon ... te connaissant ...

        Haha tu rigoles, je suis devenu une machine concernant les clés primaires et étrangères... :lol:

        Plus sérieusement, tu mets le doigt sur un point important qui est que ma colonne "id_vote" n'a plus de sens maintenant. J'ai pas mal fait de modification dernièrement et c'est un reliquat. Donc je vais pouvoir l'enlever.

        Concernant les deux autres colonnes c'est plus compliquer. Je te montre ce qui peut arriver :

        id_card_title | id_account
              12             1
              12             2 
              12             3
              24             1  
              24             2 
              24             3

        Dans la table ci-dessus, je ne peux donc pas mettre de clé primaire. Si je veux pouvoir en ajouter une je pourrais faire une table qui ressemble à ça, mais je pense que tu ne vas pas apprécier ^^ (id_card_title est la clé primaire):

         id_card_title | id_account
              12           1,2,3
              24           1,2,3

        pour modifier "id_account", j'effectue un SELECT puis j'utilise du jquery pour ajouter ou enlever l'id que je souhaite. Puis, j’exécute un KEY DUPLUCATE (ou UPDATE) pour mettre à jour ma table avec les nouvelles données.

        J'ai essayé de faire fonctionner la requête avec en ayant au préalable supprimé la colone "id_vote". Malheureusement ça ne marche toujours pas. La ligne n'est pas UPDATE mais INSERT qui fait que je me retrouve avec deux lignes identiques.


        -
        Edité par renjusyeager 16 janvier 2019 à 15:59:05

        • Partager sur Facebook
        • Partager sur Twitter
          16 janvier 2019 à 17:08:34

          renjusyeager a écrit:

          Dans la table ci-dessus, je ne peux donc pas mettre de clé primaire.

          Bien sûr que si ! une clé primaire composite : 

          PRIMARY KEY ( id_card_title, id_account )

          renjusyeager a écrit:

          je suis devenu une machine concernant les clés primaires

          C'est pas encore ça du coup :p

          renjusyeager a écrit:

          la ligne n'est pas UPDATE mais INSERT qui fait que je me retrouve avec deux lignes identiques

          Pour qu'une erreur DUPLICATE KEY soit levée et que l'UPDATE soit exécuté, il faut une contrainte d'unicité ... soit une clé primaire, soit un index UNIQUE ...

          Benzouye a écrit:

          CREATE TABLE IF NOT EXISTS `card_action_vote_a` (
            `id_card_title` bigint(20) UNSIGNED NOT NULL,
            `id_account` bigint(20) UNSIGNED NOT NULL,
            PRIMARY KEY (`id_card_title`, `id_account` )
          ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

          -
          Edité par Benzouye 16 janvier 2019 à 17:09:24

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            16 janvier 2019 à 17:44:54

            Benzouye a écrit:

            Bien sûr que si ! une clé primaire composite : 


            ...

            Mais o_O...!

            Mais attend c'est génial ton truc de clé primaire composite :waw: ! J'ai rebalayé le cours est effectivement ils en parlent rapidement mais je n'avais pas vraiment compris comment elles fonctionnaient.

            Maintenant ça marche sans problème :ange:.

            Je vais allé refaire un tour dans toutes mes tables car je crois que la clé primaire composite va pouvoir améliorer grandement les chose.

            Benzouye a écrit:

            renjusyeager a écrit: je suis devenu une machine concernant les clés primaires C'est pas encore ça du coup :p

            Un grand merci super machine ;). Tu m'as encore sauvé et appris un truc.

            • Partager sur Facebook
            • Partager sur Twitter
              16 janvier 2019 à 23:36:20

              Je te conseille la lecture du doc "conception bdd" dans ma signature ;)

              • Partager sur Facebook
              • Partager sur Twitter
              Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL

              Duplicate KEY probleme avec update

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown