it-swarm-eu.dev

MySQL - CSV UPDATE (ne INSERT) do stávající tabulky?

Mám tabulku s následujícími sloupci:

id | name | city

Tabulka obsahuje 1 000 položek.

Mám soubor CSV s omezeným počtem řádků, jako je tento:

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

Mohu použít LOAD DATA INFILE pro import mého CSV do tabulky, ale místo vkládání nových položek aktualizuje řádky na základě sloupce id?

7
Jake Wilson

REPLACE mechanicky spustí DELETE a INSERT. To může změnit PRIMÁRNÍ Klíče.

Tady je něco jiného, ​​co můžete udělat.

Předpokládejme, že se vaše tabulka nazývá name_city a vypadá to takto:

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

a chcete udělat LOAD DATA INFILE.

Zde jsou vaše kroky k aktualizaci města na základě id:

Krok 01) Vytvořte další tabulku, kterou chcete použít pro import

CREATE TABLE name_city_import LIKE name_city;

Krok 02) Vypusťte sloupec s názvem z importní tabulky

ALTER TABLE name_city_import DROP COLUMN name;

Krok 03) Proveďte import do name_city_import

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

Krok 04) Proveďte UPDATE JOIN

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

Krok 05) Odstraňte tabulku importu

DROP TABLE name_city_import;

A je to.

Pokusit se !!!

6
RolandoMySQLDBA

Pokud máte na ID jedinečný index nebo je to primární klíč, můžete přidat REPLACE: LOAD DATA INFILE 'file_name' REPLACE ....

0
a1ex07