Voici ma table avec quelques échantillons de données lorsque j'exécute cette requête p> Il insère à la fois ces lignes quand il est censé Ignorer la deuxième paire de valeur (2, 494) em> p> aucun index défini, aucune de ces colonnes n'est primaire. P> Qu'est-ce que je ne sais pas? < / p> p>
4 Réponses :
S'il n'y a pas de clé primaire, il ne peut y avoir de clé en double pour ignorer. Vous devez toujours définir une clé primaire, donc la possibilité de le faire - et si vous souhaitez avoir des colonnes supplémentaires qui ne devraient pas être dupliquées, définissez-les comme «uniques». P>
Hmm ... Alors, comment puis-je ignorer une ligne de duplication sans avoir besoin d'une clé primaire? Et je ne veux pas définir une colonne particulière comme unique. Je veux que la combinaison des deux colonnes soit unique. Par exemple, il peut y avoir une ligne (3, 589) et une rangée (3, 330) mais il ne peut y avoir deux (3, 589)
Vous devez utiliser une contrainte unique multicolonne. Exemple déjà fourni par Paxdiablo. Cela répondra à vos besoins. Vous devez avoir une contrainte unique si vous souhaitez que MySQL gère votre demande d'ignoration.
Si vous ne mettez pas de critères code> de code> ou définissez un clé primaire code>, MySQL ne saura pas que votre nouvelle entrée est une duplicata. P>
J'ai l'autocrampe principal principal mais je ne travaille toujours pas pour moi
du docs :
Si vous utilisez le mot-clé Ignorer, des erreurs qui se produisent lors de l'exécution de l'instruction insertion sont traitées comme des avertissements à la place. Par exemple, sans ignorer, une ligne duplique un indice unique existant ou une valeur de clé primaire em> dans le tableau provoque une erreur de clé en double et la déclaration est abandonnée. Avec Ignorer, la ligne n'est toujours pas insérée, mais aucune erreur n'est émise. p> blockQuote>
(mon italique). p>
votre em> votre em> est de ne pas dupliquer "un index unique unique ou une valeur de clé primaire" car vous n'avez aucune clé primaire ni unique contraintes. p>
Si, comme vous le mentionnez dans l'un de vos commentaires, vous ne voulez que ni champ d'être unique mais que vous faire em> veux que la combinaison soit unique, vous avez besoin d'un Clé primaire composite sur les deux colonnes (éliminez d'abord les doublons d'abord): P>
alter table MYTABLE add primary key (a_id,b_id)
Si je vous comprends correctement, après avoir exécuté la commande insertion, votre table ressemble à ceci si oui, la réponse est que votre conception de table permet des doublons. P> Si vous voulez éviter le deuxième enregistrement d'être inséré, vous devez définir la colonne A_ID comme clé primaire ou un index unique. Si vous le faites, l'instruction INSERT IGNORE fonctionnera comme vous l'attendez, c'est-à-dire insérer les enregistrements, ignorez les erreurs telles que essayer d'ajouter un enregistrement en double. P> P>