2009-10-01 6 views
7
tavolo

Pseudo:È possibile utilizzare un comando di tipo LOAD DATA INFILE per eseguire l'aggiornamento delle righe nel db?

| primary_key | first_name | last_name | date_of_birth | 
| 1   | John Smith |   | 07/04/1982 | 

Al momento first_name contiene un nome completo utenti per molte righe. Il risultato desiderato è dividere i dati, quindi first_name contiene "John" e last_name contiene "Smith".

Ho un file CSV che contiene il formato desiderato dei dati:

| primary_key | first_name | last_name | 
| 1   | John  | Smith  | 

C'è un modo di utilizzare il comando LOAD DATA INFILE per elaborare il file CSV per aggiornare tutte le righe in questa tabella utilizzando il primary_key - e non sostituire altri dati nella riga durante il processo (ad es. date_of_birth)?

risposta

5

No. Mentre LOAD DATA INFILE dispone di un'opzione SOSTITUISCI, sarà in realtà sostituire la riga in questione, ovvero eliminare quella esistente e inserirne una nuova.

Se si configura il CARICAMENTO DATI INFILE per inserire solo alcune colonne, tutti gli altri saranno impostati sui valori predefiniti, non sui valori attualmente contenuti.

È possibile modificare il file CSV per contenere invece una serie di istruzioni UPDATE? Dovrebbe essere ragionevolmente semplice attraverso alcune regex sostituisce.

7

In questa situazione di solito io, LOAD DATA INFILE, a una tabella temporanea con la stessa struttura. Quindi faccio con ON DUPLICATE KEY UPDATE dalla tabella temporanea alla tabella reale. Ciò consente il controllo del tipo di dati senza distruggere la tabella reale; è relativamente veloce e non richiede di armeggiare con il tuo file .csv.

+0

Penso anche che questa sia la soluzione più efficiente in quanto il REPLACE può essere lento. E la tua soluzione può gestire gli inserti (nuovi record) e aggiornare (i record esistenti) contemporaneamente. –

Problemi correlati