MYSQL Nur bestimmte Zeilen ausgeben

95

Ich versuche, einen MySQL-Speicherauszug einiger Zeilen in meiner Datenbank zu erstellen. Ich kann dann den Speicherauszug verwenden, um diese wenigen Zeilen in eine andere Datenbank hochzuladen. Der Code, den ich habe, funktioniert, aber er gibt alles aus. Wie kann ich mysqldump dazu bringen, nur bestimmte Zeilen einer Tabelle zu sichern?

Hier ist mein Code:


mysqldump --opt --user=username --password=password lmhprogram myResumes  --where=date_pulled='2011-05-23' > test.sql

Shattuck
quelle

Antworten:

141

Korrigieren Sie einfach Ihre --whereOption. Es sollte eine gültige SQL WHERE-Klausel sein, wie:

--where="date_pulled='2011-05-23'"

Sie haben den Spaltennamen außerhalb der Anführungszeichen.

AJ.
quelle
1
Danke tat genau das, was ich brauchte. Danke für die Hilfe!
Shattuck
@AJ, tolle Infos! Vielen Dank!
Roman Newaza
2
Für den IN- Zustand können wir einfach verwenden --where="id IN(1,2,6,10)". Wobei id die Spalte in der Tabelle ist. Ref
Yogesh
9
Nur eine Notiz an jemanden wie mich, der dies verwendet, um einen großen Datadump an einen anderen Server weiterzuleiten, der in der Mitte kaputt gegangen ist. Wenn Sie nicht --no-create-infozusammen mit Ihrer where-Klausel angeben , erstellt der neue Dump die Tabelle neu und löscht die bereits übertragenen Daten! Könnte offensichtlich sein, aber es hat mich jetzt zweimal erwischt.
Georgiecasey
Beachten Sie, dass das Problem nicht darin bestand, dass der Spaltenname außerhalb der Anführungszeichen steht. Dies ist ein Shell-Befehl, daher müssen Sie die Shell-Syntax für die Zeichenfolge schreiben date_pulled='2011-05-23'. Das bedeutet, dass Sie die einfachen Anführungszeichen in Anführungszeichen setzen oder maskieren müssen, damit sie in der Zeichenfolge enthalten sind und nicht als Anführungszeichen in der Shell-Syntax interpretiert werden. Das Hinzufügen von doppelten Anführungszeichen um das Ganze macht das, aber das würde --where=date_pulled="'2011-05-23'"(oder --where=date_pulled=\'2011-05-23\'oder sogar --where=date_pulled"'"2011-05-23"'").
Ben
32

Sie müssen die "where" -Klausel zitieren.

Versuchen

mysqldump --opt --user=username --password=password lmhprogram myResumes  --where="date_pulled='2011-05-23'" > test.sql
Neville Kuyt
quelle
1
Genau das brauchte ich. Eine andere Person hat direkt vor Ihnen geantwortet und ich habe seine Antwort ausgewählt, aber ich habe Sie für die Hilfe positiv bewertet.
Shattuck
1
Es gibt eine andere Möglichkeit, eine Abfrage wie die folgende zu verwenden: CREATE TABLE new_table AS (SELECT * FROM myResumes WHERE where = date_pulled = '2011-05-23'); Dann können Sie diese Tabelle einfach über mysqldump exportieren.
Vinayagam
1

Verwenden Sie diesen Code für bestimmte Tabellenzeilen unter Verwendung der LIKE-Bedingung.

mysqldump -u root -p sel_db_server case_today --where="date_created LIKE '%2018
%'" > few_rows_dump.sql
Rokonz Zaz
quelle