2012-04-23 12 views
31

Próbuję zapisać wynik zapytania o około 1 000 000 rekordów w środowisku roboczym MySQL.Eksportowanie wyników zapytania w MySQL Workbench poza 1000 rekordów

Po uruchomieniu SELECT wyświetla się tylko 1000 rekordów (domyślny limit MySQL Workbench). Wiem, że mogę zmienić limit lub usunąć limit, ale nie chcę załadować 1,000,000 rekordów do panelu wyników (co może spowodować awarię mojego komputera?), Ale chcę zapisać wyniki w pliku.

Czy program MySQL Workbench umożliwia zapisywanie wyników zapytania bezpośrednio w pliku? Lub zapisać cały zestaw wyników zamiast 1000?

+1

Mogę również napisać skrypt PHP, który wykonuje kwerendę i generuje CSV, ale to też może spowodować awarię mojego serwera, prawda? Jeśli fopen() do dołączenia, czy ogromny plik będzie problematyczny? –

+0

Nie jestem zaznajomiony ze środowiskiem roboczym, ale można napisać skrypt, aby uzyskać po prostu 1000 rekordów za każdym razem, ustawiając poprawne przesunięcie za każdym razem (tj. Czas jodły "LIMIT 0,1000", po raz drugi "LIMIT 1000,1000", następnie "LIMIT 2000,1000", itp.), dołączając wyniki za każdym razem do pliku. Nie musisz przechowywać całego miliona zapisów w pamięci lub spróbuj zapisać je wszystkie jednocześnie. –

+0

Inną komplikacją jest to, że samo zapytanie musi odwoływać się do innych rekordów. Wykonuje SUM() i sprawdza SUM z HAVING zanim rekord zostanie dopuszczony do zestawu wyników.Dlatego najpierw muszę przetworzyć cały zestaw danych, a następnie wyprowadzić go. –

Odpowiedz

30

Istnieje możliwość zmiany limitu wiersza wyników zapytania lub całkowitego usunięcia limitu.

  1. idź do Edit → Preferencje → SQL Editor (TAB). Jeśli nie możesz znaleźć wyników zapytania, przejdź do zapytań SQL (tab).

  2. Zlokalizuj wyników zapytań sekcję i odznacz rzędami Limit pole

  3. Kliknij OK.

  4. Ponownie uruchom zapytanie.

+15

* "Próbuję zapisać wynik zapytania o około 1 000 000 rekordów" * W tym przypadku nie sądzę, aby usunięcie limitu było właściwym działaniem. – vbence

+7

W MySQL Workbench 5.2 przenieśli opcję * Limit Rows * z 'SQL Editor' do zakładki' Zapytania SQL'. –

+1

'Edytuj'>' Preferencje'> 'Edytor SQL'>' Wykonywanie SQL' na MySQL Workbench 6.3 na Ubuntu Linux – tenCupMaximum

37

LOAD DATA INFILE ma rodzeństwo zwane SELECT ... INTO OUTFILE. Można go używać w następujący sposób:

SELECT * FROM mytable 
INTO OUTFILE '/tmp/mytable.csv' 
FIELDS TERMINATED BY ',' 
    OPTIONALLY ENCLOSED BY '"' 
LINES TERMINATED BY '\n'; 

Ta metoda nie będzie wykorzystywać niepotrzebnych zasobów w interfejsie użytkownika.

Jako @florian wskazano: Będzie jednak utworzyć plik wyjściowy na serwerze bazy danych, a nie na komputerze klienta.

Należy również zauważyć, że ramy bezpieczeństwa jak SELinux lub AppArmor może zapobiec MySQL z zapisywania plików poza standardowymi baz folder. Jeśli wystąpi błąd odmowy dostępu, mimo że katalog jest zapisywalny przez użytkownika mysql, prawdopodobnie jest to jedna z nich.

+0

Jeśli wystąpił błąd, wybrałam tę opcję https://dev.mysql.com/doc/refman/5.5 /en/cannot-create.html – vsingh

2

Po prostu dodaj "limit $ number" dodaj klauzulę SQL. jeśli nie dodasz limitu, domyślne zwrócone linie to 1000.

+0

Nie odpowiada to na pytanie: – Bowdzone

+1

Działa dla mnie, dodaj limit do dużej liczby, a następnie wszystkie wiersze zostaną zwrócone i możesz je wyeksportować. – dweebo

Powiązane problemy