{MySQL} Duplicate entry

Résolu
Bonjour,

Voila j'effectue des requêtes d'insertion dans une table, dans cette table j'ai mis une clé UNIQUE sur l'un de mes champ.

Etant donné que lors d'un chargement d'une page je peux faire beaucoup d'insertions dans cette même table j'ai regrouper cette requête

INSERT INTO `ma_table` VALUES (...), (...), (...), ...

Le problème c'est que si une seul des valeurs insérée est déjà présente dans ma table... bah sa annule toute ma requête.

Y a t'il moyen d'inséré toute ses valeurs sans devoir faire une requête à chaque tour de boucle (ce qui serai évidement une perte de performance) ?

Merci d'avance.
Cordialement.
Configuration: Windows XP
Firefox 3.5.2

6 réponses

  1. Bonsoir,

    insert ignore ... doit être la solution
    2
    1. Bonjour,

      Tu as le choix entre écrire :

      
      INSERT INTO 'table' VALUES (...);
      INSERT INTO 'table' VALUES (...);
      INSERT INTO 'table' VALUES (...);
      INSERT INTO 'table' VALUES (...);
      ...
      -- En oubliant pas le ' ; ' à la fin de chaque requête
      
      


      Ou bien faire comme tu l'as fait à la suite.

      Pour éviter de recommencer à chaque erreur : fais un copier avant d'exécuter ;)
      0
      1. Contributeur
        Hello,

        Enlever la clé primaire?

        Puisque par définition, une clé primaire est un champ dont chaque donnée ne peut être identique à un autre.

        Je vois pas le but d'insérer des données qui existent déjà dans une table, ta clé primaire devient alors inutile à moins que je ne saisisse pas le but de ta manoeuvre.
        0
        1. Je ne veux évidement pas entrer deux fois la même valeur... mais la requête pourrai vouloir ré-inséré une valeur déjà existante.

          Cependant quelqu'un m'a donné la solution ;)

          Citation: "Rajoute ON DUPLICATE KEY UPDATE id=id à la tout fin de ta requête"

          Edit: La solution avec ignore est correcte également ;)
          0
          1. Bonjour pour modifier la valeur existante il faut d'abord vérifier que la ligne existe puis faire un update
            ou alors un delete suivi d'un insert
            mais jamais un insert tout seul
            0
            1. Pour ma part le fait de remplacer tous les mots clés "INSERT" par "REPLACE" à permis de résoudre mon problème :)
              0