=== Imparando.net ===

Come importare dati

Quando si ha la necessità di importare i dati in MySQL il modo più semplice e comodo è quello di ricorrere alla procedura di importazione fornita da phpMyAdmin. Ci sono però dei casi (tipicamente file troppo grossi), nei quali la procedura potrebbe dare vari tipi di errori e allora si può ricorrere alla riga di comando, che in generale permette di risolvere il problema in maniera elegante ed efficiente.

Importazione di file con formato SQL

Questi file al loro interno contengono istruzioni SQL pure, quindi sarebbe sufficiente farli eseguire riga per riga per ottenere il risultato voluto.
Ovviamente se il file è molto grande (ma anche se non è così grande) non è una buona idea procedere con un copia incolla, si possono invece sfruttare le capacità della shell di ridirigere l'input per ottenere il risultato desiderato, tramite un'istruzione come la seguente:

mysql -u root -Dus_export < data_us_export.sql
In questo esempio si è supposto che il proprio database abbia l'utente root senza password, cosa ragionevole in fase di sviluppo, da notare due cose:
  • l'opzione -Dnome_database indica il database nel quale si vuole importare la tabella (o le tabelle). Se questa opzione va messa o meno dipende da come è stato creato il file .sql, in generale questi file dovrebbero contenere al loro interno solo la tabella con i propri dati, non il nome del database.
  • il file da importare, che viene ridiretto tramite l'utilizzo dell'operatore <, deve risiedere nella cartella da dove viene eseguito il comando oppure deve essere indicato con un percorso assoluto.

Importazione di file con il formato csv

Un altro caso d'uso importante è quello in cui ci si trova ad avere a che fare con un file in formato csv (Comma Separated Value). Questo formato è spesso usato come formato di interscambio di dati tra programmi diversi, essendo molto semplice e supportato praticamente da ogni strumento che maneggia dati. Un esempio tipico potrebbe essere quello che si trova nel file a fondo pagina, dove i dati sono stati recuperati da un sito sotto forma di file di foglio elettronico con estensione xls, sono stati poi convertiti in file csv grazie a LibreOffice Calc e a questo punto si è dovuto procedere all'importazione all'interno di MySQL.
Come prima cosa è necessario creare la tabella all'interno del database, guardando il contenuto del file e assegnando un nome e un tipo ad ogni colonna: nell'esempio presente a fondo pagina le prime due righe sono:

Country;Product;2006;2007;2008;2009;2010;2011;2012;2013;2014;2015
                    Greenland;Fruits,  frozen juices;0;0;0;0;0;0;22207;0;0;0
In questo file la prima riga è d'intestazione, quindi i nomi dei campi possono essere dati utilizzando quelli già presenti (Country, Product, ecc.), mentre per il tipo e la lunghezza bisogna dare un'occhiata ad alcune righe per capire il tipo e soprattutto, per quanto riguarda le stringhe, la lunghezza: se infatti un campo fosse ad esempio reso come varchar(20) e poi ci fossero dei valori di campi più lunghi, durante l'importazione questi campi sarebbero silenziosamente tagliati.
Dopo aver creato la tabella per l'importazione può essere usata l'istruzione di MySQL LOAD DATA INFILE: questa istruzione è pensata per importare in maniera efficiente grosse quantità di dati e può essere usata all'interno del client a riga di comando. Rimanendo sempre all'esempio mostrato sopra, l'istruzione sarà la seguente:
LOAD DATA INFILE 'data_us_exports_2006_2015.csv' INTO TABLE data
                    FIELDS TERMINATED BY ';' ENCLOSED BY '"'

In questo caso i campi sono delimitati da ; e il file data_us_exports_2006_2015.csv verrà importato nella tabella data creata in precedenza.