sql >> Databáze >  >> RDS >> Mysql

Jaký je nejlepší způsob, jak porovnat / vložit / aktualizovat produkty v databázi MySQL ze souboru .CSV

Měli jsme podobnou situaci. Po mnoha pokusech o vylepšení skriptu jsme se rozhodli, že potřebujeme jiný přístup, aby náš import fungoval a netrval ~10 hodin.

Co jsme udělali, bylo vypsat veškerý PHP kód a místo toho použít mysqlimport k načtení obsahu souboru CSV přímo do tabulky. Tato tabulka nyní obsahuje vše, co potřebujeme, ale ne ve formě, která je pro nás užitečná (žádná struktura, některá pole vyžadují nějaké zpracování atd.)

Protože je však nyní vše v databázi, můžeme s dotazem dělat vše, co chceme. Například smazání všech dat, která již nejsou v importovaném souboru, stačí DELETE FROM structured_table AS st LEFT JOIN unstructured_table AS ut ON st.someField = ut.someField WHERE ut.someField IS NULL; , aktualizace stávajících záznamů je pouze UPDATE structured_table AS st INNER JOIN unstructured_table AS ut ON st.someField = ut.someField SET st.anotherField = CONCAT(ut.aField, ' ', ut.yetAnotherField); .

Je zřejmé, že u složitého importního skriptu budou vaše dotazy složitější a budete jich potřebovat více. Možná budete dokonce muset vložit některé uložené procedury, abyste mohli provádět zpracování jednotlivých polí. Ale pokud můžete použít tento druh přístupu, skončíte s procesem, který zvládne spoustu dat a je velmi škálovatelný.



  1. jaký je lepší způsob, jak změnit znakovou sadu pro velké datové tabulky?

  2. Přidání dat do databáze Cloud Firestore

  3. MySQL – opakování stromové struktury

  4. MySQL Otázka ohledně plánování