2010-11-12 11 views
1

Disons que nous obtenons les données suivantes à partir d'un fichier CSV:Insertion de données dans des tables séparées rapidement et de manière fiable

account_number balance customer name 
100   500.00 GERN BLANSTON 
101   800.00 GERN BLANSTON 
102   200.00 OPRAH WINFREY 

Cela représente deux comptes appartenant à Gern Blanston et une appartenance à Oprah Winfrey. Disons que nous avons une table customer et une table account. Nous pourrions hypothétiquement insérer les données en utilisant seulement deux INSERT déclarations:

INSERT INTO customer 
    (name) 
VALUES 
    ('GERN BLANSTON'), 
    ('OPRAH WINFREY') 

et

INSERT INTO account 
    (account_number, balance, customer_id) 
VALUES 
    (100, 500.00, ???), 
    (101, 800.00, ???), 
    (102, 200.00, ???) 

Si nous savions que les ID Gern Blanston et Oprah Winfrey, nous pourrions bien sûr utiliser ces ID dans la deuxième INSERT déclaration et cela fonctionnerait bien. Mais d'une manière ou d'une autre, nous devons obtenir ces identifiants.

Ma question: existe-t-il un moyen rapide de trouver, ou du moins de garder une trace, des identifiants de chaque client inséré? Insérer chaque ligne individuellement et obtenir LAST_INSERT_ID() est trop lent pour moi (j'ai jusqu'à 65 000 comptes dans chaque fichier CSV). Rechercher l'identifiant client chaque fois que j'insère un nouveau compte est trop lent. Ou, si vous voulez contourner cette question particulière et recommander une solution différente, je suis ouvert à cela aussi. J'utilise MySQL.

+0

+1 pour la référence Steve Martin. :) –

Répondre

0

ajouter une autre colonne pour la table account, qui stockent customer_name, une fois terminé l'insertion, juste update account set customer_id=(select customer.customer_id from customer where customer.customer_name=account.customer_name;

espérons que cette solution de contournement simplifier la complexité

aussi, changer votre customer table d'avoir auto_increment pour customer_id

+0

Je crois que la table a déjà une auto_increment sur 'customer_id', puisque l'OP spécifie le nom de la colonne dans l'insertion dans la table' customer'. – Danosaure

+0

@Danosaure - je ne peux pas supposer que sans le schéma de la table complète, est bon pour tout le monde poster leur schéma de table, dun faire le answerer – ajreal

+1

disant seulement parce qu'il a fait mention de la 'last_insert_id()' – Danosaure