Program konwersji graficznej może być spokojnie zastąpiony poleceniem kasowania. Wynik jest taki sam.
Kurs MySQL - wprowadzanie zapytań

Wprowadzanie zapytań

Upewnij się, że jesteś podłączony do serwera (jest to omówione w poprzedniej części). Samo połączenie nie wybiera żadnej bazy danych, jednak na razie wszystko jest w porządku. Na tym etapie ważniejsze jest, aby dowiedzieć się jak wprowadzać zapytania niż rzucać się od razu w wir tworzenia tabel, wypełniania ich danymi i uzyskiwanie odpowiedzi. Ta część opisuje podstawowe zasady wydawania poleceń, używając kilku zapytań możesz zaznajomić się ze sposobem, w jaki działa mysql.

Poniżej przedstawiono proste polecenie, które każe serwerowi zwrócić numer jego wersji i aktualną datę. Po symbolu zachęty mysql> wpisz poniższe poleceni i wciśnij Enter:

    mysql> SELECT VERSION(), CURRENT_DATE();

    +-----------+---------------+
    | VERSION() | CURRENT_DATE()|
    +-----------+---------------+
    | 4.0.24-nt | 2005-05-29    |
    +-----------+---------------+
    1 row in set (0.06 sec)
    mysql>

Zapytanie to ilustruje kilka rzeczy związanych z mysql:

  • polecenie zazwyczaj składa się z instrukcji SQL, po której występuje średnik (jest kilka wyjątków kiedy średnik nie jest wymagany, jak np. wspomniany wcześniej QUIT );
     
  • po wydaniu polecenie mysql wysyła je do serwera w celu wykonania, wyświetla wyniki i pokazuje następny znak zachęty mysql>, żeby zakomunikować, że jest gotowy do przyjęcia następnego polecenia;
     
  • mysql wyświetla wynik zapytania w formie tabeli (wierszy i kolumn): pierwszy wiersz zawiera etykiety (nazwy) kolumn, a następne są już wynikiem zapytania; zazwyczaj, etykiety kolumn są nazwami kolumn pobranymi z tabeli bazy danych; jeżeli zamiast kolumny z tabeli wprowadzisz wyrażenie (patrz poniższy przykład), to mysql nada kolumnie etykietę używając tego wyrażenia;
     
  • mysql pokazuje ile wierszy zostało zwróconych jako wynik i jak długo zajęło przetwarzanie zapytania, co daje Ci przybliżony obraz wydajności serwera; wartości te są niedokładne ponieważ reprezentują czas "zegara ściennego" (a nie CPU lub maszynowy) oraz dlatego, że wpływ na nie mają różne czynniki takie jak obciążenie serwera i opóźnienia w działaniu sieci (dla skrócenia przykładów, wiersz rows in set nie jest pokazana w następnych przykładach kursu).
     

Wielkość liter w słowach kluczowych nie ma znaczenia. Następujące zapytania są równoważne:

    mysql> SELECT VERSION(), CURRENT_DATE();
    mysql> select version(), current_date();
    mysql> SeLeCt vErSiOn(), current_DATE();

Następne zapytanie pokazuje, jak można użyć mysql jako prostego kalkulatora:

    mysql> SELECT SIN(PI()/4), (4+1)*5;

    +-------------+---------+
    | SIN(PI()/4) | (4+1)*5 |
    +-------------+---------+
    |    0.707107 |      25 |
    +-------------+---------+

Zaprezentowane do tej pory polecenia były stosunkowo krótkimi, jednoliniowymi instrukcjami. Możesz nawet wprowadzić kilka instrukcji w jednej lini kończąc każdą z nich średnikiem:

    mysql> SELECT VERSION(); SELECT NOW();

    +-----------+
    | VERSION() |
    +-----------+
    | 4.0.24-nt |
    +-----------+

    +---------------------+
    | NOW()               |
    +---------------------+
    | 2005-05-29 08:19:41 |
    +---------------------+

Polecenie nie musi się całe zawierać w jednej linii więc długie instrukcje, wymagające kilku wierszy nie stanowią problemu. mysql określa gdzie się kończy każda instrukcja szukając średnika, a nie znaku końca linii. Innymi słowy: mysql czyta linie wejściowe, ale nie wykonuje ich, dopóki nie napotka znaku średnika.

Oto przykład instrukcji zapisanej w kilku linijkach:

    mysql> SELECT
    -> USER()
    -> ,
    -> CURRENT_DATE;");

    +----------------+--------------+
    | USER()         | CURRENT_DATE |
    +----------------+--------------+
    | root@localhost | 2005-05-29   |
    +----------------+--------------+

