2013-08-28 18 views
16

Ho un db sul mio computer locale e voglio importare i dati sul db sul mio hosting. Entrambi i db sono identici, lo stesso table names, column names, ecccome saltare i record duplicati durante l'importazione in phpmyadmin

Quando ho export tavolo dal mio db locale attraverso phpmyadmin e import attraverso phpMyAdmin sul mio ospitare un errore compare mi dice che ci sono voci duplicate per il primary key e interrompe l'intera operazione.

Come posso importare i dati tramite phpmyadmin, saltare le voci duplicate e visualizzare un elenco dei duplicati alla fine del processo?

Una soluzione che posso fare è chiamare tutti i valori della chiave primaria nel db al mio hosting e filtrare i duplicati prima dell'importazione. MA mi chiedo se c'è una soluzione rapida per questo con phpmyadmin?

+1

Duplicato di: http://stackoverflow.com/questions/9919105/skip-insert-on-duplicate-entry-in-mysql – Karl

+0

@Karl ho visto quel post. Ma non vedo un'area nella scheda di importazione di phpmyadmin in cui posso digitare il codice 'sql'? –

+0

Quindi tutto quello che vuoi fare è duplicare 'IGNORE' su' INSERT' (combina i due e ottieni 'INSERT IGNORE') –

risposta

32

In phpMyAdmin, nella scheda Impostazioni, è possibile provare a controllare i seguenti valori:

  • Impostazioni -> query SQL -> Ignora errori multipli economico

Se si sta usando il formato CSV:

  • Impostazioni -> Import -> CSV -> non abortire in caso di errore INSERT

Se si utilizza formato SQL:

  • Impostazioni -> Esporta -> SQL -> Usa ignorano inserti
+0

nl-x, fai riferimento anche al metodo "INSERIRE IGNORA" nella tua risposta, nel caso in cui qualcuno lo stia veramente cercando. Solo per impedire a chiunque altro di inviare un'altra risposta. – Karl

+0

@Karl: non capisco cosa intendi. il PhpMyAdmin Export Ignore Insert è il terzo punto elenco nella mia risposta. –

+0

@ nl-x: Penso che Karl intendesse che, per una risposta più completa (e pertinente per riferimento futuro), si potrebbe prendere in considerazione l'aggiunta delle query effettive che si possono usare per fare ciò. Controlla la mia risposta, mi sono collegato a una pagina con schermate su come farlo in phpMyAdmin, ma ho speso più (troppo, in effetti) tempo/impegno nello spiegare le varie query che si possono usare per importare un file in una tabella senza problemi duplicati –

7

Ci sono un paio di modi per fare ciò che si vuole:

Il modo brutale:

TRUNCATE TABLE yourTbl; -- emtpies out the table 

Quindi importare, ma si potrebbero perdere dati, quindi creare una tabella di backup. Tutto sommato, basta non fare questo, controlla le alternative elencate di seguito:

Scrivi la tua INSERT interrogazione, con IGNORE clausola:

INSERT IGNORE INTO yourTbl -- as shown in the linked duplicate 

Ma, dal momento che si sta importando un file, la query , molto probabilmente è un LOAD DATA [LOCAL] INFILE. Come si può vedere nel the manual, è possibile aggiungere facilmente un IGNORE a tale query, anche:

LOAD DATA LOCAL INFILE '/path/to/files/filename1.csv' IGNORE -- IGNORE goes here 
    INTO TABLE your_db.your_tbl 
     FIELDS TERMINATED BY ';' 
       OPTIONALLY ENCLOSED BY '"' 
     LINES TERMINATED BY '\n' 
    (`field1`,`field2`); 

Questo è tutto.Non preoccupatevi se non siete troppo comodo scrivere le proprie query come questo, ci sono altri modi di fare ciò che si vuole fare:
Il modo CLI:

mysqlimport -i dbname fileToImport 
# Or 
mysqlimport --ignore dbname fileToImport 

Inoltre CLI, creare un file contenente la query LOAD DATA sopra, quindi:

$: mysql -u root -p 
*********** #enter password 
mysql> source /path/to/queryFile.sql 

Ciò richiede di avere accesso alla linea di comando, e si esegue questo comando Here's the manual page of MySQL

Utilizzando phpMyAdmin, durante l'importazione, troverete una casella di controllo dicendo "Ignora duplicati", verificarlo e importarlo. Here's a page with screenshots
Puoi anche scegliere di verificare "Ignora errori", ma questo è un altro approccio a forza bruta, e non lo consiglierei.

Problemi correlati