MySQL – Importare dati da CSV in una tabella MySQL

Creato il 15 dicembre 2010 da Blogrammazione

fonte: dal web

Quando dobbiamo lavorare con una mole di dati interessante diventa difficile gestire operazioni che normalmente non creano problemi, come ad esempio l’import e l’export di dati da un database.

Di fronte ad esempio ad un file .sql contenente 20mila record, anche modifcando le direttive post_max_size e upload_max_filesize, diventa difficile poter utilizzare le interfacce grafiche, come ad esempio phpMyAdmin, perchè si bloccano o “crashano”.

Una delle soluzioni possibili è utilizzare la console di MySQL.

Lanciamo il comando:

mysql -uroot -p

inseriamo la password e clicchiamo su “invio”. Bene, siamo collegati a MySQL attraverso la console. A questo punto dobbiamo comunicare su quale database vogliamo agire, dunque lanciamo il comando:

USE nome_database;

dove “nome_database” è chiaramente il nome della base di dati su cui vogliamo lavorare. A questo punto possiamo procedere ad esempio con l’importazione dei dati. Supponiamo di avere 20mila record contenuti in un file CSV (my_file.csv), record che vogliamo importare nella tabella “my_table” nel database “nome_database”: se provassimo a procedere con phpMyAdmin, ad esempio, quasi sicuramente dopo qualche minuto ci ritroveremmo con il browser bloccato. Possiamo risolvere con il seguente comando:

mysql> LOAD DATA LOCAL INFILE 'path/my_file.csv' INTO TABLE my_table FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n';

Vediamo in dettaglio cosa facciamo lanciando questo comando dalla console di MySQL. LOAD DATA LOCAL INFILE è uno statement MySQL in grado di leggere righe da un file in formato testuale (come appunto un file .csv) ed inserirle ad una velocità niente male nella tabella specificata: facendo diverse prove l’import di circa 20mila record richiede….qualche secondo!!

Il percordo del file testuale che importiamo (nel nostro esempio “my_file.csv”) deve essere assoluto: in ambiente Windows, per funzionare correttamente, il percorso deve avere doppi slash per ogni directory, come nell’esempio seguente:

C:\\dir1\\dir2\\dir3\\my_file.csv