Zauważ, że po wprowadzeniu pierwszej linii symbol zachęty zmienia się z mysql> na ->. W ten sposób mysql sygnalizuje, że nie dostał jeszcze kompletnej instrukcji i czeka na dalszą część. Zachęta ta jest Twoim sprzymierzeńcem, bo umożliwia komunikację zwrotną. Zwracając na to uwagę zawsze będziesz wiedział, czego mysql od Ciebie oczekuje.

Jeżeli zadecydujesz, że nie chcesz wykonywać polecenia które właśnie prowadzasz, możesz je anulować przez wpisanie \c:

    mysql> SELECT
    -> USER()
    -> \c
    mysql>

Zauważ, że symbol zachęty powraca do postaci mysql> po tym, jak wprowadzisz \c co oznacza, że mysql jest gotowy do przyjęcia nowego polecenia.

Poniższa tabela pokazuje wszystkie symbole zachęty jakie możesz spotkać i w skrócie opisuje, w jakim stanie znajduje się mysql:

ZachętaZnacznenie
mysql>gotowy do przyjęcia nowego polecenia
->oczekiwanie na następną linię polecenia, które nie mieści się w 1 linii
'>oczekiwanie na następną linię, wcześniej wprowadzono część łańcucha rozpoczynającego się apostrofem
">oczekiwanie na następną linię, wcześniej wprowadzono część łańcucha rozpoczynającego się cudzysłowem

Instrukcje wielowierszowe powstają często przez przypadek, kiedy zamierzasz wydać instrukcję w jednej linii, ale zapominasz o końcowym średniku. W takim przypadku, mysql czeka na dalsze instrukcje:

    mysql> SELECT USER()
    ->

Jeżeli Ci się to zdarzy (myślisz, że wprowadziłeś poprawną instrukcję, ale jedyną odpowiedzią jest symbol zachęty ->), najprawdopodobniej mysql czeka na średnik. Jeżeli jednak nie wiesz, co mysql chce przez to powiedzieć, możesz poczekać ładną chwilę zanim zauważysz swój błąd. Aby poprawnie zakończyć instrukcję wprowadź średnik, a mysql przystąpi do jej wykonywania:

    mysql> SELECT USER()
    -> ;

    +----------------+
    | USER()         |
    +----------------+
    | root@localhost |
    +----------------+

Symbole zachęty w postaci '> i "> występują podczas wprowadzania łańcuchów znakowych. W MySQL możesz podawać łańcuchy ujmując je w apostrofy lub w cudzysłowy, a łańcuch znaków może ciągnąć się przez kilka wierszy. Kiedy widzisz zachętę w postaci'> lub "> oznacza to, że wprowadziłeś linię zawierającą łańcuch zaczynający się od znaku ' lub ", ale nie podałeś do tej pory odpowiadającego znaku kończącego łańcuch. Wszystko jest w porządku, jeżeli rzeczywiście wprowadzasz wielowierszowy tekst, jednak czy naprawdę często to robisz? Chyba raczej nie. Znacznie częściej symbole zachęty '> i "> oznaczają, że zapomniałeś o kończącym cudzysłowie. Np.:

mysql> SELECT * FROM moja_tabela WHERE imie = "Jan AND wiek < 30;
    ">

Jeżeli wprowadzisz powyższą instrukcję SELECT, wciśniesz Enter i będziesz czekał na wynik, nic się nie stanie. Zamiast dumać nad tym dlaczego to tak długo trwa?, zauważ podpowiedź dawaną przez znak zachęty ">. Mówi on, że mysql oczekuje reszty nie zakończonego łańcucha. (Widzisz błąd w instrukcji? Łańcuch "Jan nie jest zakończony cudzysłowem.)

Co możesz zrobić w tym momencie? Najprostszą rzeczą jest anulowanie polecenia. Jednakże, nie możesz po prostu wpisać \c ponieważ mysql zinterpretuje to jako część wprowadzanego łańcucha! Zamiast tego, wprowadź kończący znak cudzysłowu (aby mysql wiedział że zakończyłeś wprowadzać łańcuch), a następnie wpisz \c:

    mysql> SELECT * FROM my_table WHERE nazwisko = "Jan AND wiek < 30;
    "> "\c
    mysql>

Symbol zachęty powraca do postaci mysql>, co oznacza, że mysql oczekuje na nowe polecenie.

Ważne jest, żeby wiedzieć, co oznaczają symbole '> i "> ponieważ, jeżeli przez przypadek wprowadzisz nie zakończony łańcuch, to każda następna linia którą wpiszesz będzie sprawiała wrażenie ignorowanej przez mysql - włącznie z linią zawierającą polecenie QUIT! Może to być frustrujące, zwłaszcza jeżeli nie wiesz, że musisz wprowadzić znak kończący łańcuch zanim będziesz mógł anulować bieżące polecenie.

« wstecz   dalej »