sql >> Database teknologi >  >> RDS >> Mysql

Hvad er den bedste måde at sammenligne / indsætte / opdatere produkter i en MySQL db fra en .CSV-fil

Vi havde en lignende situation. Efter mange forsøg på at gøre scriptet bedre, besluttede vi, at vi havde brug for en anden tilgang til at få vores import til at fungere og ikke tage ~10 timer.

Det, vi gjorde, var at dumpe al PHP-koden og i stedet bruge mysqlimport for at indlæse indholdet af CSV-filen direkte i en tabel. Den tabel indeholder nu alt, hvad vi har brug for, men ikke i en form, der er nyttig for os (ingen struktur, nogle felter kræver noget behandling osv.)

Men fordi alt nu er i databasen, kan vi gøre alt, hvad vi vil med en forespørgsel. For eksempel at slette alle data, der ikke længere er i importfilen, det er bare DELETE FROM structured_table AS st LEFT JOIN unstructured_table AS ut ON st.someField = ut.someField WHERE ut.someField IS NULL; , opdatering af eksisterende poster er bare UPDATE structured_table AS st INNER JOIN unstructured_table AS ut ON st.someField = ut.someField SET st.anotherField = CONCAT(ut.aField, ' ', ut.yetAnotherField); .

For et komplekst importscript vil dine forespørgsler naturligvis være mere komplekse, og du skal bruge flere af dem. Du skal måske endda smide nogle lagrede procedurer ind for at udføre behandling på individuelle felter. Men hvis du kan tage denne form for tilgang, ender du med en proces, der kan håndtere en masse data og er meget skalerbar.



  1. Offset MySQL uden begrænsning

  2. Indsæt Blobs i MySql-databaser med php

  3. Udfyld specifikke kolonner i datagridview fra MySQL data VB.NET

  4. Sådan laver du en batch-indsættelse i MySQL