2013-08-28 22 views
16

Ich habe eine db auf meinem lokalen Rechner und ich möchte die Daten in die DB auf meinem Hosting importieren. Beide DBs identisch sind, die gleichen table names, column names usw.wie doppelte Datensätze beim Importieren in phpmyadmin zu überspringen

Wenn ich export die Tabelle von meinem lokalen db durch phpmyadmin und import es durch phpMyAdmin auf meinem einen Fehler Hosting erscheint mir zu sagen, dass es doppelte Einträge für die primary key und stoppt die ganze Operation.

Wie kann ich die Daten über phpmyadmin importieren, die doppelten Einträge überspringen und am Ende des Prozesses eine Liste der Duplikate anzeigen?

Eine Lösung, die ich tun kann, ist, alle Werte des Primärschlüssels in der Datenbank bei meinem Hosting aufzurufen und die Duplikate vor dem Import zu filtern. ABER ich frage mich, ob es eine schnelle Lösung dafür mit phpmyadmin gibt?

+1

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

+0

@Karl Ich sah diesen Beitrag. Aber ich sehe keinen Bereich in der phpmyadmin Import-Registerkarte, wo ich 'sql' Code eingeben kann? –

+0

Also alles, was Sie tun wollen, ist 'IGNORE' Duplikate auf' INSERT' (kombinieren Sie die beiden, und Sie erhalten 'INSERT IGNORE') –

Antwort

32

In phpMyAdmin, in Registerkarte Einstellungen können Sie versuchen, die folgenden Werte überprüft:

  • Einstellungen -> SQL-Abfragen -> Ignorieren mehr Anweisung Fehler

Wenn Sie mit CSV-Format:

Import> - -
  • Einstellungen> CSV -> nicht abbrechen auf INSERT Fehler

Wenn Sie SQL-Format verwenden:

  • Einstellungen -> Export -> SQL -> Verwenden Sie ignorieren Einsätze
+0

nl-x, verweisen Sie bitte die "INSERT IGNORE" -Methode in Ihrer Antwort auch nur für den Fall, dass jemand wirklich danach sucht. Nur um zu verhindern, dass jemand eine andere Antwort einreicht. – Karl

+0

@Karl: Ich verstehe nicht, was du meinst. Der PhpMyAdmin Export Ignore Insert ist der dritte Aufzählungspunkt in meiner Antwort. –

+0

@ nl-x: Ich glaube, Karl meinte, dass Sie, um Ihre Antwort vollständiger zu machen (und für die zukünftige Referenz relevant sind), vielleicht die tatsächlichen Abfragen hinzufügen möchten, die Sie dazu verwenden können. Überprüfen Sie meine Antwort, ich verlinkt zu einer Seite mit Bildschirmen, wie dies in phpMyAdmin zu tun, aber ich habe mehr (zu viel, tatsächlich) Zeit/Aufwand für die Erklärung der verschiedenen Abfragen, die man verwenden kann, um eine Datei in eine Tabelle importieren ohne doppelte Ausgaben –

7

Es gibt ein paar Möglichkeiten, zu tun, was Sie wollen:

Der brutale Weg:

Dann importieren, aber Sie könnten Daten verlieren, so vielleicht eine Backup-Tabelle erstellen. Alles in allem, nicht nur dies nicht tun, überprüfen Sie die Alternativen im Folgenden aufgeführt:

Schreiben Sie Ihre eigene INSERT Abfrage, mit IGNORE Klausel:

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

Aber, da Sie eine Datei importieren, die Abfrage , höchstwahrscheinlich eine LOAD DATA [LOCAL] INFILE. Wie Sie in the manual sehen können, können Sie leicht eine IGNORE auf diese Abfrage hinzuzufügen, auch:

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`); 

Das ist es.Keine Sorge, wenn Sie nicht zu bequem sind, Ihre eigenen Abfragen wie folgt zu schreiben, gibt es andere Möglichkeiten zu tun, was Sie tun mögen:
Die CLI Art und Weise:

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

auch CLI, erstellen Sie eine Datei mit die LOAD DATA Abfrage oben, dann:

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

Diese haben Sie Zugriff auf die Kommandozeile haben erfordert, und diesen Befehl ausführen Here's the manual page of MySQL

Verwendung von phpMyAdmin, beim Import finden Sie eine Checkbox finden sagen, "Duplikate ignorieren", überprüfen und importieren. Here's a page with screenshots
Sie können auch wählen, "Fehler ignorieren", aber das ist eine andere Brute-Force-Ansatz, und ich würde das nicht empfehlen.

Verwandte Themen