2010-06-17 8 views
0

C'est ce que je fais en ce moment (name est UNIQUE):prépondérants valeurs indexées uniques

SELECT * FROM fruits WHERE name='apple'; 

Vérifiez si la requête a retourné aucun résultat . Si oui, ne faites rien. Si non, doit être inséré une nouvelle valeur:

INSERT INTO fruits (name) VALUES ('apple'); 

Au lieu de ce qui précède est-il correct d'insérer la valeur dans la table sans vérifier si elle existe déjà? Si le nom existe déjà dans la table, une erreur sera générée et si ce n'est pas le cas, un nouvel enregistrement sera inséré.

À l'heure actuelle, je dois insérer 500 enregistrements dans une boucle for, ce qui donne 1000 requêtes. Est-ce que ce sera ok d'ignorer le contrôle "déjà existant"?

Répondre

4

Vous pouvez utiliser la IGNORE fonction:

INSERT IGNORE INTO fruits VALUES ('apple') 

S'il y a une violation de clé, il saute juste cette valeur

2

départ

INSERT IGNORE INTO ... 

et

INSERT ON DUPLICATE KEY UPDATE ... 

La deuxième rencontre hod est préférable car l'instruction IGNORE provoque simplement mysql à émettre un avertissement au lieu d'erreur

+0

La seconde méthode n'est * pas * préférée car OP souhaite qu'une entrée en double soit ignorée, et non mise à jour. – BoltClock

+0

ouais mais il peut facilement être mis à jour pour lui-même comme set 'apple' =' apple' – Gunjan