Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jaki jest najlepszy sposób na porównanie / wstawienie / aktualizację produktów w bazie danych MySQL z pliku .CSV?

Mieliśmy podobną sytuację. Po wielu próbach ulepszenia skryptu zdecydowaliśmy, że potrzebujemy innego podejścia, aby nasz import działał i nie zabierał ~10 godzin.

Zrzuciliśmy cały kod PHP i zamiast tego użyliśmy mysqlimport aby załadować zawartość pliku CSV bezpośrednio do tabeli. Ta tabela zawiera teraz wszystko, czego potrzebujemy, ale nie w formie, która byłaby dla nas przydatna (bez struktury, niektóre pola wymagają przetwarzania itp.)

Ponieważ jednak wszystko jest teraz w bazie danych, możemy zrobić wszystko, co chcemy z zapytaniem. Na przykład usunięcie wszystkich danych, których nie ma już w pliku importu, to po prostu DELETE FROM structured_table AS st LEFT JOIN unstructured_table AS ut ON st.someField = ut.someField WHERE ut.someField IS NULL; , aktualizacja istniejących rekordów to po prostu UPDATE structured_table AS st INNER JOIN unstructured_table AS ut ON st.someField = ut.someField SET st.anotherField = CONCAT(ut.aField, ' ', ut.yetAnotherField); .

Oczywiście w przypadku złożonego skryptu importu Twoje zapytania będą bardziej złożone i będziesz ich potrzebować więcej. Może być nawet konieczne wrzucenie niektórych procedur składowanych w celu przetwarzania poszczególnych pól. Ale jeśli potrafisz przyjąć takie podejście, otrzymasz proces, który może obsłużyć wiele danych i jest bardzo skalowalny.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Neo4j - Utwórz indeks za pomocą Cypher

  2. MySQL Konwertuj ciąg na datę Oblicz wiek i uporządkuj według wieku

  3. jak wyświetlić wynik zapytania mysql w określonej kolejności?

  4. Jak sprawdzić, czy INSERT poszło dobrze w zapisanej funkcji?

  5. jak uzyskać sumę kolumny z zapytaniem do kodeignitera