2010-10-15 3 views
1

Si j'ai une requête comme ceci:La requête entière échouera-t-elle lorsque vous essayez d'insérer une clé en double?

INSERT INTO map 
    SELECT 5, product_id FROM products WHERE price < 500) 

Dites ceci tente d'insérer 300 lignes dans la table de carte. Supposons que 20 des insertions génèrent des erreurs de clé en double. Les 280 autres lignes seront-elles insérées ou la requête entière échouera-t-elle?

Si oui, quelle est la meilleure façon d'écrire cette requête afin que les lignes non dupliquées soient insérées et que les doublons soient ignorés?

+0

Vous pouvez créer une procédure ou un script (php, pyhton etc) pour exécuter cette commande sql et vérifier après insertion le nombre de lignes insérées. – Gadonski

Répondre

3

La requête échouera à la première clé en double. Si vous souhaitez continuer d'insérer la prochaine utilisation

INSERT IGNORE INTO map (map_id, product_id) 
SELECT 5, product_id FROM products WHERE price < 500 

Lors de l'insertion de plusieurs lignes comme celle-ci, ne mettez pas la requête en VALUES().

Questions connexes