sql >> Databasteknik >  >> RDS >> Mysql

Vad är det bästa sättet att jämföra / infoga / uppdatera produkter i en MySQL db från en .CSV-fil

Vi hade en liknande situation. Efter många försök att göra skriptet bättre, bestämde vi oss för att vi behövde ett annat tillvägagångssätt för att få vår import att fungera och inte ta ~10 timmar.

Det vi gjorde var att dumpa all PHP-kod och istället använda mysqlimport för att ladda innehållet i CSV-filen direkt i en tabell. Den tabellen innehåller nu allt vi behöver, men inte i en form som är användbar för oss (ingen struktur, vissa fält behöver bearbetas, etc.)

Men eftersom allt nu finns i databasen kan vi göra allt vi vill med en fråga. Till exempel radera all data som inte längre finns i importfilen, det är bara DELETE FROM structured_table AS st LEFT JOIN unstructured_table AS ut ON st.someField = ut.someField WHERE ut.someField IS NULL; , att uppdatera befintliga poster är bara UPDATE structured_table AS st INNER JOIN unstructured_table AS ut ON st.someField = ut.someField SET st.anotherField = CONCAT(ut.aField, ' ', ut.yetAnotherField); .

Uppenbarligen, för ett komplext importskript kommer dina frågor att vara mer komplexa och du behöver fler av dem. Du kan till och med behöva lägga in några lagrade procedurer för att göra bearbetning på enskilda fält. Men om du kan ta den här typen av tillvägagångssätt kommer du att sluta med en process som kan hantera mycket data och är mycket skalbar.



  1. Hantera CDB Fleet i Oracle Database 18c

  2. Beräkna åldern i år i PostgreSQL

  3. qt 5.8 sql anslutningsfel:QMYSQL-drivrutinen har inte laddats på Windows 10

  4. Lägg automatisk nyckelgenerering i viloläge med MySQL och Oracle