Geschrieben von

MySQL: Tabelle erstellen und Daten aus CSV importieren

Data Analytics

In dieser Anleitung geht es darum wie man eine Tabelle in MySQL erstellt und im Anschluss Daten aus einer CSV-Datei importiert.

Tabelle erstellen

Im ersten Schritt erstellen wir zunächst eine einfache Tabelle in MySQL. Dazu soll folgendes Beispiel dienen:

CREATE TABLE presidents (
  country VARCHAR(255) PRIMARY KEY,
  continent VARCHAR(255),
  president VARCHAR(255)
);

Die Tabelle hat also drei Spalten: country, continent und president.

CSV-Import durchführen

Gehen wir nun davon aus, dass sich unsere Daten in einer CSV-Datei befinden. Die CSV-Datei enthält in der ersten Zeile die selben Spalten und Spaltennamen (durch Komma getrennt) wie in der vorher erstellten Tabelle. Darunter liegen dann die Datensätze. Hier ein Beispiel:

Für den Import nutzen wir nun den Befehl “LOAD DATA INFILE”. Dieser sieht wie folgt aus (Erklärungen unter dem Code):

LOAD DATA INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/presidents.csv' 
INTO TABLE presidents
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\r'
IGNORE 1 ROWS;

Zur Erklärung:

Der Import wird mit dem Statement “LOAD DATA INFILE” eingeleitet. Das Statement nimmt den Pfad zur CSV-Datei als String entgegen. Hier kannst du jedoch nicht per se einen beliebigen Pfad angeben, sondern musst dich wahrscheinlich an den Pfad, der in der “–secure-file-priv”-Option angegeben ist, orientieren. Falls der Pfad dort nicht mit dem angegebenen Pfad im “LOAD DATA INFILE”-Statement übereinstimmt, dann bekommst du:

Error Code: 1290. The MySQL server is running with the –secure-file-priv option so it cannot execute this statement

Daher musst du zuerst herausfinden, welcher Pfad in der “–secure-file-priv”-Option angegeben ist und dort dann deine CSV-Dateien ablegen. Die “–secure-file-priv”-Option ist bei MySQL in der Datei “my.ini” zu finden. Um herausfinden, wo sich diese Datei befindet, kannst du unter Windows zunächst in die Eingabeaufforderung wechseln und dort “echo %PROGRAMDATA” eingeben:

Du bekommst dann wahrscheinlich wie ich zunächst den Pfad “C:\ProgramData” ausgegeben. Navigiere dort hin, wechsle in den MySQL-Ordner und suche nach der genannten Datei. Diese wird in den meisten Fällen unter folgendem Pfad zu finden sein: C:\ProgramData\MySQL\MySQL Server 8.0

Öffne dann die my.ini-Datei und suche dort nach “secure-file-priv”. Dort findest du dann den Upload-Ordner, wo die CSV-Dateien liegen müssen. In meinem Fall ist das “C:/ProgramData/MySQL/MySQL Server 8.0/Uploads”:

Dort solltest du nun deine CSV-Datei ablegen und als String hinter dem “LOAD DATA INFILE”-Statement angeben. Wichtig ist auch, dass du die Pfade mit einem Slash – also “/” – im String voneinander trennst und nicht mit einem Backslash – also “\” – um weitere Fehler zu vermeiden.

Danach kommt das “INTO TABLE”-Statement – also in welche schon bestehende Tabelle die CSV-Daten importiert werden sollen. Mit “FIELDS TERMINATED BY” gibt man an wie die einzelnen Daten in jeder Zeile voneinander getrennt sind. In unserem Fall mit einem Komma – also geben wir “,” an. Mit “LINES TERMINATED BY” gibt man dann an wie die Zeilen beendet werden. “\r” steht dabei für den “Carriage return“. Und zuletzt sagt man mit “IGNORE 1 ROWS”, dass die erste Zeile ignoriert werden soll, da dies in der Regel nur die Spaltennamen sind.

Last modified: 1. April 2023