Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Kann mysql eine CSV- oder andere TXT-Datei in eine Spalte importieren?

Ja, Sie können es in wenigen Schritten tun:

Zuerst Erstellen Sie eine temporäre Staging-Tabelle (nennen wir sie import ) mit einer Spalte, die Zeilen als Zeilen der Quelldatendatei enthält

CREATE TABLE `import` (
  `line` varchar(512) DEFAULT NULL
);

und Daten aus der Datei in die Tabelle laden

LOAD DATA INFILE '/path/to/your/file.txt'
INTO TABLE import
FIELDS TERMINATED BY '\n'
LINES  TERMINATED BY '\n'

Zweiter Angenommen, Sie haben eine Zieltabelle (nennen wir sie words ), das ungefähr so ​​aussieht

CREATE TABLE `words` (
  `word` varchar(64) DEFAULT NULL
);

wir können jede Zeile in Wörter aufteilen und sie in words einfügen Tabelle mit einer Abfrage

INSERT INTO words (word)
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(line, ' ', n.n), ' ', -1) word
  FROM import CROSS JOIN 
(
   SELECT a.N + b.N * 10 + 1 n
     FROM 
    (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a
   ,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b
    ORDER BY n
) n
 WHERE n.n <= 1 + (LENGTH(line) - LENGTH(REPLACE(line, ' ', '')))
 ORDER BY n.n

HINWEIS:

  • Annahme ist, dass Ihre Wörter genau durch ein Leerzeichen getrennt sind
  • Diese Abfrage wird in bis zu 100 Wörter aufgeteilt. Wenn Sie mehr oder weniger benötigen, können Sie ein Limit anpassen, indem Sie die innere Unterabfrage bearbeiten, oder wenn Sie regelmäßig importieren, sollten Sie stattdessen die dauerhafte Tally(Zahlen)-Tabelle verwenden.

Dritter Löschen oder kürzen Sie die Staging-Tabelle (falls Sie sie erneut verwenden, um weitere Dateien zu importieren)

DROP TABLE import;

Hier ist SQLFiddle Demo, die Schritt zwei zeigt.