dal 2015 - visita n. 936
Export / Import
Export / Import

 

Export

Il modo più semplice per esportare una tabella di dati in un file di testo consiste nell'usare la query SELECT ... INTO OUTFILE che esporta il risultato di una query direttamente in un file sul server host.


SELECT ... INTO OUTFILE

La sintassi di questa affermazione combina semplicemente una normale SELECT con INTO OUTFILE alla fine. Il formato di output predefinito è lo stesso che per LOAD DATA, quindi la seguente istruzione esporta la tabella dbprova_tbl nel file di testo /tmp/dbprova.txt avente come delimitatori di riga i caratteri tab e linefeed:

mysql> SELECT * FROM dbprova_tbl 
    -> INTO OUTFILE '/tmp/dbprova.txt';

È possibile, però, modificare il formato di output utilizzando delle opzioni per indicare come delimitare le colonne ed i record. Per esportare la tabella prova_tbl in formato CSV con le righe terminate da CRLF, usare questa query:

mysql> SELECT * FROM passwd INTO OUTFILE '/tmp/dbprova.txt'
    -> FIELDS TERMINATED BY ',' ENCLOSED BY '"'
    -> LINES TERMINATED BY '\r\n';

La SELECT ... INTO OUTFILE ha le seguenti proprietà:


Esportazione di tabelle come dati grezzi

Il programma mysqldump viene usato per copiare e salvare tabelle e database, essendo in grado di emettere in output sia i dati grezzi sia inserendoli in query INSERT per potere poi ricreare i record sotto forma di tabella.

Per scaricare una tabella come un file di dati, è necessario specificare l'opzione --tab che indica la directory dove si desidera che il server MySQL scriva il file.

L'esempio seguente scarica la tabella dbprova_tbl del database DBPROVA in un file della directory /tmp:

$ mysqldump -u root -p --no-create-info --tab=/tmp DBPROVA dbprova_tbl

Si ricorda che il parametro -p implica necessariamente che verrà subito dopo richiesta la password di root.


Esportazione di tabelle in formato SQL

Per esportare una tabella in formato SQL in un file si usa un comando come questo:

$ mysqldump -u root -p DBPROVA dbprova_tbl > dump.txt

Ottenendo un file con il seguente contenuto:

-- MySQL dump 10.13
--
-- Host: localhost    Database: DBPROVA
---------------------------------------------------------
-- Server version       5.5.41

--
-- Table structure for table `dbprova_tbl`
--

CREATE TABLE dbprova_tbl (
  prova_id int(11) NOT NULL auto_increment,
  prova_title varchar(100) NOT NULL default '',
  prova_author varchar(40) NOT NULL default '',
  submission_date date default NULL,
  PRIMARY KEY  (prova_id),
  UNIQUE KEY AUTHOR_INDEX (prova_author)
) TYPE=MyISAM;

--
-- Dumping data for table `dbprova_tbl`
--

INSERT INTO dbprova_tbl 
       VALUES (1,'Learn PHP','J. Tizio','2015-02-10');
INSERT INTO dbprova_tbl 
       VALUES (2,'Learn MySQL','A. Caio','2015-02-10');
INSERT INTO dbprova_tbl 
       VALUES (3,'JAVA Tutorial','S. Pinco','2015-02-18');

Per scaricare più tabelle elencarle tutte dopo l'argomento nome del database. Per salvare un intero database, non indicare nessuna tabella dopo il database, come nell'esempio seguente:

$ mysqldump -u root -p DBPROVA > database_dump.txt

Per scaricare tutti i database disponibili nell'host usare il comando seguente:

$ mysqldump -u root -p --all-databases > database_dump.txt

L'opzione --all-databases è stata inserita a partire dalla versione 3.23.12.

Questo metodo può essere utilizzato per realizzare il backup del database.


Copia di tabelle e database su un altro host

Se si desidera copiare le tabelle di un database da un server MySQL ad un altro bisogna utilizzare il comando mysqldump con il nome del database e il nome della tabella. L'intero processo si esegue in 4 fasi:

