it-swarm.com.de

MySQL - CSV UPDATE (nicht INSERT) in vorhandene Tabelle?

Ich habe eine Tabelle mit folgenden Spalten:

id | name | city

Die Tabelle enthält 1000 Einträge.

Ich habe eine CSV-Datei mit einer begrenzten Anzahl von Zeilen wie folgt:

id,city
34,Denver
45,Kansas City
145,New York

Kann ich benutzen LOAD DATA INFILE um meine CSV in meine Tabelle zu importieren, aber anstatt neue Einträge einzufügen, werden Zeilen basierend auf der Spalte id aktualisiert?

7
Jake Wilson

REPLACE führt mechanisch DELETE und INSERT aus. Das kann die PRIMARY KEYs ändern.

Hier ist noch etwas, was Sie tun können.

Angenommen, Ihre Tabelle heißt name_city und sieht folgendermaßen aus:

CREATE TABLE name_city
(
    id INT NOT NULL AUTO_INCREMENT,
    name VARCHAR(30) NOT NULL,
    city VARCHAR(30) NOT NULL,
    PRIMARY KEY (id)
);

und du willst das LOAD DATA INFILE.

Hier sind Ihre Schritte zum Aktualisieren der Stadt basierend auf der ID:

Schritt 01) Erstellen Sie eine weitere Tabelle für den Import

CREATE TABLE name_city_import LIKE name_city;

Schritt 02) Löschen Sie die Namensspalte aus der Importtabelle

ALTER TABLE name_city_import DROP COLUMN name;

Schritt 03) Führen Sie den Import in name_city_import

LOAD DATA INFILE 'somefile.csv' INTO TABLE name_city_import ...

Schritt 04) Führen Sie einen UPDATE JOIN durch

UPDATE name_city_import B
INNER JOIN name_city A USING (id)
SET A.city = B.city;

Schritt 05) Entfernen Sie die Importtabelle

DROP TABLE name_city_import;

Das ist es.

Versuche es !!!

6
RolandoMySQLDBA

Wenn Sie einen eindeutigen Index für die ID haben oder es sich um einen Primärschlüssel handelt, können Sie REPLACE hinzufügen: LOAD DATA INFILE 'file_name' REPLACE ....

0
a1ex07