Un altro modo per raggiungere lo stesso obiettivo senza utilizzare un file intermedio consiste nell'inviare l'output di mysqldump direttamente attraverso la rete al server remoto MySQL. Se è possibile connettersi a entrambi i server dall'host dove risiede il database di origine, utilizzare questo comando (assicurandosi di avere accesso a entrambi i server):

$ mysqldump -u root -p database_name \
       | mysql -h other-host.com database_name

La prima metà del comando mysqldump si connette al server locale e tramite il pipe ridirige sulla seconda metà del comando che si connette al server MySQL remoto other-host.com. I dati in uscita della prima metà del comando divengono i dati di input della seconda metà del comando che così provvede a duplicare il database.




Import

Ci sono due modi semplici per caricare dei dati nel database MySQL utilizzando un file di backup precedente.


Importazione con LOAD DATA

MySQL fornisce il comando LOAD DATA che funziona per caricare masse di dati. Ecco un esempio di istruzione per leggere il file dump.txt presente nella directory corrente e caricarlo nella tabella mytbl del database attivo:

mysql> LOAD DATA LOCAL INFILE 'dump.txt' INTO TABLE mytbl;
mysql> LOAD DATA LOCAL INFILE 'dump.txt' INTO TABLE mytbl
  -> FIELDS TERMINATED BY ':'
  -> LINES TERMINATED BY '\r\n';
mysql> LOAD DATA LOCAL INFILE 'dump.txt' 
    -> INTO TABLE mytbl (b, c, a);

Importazione con mysqlimport

MySQL include anche un programma di utilità chiamato mysqlimport che si comporta come un involucro di LOAD DATA per rendere possibile caricare i file di input direttamente dalla linea di comando.

Per caricare i dati da dump.txt si usa la seguente linea di comando:

$ mysqlimport -u root -p --local database_name dump.txt

Con mysqlimport si possono anche aggiungere le opzioni per il formato della riga, similmente a come abbiamo fatto nel caso di DATA LOAD:

$ mysqlimport -u root -p --local --fields-terminated-by=":" \
   --lines-terminated-by="\r\n"  database_name dump.txt

L'ordine in cui si specificano le opzioni non ha importanza per mysqlimport, tranne che devono precedere il nome del database.

Il comando mysqlimport utilizza l'opzione --columns per specificare l'ordine delle colonne:

$ mysqlimport -u root -p --local --columns=b,c,a \
    database_name dump.txt

Gestione virgolette e caratteri speciali

La clausola FIELDS assieme a TERMINATED BY può specificare altre opzioni di formato. Per impostazione predefinita, LOAD DATA presuppone che i valori non siano tra virgolette e interpreta il backslash (\) come carattere di escape per i caratteri speciali. Per indicare che i valori sono racchiusi tra virgolette si usa ENCLOSED BY; MySQL eliminerà quindi le virgolette durante la fase di ingresso. Per cambiare il carattere di escape predefinito si utilizza ESCAPED BY.

Quando si specifica ENCLOSED BY per indicare di rimuovere le virgolette dai valori dei dati, è possibile però includere anche il carattere virgolette (") raddoppiandolo o facendolo precedere con il carattere di escape. Ad esempio, se il carattere per racchiudere i valori ed il carattere di escape sono rispettivamente " e \, allora il valore di ingresso
"a""b\"c"
viene interpretato come
a"b"c

Per mysqlimport le opzioni della riga di comando per specificare come racchiudere i valori ed il carattere di escape sono --fields-chiusi-by e --fields-fuggiti-by.


















Introduzione
Installazione
Amministrazione
MySQL e PHP
Gestione database
Tipi di dati
Gestione tabelle
Query insert
Query select
Query update e delete
Clausola where
Clausola like e regexp
Clausola order by
Clausola join
Il valore NULL
Le transazioni
Il comando ALTER
Gli indici
Tabelle temporanee e cloni
Info sul database
Generazione di sequenze
Gestione dei duplicati
Iniezione di codice SQL
Export / Import



Gli uomini bramano sempre di essere il primo amore della donna; è questo un effetto della loro sciocca vanità. Le donne hanno un istinto più sottile. Esse desiderano essere l'ultimo romanzo dell'uomo.
Oscar Wilde

Valid CSS!
pagina generata in 0.001 secondi