Podręczna pom oc dla programistóte baz danych Leksykon kieszonkowy MySQL HELION O’REILLY* George Reese Spis treści W s tę p ...
21 downloads
31 Views
2MB Size
Podręczna p o m o c dla p ro g ra mistóte baz danych
Leksykon kieszonkowy
MySQL
HELION
O ’REILLY*
George Reese
Spis treści
W s tę p .............................................................................................................. 5 MySQL 5 ......................................................................................................... 7
1.
2. 3.
W idoki
7
Trygery
7
Procedury składow ane
7
K ursory
8
N ow e m echanizm y składow ania danych
8
Zdarzenia bazy danych
9
In s ta la c ja ...................................................................................................... 10 Pobieranie M ySQ L
10
K onfiguracja
11
U ruchom ienie
14
U staw ianie hasła głów nego
15
Replikacja
15
N arzędzia w iersza p o le c e ń ................................................................... 18 Typy d a n y c h ................................................................................................22 L iczby
23
Łańcuchy
29
3
4.
S Q L .................................................................................................................41 Rozróżnianie w ielkości liter
42
Identyfikatory
43
K om entarze
45
Instrukcje Z asady dotyczące transakcji
5.
6.
7. 8.
9.
41
Literały
46 106
O p e ra to ry ..................................................................................................108 Priorytety operatorów
108
O peratory arytm etyczne
109
O peratory porów nania
109
O peratory logiczne
111
F u n k c je ........................................................................................................113 Funkcje agregujące
113
Funkcje ogólnego przeznaczenia
115
Rodzaje t a b e l............................................................................................137 Procedury i funkcje s k ła d o w a n e .......................................................138 Param etry
138
Logika
139
K ursory
143
O bsługa zdarzeń i w arunki
144
T ry g e ry .......................................................................................................146 S k o ro w id z ..................................................................................................147
4
|
MySQL. Leksykon k eszonkowy
MySQL Leksykon kieszonkowy
Wstęp K iedy lecę z jed n ego krańca kontynentu na inny, często całe godziny poświęcam programowaniu na swoim komputerze Po w erBook. Jeśli tylko przyjdzie m i przy tym używ ać M ySQ L, nieodmiennie kończy się na szukaniu książki, której jestem współ autorem, M anaging and Using M ySQL (wydawnictwo O'Reilly). Nie noszę tej książki ze sobą, aby się nią chwalić, w ięc bardzo m i jej brakuje, bo niezależnie od tego, jak duże m a się doświad czenie pracy z M ySQL, to zaw sze w pewnym m om encie oka zuje się, że trzeba spraw dzić jakieś szczegóły składni funkcji czy instrukcji SQL. MySQL. Leksykon kieszonkowy to krótki przewodnik, który można w ziąć ze sobą. Zam iast starać się zapam iętać wszystkie szcze góły składni ALTER TABLE, z których w iększości zapew ne nigdy nie w ykorzystam y, w ystarczy sięgnąć do pokrow ca na laptopa i wyjąć stamtąd tę książeczkę. Przewodnik ten przeznaczony jest dla doświadczonych projektantów baz danych M ySQL, adm ini stratorów oraz dla programistów. Książka ta nie służy do nauki MySQL. Zakładam , że Czytelnicy znają już tę bazę albo poznają ją z pozycji obszerniejszych, takich jak M anaging and Using M ySQL. W prawdzie omawianie MySQL zaczynam y od instalacji, ale opis ten służyć m a przypom nieniu, jakie są możliwości konfiguracji, a nie nauce.
5
Podziękowania Przede wszystkim chciałbym podziękować swojemu redaktorowi, Andy'emu Oramowi, za udzielaną mi jak zawsze pomoc. Chciał bym p od ziękow ać recenzentom tej k siążk i, którym i byli Paul Dubois, Justen Stępka i Tim Allwine. N a koniec chciałbym po dziękow ać w spółautorom książki M anaging and Using M ySQ L, Tim ow i K ingow i oraz R and y'em u Jayow i Y argerow i, gdyż to dzięki ich pracy wydanie niniejszego przewodnika stało się moż liwe i potrzebne.
Konwencje W książce tej będziem y korzystali z następujących konwencji: Czcionka o stałej szerokości
Używana do wyróżnienia czegokolwiek, co może wystąpić w programie: słów kluczowych, nazw funkcji, poleceń SQL i nazw zmiennych. Ta sama czcionka jest używana w przy kładowym kodzie, wynikach działania poleceń oraz w pli kach konfiguracyjnych systemu. Pogrubiona czcionka o stałej szerokości
U żyw ana do w yróżnienia danych w prow adzanych przez użytkownika. Pochyła czcionka o stałej szerokości
U żyw ana do w yróżnienia elem entów podaw anych przez użytkow nika, jak nazw y plików czy zmiennych. Kursywa Używana do wyróżniania nazw katalogów, plików, progra mów, poleceń system u U nix i adresów URL. C zcionka ta służy też do w yróżniania now ych pojęć oraz do podkre ślania pew nych treści.
6
|
MySQL. Leksykon k eszonkowy
MySQL 5 Jeśli ktoś potrafi już używ ać bazy danych MySQL, nie musi wcale poznawać MySQL 5. Wszystko, co dotąd działało, działa tak samo jak dotąd. Najw ażniejsze, co różni M ySQL 5 od wersji dotych czasowej, to przede wszystkim ulepszenia pod kątem zastosowań przemysłowych. Są to rozwiązania znane już z innych baz danych, bez kom plikow ania M ySQL jakim iś now ym i pomysłami.
Widoki W idoki to podobne do tabel struktury danych, w yłam ujące się z reguł normalizacji. Pokazują one dane spełniające pewne usta lone warunki. W widoku m ożna przeglądać dane z pojedynczej tabeli, ale także ze skomplikowanego złączenia wielu tabel. Nowe polecenia do obsługi widoków to CREATE VIEW, DROP VIEW oraz ALTER VIEW.
Trygery Tryger w bazie danych to pew na funkcjonalność urucham iana automatycznie zawsze, kiedy w tabeli zajdzie określone zdarzenie. Można na przykład zdefiniować tryger wykonywany zawsze przy wstawianiu do tabeli nowego wiersza. Nowe polecenia do obsługi trygerów to CREATE TRIGGER oraz DROP TRIGGER.
Procedury składowane Procedury składow ane to bardzo w ażne narzędzie, oczekiwane przez wielu użytkowników . Procedura składow ana jest swojego rodzaju funkcją, tyle że zapisaną w języku SQL i przechowywaną w bazie danych. Procedury tego typu są przydatne do zamykania w całość zestawu instrukcji SQL; dzięki temu cały zestaw można
MySQL 5
|
7
wykonać przez odwołanie się do pojedynczej nazwy logicznej. Do obsługi procedur składow anych używ anych jest szereg now ych instrukcji: • CREATE PROCEDURE • ALTER PROCEDURE • DROP PROCEDURE • CALL • BEGIN/END
Kursory Kursor to narzędzie pozwalające opisać w procedurze składowa nej cały zestaw danych. Kursory M ySQ L są nieco ograniczone, gdyż w ograniczony sposób m ogą reagow ać na zm iany danych w tabeli, nie m ożna ich przew ijać (czyli kursorem m ożna porusząć się tylko od początku do końca zestawu danych), są też me chanizmem tylko do odczytu danych. Nowe polecenia do obsługi kursorów to OPEN, FETCH oraz CLOSE.
Nowe mechanizmy składowania danych Najczęściej stosowane m echanizm y składow ania danych w M y SQL to M ylSA M oraz InnoDB (m echanizmy takie określa się też mianem typów tabel). W nowych wersjach MySQL dostępnych jest też wiele innych typów tabel: ARCHIVE
Zapewnia szybkie zapisy i odczyty danych bez indeksowa nia, ale niemożliwe są aktualizacje ani usuwanie rekordów. BLACKHOLE
Powoduje odrzucanie danych; ma zastosowanie w replikacji.
8
|
MySQL. Leksykon k eszonkowy
CSV
Pozwala zapisyw ać dane w form ie w artości rozdzielanych przecinkami; format taki jest często stosowany do wymiany danych. FALCON
Nowy mechanizm przechowywania danych ogólnego zasto sowania, który być m oże kiedyś zastąpi InnoDB. Obecnie należy go traktować jako rozwiązanie przynajmniej w pew nym stopniu eksperym entalne. FEDERATED
Pozwala korzystać z bazy danych znajdującej się na zdalnym serwerze. MERGE
Zaw iera wiele tabel M ylSAM . NDB/NDBCLUSTER
Sieciowa baza danych, używana w ramach M ySQL Cluster.
Zdarzenia bazy danych Zdarzenia bazy danych, wprowadzone w M ySQL 5.1, pozwalają w skazyw ać instrukcje SQL, które będą wykonyw ane w ustalo nym m om encie albo raz, albo cyklicznie.
MySQL 5
|
9
Rozdział 1. Instalacja Oprogram ow anie M ySQL m ożna zainstalować, kom pilując kod z opcjami najlepiej dostosowanymi do konkretnych potrzeb, można też pobrać z Internetu i zainstalow ać ju ż skom pilow aną w ersję binarną. Zw ykle korzysta się z system u zarządzania pakietam i (jak system portów BSD) odpowiedniego do używanego systemu operacyjnego. M ożna też pobrać wersję binarną lub kod źródłowy z witryny M ySQ L, http://w ww .m ysql.com . Przed zainstalowaniem jakiejkolwiek wersji konieczne jest przy gotowanie systemu operacyjnego. Najpierw należy utworzyć użyt kownika mysql oraz grupę, które będą służyły do wykonywania procesu bazy danych.
Pobieranie MySQL Firma MySQL AB dość często zmienia zasady pobierania oprogra mowania z ich strony, więc postępowanie Czytelnika może nieco różnić się od opisanego dalej. MySQL występuje w dwóch odmia nach: standardowej (standard) oraz z inform acjam i diagnostycz nymi (debug)} w razie wątpliwości należy skorzystać z wersji stan dardowej. Opcja standardow a jest też używ ana w środow iskach produkcyjnych. Jeśli pojaw ią się jakieś problem y z działaniem M ySQ L, w tedy warto przetestować używaną aplikację z M ySQL z informacjami diagnostycznym i. Trzeba jedn ak pamiętać, że pakiet debug nie jest przeznaczony do używania w środowiskach produkcyjnych. Na stronie M ySQL można znaleźć także szereg dodatkowych na rzędzi, w tym narzędzia do testów, narzędzia klienckie, biblio teki oraz pliki nagłówkowe. N ie są to elem enty niezbędne do uruchomienia bazy danych M ySQL, ale mogą one być przydatne
10
|
MySQL. Leksykon k eszonkowy
przy program ow aniu bez instalacji serwera M ySQ L, a często po prostu ułatw iają nam życie.
Konfiguracja MySQL ma trzy różne zestawy parametrów konfiguracyjnych uży w ane przez proces serw era podczas jego startu oraz używ ane przez procesy klientów wykonywane przez użytkowników. Para metry te pobierane są z (od mających najw yższy priorytet): 1. W iersza poleceń. 2. Pliku konfiguracyjnego. 3. Zm iennych środowiskowych. Innymi słowy, jeśli podam y param etr password w wierszu po leceń, w pliku konfiguracyjnym i w zmiennej środow iskowej, to decyduje ustaw ienie z wiersza poleceń. W tabeli 1.1 pokazano wszystkie opcje konfiguracyjne. Każda opcja dotyczy jednego lub wielu narzędzi M ySQL, w ynika to z kontekstu. Tabela 1.1. Opcje konfiguracyjne MySQL Opcja
Ops
b a s e d ir = / < a t a lo g
Ok eśla katalog głów ny Instalacji MySQL
B a tc h
Powoduje p acę w t yble w sadow ym czyli d o s t umienia s t d o u t nie są w ysyłane żadne pytania w ie sza poleceń ani Inne Info macje Jest to t yb dom yślny w p zypadku użycia potoku
c h a ra c te r-s e ts d i r = ka ta lo g
W skazuje gdzie zapisane są pliki z zestawam i znaków
C o m p re ss
Nakazuje se w e ow l I klientowi używać kom p esjl podczas kom unikacji sieciowej
d a t a d i r = ka ta lo g
Wskazuje położenie plików z danym i MySQL
Rozdz ał 1. nstalacja
|
U
Tabela 1.1. Opcje konfiguracyjne MySQL Opcja
Ops
debug=opcje
Ok eśla opcje dotyczące kom unikatów o błędach
Force
Nakazuje kontynuację p zetw a zania w systemach klienckich naw et w p zypadku wystąpienia błędu
host=nazv/ahosta
W skazuje host (kom pute se w e ) z któ ym klient ma się domyślnie łączyć
languag e=języl<
W skazuje język dla lokalizacji
nazwa-zmiennej =w artość
P zyplsuje podanej zm iennej żądaną w a tość
password = h asło
W skazuje domyślne hasło używane p zez klientów p zy łączeniu się
port=num er_portu
Ok eśla nume po tu na któ ym ma nasłuchiwać se w e Iz któ ym mają łączyć się kllenty
Silent
W p zypadku błędu połączenia kończy p acę nie pokazując ko m unikatów o błędzie
skip-new-routines
Nakazuje se w e ow i MySQL unikać nowych potencjalnie błędnych p ocedu
sleep =sekund
W st zymuje p acę między kolejnymi poleceniami
socket=naziva
Gniazdo używane do połączeń lokalnych
usez=użytkownil<
Wskazuje domyślnego użytkownika używanego p zez klientów p zy łączeniu się
Verbose
Nakazuje MySQL dokładniejsze Info m ow anle o w ykonyw anych ope acjach
Wait
Nakazuje klientow i czekać po nieudanej p óble ustalenia połączenia po czym ponow nie sp óbow ać
Plik konfiguracyjny M ySQL m a następujący format: # Przykładow y p lik konfiguracyjny MySQL
# # O pcje dotyczące wszystkich klientów [client] password = my_password
12
|
MySQL Leksykon k eszonkowy
port socket
= 3306 = /var/lib/mysql/mysql.sock
l'c op cje dotyczą serw era mysqld
[mysqld] port = 3306 socket = /var/lib/mysql/mysql.sock max_allowed_packet=lM
M ySQ L potrafi obsłużyć w iele plików konfiguracyjnych. Jako ogólną zasadę należy przyjąć następującą kolejność: 1. Plik konfiguracyjny użytkow nika (tylko Unix). 2. Plik konfiguracyjny w skazany opcją - -defaults - extra-fil e=nazwapli/
3. Plik konfiguracyjny z katalogu z danymi MySQL. 4. System ow y plik konfiguracyjny. W e w szystkich przypadkach, poza podaw aniem param etrów w wierszu poleceń i pliku użytkownika, nazwa pliku konfigura cyjnego w system ie U nix to my.cnf, a w W indows my.ini. Użyt kownicy systemu Unix mogą nadpisać systemowe dane konfigu racyjne, tworząc własne pliki konfiguracyjne, ~/.my.cnf. Systemowy plik konfiguracyjny w systemie Unix to /etc/my.cnf, a w Windows mogą to być kolejno: 1. C :\m y.cnf 2. C:\W IN N T\System 32\m y.cnf M ożna p o d ać też p lik w w ierszu poleceń , k orzy stając z opcji - -de~faults-~file=nazwapliku. O pcja ta pow oduje pom inięcie opcji z innych plików, naw et jeśli nie są nadpisyw ane w e w ska zanym pliku.
Rozdz ał 1. nstalacja
|
13
Uruchomienie Zwykle chcemy, aby baza danych MySQL uruchamiana była wraz ze startem system u operacyjnego. To, jak to się robi, zależy już od konkretnego systemu.
M ac OS X Pakiet przeznaczony na system M ac OS X podczas instalacji usta wia automatyczne uruchamianie MySQL. Aby sprawdzić, czy tak faktycznie jest, należy zajrzeć do katalogu /Library/Startupltem s/ MySQL.
Solaris Binarna instalacja M ySQ L przeznaczona na system Solaris nie urucham ia się autom atycznie jako usługa system owa, ale przy gotowuje plik z deklaracjami Solarisa, /var/svc/manifest/application/ database/mysql.xml. Najpierw trzeba spraw dzić, czy taki plik ist nieje; jeśli nie, trzeba poszukać go w użytej dystrybucji M ySQL lub w Internecie. Przygotowywanie MySQL do uruchamiania się wraz z systemem zaczynamy od sprawdzenia, czy takie urucha mianie nie m a jeszcze miejsca: $ svcs mysql
Jeśli odpowiedź będzie w yglądała tak: svcs: Pattern STATE
'mysql' STIME
doesn't match any instances FMRI
to usługa nie jest zainstalowana. Aby ją zainstalować, piszemy: $ svcfg import /var/svc/manifest/application/ database/mysql.xml
Teraz należy spodziew ać się takiej odpowiedzi:
14
|
MySQL. Leksykon k eszonkowy
$ svcs mysql
STATE
STIME
FMRI
disabled default
Mar_10
s v c :/application/database/mysql:
Aby uruchom ić M ySQL podczas urucham iania system u, należy wpisać: $ svcadm enable mysql
Inne system y Unix Przygotowywanie środowiska w innych systemach Unix jest bar dzo proste: w ystarczy skopiow ać skrypt mysql.server z katalogu źródłow ego support-files do katalogu startow ego używ anego w danym systemie oraz zapewnić, że skrypt ten będzie mógł być w ykonyw any przez użytkow nika root. Przykładow o w FreeBSD skrypt należy um ieścić w /usr/local/etc/rc.d. Po zainstalowaniu M ySQL m ożna uruchom ić narzędzie mysql_ install_db, aby przygotow ać bazy danych.
Ustawianie hasła głównego Po uruchomieniu serwera, a przed zrobieniem czegokolwiek in nego, należy ustaw ić hasło dla użytkow nika root: mysqladmin -u root password dobre_hasło
Replikacja Jeśli chcemy skonfigurować dwa serwery MySQL w celu skorzy stania z replikacji, trzeba jed en serw er ustaw ić jako nadrzędny (master), a drugi jako podrzędny (slave). Konfiguracja serwera po lega jed ynie na ustaw ieniu rejestracji binarnej oraz określeniu identyfikatora serwera. Rejestracja binarna oznacza, że wszyst kie transakcje będą zapisyw ane do binarnego pliku dziennika.
R o z d z a łl. nstalacja
|
15
D ziennik ten m oże być później odczytany przez serw ery pod rzędne, które na tej podstaw ie określą, jakie operacje same mają wykonać.
K o nfig u ro w an ie serw e ra nadrzędnego Jak już wspomnieliśmy, serwer nadrzędny musi m ieć ustawioną rejestrację binarną, trzeba także nadać mu identyfikator. Robi się to w pliku konfiguracyjnym MySQL: [mysqld] log-bin=mysql-bin server-id=l
Identyfikator serwera to dow olna liczba całkowita, która jednak w ramach używ anego zestawu serwerów M ySQL nie m oże się powtarzać. Identyfikatory te będą przekazywane serwerom pod rzędnym. Serwery podrzędne muszą łączyć się z serwerem nadrzędnym za pomocą poprawnego konta MySQL mającego uprawnienia REPLI CATION SLAVE. M ożna w y k o rzy stać jak ieś istn iejące konto lub stw orzyć specjalne konto w ykorzystyw ane tylko do replikacji.
K o nfig u ro w an ie serw e ra podrzędnego Jak serwer nadrzędny, tak i serwery podrzędne muszą m ieć nie powtarzalne identyfikatory. Kiedy potrzebne serwery mają prawidłowe identyfikatory, a ser wer nadrzędny binarnie rejestruje swoje transakcje, trzeba z ser wera nad rzędnego u zy sk ać pew ne param etry konfiguracyjn e. Spraw a jest o tyle skom plikowana, że w trakcie pobierania tych danych nie mogą m ieć miejsca żadne aktualizacje danych. Na ser werze nadrzędnym uruchamiamy program kliencki i wpisujemy:
16
|
MySQL. Leksykon k eszonkowy
mysql> FLUSH TABLES WITH READ LOCK; Query OK, 0 rows affected (0.30 sec) mysql> SHOW MAST ER STATUS;
File Binlog_Ignore_DB
| Position
crmll4-brn.000044 |
| Binlog_Do_DB
98
1 row in set (0.05 sec)
Z kolei w drugim oknie, kiedy nadal działa klient mysql z usta wioną blokadą, wpisujemy: $ mysqldump --master-data -uroot -p REPLIKOWANA_BAZA_DANYCH > /var/tmp/master.dump
Kiedy replikacja ma dotyczyć istniejących już danych, trzeba zo stawić działąjącego klienta z mysql, aby w chw ili urucham iania program u mysqldump nadal działała blokada. Jeśli o tym zapo mnimy, m ożem y uszkodzić dane serwera podrzędnego. Teraz m ożna przenieść przygotowane dane na serwer podrzędny i zaim portow ać te dane. Przedtem jednak trzeba popraw ić pole cenie CHANGE MASTER znajdujące się blisko początku pliku tak, aby podać tam praw idłow y serwer nadrzędny, poprawne konto i hasło. T rzeba p am iętać o zapam iętan iu położen ia i w artości dziennika! Kiedy mamy już wszystko poprawione, uruchamiamy serwer pod rzędny z opcją --skip-slave, ładujemy przygotowane dane, uru chamiamy wątki procesu podrzędnego i gotowe. Jeden serwer nadrzędny może przekazywać dane do wielu ser werów podrzędnych.
Rozdz ał 1. nstalacja
|
17
Rozdział 2. Narzędzia wiersza poleceń Baza danych M ySQ L m oże być obsługiw ana całkowicie z wier sza poleceń. Każdemu poleceniu MySQL jako argumenty można podać odpowiednie opcje konfiguracyjne, om ówione wcześniej. Opcje takie poprzedza się dwom a minusami: mysql --user=użytkownil<
Poza tym każda z tych opcji m a zapis skrótowy: mysql -uużytkownik
Aby zobaczyć, które opcje dotyczą których poleceń i jakie są ich zapisy skrócone, należy zajrzeć do pomocy dotyczącej odpowied niego polecenia: $ man -M/usr/local/mysql/man mysql
M ySQ L zaw iera następujące program y d ziałające w w ierszu poleceń: m sqllm ysql W ygodne narzędzie do zmiany aplikacji dostosowanych do m SQL na aplikacje M ySQL. O becnie już niew iele osób po trzebuje jednak tego typu narzędzia. myisamchk N arzędzie to pozw ala spraw dzić spójność tabel typu M yISAM oraz napraw ić ewentualne uszkodzenia. mysql Interaktywny interpreter języka SQL dla MySQL, umożliwia w ykonyw anie instrukcji SQ L z w iersza poleceń. Instrukcje SQL mogą m ieć wiele wierszy, są wykonyw ane po zakoń czeniu ich średnikiem lub sekw encją oznaczoną przez \g. mysql_upgrade Kiedy zainstalujem y już now ą wersję M ySQL, narzędzie to pozwala sprawdzić, czy istniejące tabele są z tą nową wersją
18
|
MySQL. Leksykon k eszonkowy
zgodne. Narzędzie to należy urucham iać każdorazowo po aktualizacji oprogram owania MySQL. mysqladmin Interfejs do administracji MySQL. W prawdzie wiele funkcji tego narzędzia dostępnych jest jako instrukcje SQL oraz na rzędzia wiersza poleceń, ale program ten um ożliw ia łatwe i w ygodne w ykonyw anie zadań adm inistratora z w iersza poleceń systemu Unix, bez konieczności uruchamiania inter pretera SQL. M ożna użyć następujących poleceń adm ini stracji: create nazwabazydanych
Tworzy podaną bazę danych. drop nazwabazydanych Przeciwieństwo create — usuwa podaną bazę danych. extended-status
Podaje rozszerzony kom unikat stanu z serwera. flush-hosts
W ym iata z cache wszystkie serwery. flush-logs
W ym iata wszystkie logi. flush-status
W ym iata wszystkie zm ienne stanu. flush-tables
W ym iata wszystkie tabele. flush-threads
W ym iata cache wątków. flush-privileges
W ym usza na M ySQ L ponow ne załad ow anie tabel upraw nień.
Rozdz a ł2 . Narzędz a w ersza poleceń
|
19
kill i d [ , id]
Kończy wskazane wątki M ySQL. password n o w e_ h a sło
Ustawia hasło użytkownika na podane. Wywołanie mysqladmin -u root password n ow e_hasło powinno być pierwszym poleceniem wykonywanym w nowej in stalacji MySQL. Ping Spraw dza, czy działa w danej chwili mysqld. processlist
Pokazuje aktywne wątki MySQL. Można te wątki koń czyć za pom ocą polecenia mysqladmin kill. reload
Przeładow uje tabele uprawnień, refresh
W ym iata w szystkie tabele, zam yka w szystkie pliki logów i ponownie je otwiera. shutdown
W yłącza MySQL. status
Pokazuje skrócony stan serwera. variables
W yśw ietla dostępne zmienne. version
W yśw ietla informacje o wersji serwera. mysqlaccess Pozwala zarządzać użytkow nikam i w trybie w iersza pole ceń. Jest to w zasadzie skrót do polecenia GRANT z SQL.
20
|
MySQL. Leksykon k eszonkowy
mysql check Jest to narzędzie do sprawdzania spójności danych podobne do myisamchk. Podstawowa różnica jest taka, że mysqlcheck jest urucham iane, kiedy działa M ySQ L. D okładny zakres kontroli i napraw zależny jest od użytego mechanizmu prze chowywania danych. mysqld Proces serw era M ySQ L. N igdy nie należy w yw oływ ać go bezpośrednio, ale korzystać z mysqld_safe. mysqld_safe M enedżer procesu serwera. W wersjach M ySQ L sprzed 4.0 skrypt ten nazywał się safe_mysqld. Proces ten uruchamia pro ces serwera mysqld i uruchamia go ponownie w razie awarii. Warto zauważyć, że skrypt mysql.server wykonuje mysqld_safe przy urucham ianiu serw era korzystając z odpow iedniego konta. mysqldump Zrzuca do pliku tekstowego bazę lub bazy danych MySQL. Taki plik tekstowy może zostać później użyty do przywró cenia tych baz danych. mysqlimport Ładuje do bazy danych pliki tekstowe w rozmaitych forma tach. Zakłada się, że nazwa bazowa (nazwa pliku bez rozsze rzenia) pasuje do nazw y tabeli używanej przy imporcie. mysqlshow Wyświetla strukturę podanych obiektów bazy danych My SQL. M ożna oglądać strukturę samej bazy, tabel i kolumn. mysqlslap Jest narzędzie pozwalające sym ulow ać obciążenie serwera M ySQ L przez program y klienckie.
Rozdz a ł2 . Narzędz a w ersza poleceń
|
21
Rozdział 3. Typy danych W e w szystkich typach danych naw iasam i kw adratow ym i ([ ]) oznaczane są fragmenty opcjonalne. Poniższy przykład pokazuje sposób prezentacji typu BIGI NT, opisanego dalej w tym rozdziale: BI CINTI(wielkość_pokazywana)]
O znacza to, że słow o BIGI NT m oże w ystąpić sam odzielnie lub z pokazywaną wartością. Użycie kursywy wskazuje, że nie należy wpisywać słowa wielkość_pokazywana, ale podać własną war tość. Oto przykłady użycia: BIGINT BIGINT(20)
Poza typem BIGINT także w iele innych typów danych M ySQ L uw zględnia deklarację rozmiaru wyśw ietlania. Jeśli nie powie dziano inaczej, m usi to być liczba od 1 do 255. W wersjach M ySQ L starszych niż w ersja 5, baza danych w nie których przypadkach zmieniała podany typ kolumny, nie infor mując o tym użytkownika. Obecnie takie podm iany nie m ają już miejsca. VARCHAR -> CHAR
Jeśli podana kolumna VARCHAR ma rozmiar mniejszy od czte rech znaków , jest przekształcana w kolum nę CHAR. CHAR -> VARCHAR
Jeśli tabela zawiera co najmniej jedną kolum nę o zmiennej długości, w szystkie kolum ny typu CHAR dłuższe niż trzy znaki są zam ieniane na VARCHAR. Rozmiar wyświetlania TIMESTAMP Rozmiar wyświetlania pól TIMESTAMP musi być zawsze wiel kością parzystą od 2 do 14. Rozm iar równy 0 lub większy od 14 pow oduje przyjęcie 14. W szelkie liczby nieparzyste są zam ieniane na następną liczbę parzystą.
22
|
MySQL. Leksykon k eszonkowy
Liczby M ySQL obsługuje liczbowe typy danych zgodne z AN SI SQL 2. Typy te dzielimy na całkowitoliczbowe, dziesiętne i zmiennoprze cinkowe. W ram ach tych grup dzielim y typy dalej, według zaj mowanej przez nie pamięci. W przypadku typów liczbowych można podać rozmiar wyświe tlania, który wpływa na sposób pokazywania przez M ySQL w y ników. Rozmiar ten nie m a żadnego związku z wielkością pamięci zajm ow anej przez dany typ. D odatkow o w przypadku liczb zm ien noprzecinkow ych i dziesiętnych m ożna podać liczbę cyfr znajdujących się za kropką dziesiętną. Wtedy liczba cyfr powinna należeć do zakresu od 0 do 30, czyli b yć co najm niej o dwa mniejsza od rozmiaru wyświetlania. Jeśli warunek ten nie zostanie dotrzym any, M ySQL autom atycznie zm ieni liczbę cyfr tak, aby była m niejsza o dw a od rozm iaru w yśw ietlania. Przykładow o, M ySQL autom atycznie zm ieni F LOAT (6,5) na F LOAT (7,5). Próba wstawienia do kolumny wartości przekraczającej dopusz czalny zakres tej kolum ny pow oduje obcięcie tej w artości do najmniejszej (dla liczb ujemnych) lub największej (dla liczb dodat nich) w artości dla danej kolum ny dopuszczalnej. Jeśli takie ob cięcie jest robione podczas wykonywania instrukcji ALTER TABLE, LOAD DATA INFILE, UPDATE lub wielowierszowej instrukcji INSERT, M ySQL pokazuje ostrzeżenie. W yjątkiem jest korzystanie z M y SQL w wersji 5 lub nowszej w trybie pełnej zgodności ze stan dardem SQL, gdyż wtedy w przypadku instrukcji INSERT i UPDATE zgłaszany jest błąd. A trybutu AUTO INCREMENT m ożna użyć do co najw yżej jednej kolumny całkowitoliczbowej w tabeli. Atrybut UNSIGNED może być łączony z dowolnym liczbowym typem danych. Użycie tego atry butu powoduje, że do kolumny nie można wpisywać liczb ujem nych. Atrybut ZEROFILL nakazuje wypełnienie kolumny od lewej
Rozdz ał 3. Typy danych
|
23
strony zerami podczas wyświetlania jej wartości. O liczbie tych zer decyduje szerokość w yśw ietlania danej kolumny.
BIGINT BI GINTI(rozmiar_wyświetlany)] [AUTO_INCREMENT] [UNSICNED] [ZEROFILL]
Rozm iar w pamięci 8 bajtów Opis Największy z typów całkowitoliczbowych, pozwalający zapisywać liczby od -9 223 372 036 854 775 808 do 9 223 372 036 854 775 807 (jeśli bez znaku, to od 0 do 18 446 744 073 709 551 615). Z uwagi na sposób realizacji d ziałań n a liczbach tego typu, należy u n ik ać op eracji na liczbach BIGINT bez znaku w iększych niż 9 223 372 036 854 775 807, gdyż m oże to zaow ocow ać niepraw i dłowym i wynikami.
BIT BI T[(b i ty)]
Rozm iar w pamięci w przybliżeniu b ity bitów +7 lub 8 bitów Opis W wersjach M ySQL 5.0.3 i starszych, pola typu BIT działały tak samo, jak T I NYINT(1). Omawiany typ pola pozwala przechowy w ać ustaloną liczbę bitów. Jeśli podana zostanie w ielkość bitów m niejsza od dozw olonej, M ySQ L w ypełni zeram i bity od lewej strony.
24
|
MySQL. Leksykon k eszonkowy
DEC Synonim typu DECIMAL.
DECIMAL DECIMAL i (.dokładność,
[sfeala])] [UNSIGNED] [ZEROFILL]
Rozm iar w pamięci różnie Opis Pozwala zapisyw ać liczby zm iennoprzecinkow e w sytuacjach, kiedy istotna jest dokładność — na przykład przy operow aniu kwotami pieniędzy. Stosując typ DECIMAL, trzeba podać dwa jego param etry, dokładność i skalę. D okładność to liczba znaczących cyfr, zaś skala to liczba znaczących cyfr po kropce dziesiętnej. Przykładow o, kolum na SALDO typu DE CI MA L(9, 2) pozwoliłaby zapisyw ać liczby dziew ięciocyfrow e, przy czym na praw o od kropki dziesiętnej m ogłyby być dwie cyfry. Zakres dopuszczal nych liczb to w takiej sytuacji od - 9 999 999,99 do 9 999 999,99. Jeśli podana zostanie liczba zawierająca więcej cyfr po przecinku, niż przewiduje to definicja, liczba zostanie zaokrąglona. W artości spoza zakresu DECIMAL są obcinane tak, aby się w nim zmieściły. W w ersjach M ySQ L starszych niż 5, w artości DECIMAL nie były zapisywane jako liczby zmiennoprzecinkowe, lecz jako łańcuchy znaków. N a każdą cyfrę zużywany był jeden znak w przypadku skali większej od 0, poza tym jeden dodatkow y znak zużyw any jest w przypadku liczb ujemnych. Jeśli skala wynosi 0, liczby nie m ają części ułamkowej. SQL zgodnie z norm ą AN SI pozw ala pom ijać dokładność i (lub) skalę. Jeśli b rak d okładności, przyjm ow ane je s t ustaw ienie
Rozdz ał 3. Typy danych
|
25
dom yślne charakterystyczne dla im plementacji. Jeśli brak skali, przyjm ow ane jest zero. W M ySQL dom yślna w artość dokładno ści to 10.
DOUBLE DO UBLEl(rozmiar_wyświetlany, cyfr)] [ZEROFILL]
Rozm iar w pamięci 8 bajtów Opis L iczba zm ien noprzecin kow a podw ójnej precyzji. Ten typ da nych pozw ala zapisyw ać duże w artości zm iennoprzecinkow e. W kolum nach tego typu m ożna zap isać w artości ujem ne od -l,7976 9 3 1 3 4 8 6 2 3 1 5 7 E + 3 0 8 do -2 ,2 2 5 0 7 3 8 5 8 5 0 7 2 01 4 E -3 0 8 , 0 oraz w artości d od atnie od 2 ,2 250738585072014E -308 do l,7976931348623157E + 308.
DOUBLE PRECISION Synonim DOUBLE.
FLOAT FL0AT[(roz mi ar_wyświetlany, cyfr)] [ZEROFILL]
Rozm iar w pamięci 4 bajty
26
|
MySQL. Leksykon k eszonkowy
Opis Liczba zm iennoprzecinkow a pojedynczej precyzji. Ten typ da nych pozwala zapisyw ać m ałe w artości zm iennoprzecinkow e. W kolum nach tego typu m ożna zap isać w artości ujem ne od -3/402823466E+38 do - l /175494351E-38/ 0 oraz wartości dodatnie od U 7 5 4 9 4 3 5 1 E -3 8 do 3/402823466E+38.
INT IN T [ (rozmiar_wyświetlany) ] [AUTO_INCREMENT] [UNSICNED] [ZEROFILL]
Rozm iar w pamięci 4 bajty Opis Podstaw ow y rodzaj liczb całkow itych od - 2 147 483 648 do 2 147 483 647 (lub od 0 do 4 294 967 295 w przypadku liczb bez znaku).
INTEGER Synonim INT.
M E D IU M IN T M E DI UM IN TI(rozmiar_wyświetlany)] [AUTO_INCREMENT] [UNSICNED] [ZEROFILL]
Rozm iar w pamięci 3 bajty
Rozdz ał 3. Typy danych
|
27
Opis Liczby całkowite od -8 388 608 do 8 388 607 (lub od 0 do 16 777 215 w przypadku liczb bez znaku).
NUMERIC Synonim DECIMAL.
REAL Synonim DOUBLE.
SM ALLINT SM AL LI NT E(rozmiar_wyświetlany) ] [AUTO_INCREMENT] [UNSICNED] [ZEROFILL]
Rozm iar w pamięci 2 bajty Opis Liczby całkowite z zakresu od -3 2 768 do 32 767 (od 0 do 65 535 w przypadku liczb bez znaku).
TIN Y IN T TI N Y I N T [ (rozmiar_wyświetlany) ] [AUTO_INCREMENT] [UNSICNED] [ZEROFILL]
Rozm iar w pamięci 1 bajt
28
|
MySQL. Leksykon k eszonkowy
Opis Liczby całkowite od -1 2 8 do 127 (od 0 do 255 w przypadku liczb bez znaku).
Łańcuchy MySQL obsługuje dwie kategorie łańcuchów: łańcuchy tekstowe oraz łańcuchy binarne. Obie kategorie m ają sw oje specyficzne typy do obsługi różnych wielkości pól i różnych sposobów po równywania wartości. W zależności od sposobu porównywania, można uwzględniać bądź nie wielkość liter, można też porówny wać dane binarnie (bajt po bajcie). Kiedy nazwa typu tekstowego (jak CHAR, VARCHAR i inne) zostanie oznaczona słowem kluczowym BINARY, kolum na pozostaje ko lumną tekstow ą, ale dane są porów nyw ane ze sobą binarnie.
BINARY BINA RY(rozmiar)
Rozmiar w edług rozm i ar, w zakresie od 0 do 255 Rozm iar w pamięci l o z m i a i bajtów Opis Typ danych BINARY to binarny odpowiednik typu CHAR. Podsta wowa różnica między tymi dwoma typami polega na tym, że pole typu BINARY zaw iera dane b inarn e, w ielk o ść tych d anych jest mierzona nie w znakach, lecz w bajtach. Łańcuchy zawierające
Rozdz ał 3. Typy danych
|
29
mniej znaków , niż to w ynika z rozmiaru kolum ny, wypełniane są po prawej stronie znakam i 0x00 (wersja M ySQ L 5.0.5 i now sze) lub spacjam i (wersje starsze).
BLOB Binarny odpo wi ed ni k typu TEXT.
CHAR C H AR ( rozmiar) [BINARY] [CHARACTER SET zestawi [COLLATE porównywaniel
Rozmiar w edług rozm i ar, do 255 Rozm iar w pamięci zależny od rozmiaru i od użytego zestawu znaków Opis Pole tekstowe ustalonej długości. Łańcuchy zaw ierające mniej znaków , niż to w ynika z rozmiaru kolum ny, wypełniane są po prawej stronie spacjami. Podczas pobierania danych z bazy te dodatkow e spacje są usuwane. Pola CHAR(O) zostały zachowane w celu zapewnienia zgodności ze starym i system ami, w których w kolum nach nie są zapisywane żadne wartości.
CHARACTER Synonim CHAR.
30
|
MySQL. Leksykon k eszonkowy
CHARACTER VAR YING Synonim VARCHAR.
LONGBLOB Binarny odpo wi ed ni k LONGTEXT.
LONGTEXT LONGTEXT [CHARACTER SET zestawi [COLLATE po ró wn yw an ie ]
Rozmiar Odo 4 294 295 Rozm iar w pamięci D ługość w artości+4 bajty Opis Typ pozw ala zapisyw ać duże w artości tekstow e. Teoretyczne ograniczenie rozm iaru tekstu to ponad 4 GB, ale praktycznym i ograniczeniam i są ograniczenia protokołu kom unikacyjnego MySQL oraz ilość pamięci przeznaczonej na komunikację na ser werze i na stacji klienckiej.
M EDIUM BLOB Binarna postać MEDIUMTEXT.
M ED IU M TEXT MEDIUMTEXT [CHARACTER SET zestawi [COLLATE porównywaniel
Rozdz at 3. Typy danych
|
31
Rozmiar 0 do 16 777 215 Rozm iar w pamięci D ługość wartości+3 bajty Opis Typ pozwala zapisyw ać średniej wielkości w artości tekstowe.
NCHAR Synonim CHAR.
NA TIO NA L CHAR Synonim CHAR.
NA TIO NA L CHARACTER Synonim CHAR.
NA TIO NA L VARCHAR Synonim VARCHAR.
TEXT TEXT [CHARACTER SET zestawi [COLLATE porównywanie]
Rozmiar 0 do 65 535
32
|
MySQL. Leksykon k eszonkowy
Rozm iar w pamięci D ługość w artości tekstowej+2 bajty Opis Typ pozwala zapisyw ać typowe w artości tekstowe.
TINYBLOB Binarny odpo wi ed ni k TINYTEXT.
TINYTEXT TINYTEXT [CHARACTER SET zestawi [COLLATE porównywaniel
Rozmiar 0 do 255 Rozm iar w pamięci D ługość w artości tekstowej+1 bajt Opis Pozwala zapisyw ać krótkie dane tekstowe.
VAR BINAR Y VA RBINARYCrozmiar)
Rozmiar W edług param etru r o z m ia r
Rozdz ał 3. Typy danych
|
33
Rozm iar w pamięci l o z m i a i bajtów Opis Jest to binarna odmiana typu VARCHAR. Podstawowa różnica polega na tym, że zapisywane są dane binarne, a rozmiar pola mierzony jest w bajtach, nie w znakach. Wielkości typu VARBINARY, w prze ciwieństwie do w artości typu BINARY, nie są niczym dopełniane.
VARCHAR VARCHARCrozmiar) [BINARY] [CHARACTER SET zestawi [COLLATE porównywaniel
Rozmiar W skazana przez l o z m i a i w artość z zakresu do 65 532 (od 1 do 255 w wersjach wcześniejszych niż MySQL 5); rozmiar wskazuje rzeczywistą w ielkość kolum ny i jest ograniczony przez dopusz czalną w ielkość w iersza w znakach; to, ile m iejsca faktycznie będ zie potrzebne, zależy zatem od zestaw u znaków użytego w danej kolum nie Rozm iar w pamięci Zależy od liczby znaków wskazanych jako rozmiar oraz od liczby bajtów potrzebnych do zapisu poszczególnych znaków w użytym mechanizm ie kodow ania znaków Opis Pozwala zapisywać wartości tekstowe zmiennej długości. W wer sjach poprzedzających M ySQ L 5 z w artości VARCHAR usuw ane są spacje końcowe; wersja MySQL 5 i nowsze standardowo nie usu wają spacji końcowych.
34
|
MySQL. Leksykon k eszonkowy
Daty Typy datow e M ySQ L są w yjątkow o elastycznym narzędziem , pozw alającym zapisyw ać w szelki inform acje dzienne. M ySQ L jest bardzo tolerancyjny i zakłada, że to aplikacja, a nie baza da nych, ma sprawdzać poprawność tych danych. MySQL sprawdza jedynie, czy m iesiąc nie w ykracza poza zakres 0 - 12 i czy dzień nie wykracza poza zakres 0 - 3 1 . W obec tego z punktu widzenia M ySQL 31 lutego 2001 roku jest popraw ną datą. Bardziej przy datną wartością jest data 0 lutego 2001 roku; cyfra zero m oże zastępow ać tę część daty, której dokładnie nie znam y. MySQL 5 jest jednak już bazą danych nieco bardziej restrykcyjną co do wartości, jakie m ożna zapisyw ać w polach datowych. W praw dzie M ySQ L dopuszcza dość dużą sw obodę form atów wejściowych dat, to należy starać się w aplikacjach daty forma tować zgodnie z formatem wewnętrznym MySQL w celu uniknię cia nieporozumień. MySQL zawsze zakłada, że rok jest pierwszym elem entem po lew ej stronie daty. Jeśli w operacji SQ L podana zostanie nieprawidłowa wartość daty, MySQL wstawi w jej miej sce zero. MySQL w kontekście liczb całkowitych automatycznie konwertuje daty i czas na liczby całkowite.
DATE DATE
Format YYYY-MM-DD (2001-01-01)
Rozm iar w pamięci 3 bajty
Rozdz ał 3. Typy danych
|
35
Opis Data kalendarza gregoriańskiego z zakresu od 1 stycznia 1000 roku (' 1 0 0 0 - 0 1 - 0 1 ' ) do 31 grudnia 9999 roku ( 19 9 9 9 - 1 2 - 3 1 1).
DATETIME DATETIME
Format YYY-MM-DD hh:mm:ss ( 2 0 0 1 - 0 1 - 0 1 0 1 : 0 0 : 0 0 ) Rozm iar w pamięci 8 bajtów Opis Zapisuje czas z zakresu od 00:00:00 1 stycznia 1000 roku (' 1000 01-01 0 0 : 0 0 : 0 0 ' ) do 23:59:59 31 grudnia 9999 ( ' 9 9 9 9 - 1 2 - 3 1 2 3 : 5 9 : 5 9 ' ) w edług kalendarza gregoriańskiego.
TIME TIME
Format hh:mm:ss ( 0 6 : 0 0 : 0 0 ) Rozm iar w pamięci 3 bajty Opis Zapisuje czas od północy (' 0 0 : 0 0 : 0 0 ' ) do sekundy przed północą ('23 :5 9:5 9').
36
|
MySQL. Leksykon k eszonkowy
TIM ESTAM P TIMESTAMP[ (rozmiar_wyświetlani a) ]
Format YYYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)
Rozm iar w pamięci 4 bajty Opis Zapis chwili z dokładnością do sekundy od północy 1 stycznia 1970 roku do m inuty przed północą 31 grudnia 2037 roku. Pod stawowym zastosowaniem tego typu jest rejestracja modyfikacji tabel. Przy wstawianiu do takiej kolumny wartości NULL wstawiane są aktualna data i czas. W przypadku modyfikowania jakiejkol wiek wartości w wierszu z kolumną TIMESTAMP pierwsza kolumna tego typu zostanie zaktualizow ana bieżącą datą i czasem. Format danych TIMESTAMP znany z wcześniejszych wersji MySQL, do 4.1 włącznie, w wersji 5.1 nie jest już obsługiwany.
YEAR YEAR[(ro zm ia r ) ]
Format YYYY (2001)
Rozm iar w pamięci 1 bajt
Rozdz ał 3. Typy danych
|
37
Opis Pozwala zapisać rok z kalendarza gregoriańskiego. Parametr r o z m iar u m ożliw ia zapisywanie roku dwu- lub czterocyfrowo. Zakres YEAR(4) rozciąga się od 1900 do 2155, dla YEAR(2) od 1970 do 2069. Domyślnie przyjm ow ane jest YEAR(4).
Typy złożone Złożone typy danych M ySQL, ENUM i SET, są po prostu specjal nym i przypadkam i typów łańcuchowych. Opisujem y je osobno, gdyż są bardziej złożone pojęciowo i stanowią wprowadzenie do typów danych SQL3, które być m oże M ySQL będzie obsługiwał w przyszłości.
ENUM ENUM(w a rt oś ci, wartość2,
...)
Rozm iar w pamięci 1 - 255 elementów: 1 bajt 255 - 65 535 elementów: 2 bajty Opis Typ danych ENUM pozwala zapisywać jeden z wielu zdefiniowa nych wcześniej łańcuchów. Przy tworzeniu kolum ny typu ENUM podaje się listę dopuszczalnych jej wartości. Dane mogą być do tej kolum ny w staw iane i aktualizow ane jed ynie z tej listy; każda próba wstaw ienia w artości spoza niej pow oduje wstaw ienie pu stego łańcucha.
38
|
MySQL. Leksykon k eszonkowy
Do listy dopuszczalnych w artości m ożna się odw oływ ać przez indeks, przy czym p ierw szy elem ent otrzym uje nu m er 0. N a przykład: SELECT COLID FROM TBL WHERE COLENUM = 0;
Jeśli COLID jest kolumną z kluczem głównym, a COLENUM kolumną typu ENUM, taka instrukcja SQL spowoduje pobranie kluczy głów nych wszystkich wierszy, dla których COLENUM jest pierwszą warto ścią z listy. A nalogicznie, sortow anie w zględem kolum n ENUM powoduje sortowanie według indeksu, nie łańcucha. Najw iększa m ożliw a liczba elem entów kolum ny ENUM to 65 535.
SET SET( w a rt oś ci, v/artość2,
...)
Rozm iar w pamięci 1 - 8 elementów: 1 bajt 9 - 1 6 elementów: 2 bajty 17 - 24 elementy: 3 bajty 25 - 32 elementy: 4 bajty 33 - 64 elementy: 8 bajtów Opis Lista wartości wybieranych z określonego wcześniej zbioru. Pole może zawierać dowolną liczbę łańcuchów wskazanych w instrukcji SET, szczególnie m oże nie zaw ierać żadnej takiej w artości. SET jest podobny do ENUM, ale każde pole m oże zaw ierać więcej niż jedną z podanych wartości. Dane typu SET nie są jednak zapisy wane za pom ocą indeksów , ale w złożonej mapie bitowej. Jeśli dany jest zbiór SET, zawierający elementy: Mandarynka, Pomidor,
Rozdz ał 3. Typy danych
|
39
Gruszka i Banan, każdy z tych elementów jest reprezentowany jako włączony bit w bajcie, jak to po ka za no w tabeli 3.1.
Tabela 3.1. Reprezentacja zbioru elementów w MySQL Elem ent
W artość dz es ę tn a
Mandarynka
l
Zap s b to w y 0001
Pomidor
2
0010
Gruszka
4
0100
Banan
8
1000
W powyższym przykładzie zapisanie jednocześnie wartości Man darynka i Gruszka w ym aga użycia wartości 5 (bitowo 0101). W kolumnie SET można zapisać najwyżej 64 wartości. Wprawdzie tę samą wartość można w jednym wyrażeniu SQL wpisać wielo krotnie, ale w bazie danych w artość ta zostanie zapisana raz.
40
|
MySQL. Leksykon k eszonkowy
Rozdział 4. SQL MySQL jest w pełni zgodny z ANSI SQL 92, poziom entry, wobec czego podręcznik do SQL M ySQL jest taki sam, jak do samego SQL. Tym niemniej M ySQL zaw iera pewne rozszerzenia, które mogą być pom ocne przy pracy z wiersza poleceń mysql. W tym rozdziale Czytelnik znajdzie opis składni języka SQL rozum ia nego przez MySQL. SQL to ograniczony język angielski, składający się z wyrażeń cza sownikowych. Każde takie wyrażenie zaczyna się poleceniem SQL, po którym znajdują się inne słowa kluczowe SQL, literały, identy fikatory i znaki przestankowe.
Rozróżnianie wielkości liter To, czy w M ySQL rozróżniana jest w ielkość liter, zależy od sze regu czynników, między innymi rodzaju napisu i używanego sys temu operacyjnego. W tabeli 4.1 pokazano różne ustawienia w róż nych rodzajach napisów MySQL. Tabela 4.1. Rozróżnianie wielkości liter w MySQL Rodzaj nap su
Rozróżn an e w elkośc 1ter
Słowa kluczowe
W ielkość lite nie ma znaczenia
d e n tyflka to y (baz danych 1tabel)
Zależnie od tego czy system ope acyjny oz óżnla wielkość lite W e wszystkich systemach Unix poza Mac OS X z FS+ wielkość lite w nazwach tabel 1baz danych m a znaczenie W M ac OS X z FS+ 1W in d ow s w ielkość lite jest bez znaczenia
Allasy tabel
W ielkość lite ma znaczenie
Allasy kolumn
W ielkość lite nie ma znaczenia
Rozdz ał 4. SQL
|
41
Literały Literały mogą należeć do jednego z następujących rodzajów: Łań cu chow e
Literały łańcuchowe mogą być ujmowane w pojedyncze lub podwójne cudzysłowy. Osoby chcące zachować zgodność ze standardem ANSI, powinny używ ać cudzysłowów pojedyn czych. W literałach łańcuchow ych m ożna za pom ocą se kw encji cytowania um ieszczać znaki specjalne. Sekwencja cytowania to odwrotny ukośnik, za którym znajduje się inny znak specjalnie interpretowany. W tabeli 4.2 zestawiono takie sekwencje dostępne w MySQL. Cudzysłowy można też za pisywać, podw ajając je: 'To j est
''c y t a t '' '
Jednak podwajanie takie jest zbędne, jeśli cudzysłowy poje dyncze będą zapisane w literale ujętym w cudzysłów pod wójny. Tabela 4.2. Sekwencje cytowania w MySQL Sekwencja
Znaczen e
\0
NUL
V
Pojedynczy cudzysłów
\"
Podwójny cudzysłów
\b
Backspace
\n
Znak now ego w ie sza
\r
Pow ó t ka etki
\t
Tabulato
\z
C tr/+ z (na pot zeby W indows gdzie Ctrl+zt aktowane jest jako EOF)
W
O dw o tn y ukośnik
\%
Symbol p ocenta (jedynie w sytuacjach gdzie symbol p ocenta byłby zlnte p etow any jako m etaznak)
\_
Podk eślenle (jedynie w sytuacjach gdzie podk eślenle byłoby zlnte p e to w a n e jako m etaznak)
42
I
MySQL. Leksykon k eszonkowy
Binarne Podobnie jak literały łańcuchowe, ujmowane są w cudzysłów pojedynczy lub podwójny. Konieczne jest w nich używanie sekwencji cytowania do zapisu NUL (ASCII 0), " (ASCII 34), ' (ASCII 39) oraz \ (ASCII 92). Bitowe Wartości bitowe to jedynki i zera ujęte w pojedyncze cudzy słowy, poprzedzone literą b: b ' 0 1 0 1 0 1 ' , b ' 10 ' i tak dalej. Logiczne W artości TRUE i FALSE. Dziesiętne Liczby zapisyw ane są jako ciągi cyfr. Liczby ujem ne po przedzone są minusem (-), zaś kropka dziesiętna jest ozna czana kropką ( . ) . M ożna korzystać z notacji naukow ej: -45198.2164e+10. Szesnastkowe Sposób interpretacji w ielkości szesnastkow ych zależy od kontekstu. W kontekście liczb literały szesnastkowe trakto wane są jako liczby. W innych wypadkach traktowane są jako w artości binarne, na przykład 0x1+1 to 2, ale 0x4d7953514c samo z siebie to MySOL. Nuli Słowo kluczowe NULL oznacza w SQL literał pusty. W przy padku plików do im portu danych sekw encja cytow ania \N oznacza w artość pustą.
Identyfikatory Do dow olnego obiektu M ySQL serwera m ożna odw oływ ać się, stosując następujące konw encje (oczywiście pod warunkiem po siadania odpowiednich uprawnień):
Rozdz ał 4. SQL
|
43
N azwy bezwzględne Podawana jest pełna ścieżka do w skazyw anego obiektu. Przykładowo, do kolumny SALDO tabeli KONTO w bazie danych BANK należałoby się odw ołać jako: B A N K .K O N T O .S A L D O
N azwy względne Nazwy względne pozw alają podaw ać jedynie część nazwy obiektu, zaś reszta nazw y jest uzupełniana na podstaw ie aktualnego kontekstu. Jeśli jesteśmy przykładowo połączeni z bazą danych BANK, do kolumny BANK.KONTO.SALDO może my odw ołać się, stosując zapis KONTO.SALDO. W zapytaniu SQL, w którym wskazaliśm y już tabelę KONTO, do tej samej kolumny można po prostu odwołać się, stosując zapis SALDO. Jednak kontekst trzeba uzupełnić, jeśli jego brak pow odo w ałby niejednoznaczność. Przykładem tego jest instrukcja SELECT, wybierająca dane z dwóch tabel, z których obie za wierają kolum nę SALDO. Aliasy Użycie aliasów umożliwia odwołanie się do obiektu za po mocą alternatywnej nazwy, która pozwala uniknąć niejedno znaczności i konieczności używ ania długiej nazw y kwalifi kowanej. Ogólnie rzecz biorąc, M ySQL pozwala um ieszczać w identyfika torach dow olne znaki (w starszych wersjach M ySQ L m ogły być to jedynie znaki alfanum eryczne dom yślnego zestawu znaków oraz $ i _). Istnieją jed n ak d od atkow e ograniczen ia dotyczące nazw baz danych i tabel, gdyż te identyfikatory stają się też na zw am i plików w lokalnym system ie plików. W obec tego w tych nazwach można stosować jedynie znaki dopuszczalne w nazwach plików. Przede wszystkim nie należy używ ać ukośników (/), ani kropek (.). Nigdy nie należy w identyfikatorach używ ać sym boli NUL (ASCII 0) ani ASCII 255. W M ySQL 5 ograniczenia te są jeszcze zaostrzone.
44
|
MySQL. Leksykon k eszonkowy
Jeśli rolę identyfikatora pełni słowo kluczowe SQL, trzeba je umie szczać w odw rotnych cudzysłowach pojedynczych: CREATE TABLE 'select' A U T O _ I NC RE ME NT );
('table'
INT NOT NULL PRIMARY KEY
Od wersji 3.23.6 M ySQL identyfikatory m ożna ujm ow ać w od w rotne cudzysłow y pojedyncze lub w cudzysłow y podw ójne. Zachowanie standardu ANSI wym aga użycia cudzysłowów po dwójnych, ale w tedy trzeba urucham iać M ySQL w trybie ANSI_ QUOTES.
Komentarze W kodzie SQL można wstawiać komentarze, w których umieszcza się tekst nie podlegający interpretacji przez MySQL. Jest to szcze gólnie przydatne w przypadku skryptów tworzących tabele i ła dujących dane. MySQL obsługuje trzy rodzaje komentarzy: zgodne z C, z interpreterem poleceń shell oraz zgodne z AN SI SQL. Komentarzem w stylu C jest dowolna treść umieszczona między /* a */. Takie komentarze mogą być wielowierszowe, na przykład: /* * Tw orzona je s t ta b ela za w ierająca in form acje o kon cie klienta.
*/ DROP TABLE IF EXISTS KONTO; CREATE TABLE KONTO (IDJKONTA BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT, SALDO D E CI MA L(9,2) NOT NULL);
Kom entarze w stylu interpretera poleceń to w szystko od znaku # do końca wiersza: CREATE TABLE KONTO (IDJKONTA BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT, SALDO D E CI MA L(9,2) NOT NULL); # M oże być NOT NULL ?
Rozdz at 4. SQL
|
45
M ySQL obsługuje kom entarze AN SI SQL nie całkiem zgodnie ze standardem . W AN SI SQL kom entarzem jest tekst od dwóch m inusów ( - -). W M ySQ L za dwoma m inusam i m usi znaleźć się jeszcze spacja (' - - '), która w standardzie nie jest wymagana: DROP TABLE IF EXISTS KONTO; istniej e
-- Usuń tabelę, jeśli juz
Instrukcje W tej części opiszemy pełną składnię w szystkich poleceń rozu m ianych przez MySQL.
ALTER DATABASE ALTER DATABASE baza_danych opcje
Instrukcja ALTER DATABASE pozwala zmodyfikować podstawowe aspekty danej bazy danych. Aby to polecenie wykonać, trzeba mieć uprawnienia ALTER do m odyfikow anej bazy danych. Synonimem ALTER DATABASE jest instrukcja ALTER SCHEMA. Przykłady ALTER DATABASE statistics DEFAULT CHARACTER SET utf8 ;
ALTER EVENT ALTER EVENT [DEFINER = { user | CURRENTJJSER }] ALTER nazwa [ON SCHEDULE terminarzl [RENAME TO nowa_nazwa] [ON COMPLETION [NOT] PRESERVE] [ENABLE I DISABLE] [COMMENT 'komentarz'] [DO instru kc jo]
46
I
MySQL. Leksykon k eszonkowy
Zm ienia charakterystykę danego zdarzenia. Poszczególne frazy są dokładnie opisane przy instrukcji CREATE EVENT.
ALTER FUNCTION ALTER FUNCTION nazwa E{CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA} ] ESQL SECURITY { DEFINER | INVOKER}] [COMMENT 'komentarz']
Zmienia charakterystykę funkcji. Zmiany wymagają uprawnienia ALTER ROUTINE (nadawanego autom atycznie twórcy funkcji).
ALTER PROCEDURE ALTER PROCEDURE nazwa E{CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA} ] ESQL SECURITY { DEFINER | INVOKER}] [COMMENT 'komentarz']
Zmienia charakterystykę procedury. Zmiany wymagają uprawnie nia ALTER ROUTINE (nadawanego autom atycznie twórcy proce dury).
ALTER TABLE ALTER EIGNORE] TABLE tabela lista_poleceń
Instrukcja ALTER pozwala zrealizować szereg różnych zadań mo dyfikujących strukturę tabeli. M ożna za jej pom ocą dodaw ać, zmieniać lub usuwać z istniejącej tabeli kolumny, a także usuwać indeksy. A by zm odyfikow ać tabelę, M ySQ L tw orzy jej kopię i zm ienia ją, odkładając w szystkie żądania zm ian n a później. Po zakończeniu zmian stara tabela jest usuwana, a w jej miejsce
Rozdz ał 4. SQL
|
47
wstawiana jest nowa tabela. Dopiero teraz wykonywane są odło żone zapytania. Aby zwiększyć bezpieczeństwo, jeśli któreś z odłożonych zapytań powoduje utworzenie duplikatów klucza, który powinien być uni katowy, cała instrukcja ALTER jest wycofywana wraz z transakcją. Jeśli w ystąpi w niej słow o kluczow e IGNORE, instrukcja ALTER działa norm alnie aż do natknięcia się na pierw szy problem ze spójnością danych. Oto dostępna lista_poleceń: ADD [COLUMN] klauzula_create [FIRST | AFTER kolumna] ADD [COLUMN] (klauzula_create, klauzula_create, ...) D odaje do tabeli now ą kolum nę. klauzula_create to kod
SQL, który normalnie, podczas tworzenia tabeli, tworzy ko lumnę (szczegóły opisano przy instrukcji CREATE TABLE). Jeśli użyto słowa kluczowego FIRST, nowa kolumna będzie pierw szą kolum ną tabeli. Jeśli użyte zostanie słow o kluczow e AFTER, nowa kolumna zostanie wstawiona po wskazanej. Jeśli nie użyto ani FIRST, ani AFTER, nowa kolumna będzie ostat nią kolum ną tabeli. M ożna od razu dodać w iele kolum n; w ystarczy w tym celu użyć wielu klauzul create um iesz czonych w naw iasach i rozdzielonych przecinkami. ADD [CONSTRAINT symboli FOREIGN KEY nazwa (k o lumna, . . . ) [odwołanie]
O becnie dotyczy jedynie tabel typu InnoDB obsługujących klucze obce. Powoduje dodanie do danej tabeli odw ołania klucza obcego. ADD FULLTEXT [nazwa] (ko lumna, ...)
D odaje do tabeli now y indeks tekstow y oparty na danych kolumnach.
48
|
MySQL. Leksykon k eszonkowy
ADD INDEX [nazwa] (ko lumna, ...)
Dodaje do zmodyfikowanej tabeli indeks, indeksując wska zane kolumny. Jeśli pominięta zostanie nazwa, MySQL wy generuje nazw ę indeksu automatycznie. ADD PRIMARY KEY (kolumna,
...)
Dodaje do tabeli klucz główny, zawierający podane kolumny. Jeśli tabela m a już klucz główny, zgłaszany jest błąd. ADD UNIQUE [nazwa] (ko lumna, ...) Dodaje d o zmodyfikowanej tabeli indeks unikatowy. Działa podobnie, jak ADD INDEX. ALTER [COLUMN] kolumna SET DEFAULT wartość
Przypisuje podanej kolumnie nową wartość domyślną. Sło wo kluczow e COLUMN jest opcjonalne, nie m a ono tu żad nego znaczenia. ALTER [COLUMN] kolumna DROP DEFAULT
Odwołuje aktualną wartość domyślną danej kolumny. Nowa w artość dom yślna jest określana na podstaw ie instrukcji CREATE tworzącej tabelę. Słowo kluczowe COLUMN jest opcjo nalne, nie m a ono tu żadnego znaczenia. CONVERT TO CHARACTER SET zestaw [COLLATE porównywanie] [DEFAULT] CHARACTER SET zestaw [COLLATE porównywanie]
Zamienia wartości w kolumnie na wskazany zestaw znaków, ze wskazanym uporządkow aniem . CHANGE [COLUMN] kolumna klauzula_create MODIFY [COLUMN] klauzula_create [FIRST | AFTER kolumna]
Z m ienia definicję kolum ny. Instrukcji tej m ożna u żyć do zmiany typu kolumny przy zachowaniu w miarę możności danych. Klauzula create ma taką samą postać, jak w instruk cji CREATE TABLE. Z m ienić m ożna także nazw ę kolumny. W przypadku użycia wersji z MODIFY, nowa nazwa kolumny jest taka sama, jak stara. Słowo kluczowe COLUMN jest opcjo nalne, nie m a ono tu żadnego znaczenia. M ySQ L próbuje
Rozdz ał 4. SQL
|
49
zastosow ać możliwie najlepszą m etodę konw ersji danych; konwersja zawsze zostanie zrobiona, nigdy z jej powodu nie będzie zgłoszony błąd. Pamiętając o tym, trzeba zrobić kopię starej wersji danych i spraw dzić w ynik konw ersji zaraz po jej zrobieniu. DISABLE KEYS N akazuje M ySQL zaw ieszenie aktualizacji indeksów tabel M y ISAM, przy czym nie dotyczy to indeksów unikatowych. M ySQL szybciej odtwarza indeksy, niż może je modyfiko w ać wartość po wartości, więc opcja ta może być przydatna w przypadku zasilania bazy danych dużą ilością danych. Należy jednak unikać stosowania tej instrukcji, jeśli w czasie wstawiania nowych danych jednocześnie robione są z tabeli odczyty. DISCARD TABLESPACE Dotyczy mechanizmu InnoDB: instrukcja ta powoduje usu nięcie odpowiedniego pliku .idb w przypadku korzystania z przestrzeni tabel na poszczególne tabele. Przed wykona niem tej instrukcji trzeba pam iętać o zrobieniu kopii zapa sowej starego pliku .idb. DROP [COLUMN] kolumna Usuwa z tabeli wskazaną kolumnę. Instrukcja trwale usuwa kolumnę wraz z danymi; informacji tak usuniętych nie można odzyskać inaczej, jak korzystając z kopii zapasowych. Usu nięte zostaną z indeksów wszystkie odwołania do usuwanej kolumny. Wszystkie indeksy, dla których kolumna była jedy nym składnikiem , zostaną też usunięte. Słow o kluczow e COLUMN jest opcjonalne, nie m a ono tu żadnego znaczenia. DROP PRIMARY KEY U suw a z tabeli klucz główny.
50
|
MySQL. Leksykon k eszonkowy
DROP INDEX in d e k s
U suw a z tabeli wskazany indeks. Instrukcja nie usuw a ani nie zmienia danych w tabeli, jedynie trwale usuwa dane z in deksu. W obec tego usunięty tak indeks m ożna odtworzyć, korzystając z instrukcji ALTER TABLE ... ADD INDEX. ENABLE KEYS
Odtwarza indeksy, które nie były aktualizowane z powodu użycia DISABLE KEYS. IMPORT TABLESPACE
Pozwala załadow ać dane pliku .idb z kopii zapasowej lub z innego źródła. ORDER BY kolum na [ASC | DESC]
Wymusza posortowanie danych w tabeli według wskazanej kolumny. Normalnie dane są w kolejności ich wprowadza nia do tabeli. Opcja ta pozwala zoptym alizow ać tabelę tak, aby dostosow ać kolejność danych do kolejności najczęściej występującej w zapytaniach. M ożna w skazać wiele kolumn. RENAME [AS] n o w a _ ta b e la RENAME [TO] n o w a _ ta b e la
Z m ienia nazw ę tabeli. O peracja nie w pływ a na dane ani indeksy tabeli, jedynie na jej nazw ę. Jeśli będzie to jedyna klauzula użyta w ALTER TABLE, MySQL nie będzie tworzyć tabeli tymczasowej, ale zrobi tylko zmianę nazw plików ta beli na poziom ie systemu operacyjnego. table_options
U m ożliw ia zm ianę opcji tabeli takich, jak rodzaj tabeli. Wiele instrukcji ALTER można łączyć w jedną za pomocą przecin ków, jak w poniższym przykładzie: ALTER TABLE mojatabela DROP starakolumna, ADD nowakolumna INT
Aby wykonać instrukcje ALTER, trzeba m ieć uprawnienia SELECT, INSERT, DELETE, UPDATE, CREATE i DROP d o modyfikowanej tabeli.
Rozdz ał 4. SQL
|
51
Przykłady # D od an ie do tab eli 'ludzie'pola 'adres2', przypisanie # mu typu 'VARCHAR' o m aksym alnej długości 100. ALTER TABLE ludzie ADD COLUMN adres2 VARCHAR(IOO) # D od an ie d o tabeli 'hr' dw óch now ych indeksów : je d n e g o zw ykłego # na p o le 'pobory', je d n eg o unikatow ego na p o le 'id'. # O p eracja będzie kontynuowana, naw et je ś li znalezione zostan ą duplikaty # w artości z indeksu 'id_idx' # (bardzo ryzykowne rozw iązanie) ALTER TABLE hr ADD INDEX pobory_idx (pobory) ALTER IGNORE TABLE hr ADD UNIQUE id_idx (id) # Zm iana dom yślnej w artości p o la 'cena' tabeli 'zębatki' # n a $19.95. ALTER TABLE zębatki ALTER cena SET DEFAULT '$19.95' # U sunięcie w artości dom yślnej p o la 'drugie_imie' tabeli # 'nazwiska'. ALTER TABLE nazwiska ALTER drugie_imie DROP DEFAULT # Zm iana typu p o la 'zyski' (na przykład z INTEGER) na BIGINT. # P ierw sze w ystąpienie 'zyski'to zm ieniana kolumna, drugie # to część klauzuli create. ALTER TABLE finanse CHANCE COLUMN zyski zyski BIGINT # Usun ięcie z tabeli 'ogoln iedostepn a'pola 'utajnione'. ALTER TABLE ogolniedostepna DROP utajnione # Usunięcie z tabeli 'pojazdy' indeksu o nazwie 'id jn d ex ' oraz # usunięcie klucza głównego. ALTER TABLE pojazdy DROP INDEX id_index, DROP PRIMARY KEY # Zm iana nazwy tab eli ' aktualne_stawki' na 'stawki_1997'. ALTER TABLE aktualne stawki RENAME AS stawki 1997
ALTER TABLESPACE ALTER TABLESPACE przestrzehtabeli ADD DATAFILE ‘p l i k ‘ INITIAL_SIZE = rozmiar ENGINE = mechanizm ALTER TABLESPACE przestrzehtabeli
52
I
MySQL. Leksykon k eszonkowy
DROP DATAFILE plik ENGINE = mechanizm
Pozwala zmienić struktury plików obsługujących daną przestrzeń na tabele. Rozmiar to początkowa wielkość przestrzeni w bajtach; za tym rozmiarem można użyć litery M lub G, oznaczającej odpo wiednio megabajty lub gigabajty. Polecenie to jest dostępne w My SQL 5.1 tylko dla tabel NDBCLUSTER.
ALTER V IE W ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] [DEFINER = { użytkownik | CURRENT_USER }] [SQL SECURITY { DEFINER | INVOKER }] VIEW nazwa [(kolumny)] AS = instrukcja_SELECT
Modyfikuje wskazany widok. Metoda ta jest dość podobna do usu nięcia widoku i utworzenia go od nowa, wymaga uprawnień CRE ATE VIEW oraz DROP.
ANALYZE TABLE ANALYZE TABLE tabelal,
tabela2,
...,
tabelan
Powoduje nałożenie na tabelę blokady i w ykonuje analizę tabel MylSAM i BDB. Analiza polega na sprawdzeniu rozkładu kluczy. Zw racany jest zbiór z następującym i kolumnami: Table N azw a tabeli. Op Analiza wartości. Msg_type status lub error lub warning. Msg_text Kom unikat stanow iący w ynik analizy.
Rozdz ał 4. SQL
|
53
BEGIN BEGIN [WORK] [ et yk ieta_pocz:] BEGIN instrukcje END [etykieta_końc]
Pierwsza postać instrukcji rozpoczyna n o w ą transakcję. Transakcja jest zatwierdzana p o w y k o n a n i u instrukcji COMMIT lub p o w y k o naniu instrukcji zatwierdzającej da ne niejawnie (taką instrukcją jest n a przykład CREATE TABLE). A b y wycofać transakcję, u ż y w a się instrukcji ROLLBACK.
D ruga p o stać instrukcji BEGIN nie m a z postacią pierw szą nic wspólnego. M ówi ona, że ciąg instrukcji od tego m iejsca składa się na procedurę składowaną; przedtem występuje zawsze instruk cja CREATE PROCEDURE. Jeśli użyjemy opcjonalnej etykiety począt kow ej, m usim y m ieć za słow em kluczow ym END także etykietę końcową. Każda instrukcja znajdująca się między BEGIN a END koń czyć średnikiem ( ;) . O znacza to, że przed w ykonaniem BEGIN trzeba zm ienić obow iązujący ogranicznik instrukcji. Synonimem instrukcji BEGIN jest instrukcja START TRANSACTION. Przykłady # Wykonanie transakcji BEGIN UPDATE osoba SET nazwisko = 'Kowalski' WHERE id_osoby = 1; UPDATE adres SET miasto = 'Łódź' WHERE osoba = 1; GOMMIT;
# D efiniow an ie procedu ry składow anej DELIMITER // GREATE PROCEDURE licznik_osob (OUT liczba INT) BEGIN SELEGT G O U N T (*) INTO liczba FROM osoba; END
// DELIMITER ;
54
|
MySQL. Leksykon k eszonkowy
CALL CALL procedura [([para me tr [,
...]])]
W ywołuje w skazaną procedurę składow aną z podanym i para metrami. Przykłady CALL licznik_osob ( ©liczba ); SELECT ©liczba;
CHANGE MASTER CHANCE MASTER TO param = wartość [, p a ra m = wartość]
...
Zm ienia param etry, z jakim i serwer podrzędny łączy się z nad rzędnym serwerem replikacji. Można podać dowolną liczbę para metrów. Jeśli jakiś param etr nie zostanie podany, M ySQ L użyje jego aktualnej wartości; wyjątkami są MASTER LOG FILE oraz MA STER LOG POS. Jeśli te param etry nie zostaną podane, a podane zostaną now e MASTERJHOST lub MASTER_PORT, M ySQ L przyjm ie, że dotyczą one nowego serwera (nawet w przypadku użycia sta rych wartości). W takiej sytuacji M ySQ L użyje w artości domyśl nych, odpowiednio " oraz 4. Oto lista dostępnych parametrów: MASTER_CONNECT_RETRY
Decyduje, ile razy serwer podrzędny próbuje się połączyć z serwerem nadrzędnym. MASTERJHOST
Adres IP serwera nadrzędnego. MASTER_LOG_FILE
Nazwa binarnego dziennika (logu) na serwerze nadrzędnym, z którego odczytyw ane są dane do replikacji.
Rozdz a ł4 . SQL
|
55
MASTER_LOG_POS
Położenie transakcji wskazywane przez SHOW MASTER STATUS, pom agające serwerow i podrzędnem u zsynchronizow ać się z serwerem nadrzędnym. MASTER_PASSWORD
Hasło konta serwera nadrzędnego, na którym to koncie od bywa się replikacja. M A S T ER_PORT
Jeśli serwer nadrzędny nasłuchuje portu niestandardowego, ta opcja um ożliw ia wskazanie tego portu. MASTER_SSL
Ustawiane na 1, jeśli na serwerze nadrzędnymi wymagane jest szyfrowanie SSL i na 0 w przeciwnym wypadku. MASTER_SSL_CA
Plik CA do obsługi SSL. MASTE R_SS L_CA_PATH
Ścieżka, w której znajduje się plik CA do obsługi SSL. MASTER_SSL_CERT
Plik certyfikatu SSL. MASTER_SSL_CIPHER
Lista szyfru SSL. MASTER_SSL_KEY
N azw a klucza do obsługi SSL. MASTER_USER
N azwa konta na serwerze nadrzędnym, dla którego nadano upraw nienie REPLICATION SLAVE. RELAY_LOG_FILE
Plik dziennika transferu.
56
|
MySQL. Leksykon k eszonkowy
RELAY_LOG_POS
Położenie w dzienniku transferu, pozwalające zapewnić syn chronizację. Przykład CHANGE MASTER TO MA ST ER _L OG _F IL E=1c r ml l4 -b in.0000441, MASTER_LOG_POS=665, MASTER_H0ST= m y d b .i m ag in ar y. co m1, MASTER_USER= slave , M A S T E R _ P A S S W O R D = replicate ;
CLOSE CLOSE nazwa_kursora
Zamyka wskazany kursor, który przestaje być od tej chwili do stępny. Jeśli kursor zostanie zadeklarow any w instrukcji złożo nej i nie zostanie zam knięty, jest zam ykany autom atycznie przy kończeniu tejże instrukcji.
C O M M IT COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
Zatw ierdza bieżącą transakcję. Tw orzenie łańcucha (ang. chain) powoduje automatyczne otwarcie nowej transakcji zaraz po udanym zamknięciu poprzedniej. Użycie frazy RELEASE lub NO RELEASE informuje, czy po zamknięciu transakcji aktualny klient ma być odłączony.
CREATE DATABASE CREATE DATABASE [IF NOT EXISTS] bazadanych iopcje_bazy]
Tworzy now ą bazę danych o podanej nazw ie. Utworzenie bazy danych wymaga odpowiednich uprawnień. Wykonanie tej instruk cji jest równow ażne wyw ołaniu narzędzia mysqladmin create.
Rozdz ał 4. SQL
|
57
Przykład CREATE DATABASE Bank; CREATE DATABASE statystyka CHARACTER SET utf8;
CREATE EVENT CREATE [DEFINER = { użytkownik | CU RR ENT_USER}] EVENT [IF NOT EXISTS] nazwa ON SCHEDULE terminarz [ON COMPLETION [NOT] PRESERVE] [ENABLE | DISABLE] [COMMENT ’k o m e n t a r z ’] DO instrukcja
Instrukcja dotyczy tylko M ySQL 5.1. Tw orzy zdarzenie, które będzie wykonywało wskazane instrukcje zgodnie z podanym ter minarzem zdarzenia. Fraza ON SCHEDULE pozwala ustalić termi narz, zgodnie z którym zdarzenie będzie wykonywane. Terminarz m ożna definiow ać na dwa sposoby: AT c z a s [+ INTERVAL i n t e r w a ł ]
Pow oduje jednorazow e zajście zdarzenia w e wskazanym czasie. Można też wskazać moment w przyszłości względem danego czasu należy użyć frazy INTERVAL. M ożna na przy kład użyć wywołania CURRENT_TIMESTAMP z frazą INTERVAL, aby w ykonać zdarzenie za godzinę od chw ili bieżącej. EVERY i n t e r w a ł [STARTS c z a s ] [ENDS c z a s ]
Pow oduje cykliczne w ykonyw anie zdarzenia, przy czym m ożna też podać początkow y i końcow y m om ent gdzieś w przyszłości. Zawsze, kiedy określamy czas, s ł o w e m k l u c z o w y m CURRENT_ TIMESTAMP m o ż n a o d w o ł a ć się d o aktualnej daty i czasu. O t o z kolei składni frazy INTERVAL: ilość { YEAR | QUARTER | MONTH | WEEK SECOND
58
|
MySQL. Leksykon k eszonkowy
| DAY
| HOUR | MINUTE
YEAR_MONTH | DAY_HOUR | DAY_MINUTE HOUR_MINUTE | HOUR_SECOND MINUTE_SECOND }
| DAY_SECOND
I n s t r u k c j a to dow olna popraw na instrukcja SQL. M ożna też w ykonać instrukcje złożone ujęte w bloku BEGIN/END tak, jak robi się to w przypadku procedur składowanych. M ySQL zapisuje wraz ze zdarzeniem aktualny tryb SQL. W tej sytuacji zdarzenia są wykonyw ane w takim trybie SQL, w jakim były definiow ane, a nie w takim, w jakim są urucham iane. Przykład # Utworzenie zdarzen ia w ykonyw anego c o m iesiąc CREATE EVENT comiesieczne_porzadki ON SCHEDULE EVERY 1 MONTH DO DELETE FROM page_view;
# U tworzenie zdarzen ia w ykonyw anego raz, za godzinę CREATE EVENT porzadki_za_godzine ON SCHEDULE A T CURRENT_TIMESTAMP + INTERVAL 1 HOUR DO DELETE FROM page_view;
CREATE FUNCTION CREATE [DEFINER={użytkownik | CU RR ENTJJSER}] FUNCTION sp_nazwa ([parametry]) RETURNS typ definicjajfunkcji CREATE [AGGREGATE] FUNCTION nazwa RETURNS typ_zwracany SONAME biblioteka
W MySQL istnieją dwa różne podejścia do funkcji. Pierwsza skład nia zaprezentow ana powyżej tw orzy fun kcję składowaną. Funkcje składowane są bardzo podobne do procedur składowanych, tyle że wywołuje wywołuje się ją jak każdą inną funkcję wbudowaną czy biblioteczną w zapytaniu. Funkcja składow ana m oże m ieć dowolną liczbę parametrów wejściowych, zwraca jedną wartość. Funkcje biblioteczne, częściej nazywane funkcjam i użytkownika (UDF od angielskiego User Defined Functions), są rozszerzeniami MySQL
Rozdz ał 4. SQL
|
59
pisanymi w zewnętrznym języku programowania. Funkcje te mogą realizować praktycznie dowolną operację, gdyż projektuje i im plem entuje je użytkow nik. W artość zw racana przez funkcję może być typu STRING (dane znakowe), REAL (liczby zmiennoprze cinkow e) lub INTEGER (liczby całkow ite). M ySQ L przekształca zwracaną z funkcji C wartość na jeden z tych typów. Plik biblioteki zawierający funkcję musi być standardow ą biblioteką dzieloną, którą M ySQL m oże dynamicznie skonsolidow ać z serwerem. Przykład CREATE FUNCTION multiply RETURNS REAL SONAME m y m a t h .so
CREATE INDEX CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX nazwa ON tabela (kolumnal ( dł ugość) ] , ...)
Instrukcja CREATE INDEX jest udostępniana, aby zapewnić zgod ność z innymi implem entacjam i SQL. W starszych wersjach SQL instrukcja ta nic nie robi; od wersji 3.22 instrukcja ta jest równo ważna instrukcji ALTER TABLE ADD INDEX. W ykonanie instrukcji CREATE INDEX w ym aga upraw nienia INDEX danej tabeli. Słowo kluczowe UNIQUE wymusza istnienie w tabeli tylko jednego wiersza, w którym indeksowana kolumna m a daną wartość. Jeśli indeks jest wielokolumnowy, wartości w poszczególnych kolum nach mogą się powtarzać, ale zestawy tych wartości nie mogą się powtarzać. Słowo kluczowe FULLTEXT um ożliw ia w yszukiw anie słów klu czowych w indeksowanej kolum nie lub kolum nach. Tego typu indeksy m ożna zakładać tylko na tabelach typu M ylSA M , jedy nie na kolum nach CHAR, VARCHAR i TEXT. Także indeksy SPATIAL można tworzyć jedynie na niepustych (bez wartości NULL) kolum nach tabel M ylSAM .
60
|
MySQL. Leksykon k eszonkowy
Indeksy m ożna tw orzyć jedynie na części kolumny, jeśli poda się długość indeksowanej części kolumny. Przykład CREATE UNIQUE INDEX TransIDX ON Translation (language, locale, c o d e ) ;
# In d eksow an ie tylko pierw szych 6 znaków kodu potw ierdzenia CREATE INDEX InvIDX ON ZaproszenieC kod(S) );
CREATE PROCEDURE CREATE [DEFINER = { użytkownik | CURRENTJJSER }] PROCEDURE nazwa ([ {IN | OUT | INOUT} para me tr typ_danych [, ...]]) [LANGUAGE SQL] [[NOT] DETERMINISTIC] [{CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA}] [SQL SECURITY { DEFINER | INVOKER}] [COMMENT 'jakiś komentarz''] treść_procedury
Instrukcja tworzy nową procedurę skłądowaną MySQL. Aby tego polecenia użyć, trzeba m ieć uprawnienia CREATE ROUTINE. Treścią procedury m oże być pojedyncza instrukcja SQL lub ciąg takich instrukcji ujętych w parę BEGIN/END. W ięcej o parze BEGIN/END znaleźć można przy instrukcji BEGIN lub w części książki poświę conej procedurom składanym.
CREATE TABLE CREATE [TEMPORARY] TABLE [IF NOT EXISTS] {klauzula_cxeate, ...) lopcj e_tabeli] [[IGNORE|REPLACE] se le ct] CREATE [TEMPORARY] TABLE [IF NOT EXISTS] inna_tabela
tabela
tabela LIKE
Instrukcja CREATE TABLE definiuje strukturę tabeli w bazie danych. Za pom ocą tej w łaśnie instrukcji tw orzone są wszystkie tabele.
Rozdz ał 4. SQL
|
61
W przypadku u ż y d a słowa kluczowego TEMPORARY, tabela istnieje tak długo, jak długo istnieje połączenie danego użytkownika lub d o jawnego usunięcia tej tabeli.
Użycie klauzuli IF NOT EXISTS nakazuje MySQL utworzenie tabeli tylko wtedy, gdy tabela jeszcze nie istnieje. Jeśli tabela istnieje, nic nie jest robione. Jeśli tabela istnieje i nie użyto IF NOT EXISTS ani TEMPORARY, zgłaszany jest błąd. Jeśli tabela istnieje i użyto T E M PORARY, ale nie użyto IF NOT EXISTS, istniejąca tabela staje się po prostu dla danego klienta niew idoczna, póki istnieje nowa tabela tymczasowa. Instrukcja CREATE może albo zdefiniować strukturę danej kolumny, albo jej m etastru kturę. W pierw szym w ypadku m am y nazw ę nowej tabeli, potem dowolną liczbę definicji pól. Składnia defi nicji pola jest następująca: kolumna typ [NOT NULL | NULL] [DEFAULT wartość] [AUTO_INCREMENT] [PRIMARY KEY] [referencja]
Oto dostępne elem enty w ystępujące w składni: AUTO_INCREMENT
Kolumna będzie zwiększana automatycznie względem ak tualnej największej wartości kolumny. Opcję tę można zasto sować jedynie w kolum nach zaw ierających liczby całko wite. DEFAULT w a r t o ś ć
Atrybut ten powoduje przypisanie polu wartości domyślnej. Jeśli wiersz jest wstaw iany do tabeli bez podania wartości danego pola, użyta zostanie właśnie w artość domyślna. Jeśli wartości takiej nie zdefiniowano, wstawiona będzie wartość NULL, chyba że pole zdefiniowano jako NOT NULL, co spowo duje wybranie przez MySQL wartości zależnej od typu pola. NOT NULL
A trybut ten gwarantuje, że każda pozycja w tej kolum nie będzie miała jakąś niepustą wartość. Próba wstawienia do tak
62
|
MySQL. Leksykon k eszonkowy
zdefiniowanego pola wartości NULL p o w o d u j e zgłoszenie błędu. NULL
Atrybut ten oznacza, że w danej kolumnie mogą występo w ać wartości puste. Jest to ustawienie domyślne, stosowane, kiedy nie użyto frazy NOT NULL. Pola umieszczane w indeksie nie m ogą zaw ierać m odyfikatora NULL, jeśli są to indeksy typu PRIMARY KEY lub SPATIAL (zostanie on zignorow any bez ostrzeżenia, jeśli wystąpi). PRIMARY KEY
Atrybut ten automatycznie włącza pole do klucza głównego tabeli (zobacz dalej). Dla każdej tabeli może istnieć dokład nie jed en klucz głów ny. W szystkie pola klucza głów nego m uszą zostać zadeklarow ane jako NOT NULL. REFERENCES t a b e l a [ ( k o lu m n a , ...)] [MATCH FULL PARTIAL] [ON DELETE o p c j a l [ON UPDATE o p c j a l
| MATCH
Tworzy odwołanie przez klucz obcy. Obecnie opcja ta doty czy tylko tabel typu InnoDB. M ożna też opisać m etastrukturę, jak indeksy i reguły: FULLTEXT (k olu m na,
...)
Od wersji 3.23 MySQL obsługuje indeksowanie konteksto we. Zasady użycia takich indeksów i wyniki wyszukiwania opisano w podręczniku MySQL. Aby stworzyć indeks kon tekstowy, używ a się słowa kluczow ego FULLTEXT: CREATE T A B L E P o z y c j a ( I d p o z y c j l I N T NOT N ULL P RIMAR Y K E Y , nazwa VARCHAR(25) NOT NULL, opis TEXT NOT NULL, FULLTEXT (nazwa, opis)
);
INDEX [nazw a]
(kolu m n a, ...) Tworzy zwykły indeks na wszystkie podane kolumny (w tym kontekście KEY i INDEX to synonimy). Indeksowi można nadać nazw ę; jeśli nie zostanie ona podana, utw orzona zostanie
Rozdz ał 4. SQL
|
63
autom atycznie na bazie nazw y kolum ny i w miarę potrzeb kolejnej liczby. Jeśli klucz zawiera wiele kolumn, do nazwy wybierany jest podzbiór ich nazw. Rozw ażm y następującą definicję indeksu: I N D E X idxl ( n a z w i s k o , s z a r z a , n r _ k o ! e j n y ) ;
Podczas tworzenia takiego indeksu poindeksowane zostaną następujące grupy kolumn: • nazwisko, szarza, nr_kolejny • nazwisko, szarza • nazwisko KEY [nazwa] (kolu m n a , ...) Synonim INDEX. PRIMARY KEY Tw orzy klucz główny tabeli. Klucz główny to specyficzny klucz, taki, który może być tylko jeden dla tabeli. Klucz głów ny to klucz UNIQUE (niepowtarzalny) o nazwie PRIMARY. Mi mo swojej uprzywilejowanej pozycji zachowuje się jak każdy inny klucz UNIQUE, tyle że nie może zawierać wartości NULL. UNIQUE [nazw a] ( ko lu m n a , ...) Tw orzy specjalny indeks, taki, że żadna jego w artość (czyli wartości indeksowanych pól) nie powtarza się. Próba wsta wienia do takiego indeksu powtórzenia jakiejś wartości po woduje zgłoszenie błędu. Poniższa fraza spow oduje stwo rzenie indeksu unikatowego na pole pseudonimy: U NIQU E ( p s e u d o n i m y ) ;
Podczas indeksow ania pól znakow ych (CHAR, VARCHAR i ich synonimy) m ożna indeksow ać jedynie początek całego pola. Przykładow o, poniżej tw orzym y indeks na polu licz bowym id oraz na pierwszych 20 znakach pola znakowego adres:
64
|
MySQL. Leksykon k eszonkowy
INDEX adresy (Id, adre s(20))
Podczas przeszukiwania danych z pola adres porównywa nych będzie jedynie pierwszych 20 znaków, chyba że znale zionych zostanie więcej niż jedno dopasowanie tych samych pierwszych 20 znaków ; w tedy robione jest norm alne prze szukiwanie danych. Wobec tego stworzenie indeksu jedynie na pewnej liczbie początkowych znaków może znacząco po prawić szybkość działania zapytań. M ożliwość skorzystania z tej opcji zależy jednak od typu tabeli. MySQL obsługuje następujące „typy" specjalne, które są stale roz wijane przez jego twórców: FOREIGN KEY (nazwa (k o lu mn a, [k o lu mn a2, ...]) CHECK
W MySQL w wersji 3.23 m o ż n a na końcu instrukcji CREATE TABLE dodać następujące opcje tabeli: AUTO_INCREMENT = p o c z ą t e k
W skazuje pierw szą w artość używ aną dla kolum n AUT0 _ INCREMENT. Działa tylko dla tabel M ylSAM , InnoDB oraz M EM ORY. AVG_R0W_L E NGTH = d ł u g o ś ć
Opcja tabel zawierających duże ilości danych zmiennej dłu gości. Średnia długość w iersza używ ana jest przez M ySQL do optymalizacji zarządzania danymi. CHECKSUM = 0 lub 1
Jeśli ustawione na 1, wymusza na MySQL zapisywanie sumy kontrolnej dla tabel, co popraw ia spójność danych. Opcja ta powoduje pewną utratę szybkości działania. COMMENT = k o m e n ta rz
Dodaje do tabeli komentarz. Komentarze nie mogą być dłuż sze niż 60 znaków.
Rozdz ał 4. SQL
|
65
DELAY_KEY_WRITE = O lub 1
Dotyczy tylko tabel MylSAM. Jeśli opcja jest ustawiona, po woduje odłożenie aktualizacji klucza tabeli aż do jej zam knięcia. ENGINE = mechanizm
Określa typ tabeli w bazie danych. Jeśli wskazany typ tabeli jest niedostępny, używ any jest typ m ożliwie podobny. Na przykłąd w system ie M ac OS X niedostępne są tabele BDB; jeśli zapiszemy w tym systemie TYPE=BDB, M ySQL użyje ta beli typu M ylSA M (dom yślny typ tabeli). D ostępne typy tabel zostaną opisane dalej. MAX_R0WS = i l e w i e r s z y
Największa liczba wierszy, jaka może być zapisana w tabeli. MIN_R0WS = i l e w i e r s z y
Minimalna liczba wierszy, jaka może być zapisana w tabeli. PACK_KEYS = 0 lub 1
Dotyczy tylko tabel M ylSAM i ISAM. Opcja poprawia szyb kość działania tabel, z których robionych jest bardzo dużo odczytów. Jeśli ma wartość 1, tworzone będą mniejsze klu cze, z czym wiąże się zwiększenie szybkości odczytów kosz tem zm niejszenia szybkości zapisów. PASSWORD = ' h a s ł o '
O pcja dostępna jedynie dla kom ercyjnych użytkow ników MySQL, mających specjalne licencje. Podane hasło zostanie użyte do zaszyfrow ania pliku fr m tabeli. O pcja ta nie m a znaczenia w standardowej wersji MySQL. R0W_F0RMAT = DYNAMIC lub STATIC (MylSAM) COMPACT lub REDUNDANT (InnoDB)
D ecyduje, jak w tabeli m ają być zapisyw ane wiersze. Na koniec, można utworzyć tabelę i od razu ją wypełnić danymi na podstaw ie w yników zapytania SQL:
66
|
MySQL. Leksykon k eszonkowy
CREATE TA B L E
nazwatabeli S E L E C T zapytanie
Aby można było użyć instrukcji CREATE TABLE, trzeba mieć upraw nienie CREATE do bazy danych. Przykłady # Tw orzenie pu stej bazy danych 'pracownicy' CREATE DATABASE pracownicy;
# Tw orzenie p ro stej tabeli CREATE TABLE data_zatr (id INT, nazwisko CHARC 50));
# Tw orzenie złożon ej tabeli CREATE TABLE IF NOT EXISTS o _ p r a c o w m k u ( id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, id_prac INT NOT NULL REFERENCES data_zatr (id), opis TEXT NOT NULL, INDEX (i d_prac), FULLTEXT (opis) ) AUTO_INCREMENT = 1, ENGINE=MyISAM;
# U tworzenie fu n kcji zaparz_kaw e (zw racają cej łańcuch, # u m ieszczonej w b ib lio te c e dzielon ej myfuncs.so). CREATE FUNCTION zrob_kawe RETURNS string SONAME "myfuncs. s o " ;
# U tworzenie tabeli na p od staw ie wyników innego zapytania CREATE TABLE Stadion SELECT na zw aStadionu, polozenieStadionu FROM Miasto;
CREATE TABLESPACE CREATE TABLESPACE przestrzeńtabel ADD DATAFILE 'plik' USE LOCFILE CROUP grupa_dzienników [EXTENT SIZE = wielkość_obszaru] [INITIAL SIZE = wielkość_poczqtkowa] ENGINE = mechanizm
Tworzy w systemie plików przestrzeń na tabele bazodanowe. Póź niej instrukcją ALTER TABLESPACE m ożna dodaw ać now e pliki. W MySQL 5.1 parametr ENGINE musi m ieć wartość NDB lub NDBCLUSTER.
Rozdz al 4. SQL
|
67
CREATE TRIGGER CREATE [DEFINER = { użytkownik | CURRENTJJSER }] TRIGGER nazwa_txygexa czas_trygera zdarzenie_trygera ON tabela FOR EACH ROW instrukcja
Instrukcja tworzy tryger MySQL. M ożna zdefiniować co najwyżej jeden tryger na tabelę, czas i zdarzenie. Można na przykład zdefi niow ać jeden tryger urucham iany przed (BEFORE) wstawieniem (INSERT) wiersza do tabeli osoba, a drugi wykonywany po wsta wieniu wiersza do tej tabeli (AFTER INSERT). N ie m ożna jednak zdefiniować dwóch trygerów uruchamianych przed wstawieniem wiersza (BEFORE INSERT) do tabeli osoba. Kiedy tryger zostanie uruchom iony, jest w ykonyw any z uprawnieniam i wskazanym i we frazie DEFINER. C z a s _ t i y g e i a mówi, czy tryger jest wykonywany przed (BEFORE), czy po (AFTER) zdarzeniu. Z d a r z e n i e _ t r y g e r a to INSERT, UPDATE lub DELETE. Przykłady # Chcem y zapewnić, że kiedy je s t usuwana osoba, usunięte też zostaną wszystkie j e j adresy. CREATE TRIGGER usun_adresy AFTER DELETE ON osoba FOR EACH ROW BEGIN DELETE FROM adres WHERE osoba = O L D .i d _o so by; END
CREATE USER CREATE USER użytkownik [IDENTIFIED BY [PASSWORD] 'hasło'] [, użytkownik [IDENTIFIED BY [PASSWORD]
Tworzy nowe konto MySQL.
68
|
MySQL. Leksykon k eszonkowy
'hasło']]
CREATE V IE W CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED TEMPTABLE}] [DEFINER = { użytkownik | CURRENTJJSER }] [SQL SECURITY { DEFINER | INVOKER }] VIEW nazwa [(kolumny)] AS instrukcja_select [WITH [CASCADED | LOCAL] CHECK OPTION]
| MERGE
Tworzy now y w idok według podanego zapytania SQL zgodnie z przekazanym i opcjami. Jeśli w idok już istnieje, a użyto frazy OR REPLACE, stary w idok zostanie zastąpiony now ym . W idoki i tabele znajdują się w tej sam ej przestrzeni nazw , dlatego nie można utworzyć widoku o takiej samej nazwie, jak nazwa istnie jącej tabeli (i odwrotnie). Domyślnie n a z w a m i k o l u m n w i d o k u są n a z w y z instrukcji SELECT. N a z w y k o l u m n w w i d o k u nie m o g ą się powtarzać, więc n a d a w a nie własnych n a z w b y w a przydatne. Jeśli podajemy własne n a z w y kolumn, m u s i być ich tyle samo, ile k o l u m n użyto w instrukcji SELECT.
Przykłady CREATE VIEW widok_osoba AS SELECT imie, nazwisko, typ_emaila, adres_email FROM osoba, adres WHERE o s o b a .id_osoby = a d re s_ em ai l.osoba
DECLARE DECLARE nazwa [, ...] typ_sql [DEFAULT wartość] DECLARE nazwa CURSOR FOR instrukcja DECLARE warunek CONDITION FOR {SQLSTATE [VALUE] stansql \ kod_bledu_mysql} DECLARE {CONTINUE | EXIT | UNDO} HANDLER FOR {warunek | SQLSTATE [VALUE] stansql \ kod_bledu_mysql SQLWARNINC | NOTFOUND | SSQLEXCEPTION } instrukcja
Rozdz at 4. SQL
|
69
Korzystając z pierwszej pokazanej składni, m ożna zdefiniow ać zm ienną lokalną w procedurze składowanej. Druga postać pozwala zdefiniować kursor używany w procedu rze składowanej. Ostatnie dwie postaci służą do definiowania obsługi warunków. W skłądni trzeciej tworzony jest nazwany warunek, odwołujący się do albo do określonego kodu stanu SQL, albo kodu błędu MySQL. Czwarta postać składni pozwala zdefiniować obsługę do okre ślonych warunków — albo odwołując się do wcześniej zdefinio wanej nazw y w arunku, albo odw ołując się do innych definicji warunków.
DELIMITER DELIMITER ogranicznik
Z m ienia ogranicznik służący do zak ończenia in stru k cji SQL w MySQL. Domyślnie ogranicznikiem jest średnik, ;. Ogranicz niki zmienia się przede wszystkim podczas definiowania proce dury składowanej. Kiedy zmieniamy ogranicznik, nie należy sto sować odwrotnego ukośnika (\), gdyż ma on w MySQL specjalne znaczenie. Przykłady DELIMITER //
DELETE DELETE [LOW_PRIORITY | QUICK] FROM tabela [WHERE klau zu la] [ORDER BY kolumna, ...] [LIMIT n] DELETE [LOW_PRIORITY | QUICK] tabelalL .*], tabe la 2i.*], tabe la nl .*] FROM tabelax, tabelay, . .., tabelaz
70
|
MySQL. Leksykon k eszonkowy
[WHERE klau zu la] DELETE [LOW_PRIORITY | QUICK] FROM tabe la li.*], tabela2[ .*], USING referencja [WHERE klau zu la]
tabelanl.*]
Usuw a z tabeli wiersze. Jeśli użyta zostanie bez klauzuli WHERE, powoduje usunięcie całej tabeli. Jeśli istnieje klauzula WHERE, usu nięte będą w iersze pasujące do jej w arunku. Instrukcja zw raca liczbę usuniętych wierszy. W w ersjach M ySQ L starszych od 4. pom inięcie klauzuli WHERE pow odow ało usunięcie całej tabeli. W ykorzystuje się przy tym m etodę, która działa znacznie szybciej, niż byłoby to m ożliw e w przypadku usuw ania wiersza po wierszu. W takim wypadku instrukcja zw róci 0, gdyż nie w ie, ile w ierszy jest używ anych. Obecnie instrukcja w opisanej postaci usuwa pliki tabeli poza pli kiem z jej definicją. W obec tego jest to m etoda usuw ania danych z tabel, w których występują nie dające się naprawić uszkodzenia: utracone zostaną dane, ale przynajmniej pozostanie struktura tabeli. Aby poznać liczbę usuw anych wierszy, trzeba zastosow ać klau zulę WHERE z wyrażeniem , które zawsze jest prawdziwe: DELETE FROM TBL WHERE 1 = 1 ;
M odyfikator LOW PRIORITY pow oduje, że M ySQ L przed rozpo częciem usuw ania danych czeka, aż nikt nie będzie czytał z po prawianej tabeli. W przypadku tabel M ylSA M OUICK powoduje, że uchw yt tabeli odwołuje złączanie indeksów podczas DELETE, aby zw iększyć szybkość działania. Klauzula LIMIT określa największą dopuszczalną liczbę rekordów usuwanych jednorazowo. W przypadku usuwania danych z tabel MylSAM, MySQL po pro stu usuwa wskaźniki z list powiązanych, wskazujące miejsce, gdzie znajdują się usuw ane wiersze. To m iejsce nie jest zwalniane na potrzeby systemu operacyjnego, mogą je zająć w przyszłości dane
Rozdz ał 4. SQL
|
71
wstaw iane do tabeli. Jeśli jednak konieczne jest zwolnienie tego miejsca, należy wywołać polecenie OPTIMIZE TABLE lub użyć na rzędzia myisamchk. Pozostałe dwie postaci składni dotyczą usuwania danych z wielu tabel jednocześnie. Pierw sza z nich pojaw iła się w w ersji 4.0.0 M ySQL, druga w wersji 4.0.2. W przypadku pierwszej składni wielotabelowej instrukcji DELETE klauzula FROM nie zaw iera nazw tabel, z których usuw ane są dane; tabele te podaw ane są zaraz za DELETE. W tym wypadku klauzu la FROM d ziała ja k FROM w SELECT: w ym ienia w szystkie tabele, które są przedm iotem działania DELETE lub użyte są we frazie WHERE. Z aleca się używ anie drugiej postaci w ielotabelow ej instrukcji DELETE, gdyż pozwala ona uniknąć pomyłki z DELETE jednotabelową: dane usuwane są z tabel podanych we frazie FROM. Klauzula USING opisuje wszystkie wspomniane tabele z klauzul FROM i WHERE. Poniższe dwie instrukcje DELETE działają dokładnie tak samo: usu wają z tabel prac dane i prac s p is rekordy dotyczące pracow ników jednego wydziału. DELETE prac_dane, prac_spis FROM prac_dane, prac_spis, wydział WHERE wydział.id = p r a c _d an e.id_wydzialu AND pr a c _ d a n e .id = p r a c _s pi s.prac_id AND wydział.id = 32; DELETE FROM prac_dane, prac_spis USING prac_dane, prac_spis, wydział WHERE wydział.id = p r a c _d an e.id_wydzialu AND pr a c _ d a n e .id = p r a c _s pi s.prac_id AND wydział.id = 32;
Aby korzystać z instrukcji DELETE, trzeba mieć uprawnienia DELETE. Przykłady # U sunięcie wszystkich danych z tabeli 'staredane' (bez usuwania sam ej tabeli) DELETE FROM staredane
72
|
MySQL. Leksykon k eszonkowy
# U sunięcie wszystkich danych z tabeli 'pobory', gdzie p o le 'rok' m a w artość '1995' DELETE FROM pobory WHERE rok=1995
DESCRIBE DESCRIBE tabela [ko lumna] DESC tabela [k o lumna]
Podaje inform acje o tabeli lub kolum nie. Instrukcja ta działa, jak opisano, ale jej funkcje są częścią instrukcji SHOW. Instrukcję tę w łączono jedynie w celu zapew nienia zgodności z Oracle SQL. Opcjonalna nazwa kolumny może zawierać metaznaki SQL; wtedy pokazane zostaną inform acje o w szystkich kolum nach, których nazw y pasują do wzorca. Przykład # Opisz u kład tabeli b y łe ja k a ' DESCRIBE byłej aka
# P o każ in form acje o wszystkich kolu m n ach tabeli 'duza', # których nazwy zaczynają się o d 'my_'. # W ażne: '_'je s t też metaznakiem, w ięc trzeba j e zacytować. DESC duza my\_%
DESC Synonim DESCRIBE.
DO DO v/yrażenie [, wyrażenie,
...]
Wykonuje wskazane wyrażenie, ale nie zwraca żadnych wyników.
DROP DATABASE DROP DATABASE [IF EXISTS] nazwa
Rozdz a ł4 . SQL
|
73
Trw ale usuw a z M ySQL podaną bazę danych. Po w ykonaniu tej instrukcji nie są już dostępne żadne tabele ani dane tę bazę two rzące. Z system u usuw ane są wszystkie pliki pom ocnicze bazy danych. Zwracana jest liczba usuniętych plików. Instrukcja ta jest równoważna użyciu narzędzia mysqladmin drop. Tak jak w przy padku mysqladmin, trzeba być administratorem MySQL (zwykle root lub mysąl). Użycie klauzuli IF EXISTS pozwala uniknąć komuni katów o błędach w przypadku próby usuwania nieistniejącej bazy danych.
DROP EVENT DROP EVENT [IF EXISTS] nazwa
Usuwa z MySQL wskazane zdarzenie. Aby instrukcję tę wykonać, trzeba m ieć uprawnienie EVENT.
DROP FUNCTION DROP FUNCTION [IF EXISTS] nazwa
Usuw a funkcję użytkow nika lub funkcję składow aną z działają cego aktualnie procesu serwera MySQL. Nie usuwa fizycznie pliku biblioteki zawierającej tę funkcję. Funkcję m ożna dodać ponow nie, korzystając z instrukcji CREATE FUNCTION. W obecnej imple mentacji DROP FUNCTION po prostu usuwa funkcję z tabeli function w bazie danych M ySQ L. Tabela ta zaw iera w szystkie aktyw ne funkcje.
DROP INDEX DROP INDEX nazwa_indeksu ON nazwa_tabeli
Zapewnia zgodność z innymi implementacjami SQL. W starszych wersjach M ySQ L instrukcja ta nic nie robiła. Od wersji 3.22 jest ona równoważna instrukcji ALTER TABLE ... DROP INDEX. Wy
74
|
MySQL. Leksykon k eszonkowy
konanie tej instrukcji w ym aga p o siad an ia up raw n ień SELECT, INSERT, DELETE, UPDATE, CREATE i DROP do odpowiedniej tabeli.
DROP PROCEDURE DROP PROCEDURE [IF EXISTS] nazwa
Usuwa z bazy danych wskazaną procedurę. Aby wykonać tę in strukcję, trzeba m ieć uprawnienia ALTER ROUTINE.
DROP TABLE DROP TABLE [IF EXISTS] nazwa [, nazwa2, [RESTRICT | CASCADE]
...]
Powoduje trwale usunięcie tabeli. W obecnej implementacji My SQL po prostu usuwa pliki związane z daną tabelą. Od wersji 3.22 można użyć frazy IF EXISTS, aby M ySQL nie zwracał błędu przy próbie usuw ania nieistniejącej tabeli. Słow a kluczow e RESTRICT i CASCADE niczego nie pow odują, są tylko po to, aby zapew nić zgodność z AN SI. U życie tej instrukcji w ym aga upraw nienia DELETE.
DROP TABLESPACE DROP TABLESPACE przestrzeń ENGINE = mechanizm
Usuw a z bazy danych w skazaną przestrzeń tabel. Przestrzeń ta nie może zawierać żadnych plików z danymi, więc przed wyko naniem tej instrukcji trzeba najpierw usunąć z niej wszystkie dane instrukcją ALTER TABLESPACE.
DROP TRIGGER DROP TRIGGER [IF EXISTS] tryger
Rozdz al 4. SQL
|
75
Usuwa z bazy danych wskazany tiyger. Przy zmianie wersji My SQL 5.0.10 lub starszej na wersję nowszą, najpierw trzeba usunąć wszystkie trygery, a dopiero po konwersji ponownie je założyć.
DROP USER DROP USER użytkownik
Usuwa z MySQL wskazanego użytkownika i wszystkie jego upra wnienia.
DROP VIEW DROP VIEW [IF EXISTS] widok [RESTRICT | CASCADE]
Usuw a z system u w skazany widok. M ySQ L ignoruje opcje RE STRICT i CASCADE.
EXPLAIN EXPLAIN nazwa_tabeli EXPLAIN [EXTENDED] zapytanie
W przypadku podania nazw y tabeli, polecenie jest synonimem SHOW COLUMNS FROM n a z w a _ t a b e l i . W przypadku podania instrukcji SQL, polecenie wyświetla infor macje o układzie i strukturze instrukcji SELECT. Dzięki temu można podejrzeć, kiedy nie są odpow iednio w ykorzystyw ane klucze. Zwracane inform acje składają się z następujących kolumn: table
N azw a tabeli, do której odwołuje się wiersz zbioru wyni kowego. type
Rodzaj robionego złączenia.
76
|
MySQL. Leksykon k eszonkowy
possible_keys Wskazuje, które indeksy MySQL mogą być użyte do stwo rzenia złączenia. Jeśli kolumna jest pusta, nie istnieją odpo wiednie indeksy i praw dopodobnie warto je stworzyć, aby popraw ić wydajność. key W skazuje indeks, którego ostatecznie używ a MySQL. key_len Podaje długość klucza M ySQL, który będzie użyty przy złą czeniu. ref
Opisuje kolumny i stałe używane wraz z kluczem do stwo rzenia złączenia.
rows
W skazuje oszacowaną przez M ySQ L liczbę wierszy, które trzeba będzie spraw dzić przed wykonaniem zapytania. Extra
Dodatkowe informacje o tym, jak MySQL wykona zapytanie. Przykład EXPLAIN SELECT k l i e n t .n a z w a , p r od uk t.nazwa FROM klient, produkt, zakupy WHERE z a k u p y .klie nt =k li en t.id AND z a k u p y .produk t= pr od uk t.id
FETCH FETCH nazwa_kursora INTO zmienna [,
...]
Pobiera następny wiersz danych z otwartego kursora, przesuw a ten kursor o jeden wiersz. A by stwierdzić, że nie m a już więcej wierszy do odczytania, trzeba przygotować obsługę do wychwy tywania stanu SQL 02000 (NO DATA — BRAK DANYCH).
Rozdz ał 4. SQL
|
77
FLUSH FLUSH opcjal,
opcja...]
Wymiata lub zeruje wewnętrzne procesy w zależności od poda nych opcji. Wykonanie tej instrukcji wymaga uprawnień RELOAD. D ostępne są następujące opcje: DES_KEY_FILE P rzeład ow uje klucze D ES z pliku podanego pierw otnie w op cji -des-key-file. HOSTS Usuwa z pamięci podręcznej tabelę z informacjami o serwe rach. Z opcji tej należy korzystać po zm ianie przez klienta adresu IP lub przy wystąpieniu błędów związanych z połą czeniami. LOGS Zam yka wszystkie standardow e pliki logów i ponow nie je otw iera. M ożna użyć tej opcji, jeśli plik logu zm ienił swój numer inode. Jeśli nie podano żadnych dodatkowych infor macji o sposobie otwarcia logu, zostanie otwarty now y log aktualizacji z rozszerzeniem zw iększonym o jeden. PRIVILEGES Przeładowuje wewnętrzne tabele MySQL, opisujące upraw nienia. Konieczne jest użycie tej opcji, aby uwzględnione zo stały jakiekolw iek zm iany upraw nień zrobione inaczej niż za pom ocą GRANT i REVOKE. QUERY CACHE Polecenie to defragmentuje pamięć podręczną zapytania, aby lepiej tę pamięć móc wykorzystać. Zapytania nie są z pamięci podręcznej usuwane. STATUS Zeruje stan zmiennych rejestrujących aktualny stan serwera.
78
|
MySQL. Leksykon k eszonkowy
TABLE t a b e l a TABLES t a b e l a ,
t a b e la 2 , . . . , tabelaN W ym iata dane tylko ze w skazanych tabel.
TABLES [WITH READ LOCK]
Zamyka wszystkie otwarte aktualnie tabele, wymiata wszy stkie dane z pam ięci podręcznej na dysk. W przypadku użycia opcji WITH READ LOCK zakłada blokadę odczytu, która będzie zw olniona dopiero po wykonaniu UNLOCK TABLES.
GRANT GRANT uprav/nienie [(.kolumna, ...)] [, uprav/nienie [(kolumna, ...)] ...] ON [{TABLE | FUNCTION | PROCEDURE}] {tabela * | *.* ba za da ny ch.*} TO użytkownik [IDENTIFIED BY 'hasło'] [, użytkownik [IDENTIFIED BY 'hasło'] ...] [REQUIRE [{NONE | SSL | X509 | CIPHER szyfr [AND] [ISSUER certyfikujący [AND]] [SUBJECT zakres]]] [WITH [GRANT OPTION] [MAX_QUERIES_PER_HOUR limit] [MAX_UPDATES_PER_HOUR limit] [MAX_CONNECTIONS_PER_HOUR limit] [MAX_USER_CONNECTIONS limit]]
W wersjach wcześniejszych niż 3.22.11 instrukcja GRANT niczego nie robiła. O becnie już instrukcja ta działa — przypisuje użyt kownikowi lub użytkownikom uprawnienia. Uprawnienia mogą dotyczyć bazy danych, tabeli lub poszczególnych kolumn. Tabela może zostać podana jawnie, może zostać zapisana jako * (wtedy uprawnienie dotyczy wszystkich tabel z bieżącej bazy danych) lub jako * . * (wszystkie tabele wszystkich baz) lub jako ba z a d a n y c h . * (wszystkie tabele danej bazy danych).
Rozdz ał 4. SQL
|
79
Obsługiwane są następujące uprawnienia: ALL PRIVILEGES/ALL
W szystkie uprawnienia dostępne użytkownikowi wykonu jącem u polecen ie, za w yjątkiem FILE, PROCESS, RELOAD i SHUTDOWN. ALTER
Do zm iany struktury tabel. ALTER ROUTINE
Do zm iany procedur składow anych lub funkcji. CREATE
Do tw orzenia now ych tabel. CREATE ROUTINE
Do tw orzenia procedur składow anych i funkcji. CREATE TEMPORARY TABLES
Do tw orzenia tabel tymczasowych. CREATE USER
Do tw orzenia now ych kont użytkowników . CREATE VIEW
Do tw orzenia widoków. DELETE
Do usuw ania wierszy z tabeli. DROP
Do usuw ania całych tabel. EVENT
Do tw orzenia zdarzeń terminarza. EXECUTE
Do w ykonyw ania procedur składow anych i funkcji. FILE
Do tworzenia i usuwania całych baz danych oraz do zarzą dzania plikam i logów.
80
|
MySQL. Leksykon k eszonkowy
GRANT OPTION D o na da w a n i a u p ra wn ie ń dla innych użytkowników. INDEX D o tworzenia i u s u w an ia z tabel indeksów. INSERT D o wstawiania d o tabel wierszy. LOCK TABLES D o w y k o n y w a n i a instrukcji LOCK TABLES n a tabelach, d o których użytko wn ik m a uprawnienie SELECT. PROCESS D o przeglądania w ą t k ó w procesu. REFERENCES Jeszcze nie zaimplementowane. RELOAD D o odświeżania różnych tabel wewnętrznych (zobacz: instru kcja FLUSH). REPLICATION CLIENT D o sprawdzania, gdzie są serwer nadr zę dy i p o d r z ę d n y replikacji. REPLICATION SLAVE D o umożliwiania serwerowi p o d r z ę d n e m u odczytywania zdarzeń z dziennika binarnego serwera nadrzędnego. SELECT D o czytania d a ny ch z tabel. SHOW DATABASES D o przeglądania wszystkich baz d a ny ch z serwera. SHOW VIEW D o w y k o n y w a n i a instrukcji SHOW CREATE VIEW. SHUTDOWN D o wyłączania serwera bazy danych.
Rozdz a ł4 . SQL
|
81
SUPER Do wykonywania szeregu poleceń o charakterze administra cyjnym; um ożliw ia ignorowanie ustaw ienia max_connectio n s . TRIGGER Do tw orzenia i usuw ania trygerów. UPDATE Do modyfikacji wierszy w tabelach. USAGE Brak jakichkolw iek przywilejów. Zmienna user ma postać użytkow nik@ kom puter, obie części mogą zaw ierać m etaznaki. Jeśli używ ane są m etaznaki, trzeba ująć w cudzysłów albo całą nazw ę, albo jej części z m etaznakam i (na przykład poprawne są joe@"%.com" czy " joe@%.com")1. Użyt kow nik bez nazw y kom putera jest równow ażny zapisow i u ż y t kownik^" %". Jeśli masz globalne uprawnienie GRANT, możesz podawać opcjo nalny m odyfikator IDENTIFIED BY. Jeśli użytkow nik, którem u nadaw ane są praw a, nie istnieje, zostanie utw orzony i będzie przypisane mu podane hasło. Jeśli użytkownik istnieje, zmienione zostanie jego hasło. Upraw nienie GRANT nadaje się użytkownikom za pom ocą frazy WITH GRANT OPTION. W przypadku jej użycia użytkow nik, któ rego dotyczy instrukcja GRANT, m oże swoje praw a nadaw ać też innym. M ożna też opcjonalnie podać ograniczenie na liczbę za pytań, jakie dany użytkownik może zadać — służy do tego opcja MAX_0 UERIE S_P ER_H0 UR.
1 Tak naprawdę zasady decydujące o tym, kiedy konieczne jest użycie cudzysłowu, są bardziej złożone. Z dobrym przybliżeniem można przyjąć jednak, że kiedy tylko występują jakieś znaki niealfanumeryczne, muszą być w cudzysłowach.
82
|
MySQL. Leksykon k eszonkowy
W MySQL istnieje obsługa szyfrowania SSL oraz uwierzytelniania X.509. Klauzula REQUIRE wymaga, aby użytkownik jakoś potwier dził swoją tożsam ość oraz pozw ala określić, jak m a to zrobić. Podanie REQUIRE SSL informuje MySQL, że użytkownik może łą czyć się z bazą danych jedynie połączeniem SSL. Analogicznie, REQUIRE X509 wymaga, aby użytkownik potwierdził swoją tożsa mość certyfikatem X.509. N a połączenie można nałożyć następują ce ograniczenia: ISSUER c e r t y f i k u j ą c y
W ym aga przedstaw ienia certyfikatu od danego podmiotu. SUBUECT z a k r e s
Użytkownik musi nie tylko m ieć ważny certyfikat, ale certy fikat ten m usi obejm ow ać podany zakres. CIPHER s z y f r
Umożliwia MySQL wymuszanie minimalnego poziomu szy frowania. Połączenie musi korzystać z jednego ze wskazanych szyfrów. Przykłady # D a je pełn y dostęp d o tab eli K on to d la je o @ c a r th a g e GRANT ALL ON b a n k d b .Konto TO jo eO c a r t h a g e ;
# D a je pełn y dostęp d o tab eli K on to' d la ja n e @ c a r th a g e # i tworzy dla niej kon to użytkownika. GRANT ALL ON b a n k d b .Konto TO ganeOcarthage IDENTIFIED BY 1mypass 1;
# Umożliwia jo em u w ybieranie danych ze wszystkich tab el bazy w ebdb GRANT SELEGT ON webdb.* TO goe;
# N a d aje joem u z lokaln ej maszyny dostęp do w szystkiego w webd, # ale n akład a dodatkow e warunki bezpieczeństw a GRANT ALL on webdb.* TO joeOlocalhost IDENTIFIED BY 'mypass' REQUIRE S U B ] EGT 'G=US, ST=MN, L=Minneapolis, 0=My Gert, CN=]oe Friday/Email=gj oe Ol o c a l h o s t ' AND I S S U E R = 'G=US, S T = M N , L=Minneapolis, 0=lmaginet, CN=]oe Friday/Email=gj oe Ol o c a l h o s t ' AND CI PH ER ='RSA-DES-3DES-SHA';
Rozdz ał 4. SQL
|
83
INSERT INSERT [DELAYED | LOW_PRIORITY] [IGNORE] [INTO] tabela [(.kolumna, ...)] VALUES (v/artości [, wartości...]) [ ON DUPLICATE KEY UPDATE kol=wyrazenie ] INSERT [DELAYED | LOW_PRIORITY] [IGNORE] [INTO] tabela [(kolumna, ...)] SELECT ... [ ON DUPLICATE KEY UPDATE kol=wyrazenie ] INSERT [DELAYED | LOW_PRIORITY] [IGNORE] [INTO] tabela SET ko lu mn a=wartość, ko lu mna=wartość, ... [ ON DUPLICATE KEY UPDATE kol=wyrazenie ]
Wstawia do tabeli dane. Pierwsza postać instrukcji po prostu wsta wia dane wartości do podanych kolumn. Kolumny tabeli, którym nie przypisano wartości, otrzymują wartości domyślne lub NULL. Druga postać pobiera wyniki zapytania SELECT i w staw ia je do tabeli. Trzecia to po prostu inna postać form a pierwszej, gdzie jawnie podaje się, którym kolumnom odpowiadają które wartości. Jeśli użyto modyfikatora DELAYED, wszystkie inne instrukcje SELECT będą wykonane przed INSERT. Analogicznie, użycie LOW PRIORITY powoduje odłożenie wstawiania do czasu zakończenia wszelkich innych operacji od klientów. Od w ersji M ySQ L 3.22.5 m ożna w staw iać do tabeli więcej niż jeden wiersz naraz. Robi się to, podając dodatkow e ciągi w arto ści rozdzielone przecinkami. Użycie frazy ON DUPLICATE KEY UPDATED powoduje, że jeśli wsta wienie nowych danych spowodowałoby błąd wstawienia duplikatu klucza, zam iast wstaw ienia now ego w iersza zm ieniana jest za w artość w iersza już w tabeli istniejącego. Użycie tej instrukcji w ym aga upraw nienia INSERT. Przykłady # Wstaw rek o r d d o tabeli ludzie. INSERT INTO ludzie (nazwisko,
84
|
MySQL. Leksykon k eszonkowy
szarza,
numer_kol)
VALUES ('Paweł Kowalski',
'kapitan',
12345);
# Skopiuj wszystkie rekordy z 'dane', je ś li tylko s ą starsze # o d p ew n ej w skazanej daty, do 'stare_dane'. Zwykle następnym # krokiem je s t usunięcie tych danych z 'dane'. INSERT INTO stare_dane (id, data, SELECT (id, data, pole) FROM dane WHERE data < 87459300;
pole)
# Wstaw d o tabeli 'ludzie' 3 now e wiersze. INSERT INTO ludzie (nazwisko, szarza, numer_kol) VALUES ('Tim O V R e i l l y ' , 'generał', 1), ('Andy Oram', 'major', 4342), ('Randy Yarger', 'szeregowy', 9943);
# A ktu alizacja rekordu z takim samym kluczem j a k wstawiany INSERT INTO ludzie ( id_osoby, imie, nazwisko ) VALUES ( 1, 'Jerzy', 'Smoczyński' ) ON DUPLICATE KEY UPDATE ludzre SET rd_osoby = rd_osoby + 1 WHERE id_osoby = 1
KILL KILL [CONNECTION
| QUERY] id_wqtku
Wywołanie KILL CONNECTION działa tak samo, jak wywołanie KILL bez żadnej opcji. Instrukcja kończy wskazany wątek. Identyfikatory wątków można określić za pomocą SHOW PROCESSLIST. Kończenie wątków innych użytkow ników w ym aga up raw nien ia PROCESS. W M ySQ L 4.x up raw nienie to jest uprawnieniem SUPER. Przykład # Z akończ w ątek 3. KILL 3
LOAD LOAD DATA [L0W_PRI0RITY | CONCURRENT] [LOCAL] INFILE plik [REPLACE|IGNORE] INTO TABLE tabela [og raniczniki] [(ko lu mn y)]
Rozdz at 4. SQL
|
85
Odczytuje plik tekstowy, dane z niego wstawia do tabeli. Ta me toda wstaw iania danych jest znacznie szybsza od szeregu kolej nych instrukcji INSERT. Wprawdzie instrukcje mogą być wysyłane ze wszystkich klientów, jak inne instrukcje SQL, ale plik z danymi musi być położony na serwerze, chyba że użyto słowa kluczowego LOCAL. Jeśli nazw a pliku nie jest w pełni kwalifikowaną ścieżką, M ySQL szuka pliku w katalogu bieżącej bazy danych. Jeśli nie podano ograniczników, LOAD DATA INFILE zakłada roz dzielanie pól znakowych tabulatorem, znaki specjalne są cytowane odwrotnymi ukośnikami (\), a wiersze kończą się znakiem nowego wiersza. Nie trzeba ograniczać się do zachowania standardowego, można podać w łasne ograniczniki za pom ocą podanych niżej słów klu czow ych; ograniczniki dotyczą w szystkich tabel objętych całą instrukcją. FIELDS TERMINATED BY 1c 1
Wskazuje znak użyty do rozgraniczenia pól. Do podawania znaków specjalnych używa się cytowania zgodnie ze stan dardem języka C. W artość ta może zawierać więcej niż jeden znak. Przykładowo, FIELDS TERMINATED BY 1, 1 oznacza plik rozdzielany przecinkami, zaś FIELDS TERMINATED BY '\ t ' plik rozdzielany tabulatorami. FIELDS ENCLOSED BY 1c 1
Wskazuje znak użyty do zamknięcia pól znakowych. Przy kładowo, FIELDS ENCLOSED BY oznacza, że jeśli wiersza zawiera " raz, dwa", "i nny", " o s t a t n i " , zawiera ona trzy pola: • ra z ,
dwa
• inny • ostatni
86
|
MySQL. Leksykon k eszonkowy
Domyślnie zakłada się, że pola znakowe nie są w nic ujmo wane. FIELDS ESCAPED BY 1c 1
Wskazuje znak użyty do poinformowania, że następny znak nie jest znakiem specjalnym. Przykładowo, jeśli użyto FIELDS ESCAPED BY w iersz zaw ierający Pi e r w s z y ,Drugi'', Trzeci, Czwarty zostanie zinterpretowany jako pola „Pier wszy", „Drugi.Trzeci" i „Czwarty". W yjątkiem są znaki NULL. Jeśli wartością FIELDS ESCAPED BY jest odwrotny ukośnik, \0 oznacza znak ASCII NUL (znak o kodzie 0), zaś \N oznacza NULL w MySQL. Wartością domyślną opisywanej opcji jest odw rotny ukośnik. Zauw ażm y, że sam M ySQL uważa odwrotny ukośnik za znak specjalny. W obec tego, aby zapisać ten znak, trzeba go podwoić: FIELDS ESCAPED BY ' W . IGNORE l i c z b a LINES
Powoduje pominięcie podanej liczby wierszy z ładowanego pliku. LINES TERMINATED BY 1c 1
Wskazuje znak oznaczający początek nowego rekordu. War tość ta m oże zaw ierać więcej niż jeden znak. Przykładowo, jeśli ustawiono LINES TERMINATED BY ' . plik zawierający a . b , c . d , e , f . g , h , k . zostanie potraktow any jako zapis trzech kolejnych rekordów, każdy mający trzy pola. Domyśl nie używa się tu znaku nowego wiersza. Oznacza to, że do myślnie M ySQL traktuje każdy wiersz jako osobny rekord. N orm alnie, jeśli w artość w czytana z pliku już istnieje w tabeli w polu należącym do klucza unikatow ego, zgłaszany jest błąd. Jeśli użyto słow a kluczow ego REPLACE, w takiej sytuacji stary rekord z tabeli zostanie zastąpiony nowym z pliku. Z kolei słowo kluczow e IGNORE pow oduje działanie odw rotne: now y rekord z pliku jest pom ijany, istniejący wcześniej w tabeli pozostaje bez zmian.
Rozdz ał 4. SQL
|
87
Jeśli w pliku z danymi znalezione zostanie słowo NULL, uważane jest za w ystąpienie w artości NULL, chyba że jest ujęte w znaki w skazane przez FIELDS ENCLOSED BY lub je śli braku je frazy FIELDS ENCLOSED BY.
Użycie tego samego znaku jako kilku ograniczników może spo wodować błędy M ySQL. Przykładow o, jeśli zostanie ustaw ione FIELDS TERMINATED BY 1, 1 ENCLOSED BY 1, ', MySQL zachowa się nieprzew idyw alnie. Jeśli podana zostanie lista kolumn, dane będą wstawiane do tych właśnie pól tabeli. Jeśli nie zostaną podane żadne kolumny, liczba pól w danych m usi być zgodna z liczbą pól tabel, poza tym taka sama musi być kolejność jednych i drugich. Jeśli podane zostaną dodatkow e w artości, będą pom inięte; jeśli w artości jakichś pól zabraknie, użyte zostaną w artości domyślne. Użycie opisywanej instrukcji w y m a g a uprawnień SELECT i INSERT.
Przykład # Z aładow an ie danych z pliku 'mojedane.txt' d o tabeli 'mydata'. # Zakładam y, że separatoram i p ó l s ą tabulatory, p o la znakow e nie są # ograniczane. LOAD DATA INFILE
'mojedane.txt'
INTO TABLE mydata
ił Z aładow an ie danych z pliku 'nowedane.txt'. Odszukiwane s ą dw a p o la ił rozdzielan e przecinkam i, w stawiane s ą do p ó l 'p o lel'i 'pole2' # tabeli 'nowatabela'.
LOAD DATA INFILE 'nowedane.txt' INTO TABLE nowatabela FIELDS TERMINATED BY 1, 1 (polel, pole2)
LOCK LOCK TABLES nazwa [AS a l i a s ] {READ | [READ LOCAL] | [LOW_PRIORITY] WRITE} [, nazwa2 [AS a l ia s] {READ | [READ LOCAL] | LOW_PRIORITY] WRITE, ...]
88
|
MySQL. Leksykon k eszonkowy
Blokuje tabelę dla konkretnego wątku. Polecenie to używane jest przede wszystkim do symulowania transakcji. Jeśli wątek tworzy blokadę READ (odczytu), wszystkie inne wątki mogą z danej tabeli czytać dane, ale tylko ten wątek może do tabeli pisać. Jeśli jest to blokada WRITE (zapisu), żadne inne wątki nie mogą z tabeli czytać ani do niej pisać. Przykład # B lo k a d a tab el 'tabela 1'i 'tabela3'w celu uniknięcia aktualizacji # i całkow ita b lo k a d a tabeli 'tabela2'. D odatkow o dla tab eli 'tabela3' # tworzony je s t alia s 't3'. LOCK TABLES tabelal READ, tabela2 WRITE, tabela3 AS t3 READ
OPEN OPEN nazwa_kursora
Otwiera zadeklarow any wcześniej kursor.
OPTIMIZE OPTIMIZE TABLE nazwa
Odtwarza tabelę, usuwając z niej niewykorzystane obszary, sor tuje nieuporządkowane strony indeksów. Także aktualizuje dane statystyczne, które tego wymagają. Nowa, zoptymalizowana tabela tw orzona jest jako tym czasowa kopia starej, która potem zastę puje tę starą tabelę. Polecenie to działa tylko dla tabel M ylSAM , InnoDB oraz ARCHIVE. Jeśli polecenie ma zadziałać niezależnie od typu tabeli, należy użyć mysqld z włączoną opcją --skip-new lub --safe-mode. W takich warunkach OPTIMIZE TABLE jest syno nimem ALTER TABLE. Przykład OPTIMIZE TABLE mojatabela
Rozdz a ł4 . SQL
|
89
RELEASE SAVEPOINT RELEASE SAVEPOINT zapis
Usuw a w skazany zapis stanu.
RENAME DATABASE RENAME DATABASE nazwa_począt/
Zmienia nazwę wskazanej bazy danych. Uprawnienia przypisane do dotychczasowej nazwy bazy danych nie będą zaktualizowane, dlatego wszystkie upraw nienia trzeba od now a nadać. Synonimem om awianej instrukcji jest RENAME SCHEMA.
RENAME USER RENAME USER nazwajpoczątkowa TO nowa_nazwa
Zm ienia nazw ę w skazanego konta. Jeśli podana zostanie tylko nazwa użytkownika, do części z nazwą serwera zostanie dodany znak %.
REPLACE REPLACE [DELAYED | LOW_PRIORITY] INTO tabela [(.kolumna, ...)] VALUES (w a rt oś ć, ...) REPLACE [DELAYED | LOW_PRIORITY] INTO tabela [(kolumna, ...)] SELECT klauzula_select REPLACE [DELAYED | LOW_PRIORITY] INTO tabela SET ko lu mn a=wartość, ko lu mna=wartość, . . .
Wstawia do tabeli dane, w przypadku konfliktów zastępując stare dane now ym i. Instrukcja jest identyczna jak INSERT, tyle tylko,
90
|
MySQL. Leksykon k eszonkowy
że w przypadku próby wstawienia wartości już istniejącej w klu czu unikatowym, stara wartość jest zastępowana nową. Pierwsza postać instrukcji po prostu wstawia wartości do danych kolumn. Kolumny, którym nie przypisano wartości jawnie, są uzupełniane swoimi wartościami domyślnymi lub NULL. Druga postać pobiera w yniki zapytania SELECT i w staw ia je do tabeli. T rzecia postać w staw ia dane wartości, korzystając ze składni podobnej, jak in strukcja UPDATE, ale zaw sze zastępuje cały w iersz, a nie tylko w skazane wartości. Przykłady # Wstaw rek o r d d o tabeli ludzie. REPLACE INTO ludzie (nazwisko, szarza, numer_kol) VALUES ('Paweł Kowalski', 'kapitan', 12345);
# Skopiuj wszystkie rekordy z 'dane', je ś li tylko s ą starsze # o d p ew n ej w skazanej daty, do 'stare_dane'. Zwykle następnym # krokiem je s t usunięcie tych danych z 'dane'. REPLACE INTO stare_dane (id, data, pole) SELECT (id, data, pole) FROM dane WHERE data < 87459300;
REVOKE REVOKE uprav/nienie [(.kolumna, ...)] [, uprav/nienie [ (kolumna, . . .) . .. ] ON tabela FROM użytkownik REVOKE ALL PRIVILEGES, GRANT OPTION FROM użytkownik [, użytkownik ...]
Odbiera użytkownikowi uprawnienie. Wartości przywileju, tabeli i użytkow nika są analogiczne, jak w instrukcji GRANT. W ykona nie tej instrukcji w ym aga upraw nienia GRANT. W ięcej informacji o tej instrukcji m ożna znaleźć przy opisie GRANT.
ROLLBACK ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE] [TO SAVEPOINT z a p i s ]
Rozdz at 4. SQL
|
91
Wycofuje bieżącą transakcję, odwracając wszystkie akcje zrobione od ostatniej instrukcji BEGIN (lub w przypadku tworzenia ciągłych transakcji, od ostatniej instrukcji COMMIT lub ROLLBACK). Jeśli podany zostanie zapis, transakcja zostanie wycofana do tego zapisu. Usuwa ne są też wszystkie punkty zapisu zrobione po zapisie wskazanym.
SAVEPOINT SAVEPOINT zapis
Definiuje punkt zapisu dla transakcji. Jeśli później zajdzie potrzeba, m ożna skorzystać ze składni ROLLBACK TO SAVEPOINT, aby w y cofać transakcję tylko do pożądanego miejsca.
SELECT SELECT [ S T R A I G H T J O I N ] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT] [SQL_CACHE | SQL_NO _C AC HE] [SQL_CALC_FOUND_ROWS] [HIGH_PRIORITY] [DISTINCT | DISTINCTROW | ALL] kolumna [[AS] a l i a s ] [INTO {OUTFILE nazwapliku' ograniczniki | DUMPFILE nazv/apliku' \ ^z m i e n n a }] [FROM tabela [[AS] al i a s ] [WHERE warunek [, ...]] [GROUP BY {kolumna | wyrażenie | p o z y c j a } [ASC | DESC]
[, . . . ] [WITH ROLLUP]] [HAVING warunek] [ORDER BY {kolumna | wyrażenie | p o z y c j a } [ASC
| DESC]
[, . . . ] [LIMIT {ofset | ile_wierszy \ ile_wierszy OFFSET ofse t }] [PROCEDURE nazwa (arg [, ...])] [FOR UPDATE | LOCK IN SHARE MODE] [UNION [ALL] select po dz ap yt an ie]
Pobiera dane z bazy danych. Instrukcja SELECT to podstaw owa m etoda czytania danych z tabel.
92
|
MySQL. Leksykon k eszonkowy
Jeśli użyto słowa kluczowego DISTINCT, z każdej grupy identycz nych wierszy zostanie z w r ó c o n y tylko jeden. Słow o kluczowe ALL m a znaczenie odwrotne niż DISTINCT, p o w o d u j e pokazanie wszystkich danych. Domyślnie u ż y w a n e jest ALL. DISTINCT i DISTINCTROWS to synonimy.
M ySQ L zaw iera szereg rozszerzeń standardow ej składni AN SI SQL, które pozw alają sterow ać wykonaniem zapytania: HIGH_PRIORITY
Z w iększa priorytet zapytania, naw et kosztem pom ijania tabel, które czekają na blokadę w celu aktualizacji. Jeśli opcja ta będzie używ ana przy długo działających zapytaniach, m oże spow odow ać zaw ieszanie w ykonyw ania aktualizacji bazy danych. STRAIGHT UOIN
Jeśli podana zostanie więcej niż jedna tabela, MySQL auto matycznie połączy tabele tak, aby można było zestawiać ich wartości. Jeśli MySQL nie robi złączenia dość wydajnie, można podać STRAIGHT DOIN w celu wym uszenia na M ySQL złą czania tabel w takiej kolejności, w jakiej te tabele zostały podane w zapytaniu. SOL_BUFFER_RESULT
W ym usza na M ySQL zapisanie wyników w tabeli tym cza sowej. S0L_CALC_F0UND_R0WS
Umożliwia określenie, ile wierszy zapytania zostałoby zwró conych bez użycia klauzuli LIMIT. W artość tę można pobrać za pom ocą SELECT F0UND_R0WS(). SOL_BIG_RESULT SOL_SMALL_RESULT
Informuje MySQL, jakiej wielkości zdaniem użytkownika bę dzie zbiór wyników używanych przez GROUP BY lub DISTINCT. W przypadku małych wyników MySQL zrezygnuje z sorto wania na rzecz szybkich tabel tymczasowych. W przypadku
Rozdz ał 4. SQL
|
93
dużych zbiorów wynikowych użyte zostaną dyskowe tabele tym czasowe i zastosowane będzie sortowanie. S0L_CACHE SOLJNOJEACHE Opcja SOL NO CACHE nakazuje MySQL nie zapisywać w yn i ków zapytania w pam ięci podręcznej zapytań. Z drugiej strony opcja SOL CACHE nakazuje zapisanie tych wyników w przypadku korzystania z pam ięci podręcznej na żądanie (S0L_0UERY_CACHE_TYPE = 2). W artości wybranych kolum n m ogą być: A liasami Dow olna złożona nazw a kolum ny lub funkcji m oże zostać uproszczona przez utworzenie do niej aliasu. Do wartości tej m ożna odw oływ ać się przez ten alias wszędzie w całej in strukcji SELECT (na przykład SELECT DATE_FORMAT("%W, %M %d %Y") AS ladna_data FROM kalendarz). Nie można uży w ać aliasów w klauzuli FROM, gdyż nie są one tam wyliczane. Nazwam i kolumn M oże to być kolu m n a, t a b e l a . kolu m n a lub b a z a d a n y c h . t a b e l a , kolum na. Dłuższe postaci są w ym agane jedynie w przypadku istnienia kolum n o takich samych nazw ach, choć wolno ich używać zawsze (na przykład SELECT nazwi sko FROM ludzie; SELECT mojedane.ludzie.nazwisko FROM ludzie). Funkcjami M ySQL zaw iera szereg funkcji w budow anych, jak SELECT COS(kat) FROM trójkąt (zobacz dalej). Poza tym funkcje użytkownika mogą być dodawane w każdej chwili instrukcją CREATE FUNCTION. Domyślnie MySQL odsyła wyniki klientowi, który przysłał zapy tanie. Można jednak przekierować wyniki do pliku. W ten sposób
94
|
MySQL. Leksykon k eszonkowy
można wygenerować zawartość tabeli (lub jej części) do sformato wanego pliku, który będzie czytelny dla człowieka lub sform a tow any tak, aby był łatw y do analizy przez inny system bazo danowy. Modyfikator INTO OUTFILE 'n a z w a p l i k u ' jest m e t o d ą robienia takiego przekierowania. W takim w y p a d k u wyniki zapytania SE LECT są umieszczane w pliku nazwapliku. Format pliku jest okre ślony parametrem o g r a n i c z n i k i , który m a takie s a m o znaczenie, jak w p r z y p a d k u instrukcji LOAD DATA INFILE, przy c z y m d o datkowo:
• Słowo kluczowe OPTIONALLY we frazie FIELDS ENCLOSED BY powoduje, że dane umieszczone w ogranicznikach będą trak tow ane jako łańcuchy, zaś dane bez ograniczników jako liczby. • Usunięcie wszelkich ograniczników (czyli FIELDS TERMINA TED BY 1 1 ENCLOSED BY 1 ') spow oduje użycie form atu o stałej szerokości. Dane będą generowane zgodnie z roz miarem wyświetlania poszczególnych wartości. Wiele arku szy kalkulacyjnych i m ałych baz danych m oże im portow ać takie pliki. Użycie opisywanego polecenia wym aga upraw nień FILE. Dom yślne zachow anie bez podanych ograniczników polega na generowaniu danych rozdzielanych tabulatoram i, z odwrotnym u kośnikiem (\) jako znakiem cytow ania i z jed nym rekordem w każdym wierszu. O pcjonalnie zam iast OUTFILE można podać DUMPFILE. Składania taka powoduje umieszczenie w pliku poje dynczego w iersza bez separatorów pól czy wierszy. Przydaje się to do generowania danych z pól binarnych. Listę złączanych tabel m ożna podaw ać następująco:
Rozdz ał 4. SQL
|
95
T a b e la l, T abela2, T abela3, . . . Najprostsza postać, kiedy tabele są złączane w sposób uwa żany za odpowiedni przez MySQL. Można to samo zapisać jako T a b e l a l HOIN T a b e l a 2 HOIN T a b e l a 3 , . . . . M o ż n a u żyć jeszcze słowa kluczow ego CROSS, ale i tak nie m a ono żad nego znaczenia (przykład ow o, T a b e l a l CROSS HOIN Tabela2). W złączonej tabeli umieszczane są jedynie wiersze obu tabel, spełniające podane warunki. Przykładowo, SELECT * FROM ludzie, domy WHERE ludzie.id=domy.właściciel utworzy złączoną tabelę zawierającą wiersze z tabeli ludzie, m ające id o takiej wartości, że odpow iada mu pole wła ściciel z tabeli domy. Tak jak wartościom, tak i n a z w o m tabel m o ż n a nada w a ć aliasy (na przykład SELECT tl.nazwisko, t2.adres FROM dluzsza_nazwa_tabeli tl, dluzsza_nazwa_tabeli t2). W przypadku MySQL 5 do tego typu złączeń lepiej używać składni standardow ego AN SI SQL, INNER HOIN. T a b e l a l INNER HOIN T a b e l a 2 {[ON w y r a ż e n i e ] | [USING (kolum ny)]} W ykonuje standardowe złączenie wewnętrzne. Metoda jest identyczna do opisanej przed chwilą, ale złączane kolumny m ożna opisać za pom ocą klauzuli USING zam iast WHERE. T a b e l a l STRAIGHT_]OIN T a b e l a 2 Metoda identyczna, jak pierwsza opisana, ale tabela po lewej stronie zaw sze jest odczytyw ana przed tabelą po stronie prawej. Należy z tej opcji korzystać, jeśli MySQL zbyt wolno sortuje, łącząc tabele w niewłaściwej kolejności. T a b e l a l LEFT [OUTER] HOIN T a b e l a 2 ON w y r a ż e n i e Sprawdza, czy prawa tabela pasuje do tej klauzuli. W przy padku każdego braku dopasowania wiersza lewa tabela jest uzupełniana rekordem zawierającym same w artości NULL. Jeśli weźm iem y pod uw agę poprzedni przykład, SELECT *
96
|
MySQL. Leksykon k eszonkowy
FROM ludzie, domy LEFT HOIN ludzie, domy ON ludzie. id=domy. właściciel, wynik będzie zawierał wszystkie pa sujące do siebie wiersze obu tabel, a także w iersze z tabeli ludzie, którym nie odpowiadają rekordy w tabeli domy — wtedy użyte zostaną wartości NULL. Słowo kluczowe OUTER jest opcjonalne i nie m a żadnego znaczenia. T a b e l a l LEFT [OUTER] DOIN T a b e l a 2 USING (k o l u m n a i , kolumna2 ...]) Z łącza podane kolum ny tylko w tedy, gdy istnieją w obu tabelach (na przykład SELECT * FROM stara LEFT OUTER ]0IN nowa USING (id)). T a b e l a l NATURAL LEFT [OUTER] ]0IN T a b e l a 2 Złącza jedynie kolumny istniejące w obu tabelach. M a takie sam o znaczenie, jak użycie poprzedniej m etody i podanie w szystkich kolumn z obu tabel (na przykład SELECT bo gacze.pobory, biedacy.pobory FROM bogacze NATURAL LEFT ]0IN biedacy). {OJ T a b e l a l LEFT OUTER DOIN T a b e l a 2 ON k l a u z u l a } Identyczne, jak T a b e l a l LEFT JOIN T a b e l a 2 ON k la u z u l a , w łączone jedynie dla zapew nienia zgodności z ODBC. MySQL obsługuje także złączenia prawostronne z taką samą skła dnią, jak lew ostronne; wyjątkiem jest składnia OD. Jednak w celu zapewnienia przenośności kodu zaleca się zapisywanie złączeń jako lewostronnych. Jeśli nie zostaną podane żadne ograniczenia, SELECT zwraca wszy stkie dane z w ybranych tabel. M ożna też opcjonalnie nakazać M ySQL użycie lub ignorowanie indeksów podczas robienia złą czeń — służą do tego opcje USE INDEX oraz IGNORE INDEX. W arunki w yszukiw ania m ogą zaw ierać jed no z następujących podzapytań:
Rozdz ał 4. SQL
|
97
WHERE i n s t r u k c j a Konstrukcja ta jest najpowszechniejszym sposobem wyszu kiwania danych w SQL. Zwykle używa się różnego rodzaju porów nań, ale m ogą być też użyte funkcje z w yjątkiem funkcji agregujących. M ogą być używane nazwane wartości, jak nazw y kolum n i aliasy, liczby stałe oraz literały łańcu chowe. FOR UPDATE Tworzy blokadę zapisu na wierszach zwróconych przez za pytanie. Ograniczenie to jest przydatne, jeśli trzeba natych miast m odyfikow ać dane z zapytania i aktualizow ać bazę danych. LOCK IN SHARE MODE Tw orzy blokadę odczytu w trybie współdzielonym tak, że zapytanie nie zwraca żadnych danych należących do niezakończonej transakcji. GROUP BY k o l u m n a l , kolum naż, ...] Zbiera wszystkie w iersze zawierające dane w pewnej ko lumnie. W ten sposób można na kolumnach wykonywać fun kcje agregujące, na przykład SELECT nazwisko, MAX(wiel<) FROM ludzie GROUP BY nazwisko. W artość kolumny może być liczbą całkowitą bez znaku, reprezentującą numer ko lumny lub formułą, niekonieczne jest używanie zawsze nazw kolumn. HAVING k l a u z u l a M a takie samo znacznie, jak WHERE, ale przykładana jest do danych już wybranych z bazy. Jest to wygodna metoda wy konywania funkcji agregujących na w zględnie niedużych zbiorach danych, które zostały wybrane z dużych tabel. W ten sposób funkcja nie m usi przetw arzać całej tabeli, a jedynie już wybrane dane, na przykład SELECT nazwisko, MAX(wiel<) FROM ludzie GROUP BY nazwisko HAVING MAX(wiel<)>80.
98
|
MySQL. Leksykon k eszonkowy
ORDER BY kolum na [ASC|DESC][, kolum na2 [ASC|DESC], . . . ] Sortuje zwrócone dane w edług podanej kolum ny lub ko lumn. Jeśli podano DESC, sortowanie odbywa się w kolejności m alejącej; w przeciw nym razie kolejność jest rosnąca (na przykład SELECT nazwisko, wiek FROM ludzie ORDER BY wiek DESC). Porządek rosnący m ożna wym usić jaw nie sło w em kluczow ym ASC. T ak ja k w przypadku GROUP BY, kolum ny m ożna w skazyw ać nie tylko przez nazw y, ale też liczbami całkowitymi bez znaku lub wyrażeniami (choć nie możliwe jest korzystanie z funkcji agregujących). LIMIT [start,] w ie r s z y Zwraca jedynie podane wiersze. Jeśli podano wartość s t a r t , p odana liczba w ierszy je st najpierw p om ijana. Pierw szy wiersz 0 (na przykład SELECT u rl FROM hi perl ac za LIMIT 5, 10) zw raca adresy URL od 5 do 14. PROCEDURE nazwa ( [ l is t a _ a r g ~ i) W e wczesnych wersjach MySQL opcja ta nie miała znacze nia. Dodano ją, aby ułatwić importowanie danych z innych system ów SQL. Od wersji M ySQL 3.22 podzapytanie po zwala podać procedurę, która m odyfikuje dane wynikowe przed przekazaniem ich klientowi. SELECT obsługuje funkcje. MySQL zawiera różne funkcje wbudo wane, działające na danych z tabeli, zw racające użytkownikow i wyliczone wartości. W przypadku niektórych z tych funkcji wynik zależy od tego, czy użytkownik chce otrzymać liczbę, czy łańcuch; jest to kontekst funkcji. W przypadku w ybierania w artości w y świetlanych użytkownikow i używ any jest jedynie kontekst tek stowy, ale w przypadku wybierania danych wstawianych do pola lub używanych jako argument innych funkcji kontekst zależy od tego, czego oczekuje odbiorca. Przykładowo, wybieranie danych do wstawienia do pola liczbowego spowoduje przypisanie funkcji kontekstu liczbowego.
Rozdz ał 4. SQL
|
99
W M ySQL 4.0 dodano obsługę sum m nogościowych. Klauzula UNION pozw ala złączyć w yniki kilku instrukcji SELECT w jeden zbiór. O ba zapytania pow inny m ieć odpow iadające sobie ko lumny co do typu i liczby. Dopasowanie typu oznacza, że typy m uszą dać się na siebie przekształcić. W M ySQ L 5.0 dodano m ożliw ość tw orzenia procedur składo wanych, w ięc rozszerzono też m ożliw ości instrukcji SELECT tak, aby um ieszczać w artości w zm iennych procedury: SELECT INTO @zmienna.
Przykłady # Znajdź w tabeli 'ludzie ' wszystkie nazwiska, d la których p o le # 'stan' m a w artość MI'. SELECT nazwisko FROM ludzie WHERE stan='MI'
# P o każ wszystkie dan e z tab eli 'mojatabela'. SELECT * FROM mojatabela
# U tworzenie proced u ry składow an ej p ok a z u ją c ej liczbę w ierszy w tabeli CREATE PROCEDURE licznik (OUT p INT) BEGIN SELECT C O U N T (*) INTO p FROM konto END;
SET SET OPTION opcja_SQL=wartość
Definiuje opcję dla bieżącej sesji. Wartości ustawiane przez tę in strukcję nie wpływają na nic poza aktualnym połączeniem i zni kają po jego zam knięciu. Oto obsługiw ane opcje: AU T0C0MMIT=0lub 1
Jeśli ma wartość domyślną, 1, każda instrukcja wysyłana do bazy danych jest automatycznie zatwierdzana jako transakcja, chyba że poprzedza ją BEGIN. W przeciwnym razie zam knięcie transakcji w ym aga COMMIT lub ROLLBACK.
100 |
MySQL. Leksykon k eszonkowy
CHARACTER SET n azw azestaw u lub DEFAULT Zmienia zestaw z n a k ó w u ż y w a n y przez M y S Q L . Podanie DEFAULT przywróci zestaw pierwotny. LAST_INSERT_ID=liczba Określa wartość zwracaną przez funkcję LAST_INSERT_ID(). PASSWORD^PASSWORD ( 1h a s ł o ' ) Ustawia hasło dla bieżącego użytkownika. PASSWORD FOR u ż y tk o w n ik = PA S S W 0 R D ( 'h a s ł o ') Ustawia hasło dla p o d a n e g o użytkownika. S0L_AUT0_IS_NULL= 0 lub 1 Jeśli m a wartość domyślną, 1, m o ż n a znaleźć ostatnio wsta w i o n y wiersz d o tabeli za p o m o c ą w a r u n k u WHERE auto_ increment_column IS NULL. S0L_BIG_SELECTS=0lub 1 Określa zachowanie w przypadku znalezienia dużego zapy tania SELECT. Jeśli m a wartość 1, M y S Q L odrzuca zapyta nie, generując błąd, gd y ż przetwarzanie zapytania p r a w d opodobnie trwałoby zbyt długo. M y S Q L decyduje o tym, czy zapytanie jest duże, jeśli konieczne będzie sprawdzenie większej liczby wierszy niż zapisana w zmiennej serwera max_join_size. D o m y ś l n a wartość to 0, co oznacza dopusz czenie wszelkich zapytań. S0L_BIG_TABLES=0lub 1 Określa zachowanie tabel tymczasowych (zwykle wygenero w a n y c h podczas pracy z d u ż y m i zbiorami wyników). Jeśli parametr m a wartość 1, tabele tymczasowe są umieszczane na dysku. Spowalnia to działanie, ale pozwala uniknąć błę d ó w związanych z brakiem pamięci. D o m y ś l n a wartość to 0, czyli tabele t y m c z a s o w e są zapisywane w pamięci R A M .
Rozdz ał 4. SQL
| 101
S0L_BUFFER_RESULT=0lub 1
U staw ienie w artości 1 daje taki sam efekt, jak ustaw ianie SOL BUFFER RESULT dla każdej instrukcji SELECT. W ymusza na M ySQL umieszczanie wyników w tabeli tymczasowej. S0L_L0G_0FF=0 lub 1
Jeśli ma wartość 1, wyłącza standardowe logowanie dla bie żącej sesji. Nie przeryw a logow ania do logu ISAM ani logu aktualizacji. Ustawienie tej opcji wymaga uprawnienia PRO CESS LIST (SUPER w M ySQL 4.0.2). Ustaw ienie domyślne to 0 (włączone standardow e logowanie). S0L_L0W_RRI0RITY_UPDATES=0lub 1
Nakazuje M ySQL przed wykonaniem instrukcji zapisu od czekać, aż n ie b ęd zie oczekiw ało żad ne SE LE CT ani LOCK TABLE READ. S0L_MAX_]01N_SIZE=wartość lub DEFAULT
Zabrania MySQL wykonywać zapytania, które mogą potrze bować więcej niż podana liczba kombinacji. Jeśli ustawiona zostanie wartość większa od domyślnej, wyzerowana zosta nie opcja SOL_BIG_SELECTS. Wyzerowanie SOL_BIG_SELECTS pow oduje pom inięcie tej opcji. SOL_OUERY_CACHE_TYPE=wartość
N akazuje M ySQ L nie zapisyw ać w pam ięci podręcznej ani nie pobierać z niej (0 lub OFF), zapisywać wszystkie instrukcje oprócz oznaczonych jako SOL NO CACHE (1 lub ON) lub zapi sywać tylko zapytania S0L_CACHE (2 lub DEMAND). S0L_SAFE_URDATES=0lub 1
Chroni przed pomyłkowym wywołaniem instrukcji UPDATE lub DELETE, które nie m ają klauzu li WHERE ani w arunku LIMIT.
102 |
MySQL. Leksykon k eszonkowy
SOL_SELECT_LIMIT=liczba
Maksymalna liczba rekordów zwracanych przez SELECT. Mo dyfikator LIMIT instrukcji SELECT nadpisuje ustawienie opcji. Dom yślnie zw racane są wszystkie rekordy. SQL_URDATE_L0G=0 lub 1
Jeśli m a wartość 0, wyłącza aktualizację logowania bieżącej sesji. Nie wpływa to na logowania standardowe ani logowa nie ISAM. Ustawienie tej opcji wymaga uprawnienia PROCESS LIST (SUPER w M ySQ L 4.0.2). U staw ienie d om yślne to 1 (w łączone logow anie aktualizacji). TIME STAMP=wartość lub DEFAULT
Określa czas wykorzystywany przez sesję. Czas ten jest zapi sywany w logu aktualizacji i w miarę potrzeb zostanie użyty przy odtwarzaniu danych z logu. Podanie wartości DEFAULT przyw raca czas systemowy. Przykład # W łączenie lo gow an ia b ież ą c eg o p ołączen ia SET OPTION SQL_L0G_0FF=1
SHOW SHOW [FULL] COLUMNS FROM tabela [FROM bazada ny ch] [LIKE klau zu la] SHOW DATABASES [LIKE klau zu la] SHOW FIELDS FROM tabela [FROM bazada ny ch] [LIKE klau zu la] SHOW GRANTS FOR użytkownik SHOW INDEX FROM tabela [FROM bazadanych] SHOW KEYS FROM tabela [FROM bazada ny ch] SHOW LOGS SHOW MASTER STATUS SHOW MASTER LOGS SHOW [FULL] PROCESSLIST SHOW SLAVE STATUS SHOW STATUS [LIKE klau zu la] SHOW TABLE STATUS [FROM bazadanych [LIKE klau zu la]] SHOW [OPEN] TABLES [FROM bazadanych] [LIKE klau zu la ] SHOW VARIABLES [LIKE klau zu la]
Rozdz a l4 . SQL
| 103
W yśw ietla m nóstw o różnych inform acji o system ie M ySQ L. Instrukcji m ożna użyć do badania stanu lub struktury niem alże dowolnej części MySQL; pozwala obejrzeć także obiekty nie wy stępujące bezpośrednio na powyższej liście. Przykłady # P o każ dostępne bazy danych SHOW DATABASES;
# P o każ in form acje o in deksach tab eli 'duzedane' SHOW KEYS FROM duzedane;
# P o każ in form acje o in deksach tab eli 'duzedane' # z bazy danych 'm ojedane'. SWHOW INDEX FROM duzedane FROM mojedane;
# P o każ tab ele z bazy danych 'mojedane' # zaczynające się literą 'z'. SHOW TABLES FROM mojedane LIKE
1z % 1;
# P o każ in form acje o kolum nach tab eli 'magazyn'. SHOW COLUMNS FROM magazyn;
# P o każ in form acje o tych kolu m n ach tabeli 'ludzie', # które ko ń czą się '_prac'. SHOW FIELDS FROM ludzie LIKE
'%\_prac';
# P o każ wątki SHOW PROC ES SL IS T;
# P o każ stan serw era. SHOW STATUS;
# P o każ zmienne serw era. SHOW VARIABLES;
TRUNCATE TRUNCATE TABLE tabela
Usuw a i odtw arza podaną tabelę. Przykład # O dtw arza tab elę 'dane_prac'. TRUNCATE TABLE dane_prac;
UNLOCK UNOCK TABLES
104 |
MySQL. Leksykon k eszonkowy
O dblokow uje tabele zablokow ane w cześniej instrukcją LOCK w ram ach bieżącego połączenia. Przykład # O dblokuj wszystkie tabele. UNLOCK TABLES
U PD ATE URDATE [LOW_PRIORITY] [IGNORE] tabela SET ko lu mn a=wartość, . . . [WHERE klau zu la] [LIMIT n]
Zmienia dane w tabeli. Podczas określania nowej wartości można użyć nazwy kolumny. Przykładowo, URDATE zdrowie SET przebiegl_km = przebiegl_km + 5 doda w artość 5 do bieżącej wartości kolum ny przebiegi km. Klauzula WHERE ogranicza liczbę dopasowanych wierszy. Klauzula LIMIT zapew nia, że zm ien ion ych zostanie jed y n ie n w ierszy. Instrukcja zwraca liczbę zm ienionych wierszy. Instrukcja wym aga upraw nienia URDATE. Przykład # Zm iana nazw iska J a n K o w la sk i' na J a n K ow alsk i' # w c a łe j tabeli 'ludzie'. UPDATE ludzie SET na z w i s k o = 11an K o w a l s k i 1 WHERE n a z w i s k o = 1Dan K o w l a s k i 1
USE USE bazadanych
Wybiera domyślną bazę danych. Podana baza danych będzie uży w ana jako dom yślna przez kolejne zapytania. Inne bazy nadal dostępne są jaw nie, w zapisie b a z a d a n y c h . t a b e l a , kolumna.
Rozdz a ł4 . SQL
| 105
Przykład # d b l stanie s ię b a z ą d o m y ś ln ą USE dbl
Zasady dotyczące transakcji Transakcjami steruje przede wszystkim bieżące ustawienie auto matycznych transakcji. Domyślnie działa to tak, że każda instruk cja jest zatw ierdzana zaraz po jej wykonaniu. Odpowiada temu następujące polecenie: SET A U T O C O M M I T O
Transakcje stają się dłuższe niż jedna instrukcja, kiedy opcja AUTO COMMIT jest wyłączona lub kiedy ciąg instrukcji jest poprzedzony instrukcją START TRANSACTION. Kiedy u ż y w a m y transakcji, na ba zie d a ny ch nie są robione z m i a n y tak długo, aż zdarzy się jedno z trojga:
• Wykonane zostanie polecenie COMMIT, które spowoduje za twierdzenie w szystkich dotychczasowych zmian. • W ykonane zostanie polecenie ROLLBACK, które spowoduje odrzucenie w szystkich zm ian od ostatniego zatw ierdzenia lub wycofania transakcji. • Wykonana zostanie instrukcja z niejawnym zatwierdzeniem. D o d a t k o w o m o ż n a wraz z zatwierdzeniem lub odwołaniem trans akcji zaczynać o d razu kolejną transakcję; w t y m celu trzeba d o COMMIT lub ROLLBACK d o d a ć modyfikator AND CHAIN. Oto zestawienie instrukcji realizujących niejawne zatwierdzenie transakcji: ALTER EVENT, ALTER FUNCTION, ALTER PROCEDURE, ALTER TABLE, BEGIN, CREATE DATABASE, CREATE EVENT, CREATE FUNCTION, CREATE INDEX, CREATE PROCEDURE, CREATE TABLE, DROP DATABASE, DROP EVENT, DROP FUNCTION, DROP INDEX, DROP PROCEDURE, DROP TABLE, LOAD DATA INFILE, LOCK TABLES, RENAME TABLE, SET
106 |
MySQL. Leksykon k eszonkowy
AUT0C0MMIT=1, ST AR T TRANSACTION, TRUNCATE TABLE, UNLOCK TABLES.
P olecenie S A VE PO IN T pozw ala u staw iać p u nkty zap isu , które um ożliw iają wycofanie transakcji do w skazanego punktu. Poziom izolacji transakcji decyduje o tym, jaki wpływ na działa nie bazy danych m ają transakcje (i zw iązane z nim i blokady). Poziom izolacji ustaw ia się przed rozpoczęciem jakiejkolw iek transakcji, za pom ocą instrukcji: SET [GLOBAL | SESSION] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ SERIALIZABLE}
Domyślny poziom izolacji w przypadku tabel InnoDB to REPEATA BLE READ.
Rozdz ał 4. SQL
| 107
Rozdział 5. Operatory MySQL zawiera trzy grupy operatorów: operatory arytmetyczne, porów nania oraz operatory logiczne.
Priorytety operatorów Jeśli kod SQL zawiera złożone wyrażenia, poszczególne ich części są obliczane na podstawie priorytetów operatorów MySQL. Można oczywiście wymusić inną kolejność wykonywania działań, stosu jąc nawiasy. 1. BINARY, COLLATE
2.
!
3. - - (jednoargumentowy minus), - (jednoargumentowa nega cja bitowa) 4.~ 5 .* / % DIV MOD 6.+
-
7.« » 8.8.
9-I 10. < < = > > = = <=> o
IN IS LIKE REGEXP
1 1 . BETWEEN CASE WHEN THEN ELSE 12. NOT 13,8.8. AND 14. || OR XOR 15. : =
108 |
MySQL. Leksykon k eszonkowy
Operatory arytmetyczne O peratory arytm etyczne w ykonują podstaw ow e d ziałania na dw óch wartościach. +
Dodaje do siebie dwie liczby.
-
Odejm uje od siebie dwie liczby.
*
M noży dwie liczby przez siebie.
/
Dzieli dwie liczby przez siebie.
DIV D zielenie całkowitoliczbowe. %
Podaje resztę z dzielenia dwóch liczb.
|
Podaje w artość bitowej alternatywy (OR) dwóch liczb cał kowitych.
~
Podaje w artość bitowej alternatywy wyłączającej (X0R) dwóch liczb całkowitych.
&
Podaje w artość bitowej koniunkcji (AND) dwóch liczb cał kowitych.
«
Bitowo przesuw a w lewo liczbę całkowitą.
»
Bitowo przesuw a w praw o liczbę całkowitą.
Operatory porównania O peratory porów nania służą do porów nyw ania dw óch w arto ści. O peratory te zw racają 1, jeśli p orów nanie je st praw d ziw e i 0 w przypadku przeciwnym. W szystkie te operatory, poza <=>, zwracają NULL, jeśli jedna z porów nyw anych w artości to NULL. <> lub ! = Pasuje do wierszy, gdzie podane dwie wartości są różne.
Rozdz ał 5. Operatory
| 109
<=
Pasuje do w ierszy, gdzie lew a w artość jest m niejsza bądź rów na w artości prawej.
<
Pasuje do w ierszy, gdzie lew a w artość jest m niejsza od w artości prawej.
>=
Pasuje do w ierszy, gdzie lew a w artość jest w iększa bądź rów na prawej.
>
Pasuje do wierszy, gdzie lewa wartość jest większa od war tości prawej.
w a r t o ś ć BETWEEN w a r t o ś ć ! AND w a r t o ś ć 2 Pasuje do wierszy, gdzie w a r t o ś ć jest między wartością 1 a wartością 2 lub gdzie jest równa jednej z nich. w a r t o ś ć NOT BETWEEN w a r t o ś c i AND w a r t o ś ć 2 Pasuje do wierszy, gdzie w a r t o ś ć nie jest między wartością 1 a wartością 2. w a r t o ś ć IN (w a r t o ś ć ! , w a r t o ś ć 2 , ...) Pasuje do wierszy, gdzie w a r t o ś ć jest jedną z wartości poda nych w nawiasach. w a r t o ś ć NOT IN (w a r t o ś ć ! , w a r t o ś ć 2 , ...) Pasuje do wierszy, gdzie w a r t o ś ć nie jest między wartościami w nawiasach. w a r t o ś ć 1 LIKE w a r t o ś ć 2 Porów nuje w artość 1 z wartością 2 i sprawdza, czy w arto ści te pasują do siebie. Prawostronna w artość m oże zaw ie rać m etaznaki: ' %' pasu jący do dow olnej liczby znaków (choćby 0) oraz pasujący do dokładnie jednego znaku. N ajbardziej typow ym zastosow aniem jest porów nyw anie w artości pola z danym w zorcem — na przykład SELECT nazwisko FROM ludzie WHERE nazwisko LIKE '%ski'.
110
|
MySQL. Leksykon k eszonkowy
w a r t o ś c i NOT LIKE w a r t o ś ć ż Porównuje w artość 1 z wartością 2 i sprawdza, czy do siebie nie pasują. Działa dokładnie tak samo, jak NOT (w a r t o ś c i LIKE w a r t o ś ć 2 ) . w a r t o ś c i REGEXP/RLIKE w a r t o ś ć 2 Porównuje w artość 1 i w artość 2, korzystając z rozszerzonej składni wyrażeń regularnych. Sprawdza, czy wartości do sie bie pasują. Wartość z prawej strony może zawierać dowolne metaznaki i konstrukcje wrażeń regularnych systemu Unix, na przykład SELECT nazwisko FROM ludzie WHERE nazwisko RLIKE 1.*ski$1. w a r t o ś c i NOT REGEXP w a r t o ś ć 2 Porównuje w artość 1 z wartością 2, korzystając z rozszerzo nej składni wyrażeń regularnych. Sprawdza, czy wartości do siebie nie pasują. Działa dokładnie tak samo, jak NOT (war t o ś ć ! REGEXP w a r t o ś ć 2 ) .
Operatory logiczne Operatory logiczne sprawdzają, czy prawdziwe jest jedno lub wię cej wyrażeń. Z punktu widzenia SQL operatory logiczne spraw dzają, czy ich argu m enty to 0, w artość niezerow a lub NULL. 0 oznacza fałsz, w artość niezerowa oznacza praw dę, zaś NULL nie m a w artości logicznej. NOT lub ! Logiczna negacja: zwraca „1", jeśli wartością jest 0, zwraca NULL jeśli wartością jest NULL i zwraca „0" w każdym innym w ypadku. Zauw ażm y, że operator ! m a w yższy priorytet niż NOT. 0R lub || Logiczna alternatywa: zwraca „1", jeśli którykolwiek z argu m entów nie jest zerem i nie jest w artością NULL, zw raca
R ozdzał 5. Operatory
|
111
NULL, jeśli oba mają wartość NULL i zwraca „0" w pozostałych w ypadkach. X0R
Logiczna alternatywa wyłączająca: zwraca „1", jeśli jeden i tylko jeden argu me nt nie jest ze r e m ani wartością NULL, NULL — jeśli którykolwiek argument m a wartość NULL i „0" w pozostałych wypadkach. Wyrażenie a X0R b jest logicznie r ó w n o w a ż n e wy ra ż e n i u (a A N D A N D b).
(NOT b) OR
((NOT a)
AND lub 8.8. Logiczna koniunkcja: zwraca „0", jeśli którykolwiek argu m e n t jest zerem, NULL — jeśli któryś m a wartość NULL i „1" w pozostałych wypadkach.
112
|
MySQL. Leksykon k eszonkowy
Rozdział 6. Funkcje M ySQ L zaw iera funkcje w budow ane, realizujące operacje spe cjalne.
Funkcje agregujące Lunkcje agregujące operują na zbiorze danych. Zwykle używa się ich do wykonywania pewnych działań na pełnym zbiorze danych. Przykładowo, SELECT AVG(wzrost) FROM dzieci zwróci średnią w szystkich w artości pola wzrost z tabeli dzieci. AVG ( w y r a ż e n i e ) Zw raca średnią wartości z wyrażenia (na przykład SELECT AVG(wynik) FROM testy). BIT_AND(w y r a ż e n i e ) Zwraca bitowy iloczyn (AND) wszystkich wartości z wyraże nia, na przykład SELECT BIT_AND(flagi) FROM opcje. Bit wyniku będzie ustawiony wtedy i tylko wtedy, gdy jest usta wiony w e w szystkich polach wejściowych. BIT_0R(w y r a ż e n i e ) Zwraca bitową koniunkcję (OR) wszystkich wartości z wyra żenia, na przykład SELECT BITJOR(flagi) FROM opcje. Bit wyniku będzie ustawiony, jeśli jest ustawiony w którym kolwiek polu wejściowym. BIT_X0R(w y r a ż e n i e ) Zwraca bitowy iloczyn wykluczający, XOR, wszystkich war tości z 64-bitowego wyrażenia. COUNT( w y r a ż e n i e ) Zw raca informację, ile razy w y r a ż e n i e nie m iało wartości pustej, NULL. COUNTC*) zwraca liczbę wierszy z jakimikol wiek danym i w całej tabeli (na przykład SELECT COUNT(*) FROM katalogi).
Rozdz ał 6. Funkcje
| 113
GROUP_CONCAT([DISTINCT] w y r a ż e n i e [ORDER BY {kol umna | wyrażenie}] [SEPARATOR sep]) Z w r a c a łańcuch będący połączeniem wszystkich wyrażeń. M A X (w y r a ż e n i e ) Z w r a c a największą wartość wyrażenia, na przykład SELECT M A X (w y s o ko sc) FROM gory. M I N (w y r a ż e n i e ) Z w r a c a najmniejszą wartość wyrażenia, na przykład SELECT M I N (sk ażenie) FROM zanieczyszczenie. S TDDEV_POP(w y r a ż e n i e ) Z w r a c a standardowe odchylenie wartości wyrażenia, na przykład SELECT STDDEV(punkty) FROM dane. Obsługi w a n e są także dotychczasowe STD() z M y S Q L oraz STDDEV () z Oracle; obie mają taką s a m ą składnię, ale są nieprzenośne. N o w y m standardem SQL, d o st ęp ny m o d M y S Q L 5.O.3., jest ST DE V_ P0 P(). STDDEV_SAMP ( [ w y r a ż e n i e ] ) Z w r a c a próbkę standardowego odchylenia wartości w y r a żenia. SUM(wyrażenie) Z w r a c a s u m ę wartości wyrażenia (na przykład SELECT SUM (kalorie) FROM dieta_dzienna). V A R_ P0 P(w y r a ż e n i e ) Z w ra ca standardową wariancję wyrażenia. Funkcja ta anali zuje cały zbiór danych, a nie próbkę. Jest o n a no wo śc ią w M y S Q L 5.0.3, zastępuje niestandardową, starszą funkcję VARIANCE (). VA R_ SA MP(w y r a ż e n i e ) Z w r a c a próbkę wariancji wyrażenia.
114 |
MySQL. Leksykon k eszonkowy
Funkcje ogólnego przeznaczenia Funkcje ogólnego przeznaczenia operują na jednej lub wielu po jedynczych wartościach. W zestawieniu tym pom inięto niektóre rzadko używ ane funkcje o bardzo specjalnych zastosowaniach. ABS ( l i c z b a ) Zwraca wartość bezwzględną liczby, na przykład ABS(-1 0 ) daje 10. ACOS( l i c z b a ) Z w raca arcus cosinus liczby w yrażony w radianach, na przykład AC0S(0) zwraca 1.570796. ADDDATE(d a t a , INTERVAL ile r o d z a j ) Synonim DATE_ADD(). ADDTIMEATE( k i e d y ,
o_ile)
D o wyrażenia ki e dy, typu TIME lub DATETIME, dodaje wiel kość o _ i l e typu TIME.
AES_DECRYPT(s z y f r , klucz) Deszyfruje łańcuch s z y f r zakodowany algorytmem AES za pom ocą podanego klucza. AES_ENCRYPT(t e k s t , klucz) Szyfruje łańcuch t e k s t za pom ocą algorytm u AES korzy stając z podanego klucza. Jeśli chodzi o M ySQ L 5.0, to szyfrowanie AES jest najsilniejszą m etodą kryptograficzną dostępną w M ySQL. ASCII(zna/<) Z w r a c a k o d A SC II d a n e g o znaku, n a przykład ASCII(h) z w ra ca 104.
ASIN(liczba) Zwraca arcus sinus liczby wyrażony w radianach, na przy kład ASIN(0) daje 0.000000.
Rozdz ał 6. Funkcje
| 115
ATAN(liczba) Z w r a c a arcus tangens liczby w y r a ż o n y w przykład ATAN(l) zwraca 0.785398.
radianach, na
ATAN2(X, Y) Zw ra ca arcus tangens punktu (X, Y), na przykład ATAN2 (-3,3) daje -0.785398. BENCHMARK(ile, f u n k c j a ) W y w o ł u j e funkcję ile razy, zwraca 0. BIN( d z i e s i ę t n a ) Z w r a c a binarną wartość danej liczby dziesiętnej, na przykład BIN( 8) daje „1000". Funkcja ta jest r ó w n o w a ż n a wy wo ł a n i u C 0 N V ( d z i e s i ę t n a , 1 0 , 2) . BIT_C0UNT ( l i c z b a ) Z w r a c a liczbę bitów ustawionych n a 1 w bi narnym zapisie liczby, n a przykład BITJEOUNT(17) zwraca 2. BIT_LENGTH( łańcuc/i) Z w r a c a liczbę bitów w łańcuchu (liczbę z n a k ó w p o m n o ż o n ą przez 8 w pr zy p a d k u z n a k ó w jednobajtowych). CASE w a r t o ś ć WHEN wybór THEN wynik . . . ELSE wynik END P o ró w n u j e wartość z kolejnymi w y b o r a m i ( m o g ą to być wartości lub wyrażenia). Kiedy znalezione zostanie pierwsze dopasowanie, funkcja kończy swoje działanie, zwracając o d powiedni wynik. Jeśli żaden w y b ó r nie zostanie d o p a s o w a ny, zwra ca ny jest w y n i k z ELSE. C A S T ( w y r a ż e n i e AS typ) Rzutuje wyrażenie n a ws ka za ny ty p SQL. CEILING(liczba) Z w r a c a najmniejszą liczbę całkowitą większą lub r ó w n ą liczbie, n a przykład CEILING( 5 .67) d a w w y n i k u 6.
116
|
MySQL. Leksykon k eszonkowy
CHAR( l i c z b a l l ,
l i c z b a 2 , ...]) Z w raca łańcuch pow stający przez przekształcenie kolej nych liczb na odpowiadające im znaki ASCII, na przykład CHARC122) daje Z.
CHAR_LENGTH( łańcuc/i)
Podaje długość przekazanego łańcucha w znakach CHARACTER_LENGTH(łańcuch)
Podaje długość przekazanego łańcucha w znakach. CH AR SE T(w y r a ż e n i e )
Podaje zestaw znaków , w którym zapisano przekazanych łańcuch. CO AL ES CE ( w y r a ż e n i e l , w y r a ż e n i e ż , . . . ) Z w r a c a pierwsze niepuste wyrażenie z listy, n a przykład COALESCE (N U L L , NULL, 'ser', 2) zwróci ser. COERCIBILITY ( w y r a ż e n i e )
Podaje kod opisujący wykonalność porównań dla danego wy rażenia. Oto m ożliw e wyniki: 0
porów nyw anie dokładne
1
bez porów nywania
2
porów nyw anie niejawne
3
stała system owa
4
możliwe do wym uszenia
5
pomijalne
COL LA TI ON ( w y r a ż e n i e )
Zwraca wartość porównywaną dla przekazanego wyrażenia. C0MPRESS( w y r a ż e n i e )
Pakuje przekazany łańcuch jako dane binarne korzystając z biblioteki do kompresji (na przykład zlib) wkompilowanej w MySQL. Jeśli w MySQL nie wkompilowano żadnej biblio teki do kom presji, funkcja zwraca NULL.
Rozdz ał 6. Funkcje
| 117
CONCATÍ ł a ń c u c h u , ł a ń c u c h 2 , ł a ń c u c h ł , . . . ] ) Z w ra ca łańcuch utworzony przez złączenie wszystkich argu m e n t ó w funkcji, n a przykład C0NCAT( 'Cześć' , ' ' , 'Mamo', '!') zwróci Cześć Mamo!. C0NCAT_WS( s e p a r a t o r , ł a ń c u c h l , [ ł a ń c u c h 2 , . . . ] ) Z w r a c a wszystkie łańcuchy z a r g u m e n t ó w połączone sepa ratorem. C0NNECTI0N_ID() Z w r a c a identyfikator I D aktualnego połączenia. CON \l ( l i c z b a , p o d s t a w a l , p o d s t a w a 2 ) Z w r a c a liczbę zapisaną w systemie o podstawie p o d s t a wa l p o przekształceniu jej na liczbę systemu o podstawie p o d s t a w a 2. Liczba m u s i być wielkością całkowitą (jako z w y kła liczba lub reprezentujący ją łańcuch). P o d s t a w ą m o ż e być d o w o l n a liczba całkowita o d 2 d o 36. W y w o ł a n i e C0NV (8,10, 2) oznacza przekształcenie dziesiętnej liczby 8 na liczbę binarną i zwróci 1000. CONVERTÍ wyrażenie, typ) S y n o n i m funkcji CAST (). CONVERTÍ w y r a ż e n i e USING z e s t a w _ z n a k ó w ) Konwertuje wskazane wyrażenie łańcuchowe z jednego ze stawu z n a k ó w na zestaw z n a k ó w wskazany w drugim para metrze. Przykład wywołania: CONVERTÍ 'Napis w latin-2.' USING ut f8). C0NVERT_TZ( w y r a ż e n i e , z , na) Zamienia wyrażenie typu DATETIME ze strefy czasowej z na strefę czasową na. COSÍ r a d i a n y ) Z w ra ca cosinus danej liczby wyrażonej w radianach, na przy kład COS (0) daje 1.000000.
C0T( r a d i a n y ) Z w r a c a cotangens danej liczby wyrażonej w radianach, n a przykład COTÍ 1) daje 0. 642093.
118
|
MySQL. Leksykon k eszonkowy
C R 3 2 (w y r a ż e n i e ) Wylicza s u m ę kontrolną C R C wyrażenia i zwraca 32-bitową wartość bez znaku; jeśli parametr m a wartość NULL, funkcja zwraca NULL. C U RD AT E() Z w r a c a bieżącą datę. W kontekście liczbowym zwracana jest liczba w postaci YYYYMMDD, w p r z e c i w n y m razie zw racany jest d ą g 'YYYY-MM-DD'. N a przykład CURDATE () m o ż e zwrócić 1998-08-24. CURRENT_DATE() S y n o n i m CURDATE (). CURRENT_TIME() S y n o n i m CURT IM E(). CURRENT_TIMESTAMP() S y n o n i m NO W O . C U RT IM E() Z w ra ca bieżący czas. W kontekście liczbowym zwracana jest liczba w postaci HHMMSS, w p r z e c i w n y m razie z w r a c a n y jest ciąg 1H H :M M :S S 1.N a przykład CURTIME () m o ż e zwrócić 1 3 : 0 2 : 43.
DA TA BA SE() Zw ra ca n a z w ę bieżącej bazy danych, na przykład DATABASE () m o ż e zwrócić moj edane. DATE_ADD( d a t a , INTERVAL ile r o d z a j ) Z w r a c a datę utworzoną przez dodanie ile jednostek czasu d o podanej daty. r o d z a j m o ż e mieć jedną z następujących wartości: SECOND, MINUTE, HOUR, DAY, MONTH, YEAR, MINUTE_SEC0ND (jako „minut:sekund"), H0UR_MINUTE (jako ,,godzinminut"), DAY HOUR (jako „dni godzin"), YEAR MONTH (jako „lat-miesięcy"), H0UR SEC0ND (jako „godzin:minut:sekund"), DAY_MINUTE (jako dni „g od zi mm in ut ") oraz DA Y_ SE C0 ND (jako „dni godzimminut: sekund"). Jeśli nie p o d a n o żadnej
Rozdz ał 6. Funkcje
| 119
z w ym ienionych form wartości i l e , m usi to być liczba całkow ita. Przykładow o zatem , DATE_ A D D ( "1998-08-24 13:00:00", INTERVAL 2 MONTH) zw róci 1998-10-24 13 :00: 00. DATE_F0RMAT( d a t a ,
fo r m a t) Zwraca datę w podanym formacie. Pokazywany jest łańcuch formatujący, przy czym robione są w nim następujące pod stawienia: %a
Skrócona nazw a dnia tygodnia (Sun, M on itd.)
%b
Skrócona nazw a m iesiąca (Jan, Feb itd.)
%D
Dzień m iesiąca z indeksem porządkowym (1st, 2nd, 3rd itd.)
%d
Dzień m iesiąca
%H
Godzina zapisana w system ie 24-godzinnym (zawsze dwie cyfry, np. 01)
%h, %I
Godzina zapisana w system ie 12-godzinnym (zawsze dwie cyfry, np. 09)
120 |
%i
M inuty
%j
Dzień roku
%l<
Godzina zapisana w system ie 24-godzinnym (jedna lub dw ie cyfry, np. 1)
%1
Godzina zapisana w system ie 12-godzinnym (jedna lub dw ie cyfry, np. 9)
%M
N azw a m iesiąca
%m
N um er m iesiąca (styczeń m a num er 1)
%p
A.M . lub P.M.
MySQL. Leksykon k eszonkowy
%r
Pełny czas zapisany w system ie 12-godzinnym (łącz nie z napisem A.M. lub P.M.)
%S
Sekundy (zawsze dwie cyfry, np. 04)
%s
Sekundy (jedna lub dwie cyfry, np. 4)
%T
Pełny czas zapisany w system ie 24-godzinnym
%U
Tydzień roku (tydzień zaczyna się w niedzielę)
%W
N azw a dnia tygodnia
%w
N um er dnia tygodnia (niedziela m a num er 0)
%Y
Czterocyfrowy rok
%y
Dwucyfrowy rok
%%
Sym bol procenta, %
DATE_SUB( d a t a , INTERVAL ile r o d z a j ) Z w r a c a datę utworzoną przez odjęcie ile jednostek czasu r o d z a j o d danej daty. U ż y w a n e są takie s a m e jednostki czasu, jak w pr z y p a d k u DATE ADD. Przykładowo, SUBDATE ("1999-05-20 11:04:23", INTERVAL 2 DAY) z w r a c a 1999-05-18 11:04:23. DAYNAME( d a t a ) Z w r a c a n a z w ę dnia tygodnia dla danej daty, n a przykład DAY NAME ( '1998-08-22' ) zwróci Saturday. DAY0FM0NTH( d a t a ) Z w r a c a dzień miesiąca dla danej daty, n a przykład DAY0FM0NTH( '1998-08-22 ') zwraca 22. DAY0FWEEI<( d a t a ) Z w ra ca n u m e r dnia tygodnia (niedziela m a n u m e r 1) dla da nej daty, na przykład DAY0FWEEI<( '1998-08-22 ') daje 7.
Rozdz ał 6. Funkcje
| 121
DAYOFYEAR( d a t a ) Z w r a c a dzień roku dla danej daty, n a przykład DAYOFYEAR ( 11983-02-15 1) zwraca 46. DECODEC b l o b , h a s ł o ) Dekoduje z a k o d o w a n e dane binarne, korzystając z podanego hasła. Zakłada się, że d a n e zostały z a k o d o w a n e funkcją ENCODE ( ): mysql> SELECT DECODE (E NC OD E('otworz sie s e z a m i e p r o s z ę '), 'p r o s z ę ');
D E C O DE CE NC OD EC'otworz sie sezamie', p r o s z ę ')
'proszę'),
+---------------------------------------------------------otworz sie sezamie
+---------------------------------------------------------1 row in set (0.01 sec)
DEGREES( l a d i a n y )
Zwraca swój argument po przekształceniu go z radianów na stopnie, na przykład DEGREES( 2*PI( )) zwraca 360.000000. DES
DE CR YP T(z a s z y f r o w a n e , [kl uc z]) D eszyfruje napis z a s z y f r o w a n e zakodow any algorytmem DES; m oże w ykorzystać opcjonalnie podaw any klucz.
DES
ENCRYPT( t e k s t , [klucz]) Algorytm em DES szyfruje podany tekst. M oże w ykorzy stać opcjonalnie podaw any klucz (łańcuch lub liczbę).
łańcuchl, łańcuch2, . . . ) Jeśli l i c z b a to 1, zwraca ł a ń c u c h l ; jeśli to 2, zwraca ł a ń cuch2 i tak dalej. Jeśli liczbie nie odpowiada żaden z łańcu chów, zwraca NULL. Przykładowo, ELT(3, " r a z " , "dwak ro ć", " tr z y k r o ć " , "c z te r y ra z y ") zwraca „trzykroć".
ELTdiczba,
122 |
MySQL. Leksykon k eszonkowy
ENCODE(s z y f r o w a n e ,
hasło) Tw orzy binarn e kod ow ania szyfrow aanego, k orzystając z hasła. Potem można dane zdekodować za pomocą funkcji DECODE () i tego samego hasła.
ENCRYPTCłańcuc/i[, przyprawa]) Szyfruje p o d a n y ł a ń c u c h jako hasło. Jeśli p o da no przyprawę, d o d a t k o w o zaciemnia o n a znaki łańcucha, n a przykład EN CRYPT( 'mypass ', 'Ba ') m o ż e zwrócić Baf i4004idgv. E X P (p o t ę g a )
Zw raca liczbę e podniesioną do danej potęgi, na przykład E X P (1) zw raca 2.718282. on, o f f , [s e p a r a t o r , [i l e _ b i tów] ]) Bada liczbę i odw zorow uje jej włączone i wyłączone bity na łańcuchy wskazane odpowiednio argumentami on i o f f . Pierwszy łańcuch wyniku oznacza w artość o n / o f f pierw szego (najmniej znaczącego) bitu liczby, drugi drugiego i tak dalej. Przykłady:
EXPORT_SET( l i c z b a ,
mysql> SELECT EXP0RT_SET(5,
EXP0RT_SET(5,
"y",
"y",
"n",
"n",
8);
8)
+--------------------------------------ynynnnnn
+--------------------------------------1 row in set (0.00 sec) mysql> SELECT EXP0RT_SET(5,
EXP0RT_SET(5,
"y",
"y",
"n",
"n",
8);
8)
+---------------------------------------y,n,y,n,n,n,n,n
+---------------------------------------1 row in set (0.00 sec)
Rozdz ał 6. Funkcje
| 123
EXTRACT ( p r z e d z i a ł FROM d a t a i c z a s ) Zw ra ca po da ną część daty i czasu, na przykład EXTRACT (YEAR FROM '2001-08-10 19 :45 :32 ') zwraca 2001. FIELD(łańcuc/i, ł a ń c u c h l , ł a ń c u c h 2 , . . . ) Z w r a c a położenie n a liście a r g u m e n t ó w pierwszego łańcu cha identycznego z p i e r w s z y m a r g u m e n t e m ł a ń c u c h . Jeśli nie zostanie d o p a s o w a n y ż a d e n inny łańcuch, z w r a c a 0, na przykład FIELD( 'ala ', 'j erzy ', 'jan', 'ala ' , 'bartek ') zwraca 3. FIND_IN_SET(łańcuc/i, z b i ó r ) Z w r a c a położenie łańcucha w zbiorze. A r g u m e n t z b i ó r to ciąg łańcuchów rozdzielanych przecinkami i tak n a przy kład FIND_IN_SET( 'ala ', 'jerzy, jan, ala, bartek') zwraca 3. FLOOR(liczba) Z w r a c a największą liczbę całkowitą mniejszą lub r ó w n ą podanej liczbie, n a przykład FL00R( 5 .67) zwraca 5. F0RMAT( l i c z b a , d z i e s i ę t n e ) Elegancko formatuje d a n ą liczbę, uwzględniając p o d a n ą liczbę miejsc dziesiętnych, n a przykład F0RMAT(4432. 99134, 2) zwraca 4, 432 .99. F0UND_R0WS() Jeśli instrukcja SELECT jest w y k o n y w a n a z frazą LIMIT, funk cja m ó w i , ile wiersze zwróciłby SELECT, g d y b y nie fraza LIMIT. FR0M_DAYS( d n i ) Z w r a c a datę odpowiadającą podanej liczbie dni, przy c z y m dzień 1 to 1 stycznia roku 1. Przykładowo, FR0M DAYS (728749) zwraca 1995-04-02. FR0M_UNIXTIME(sekund [, f o r m a t ]) Z w ra ca datę (czasu GMT) odpowiadającą danej liczbie sekund, jakie upłynęły o d epoki Uniksa (1 stycznia 1970 roku G M T ) .
124 |
MySQL. Leksykon k eszonkowy
Przykładowo, FR0M_UNIXTIME(903981584) zwraca 1998-08-24 18:00:02. Jeśli p o d a n o łańcuch formatujący ( b u d o w a n y tak samo, jak w DATE FORMAT), zwracany czas jest odpowiednio formatowany. GET_L0CI<( nazwa,
sekund) Tw orzy blokadę o podanej przez użytkow nika nazw ie, zaś czas trwania blokady jest ograniczony przez podaną liczbę sekund. Blokada m oże być użyta przy blokow aniu w apli kacji działającej po stronie klienta, między programami uży wającymi takich samych nazw blokad. Jeśli uda się założyć blokad ę, zw racane jest 1. Jeśli b lokad a zakoń czy się po upływie podanej liczby sekund, zwracane jest 0. W szystkie inne błędy powodują zwrócenie wartości NULL. Tylko jedna nazwana blokada może być aktywna w danej chwili dla po jedynczej sesji. Uruchomienie GET_L0CI<() więcej niż raz spo woduje usunięcie wszelkich wcześniejszych blokad. Przy kładowo, GET_L0CI<( "mojablokada" ,10) m ogłoby zwracać 1 przez 10 kolejnych sekund.
GREATESTCliczbal, l i c z b a 2 [, l i c z b a 3 ,
...])
Zw raca najw iększą liczbę spośród podanych, na przykład G R E A T E S T (5,6,68,1,-300) zwraca 68. H EX (d z i e s i ę t n a ) Z w r a c a szesnastkową wartość danej liczby dziesiętnej, na przykład HEX(90) zwróci 3a. Funkcja ta jest r ó w n o w a ż n a w y w o ł a n i u C 0 N V (d z i e s i ę t n a ,10,16). H0UR(c z a s )
Zw raca godzinę danego czasu, na przykład H0UR( '15:33: 30 ' ) zwraca 15. IF(warunek, w a r t o ś c i , w a r t o ś ć 2 ) Jeśli warunek jest praw dziw y, zwraca w a r t o ś c i , a w prze ciwnym razie zwraca wartość 2, na przykład IF(1>0, "true", " f a l s e " ) zwraca true.
Rozdz ał 6. Funkcje
| 125
IFNULL(w a r t o ś ć ,
w artość2) Zwraca w artość, jeśli nie jest ona równa NULL, a w przeciw nym razie zwraca w a r to ś ć 2 . Przykładowo, IFNULL (NULL, " co ś") zwraca coś.
INET_AT0N(ip)
Podaje tekstowy zapis liczbowego adresu IP, takiego jak na przykład 192.168.1.1. INET_NT0A(liczba)
Podaje liczbowy zapis adresu sieciowego l i c z b a . INSERT( ł a ń c u c h ,
p o ł o ż e n i e , d ł u g o ś ć , nowy ) Zwraca łańcuch utworzony przez zastąpienie podciągu łań cucha zaczynającego się od podanego położenia, o podanej długości w znakach, now ym łańcuchem. Przykładowo, I N SE RT ( 'złoty' ,4,1, 'śliw' ) zw róci „złośliw y".
I N ST R d a ń c u c b , p o d ła ń c u c h ) Działa identycznie, jak LOCATE, ale odwrócone jest znaczenie a r g u m e n t ó w (na przykład INSTR( 'niebywały ', 'bywa ') zwraca 4. INTERVAL(A, B, C, D, ...) Z w raca 0, jeśli A jest najm niejszą w artością, 1 jeśli A leży między 6 a C, 2 jeśli A leży między C a D i tak dalej. Wszystkie w artości poza A m uszą być uporządkow ane. Przykładowo, INTERVAL( 5 , 2 ,4 ,6 , 8 ) zwróci 2, gdyż 5 leży w drugim prze
dziale, między 4 a 6. ISNULL(w y r a ż e n i e ) Z w raca 1, jeśli w yrażenie daje NULL, w przeciw nym razie zw raca 0, na przykład ISNULL ( B ) zwraca 0. LAST_INSERT_ID() Z w r a c a ostatnią w y g e n e r o w a n ą automatycznie wartość pola AUTO_INCREMENT, n a przykład L A S T _ I N S E R T _ I D ( ) m o ż e zwrócić 4.
126 |
MySQL. Leksykon k eszonkowy
LCAS E ( ł a ń c u c h ) S y n o n i m L OW E R ().
LEAST(liczbal, i c z b a 2 [, l i c z b a ł , ...]) Z w r a c a najmniejszy co d o wartości argument, n a przykład LEAS T(5,6,68,1,-20) zwróci -20. LEF T ( łańcuc/i, d ł u g o ś ć ) Z w r a c a długość z n a k ó w z lewej strony łańcucha, na przy kład LE FT("12345" ,3) zwraca 123. LENGTH(łańcuc/i) Z w r a c a liczbę bajtów w łańcuchu, n a przykład LENGTH ( 'Witaj Mamo! ') zwraca 11. L0AD_FILE ( n a z w a pl i k u) Wczytuje zawartość pliku nazwapliku jako łańcuch. Plik musi istnieć na serwerze i być dostępny d o odczytu. Oczywiście, konieczne jest też posiadanie uprawnienia FILE. LOCATE ( p o d ł a ń c u c h , ł a ń c u c h [ , l i c z b a ]) Z w r a c a położenie ( w znakach) pierwszego wystąpienia podł ań cu ch a w łańcuchu, n a przykład LOCATE ('SOL ', 'MySOL ') zwraca 3. Jeśli podłańcuch nie występuje, z w r a cane jest 0. Jeśli p o d a n o trzeci argu me nt liczbowy, prze szukiwanie łańcucha zaczyna się dopiero o d zn a k u o n u merze l i c z b a . LO G ( l i c z b a ) Z w r a c a logarytm naturalny podanej liczby, na przykład L0G( 2) zwraca 0.693147. LOGI O ( l i c z b a ) Z w r a c a logarytm dziesiętny podanej liczby, n a przykład LOGIO(IOOO) zwraca 3.000000. LOWERCłańcuc/i) Z w r a c a łańcuch, w k t ó r y m wszystkie znaki zamieniono w razie potrzeby na małe litery, na przykład L0WER( 'Bo B') zwraca bob.
Rozdz ał 6. Funkcje
| 127
L PAD (łań cuc/i, d ł u g o ś ć , w y p e ł n i e n i e ) Z w r a c a łańcuch, który z lewej strony uzupełniono w y p e ł nieniem tak, aby n o w y łańcuch miał po da ną długość. Przy kładowo, wywołanie LPAD( 'Merry X-Mas ',18, 'H o ') zwraca HoHoHo Merry X-Mas. LTRIM(łaricucń)
Zwraca łańcuch, z którego usunięto wszystkie wiodące spa cje, na przykład LTRIM( ' Oops ' ) zwraca Oops. ł a ń c u c h l , ł a ń c u c h ł , ...) Tw orzy zbiór (SET) M ySQL, korzystając z binarnej repre zentacji liczby, odwzorowując bity liczby na łańcuchy. Pierw szy łańcuch w ystąpi w w yniku, jeśli ustaw iony jest pierw szy (najmniej znaczący) bit, drugi łańcuch w ystąpi, jeśli ustaw iony jest drugi bit i tak dalej. N a przykład:
MAKE_SET( b i t y ,
mysql> SELECT MAKE_SET(5,
"a", "b", "c",
"d", "e", "f");
+ --------------------------------------------------------------------------------------------------------------------------------------- 1.
MA K E _ S E T (5,
"a",
"b",
"c",
"d",
"e",
"f")
+ --------------------------------------------------------------------------------------------------------------------------------------- 1.
a ,c + --------------------------------------------------------------------------------------------------------------------------------------- 1.
1 row in set (0.01 sec)
MASTER_POS_WAIT( d z i e n n i k ,
p o ł o ż e n i e l , czas]) Blokuje dalsze operacje, aż serwer podrzędny zakończy swoje aktualizacje według dziennika do wskazanego położenia. Można czas, po upływie którego blokowanie ma wygasnąć.
HD5(ł ańcuch) Tworzy sumę kontrolną MD5 danego łańcucha. Suma taka zaw sze jest łańcuchem 32 liczb szesnastkowych. MICR0SEC0ND( w y r a ż e n i e )
Podaje liczbę mikrosekund zapisanych w odpowiadających podanem u wyrażeniu.
128 |
MySQL. Leksykon k eszonkowy
MID( ł a ń c u c h , p o ł o ż e n i e , d ł u g o ś ć ) S y n o n i m SUBSTRING() z trzema argumentami. MINUTĘ ( c z a s ) Z w r a c a minutę danego czasu, na przykład MINUTĘ ( '15 :BB : 30 ') zwraca 33. MOD( l i c z b a l , li c z b a ż ) Zw ra ca resztę z dzielenia l i c z b a l przez l i c z b a ż . Jest to r ó w n o w a ż n e operatorowi %, na przykład MOD (11, 3) zwraca 2. M0 NT H( d a t a ) Z w r a c a n u m e r miesiąca (styczeń m a n u m e r 1) danej daty, pr zy kładowo M0NTH( 11998-08-22 1) zwraca 8. M0NTHNAME( d a t a ) Z w r a c a n a z w ę miesiąca z danej daty, na przykład M0NTHNAME ( '1998-08-22 ') zwraca napis August. NOW ( ) Z w r a c a bieżącą datę i czas. W kontekście liczbowym z w r a cana jest liczba w postaci YYYYMMDDHHMMSS, w innych przy p a d k a c h z w r a c a n y jest łańcuch w postaci 'YYYY-MM-DD HH:MM:SS', n a przykład N O W O m o ż e zwrócić 1998-08-24 12:55:32.
NULLIF( w a r t o ś ć ,
wartośćż)
Z w ra ca NULL, jeśli w a r t o ś ć i w a rt o ść ż są równe; w przeciw n y m razie zwraca wa rtość , na przykład NULLIF((5+3)18,1) zwraca NULL. O C T (d z i e s i ę t n a ) Z w r a c a ó s e m k o w ą postać podanej liczby dziesiętnej, n a przykład 0CT(8) zwraca 10. Jest to odpo wi ed ni k w y w o ł a nia C 0 N V (d z i e s i ę t n a , 10, 8). 0CTET_LENGTH(łańcuch) S y n o n i m LENGTEK ).
Rozdz ał 6. Funkcje
| 129
ORD(łańcuch) Z w r a c a wartość liczbową odpowiadającą pierwszemu zna ko wi z łańcucha. Łańcuchy wielobajtowe są traktowane jako liczby o podstawie 256, więc 'x ' z pierwszego bajta m a wartość 256 razy większą jak 'x ' z drugiego bajta. PASSW0RD( łańcuc/i)
Z w raca łańcuch zakod ow any jak o hasło, na przykład PASSW0RD( 'mypass' ) m oże zw rócić 3af i4004idgv. PERIOD_ADD( d a t a , m i e s i ę c y ) Z w r a c a datę utworzoną przez dodanie podanej liczby mie sięcy d o daty (data m u s i być w postaci YYMM lub YYYYMM). T a k więc na przykład PERI0D_ADD(9808,14) zwróci 199910. PERI0D_DIFF (d a t a l , d a t a 2 ) Z w r a c a liczbę miesięcy, jakie upłynęły m i ęd zy d w i e m a da tami (które to daty m u s z ą być w formie YYMM lub YYYYMM). Przykładowo, PERI0D_DIFF(199901,8901) zwróci 120.
PI() Zw raca w artość liczby ji: 3 .141593. P0SITI0N(podłańcuc/i, ł a ń c u c h ) Synonim L0CATE( ) z dwom a argumentami. POW( l i c z b a l , l i c z b a 2 ) Z w r a c a wartość l i c z b a l podniesionej d o potęgi l i c z b a 2 , na przykład P0W( 3, 2) daje 9 .000000. PO W E R ( l i c z b a l , l i c z b a 2 ) Synonim P 0 W ( ). 0UARTER( d a t a ) Z w r a c a n u m e r kwartału dla danej daty (kwartał o d stycznia d o m a r c a m a n u m e r 1), n a przykład 0UARTER( '19 98 -0 8 22 1) d a 3. RADIANS( s t o p n i e ) Z w ra ca p o d a n y argument przeliczony ze stopni na radiany, n a przykład RADIANS(-90) zwraca -1.570796.
130 |
MySQL. Leksykon k eszonkowy
RAND([ z i a r n o ] ) Zwraca losowo wybraną liczbę dziesiętną między 0 a 1. Jeśli podano argument, jest on używ any jako zarodek genera tora liczb losowych. Przykładow o RAND(B) m oże zw rócić 0.4B54B4. RELEASE_LOCI<( nazwa) Usuwa blokadę o podanej nazwie, utworzoną funkcją GET_ LOCK. Jeśli zwolnienie się powiodło, zwraca 1, w razie wystą pienia błędu w skutek tego, że bieżący w ątek nie jest w ła ścicielem blokady, zaś NULL — jeśli blokada nazwa nie ist nieje. Przykład użycia: RELEASE_LOCI<( "moj ablokada"). REPEAT(ł a ń c u c h , i l e r a z y ) Zw raca łańcuch składający się z i l e r a z y powtórzonego ciągu ł a ń c u ch . Jeśli i l e r a z y jest m niejsze lub równe zeru, zwraca łańcuch pusty. Przykład użycia: REPEAT( 'ma ', 4) zw raca mamamama. REPLACE(ł a ń c u c h , s t a r y , nowy) Zw raca łańcuch, w którym wszystkie wystąpienia podłańcucha s t a r y zastąpiono podłańcucham i nowy, na przykład REPLACE ( ' bliski s k l e p s k zg ') zwróci blizgi zglep. REVERSE(łańcucń) Zwraca znaki, odczytując ł a ń c u c h od końca, na przykład REVERSE ('moj a duma') zwróci amud aj om. RIGHT(łaricucń, d ł u g o ś ć ) Synonim SUBSTRING( ) z argum entem FROM, na przykład RIGHT ("string", 1) zwraca g. ROUNDdiczba [, d z i e s i ę t n y ] ) Zwraca liczbę zaokrągloną do podanej liczby miejsc dziesięt nych. Jeśli liczby m iejsc nie podano, zaokrąglenie robione jest do liczby całkowitej, na przykład R0UND(5.67, 1) zw raca 5 .7 .
Rozdz ał 6. Funkcje
| 131
RPAD(łaricucń, d ł u g o ś ć , w y p e ł n i e n i e ) Z w r a c a łańcuch, który z prawej strony uzupełniono wypeł nieniem tak, aby n o w y łańcuch miał po da ną długość. Przy kładowo, wy wo ł a n i e RPAD( 'Yo ', 5 , ' ! ') zwraca Y o ! ! !. RTRIM(łaricucń) Z w ra ca łańcuch, z którego usunięto wszystkie k o ń c o w e spa cje, n a przykład RTRIM( 'Oops
') zwraca Oops.
S E C0ND( c z a s ) Z w ra ca sekundy podanego czasu, na przykład SEC0ND( '15 : 33:30') zwraca 30. SEC_T0_TIME ( se kund) Zw ra ca liczbę godzin, minut i sekund mieszczące się w po da nej liczbie sekund. W kontekście liczbowym zwracana jest liczba w formie HHMMSS, w pr ze ci wn ym razie jest to łańcuch H H :MM :SS, na przykład SEC_T0_TIME(3666) zwraca 01:01:06. SESI0N_USER() S y n o n i m US E R ( ). SHA( w y r a ż e n i e ) Z w r a c a s u m ę kontrolną S H A - 1 w s ka za ne go wyrażenia. SIGN( l i c z b a ) Z w r a c a -1, jeśli d a n a liczba jest ujemna, 0 — jeśli jest ona zere m i 1 — jeśli jest liczbą dodatnią, n a przykład SIGN (4) zwróci 1. SIN( radiany) Z w ra ca sinus danej liczby wyrażonej w radianach, na przy kład S I N (2*PI ()) zwraca 0.000000. S L E E P (sekund) Przerywa działanie S Q L na w s k a z a n ą liczbę sekund. SOUNDEX (łań cu c/i) Z w r a c a k o d S o u n d e x związany z łańcuchem, na przykład S O UN DE X( 'Delio' ) zwraca D400.
132 |
MySQL. Leksykon k eszonkowy
SPACE( l i c z b a ) Z w r a c a łańcuch zawierający liczbę spacji, n a przykład SRACE (5) zwraca „ SORT( l i c z b a ) Z w r a c a pierwiastek k w a d r a t ó w podanej liczby, n a przy kład S0LRT( 16) zwróci 4.000000. ST RC MP ( ł a ń c u c h l , ł a ń c u c h 2 ) Z w r a c a 0, jeśli łańcuchy są takie same, -1 — jeśli ł a ń c u c h l p o sortowaniu znalazłby się przed ł a ń c u c h 2 , 1 — jeśli byłoby odwrotnie. Oto przykład: STRCMP ( 'bob ', 'bobbie ') zwraca -1. SU BD AT E ( d a t a , INTERVAL ile r o d z a j ) S y n o n i m DA TE _S UB (). SUBSTRINGCłaricuc/i, p o ł o ż e n i e ) SUBSTRINGCłaricuc/i FROM p o ł o ż e n i e ) Z w ra ca pozostały z podanego łańcucha podłańcuch, zaczy nający się o d p o d a n e g o położenia. SUBSTRINGCłaricuc/i, p o ł o ż e n i e , d ł u g o ś ć ) SUBSTRINGCłaricuc/i FROM p o ł o ż e n i e FOR d ł u g o ś ć ) Z w ra ca pozostały z podanego łańcucha podłańcuch, zaczy nający się o d p o d a n e g o położenia, mający długość d ł u g o ś ć zn aków, n a przykład SUBSTR IN G("123456", 3) zwraca 3456. SUBSTRING_INDEX(lańcuc/i, z n a k , l i c z b a ) Z w r a c a podłańcuch stworzony przez odliczenie l i c z b a zna k ó w z n a k w łańcuchu, następnie zwracane jest wszystko p o lewej stronie (jeśli licznik jest dodatni) lub wszystko p o stronie prawej (jeśli licznik jest ujemny), n a przykład SUBST RI NG_INDEX( ,l, 2, 3 , 4 , 5 ,, ,, ,, 3) zwraca 1,2,3. SY SD AT E() Działa podobnie jak N0W(), ale podaje czas wykonania funk cji, podczas g d y N0W() zwraca czas, kiedy zaczęło się w y k o nywanie zapytania.
Rozdz ał 6. Funkcje
| 133
SYSTEM_USER() Synonim US E R ( ). T A N (r a d i a n y ) Z w ra ca tangens danej liczby podanej w radianach, na przy kład TAN (0) jest r ó w n y 0.000000. TIME_F0RMAT( c z a s , f o r m a t ) Z w ra ca p o d a n y czas na podstawie łańcucha formatującego. Łańcuch ten jest analogiczny, jak w p r zy pa dk u omawianej wcześniej funkcji DA TE _F0RMAT(). TIME_T0_SEC( c z a s ) Z w r a c a liczbę sekund w czasie, n a przykład TIME T0 SEC ( '01:01:06 ') zwraca B666. T0 _DAYS( d a t a ) Zw ra ca liczbę dni (dzień 1 to 1 stycznia roku 1) do danej daty. Data musi być wartością typu DATE, DATETIME lub TIMESTAMP lub liczbą w formie YY MM DD lub YYYYMMDD, n a przykład T 0 _DAYS(19950402) zwraca 728749. T R I M ( [B0TH|LEADING|TRAILING] [usuń] [FR0M] ł a ń c u c h ) Jeśli nie p o d a n o ża dn yc h modyfikatorów, u s u w a z łańcu cha spacje wi odące i końcowe. M o ż n a nakazać usunięcie spacji wiodących, spacji k o ń c o w y c h lub jednych i drugich. M o ż n a też nakazać usuwanie z n a k ó w innych niż spacje, na przykład TRIM( B0TH FR0M '— spojrzyj tylko— ') zwraca spój rzyj tylko. T R UN CA TE(l i c z b a , d z i e s i ę t n e ) Z w r a c a liczbę obciętą d o danej liczby miejsc dziesiętnych, n a przykład TRUNCATE( 3.33333333, 2) zwraca 3.33. UC A S E ( ł a ń c u c h ) S y n o n i m UP PE R() . UNC0MPRESS( s kompres owa ne) D e ko mpresuje binarną wartość skompresowane.
134 |
MySQL. Leksykon k eszonkowy
UNCOMPRESS_LENGTH( s k omp res owane)
Zwraca zdekompresowaną długość wskazanych danych bi narnych skompresowane. UNHEX(łańcucń)
W ykonuje operację odw rotną do funkcji H E X() . UNIX_TIMESTAMP([data ])
Zwraca liczbę sekund od epoki Uniksa (1 stycznia 1970 roku GMT) do podanej daty (w czasie GM T). Jeśli nie podano daty, podaw ana jest liczba sekund do bieżącej daty, na przykład UNIX_TIMESTAMP ( '1 9 9 8 -0 8 -2 4 1 8 :0 0 :0 2 ' ) zwraca 903981584. UPPER(łańcucń)
Zwraca łańcuch po zamianie wszystkich liter na wielkie, na przykład UPPER( 'Scooby ' ) zw raca SC00BY. US E R ( )
Zw raca nazw ę bieżącego użytkownika. UTCJ3ATE ( )
Z w raca bieżącą datę UTC jako napis lub liczbę (czyli na przykład ' 2007-04-05 ' lub 20070405) w zależności od tego, czy funkcja zostanie wywołana w kontekście tekstowym, czy liczbowym. UT C_TIME()
Z w raca bieżący czas U TC jak o napis lub liczbę (czyli na przykład ' 1 1 :0 4 :0 3 ' lub 110403) w zależności od tego, czy funkcja zostanie w yw ołana w kontekście tekstow ym , czy liczbowym. UTC_TIMESTAMP()
Zwraca bieżący znacznik czasu UTC jako napis lub liczbę (czyli na przykład '2 0 0 7 -0 4 -0 5 1 1 :0 4 :0 3 ' lub 20070405110403) w zależności od tego, czy funkcja zostanie wywołana w kon tekście tekstow ym , czy liczbowym.
Rozdz ał 6. Funkcje
| 135
UUID( ) Z w r a c a globalnie niepowtarzalny identyfikator, który na p e w n o będzie inny w dowolnych d w ó c h wywołaniach, choć b y miały one miejsce n a różnych maszynach, z ró żnymi wersjami M y S Q L i w różnych systemach operacyjnych. VE RS IO N( ) Z w r a c a wersję s a m e g o serwera M y S Q L . WEEl<(data) Z w r a c a tydzień w roku dla danej daty, n a przykład WEEK ( 11998-12-29 1) zwraca 52. WE E K D A Y (data) Z w ra ca n u m e r dnia w tygodniu dla danej daty. N u m e r o w a nie zaczyna się od zera (poniedziałek), kończy na 6 (nie dziela). WEEKOFYEAR(data) Z w r a c a tydzień roku ( w zakresie o d 1 d o 53), w k t ór ym pr zypada p o d a n a w parametrze d ata . YEAR (data) Z w r a c a rok danej daty, n a przykład YEAR( '1998-12-29' ) z w ra ca 1998. YEARWEEI<( d a t a ) Z w r a c a rok i tydzień odpowiadające przekazanej dacie, na przykład 200716.
136 |
MySQL. Leksykon k eszonkowy
Rozdział 7. Rodzaje tabel W tabeli 7.1 zestaw iono w ybrane rodzaje tabel obsługiw ane w w iększości instalacji M ySQL. A by używ ać napraw dę atomo w ych transakcji bazodanow ych, należy stosow ać tabele InnoDB, aczkolwiek w chwili pisania tej książki w prow adzane są now e transakcyjne m echanizm y składow ania danych. Tabela 7.1. Rodzaje tabel MySQL Rodzaj
Transakcyjna?
Ops
ARC VE
Nie
Używane w bazach danych pełniący olę a ch iw ów bez indeksów z ba dzo m ałym i zm ianam i
BLACK OLE
Nie
Nie p zechowuje żadnych danych a wszystkie zapytania nie zw acają żadnych w ie szy
CSV
Nie
P zechowuje dane w plikach z w a tościami ozdzielanymi p zecinkami
LALCON
Tak
N ow y ekspe ym entalny t ansakcyjny mechanizm p zechow yw ania danych któ y w p zyszłości być m oże zastąpi mechanizm nnoDB
NNODB
Tak
Bezpieczne tabele t ansakcyjne z blokow aniem w ie szy
MEMORY (daw niej EAP)
Nie
Nlet wałe tabele obsługiwane w pamięci
MERGE
Nie
Zbló tabel M y SAM połączony w jedną tabelę
M Y SAM
Nie
Nowszy p zenośny odzaj tabel stw o zony w miejsce SAM
NDB
Tak
Klast o w y mechanizm p zechow ywania danych na pot zeby MySQL Cluste
Rozdz ał 7. Rodzaje tabel
| 137
Rozdział 8. Procedury i funkcje składowane Procedury i funkcje składow ane to zam knięte w pew ną całość fragmenty SQL, przechowywane w bazie danych po to, aby wszy stkie aplikacje m ogły ich później używać. Procedury i funkcje są do siebie bardzo podobne, różnią się trzem a zasadniczym i ele mentami: 1. Funkcje mogą mieć jedynie parametry wejściowe, IN. Proce dury m ogą m ieć param etry wejściow e, wyjściowe i dwu kierunkow e (odpowiednio IN, OUT i INOUT). 2. Funkcje zwracają wartość; aby otrzym ać w artość z proce dury, trzeba użyć parametru wyjściowego lub dwukierun kowego. 3. Funkcje m ożna w yw oływ ać w zapytaniach tak, jak zwykłe funkcje MySQL i funkcje użytkownika. Procedury wywołuje się poleceniem CALL. Polecenie CREATE PROCEDURE lub CREATE FUNCTION tworzy odpo wiednio składowaną procedurę lub funkcję. Aby je wykonać, trzeba mieć uprawnienie CREATE ROUTINE. Trzeba zawsze określić nazwę i treść procedury: CREATE PROCEDURE zliczwitryny() SELECT COUNT(*) FROM witryna;
Teraz m o ż n a już procedurę w y w o ł y w a ć instrukcją CALL: CALL zl ic zwitryny();
Parametry W MySQL można używać trzech rodzajów parametrów procedur: IN
138 |
Parametr jest przekazywany do procedury jako wartość wej ściowa. Procedura można dalej używ ać wartości parametru.
MySQL. Leksykon k eszonkowy
Dom yślnie wszystkie param etry są typu IN. W przypadku funkcji składowanych, tylko tego typu parametry są dopusz czalne. OUT Wartość wynikowa jest zapisywana w parametrze i może być
używ ana w m iejscu wyw ołania procedury składowanej. INOUT
W miejscu wywołania procedury, wartość jest przekazywana jako parametr. Później w artość ta może być modyfikowana w procedurze, a ostateczny w ynik jest dostępny po w yko naniu całej procedury. Param etry są podaw ane w definicji procedury jako rozdzielana przecinkam i lista: CREATE PROCEDURE zliczwitryny(OUT suma INT) SELECT COUNT(*) INTO suma FROM witryna; CREATE PROCEDURE port_ssl(IN adr VARCHARC255), out suma INT) SELECT port_ssl INTO suma FROM witryna WHERE adres = adr;
W przypadku każdego param etru trzeba określić jego rodzaj, nazw ę i typ SQL. Przy wyw oływ aniu procedury param etry przekazuje się w roz dzielanej przecinkam i liście: CALL zl ic zwitryny(Oile); SELECT ©ile; CALL port _s sl( 1w w w . v a l t i r a .c o m 1, Oport); SELECT O p o r t ;
Logika Niezależnie od prostej logiki opisanej w cześniej, w procedurach składowanych M ySQL możliwe jest zapisywanie w bazie danych całkiem złożonej logiki aplikacji. Aby tego typu instrukcje umie ścić w procedurze, trzeba użyć bloku BEGIN/END:
Rozdz ał 8. Procedury funkcje składowane
| 139
DELIMITER // CREATE PROCEDURE deactrvateCIN idStrony BIGINT) BEGIN UPDATE strona SET aktywna = 'N WHERE id_strony = idStrony; UPDATE tresc SET aktywna = 'N WHERE strona = idStrony; END
// Jako że treść procedury m oże zaw ierać w iele instrukcji, które w zwykłym SQL powinny być zakończone standardowym ogra nicznikiem M ySQ L, przed tw orzeniem procedury składowanej należy zdefiniow ać tym czasowy specjalny ogranicznik. W ram ach bloku m ożna d efiniow ać lokalne zm ienne; służy do tego instrukcja DECLARE: DELIMITER // CREATE PROCEDURE zlrcz_ssl(IN rdStrony BIGINT) BEGIN DECLARE suma INT DEFAULT 0; SELECT C O U N T (*) INTO suma FROM adres_www WHERE uzywa_ssl = 'Y ' AND id_witryny = idStrony; UPDATE witryna_www SET ile_ssl = Osuma WHERE id_witryny = idStrony; END
// W końcu można sterować programem w procedurze korzystając ze struktur sterujących dostępnych w większości języków progra mowania: • IF THEN/ELSEIF THEN/ELSE/END IF • CASE/WHEN THEN/ELSE/END CASE • L00P/ENDL00P • LEAVE • ITERATE • REPEAT/UNTIL/END REPEAT • WHILE/DO/END WHILE
140 |
MySQL. Leksykon k eszonkowy
CASE CASE [wa rt oś ć ] WHEN wyrażenie THEN instrukcje [ELSE instrukcje'] END CASE
Jeśli p o d a n o opcjonalną wartość, w y k o n y w a n e są instrukcje tej sekcji WHEN, która m a taką s a m ą wartość. Jeśli żadn a sekcja WHEN nie pasuje, w y k o n y w a n e są instrukcje sekcji ELSE. Jeśli wartość nie zostanie podana, w y k o n y w a n e są instrukcje pierwszej sekcji
WHEN, wyrażenie jest prawdziwe. Przykład CASE @suma WHEN 0 THEN UPDATE witryna SET port_ssl = 0 WHERE id_witryny = idStrony; ELSE UPDATE witryna SET port_ssl = 443 WHERE id_witryny = idStrony; END CASE;
IF IF wyrażenie THEN instrukcje [ELSEIF wyrażenie THEN instrukcje] [ELSE instrukcje] END IF
P o w o d u j e w a r u n k o w e wy ko n a n i e jednej lub wielu instrukcji w zależności o d spełnienia wyrażenia lub ciągu wyrażeń.
Przykład IF suma > 0 THEN UPDATE witryna SET port_ssl = 443 WHERE id_witryny = idStrony; ELSE UPDATE witryna SET port_ssl = 0 WHERE id_witryny = idStrony; END IF;
Rozdz ał 8. Procedury funkcje składowane
| 141
LOOP [etykieta-.] LOOP instrukcj e END LOOP [etykieta]
Wykonuje wielokrotnie instrukcje, aż do wyjścia z pętli instrukcją LEAVE. Korzystając z etykiet można zapewnić jednoznaczność po tencjalnie m ieszających się pętli. Etykiety mogą być dowolne, ale początkow a m usi pasow ać do końcowej. Przykład DECLARE suma INT DEFAULT 0; licznik: LOOP SET suma = suma + 1; IF suma > 50 THEN LEAVE licznik; END LOOP licznik;
END IF;
LEAVE LEAVE etykieta
Powoduje wyjście ze struktury kontrolnej oznaczonej jako e t y kieta.
ITERATE ITERATE etykieta
Powoduje przerw anie realizacji oznaczonej etykietą instrukcji sterującej i ponowne rozpoczęcie jej wykonywania. Jest to zacho wanie analogiczne, jak instrukcji continue w językach takich, jak Java czy C.
REPEAT [etykieta-.] REPEAT instrukcj e
142 |
MySQL. Leksykon k eszonkowy
UNTIL wyrażenie END REPEAT [ety/cieta]
Powoduje wykonywanie w pętli instrukcji, aż spełnione zostanie wyraźnie z frazy UNTIL. Przykład DECLARE suma INT DEFAULT 0; licznik: REPEAT SET suma = suma + 1; UNTIL suma > 50 END REPEAT licznik;
W HILE [ e t yk ie ta :] WHILE wyrażenie DO instrukcj e END WHILE [ety/cieta]
W ykonuje w pętli instrukcje, aż będzie niespełnione wyrażenie z frazy WHILE. Przykład DECLARE suma INT DEFAULT 0; licznik: WHILE suma < 51 DO SET suma = suma + 1; END WHILE licznik;
Kursory Kursory umożliwiają operowanie na zbiorze wyników wiersz po wierszu. Kursor deklaruje się instrukcją DECLARE, wiążąc kursor z konkretnym zapytaniem SQL: DECLARE strona CURSOR FOR SELECT id_witryny FROM witryna
Potem w procedurze m ożna pobierać do kursora kolejne wiersze i w ykonyw ać na tych wierszach pożądane działania:
Rozdz ał 8. Procedury funkcje składowane
| 143
DELIMITER // CREATE PROCEDURE set_ssl() BEGIN DECLARE gotowe INT DEFAULT 0; DECLARE id_witryny BIGINT; DEGLARE suma INT; DEGLARE strona GURSOR FOR SELECT id_witryny FROM witryna; DEGLARE CONTINUE HANDLER FOR SQLSTATE OPEN strona;
'02000' SET gotowe = 1;
REPEAT FETCH strona INTO id_witryny; IF NOT gotowe THEN SELECT COUNTC*) INTO suma FROM adres_www WHERE uzywa_ssl = 'Y' ; IF suma > 0 THEN UPDATE witryna SET obsługuje_ssl = 'Y ' WHERE id_witryny = id_strony; ELSE UPDATE witryna SET obsługuje_ssl = 'N ' WHERE id_witryny = id_strony; END IF; UNTIL gotowe END REPEAT; CLOSE strona; END
//
Obsługa zdarzeń i warunki MySQL pozwala rozpoznać, kiedy w trakcie realizacji procedury składow anej spełnione zostaną pew ne w arunki; służą do tego zdarzenia i warunki. Przykłądowy kursor z poprzedniego punktu zawierał kod z definicją obsługi zdarzenia SOLSTATE '02000' — czyli końca zbioru wyników. Podczas definiowania obsługi zdarzenia, definiuje się typ zdarze nia, jego przeznaczenie i kod SQL wykonywany w ramach obsługi. M ySQL uw zględnia następujące rodzaje obsługi:
144 |
MySQL. Leksykon k eszonkowy
CONTINUE
Po wykonaniu procedury obsługi zdarzenia, kod SQL, który zdarzenie wygenerow ał, jest w ykonyw any dalej, jakby nic się nie stało. EXIT P o w y k o n a n i u procedury obsługi zdarzenia, kończone jest w y k o n y w a n i e bloku BEGIN/END, w r a m a c h którego proce durę uruchomiono. UNDO
O pcja w M ySQ L nie obsługiwana. Fraza FOR deklaracji obsługi zdarzenia określa warunki, w któ rych obsługa jest w y w o ł y w a n a . M o ż n a skorzystać z następują cych opcji: • k o d u błędu SOLSTATE, • własnych w a r u n k ó w , • skrótowych odniesień d o k o d ó w SOLSTATE, jak NOT FOUND, SOLWARNING, S0LEXCEPTI0N. Definiowanie własnych w a r u n k ó w polega na przypisaniu n a z w y d o konkretnych k o d ó w SOLSTATE, które c h c e m y obsłużyć; później m o ż n a tych przypisań używać: DECLARE THEEND CONDITION FOR SQLSTATE '02000'; DECLARE CONTINUE HANDLER FOR THEEND SET gotowe = 1;
Rozdz ał 8. Procedury funkcje składowane
| 145
Rozdział 9. Trygery T a k jak w p r z y p a d k u procedur składowanych, tak i trygery to logika przetwarzania zapisana w bazie danych. O ile procedura składowana jest w y k o n y w a n a w odpowiedzi na jej wywołanie, to tryger s a m się wykonuje, ilekroć tylko zajdzie ustalone zda rzenie w bazie. Dla każdego zdarzenia m o ż n a zdefiniować tryger zachodzący przed lub p o zdarzeniu (odpowiednio BEFORE lub AFTER). Zdarzenia, n a których trygery m o g ą być oparte, to: INSERT Tryger zostanie w y k o n a n y przy wstawianiu wiersza d o tabeli. UPDATE Tryger zostanie w y k o n a n y przy aktualizacji wiersza. DELETE Tryger zostanie w y k o n a n y przy usuwaniu wiersza z tabeli. Definicja trygera jest bardzo p o d o b n a d o definicji procedury skła dowanej, gdyż logika takiego pr ogramu m o ż e składać się z wielu instrukcji S Q L ujętych w b o k u BEGIN/END.Podstawowa różnica jest taka, że cała logika jest objęta sekcją FOR EACFI ROW: DELIMITER // CREATE TRICCER usun_adresy AFTER DELETE ON witryna FOR EACH ROW BECIN DELETE FROM adres_www WHERE id_witryny = O L D .id_witryny; END;
Specjalne identyfikatory NEW i OLD pozwalają o d w o ł y w a ć się d o nowej i starej zawartości wiersza.
146 |
MySQL. Leksykon k eszonkowy
Skorowidz
A A BS(), 115 ACOSO, U S ADDDATEO, 115 A DDTIM EATEO, 115 A ES_D ECRYPT (), 115 AE S_EN CRYPT (), 115 aliasy, 44, 94 A LTER D A TA BA SE, 46 A LTER EVEN T, 46 A LTER FU N CTIO N , 47 A LTER PRO CED U RE, 47 A LTER TA BLE, 47 A LTER TA BLESPA CE, 52 A LTER VIEW , 53 A N A LYZE TA BLE, 53 A N D , 110, 112 A N SL Q U O T E S, 45 A RC H IVE, 8 ASCIIO, 115 ASINO, 115 ATANO, 116 A T A N 20, 116 A U T O JN C R E M E N T , 23, 62, 65 A U TO CO M M IT, 100, 106 A VG (), 113 A VG _RO W _LEN G TH , 65
B baza danych, 57 BEG IN , 54 BENCHMARK^), 116 BETW EEN , 110 BIGIN T, 22, 24 B IN 0, 116 BINARY, 29 BIT, 24 BIT_AN D(), 113 BIT_COU N T 0 , 116 BIT_LEN G TH (), 116 BIT_O R(), 113 BIT_XOR(), 113 BLA CK H O LE, 8 BLOB, 30
c CA LL, 5 5 ,1 3 8 CA SE, 116, 141 CASTO, 116 C E IL IN G 0 ,116 CH AN G E M A STER, 55 CH AR, 22, 30 CH A R(), 117 C H A R TE N GTHQ, 117 CH A RA CTER, 30
147
C H A RA CTER SET, 101 C H A RA CTER V A RYIN G , 31 CH A RA CTER_LEN G TH (), 117 CHARSETO, 117 CH EC KSU M , 65 CLO SE, 57 CO A LESCE(), 117 COERCI BILIT Y (), 117 CO LLA TIO N (), 117 CO M M EN T, 65 CO M M IT, 57 CO M PRESS(), 117 CO N CA T(), 118 C O N CA T_W S(), 118 CO N N ECTIO N _ID (), 118 CO N TIN U E, 145 CO N V(), 118 CO N VERT(), 118 C O N V ER T JT Z (), 118 CO S(), 118 COT (), 118 CO U N T(), 113 CR32(), 119 CREATE D A TA BA SE, 57 CREATE EV EN T, 58 CREATE FU N CTIO N , 59, 138 CREATE IN D EX, 60 CREATE PRO CED U RE, 61, 138 CREATE R O U TIN E, 138 CREATE TA BLE, 61 CREATE TA BLESPA CE, 67 CREATE TRIG G ER, 68, 146 CREATE U SER, 68 CREATE VIEW , 69 CSV, 9 CU RD A TE(), 119 CU RREN T_D ATE (), 119 C U RREN T_TIM E(), 119
148 |
MySQL. Leksykon k eszonkowy
CU RREN T _TIM ESTA M P(), 119 CURTIM EQ, 119
D D A TA BA SE!), U 9 DA TE, 35 DA TE_A D D (), 119 DA TE_FO RM A T (), 120 D A TE_SU B(), 121 DA TETIM E, 36 daty, 35 D A Y N A M E 0, 121 D A Y O FM O N T H 0, 121 D AYOEW E E K Q, 121 D A YO FYEA R(), 122 D EC, 25 DECIM A L, 25 D ECLA RE, 69 DECLA RE C U RSO R, 143 D EC O D E!), 122 D EFA U LT, 62 D EG REES!), 122 D ELA Y_KEY_W RITE, 66 D ELETE, 70 DELIM ITER, 70 D ES D EC R YPT!), 122 DES EN CR YPT!), 122 D ESC, 73 DESC RIBE, 73 DO, 73 D O UBLE, 26 DOU BLE PRECISIO N , 26 DRO P D A TA BA SE, 73 D RO P EVEN T, 74 DRO P FU N CTIO N , 74 DRO P IN D EX , 74 D RO P PRO CED U RE, 75
DROP TABLE, 75 DROP TABLESPACE, 75 DROP TRIGGER, 75 DROP USER, 76 DROP VIEW, 76
funkcje, 94,113 agregujące, 113 biblioteczne, 59 składowane, 59, 138 użytkownika, 59
G
E ELT(), 122 ENCO DE (), 123 EN CRYPT(), 123 EN G IN E, 66 EN U M , 38 EXIT, 145 EXP(), 123 EXPLA IN , 76 EXPO RT_SET 0 , 123 EXTRA CT(), 124
F FA LC O N , 9 FED ERA TED , 9 FETCH , 77 FIELD(), 124 FIN D _IN _SET 0 , 124 FLO A T, 23, 26 FLO O R(), 124 FLU SH , 78 FO R U PD A TE, 98 FO REIG N K EY, 65 FO RM A T(), 124 FO U N D _RO W S(), 124 FRO M _D A YS(), 124 FRO M _U N IXTIM E(), 124 FU LLTEXT, 63
GET_LO CK (), 125 G RA N T, 79 GREATESTO, 125 G RO U P BY, 98 G RO U P_CO N CA T(), 114
H hasło główne, 15 H A VIN G , 98 H EX(), 125 HIG H _PRIO RITY, 93 H O UR(), 125
I identyfikatory, 43 IF, 125, 141 IFNULLO, 126 IN, 110, 138 indeksy, 60 IN D EX, 63 IN ET_A TO N (), 126 IN ET_N TO A (), 126 IN N ER JO IN , 96 IN O U T, 139 IN SERT, 84 INSERTO, 126
Skorow dz
| 149
instalacja M ySQ L, 10 INSTRO, 126 instrukcje SQ L, 46 IN T, 27 IN TEG ER, 27 IN TERVA L(), 126 IN TO O U TFILE, 95 ISNULLO, 126 ITERA TE, 142
K K EY, 64 K ILL, 85 klucz głów ny, 64 kom entarze, 45 konfiguracja M ySQ L, 11 serw er nadrzędny, 16 serw er podrzędny, 16 kursory, 8, 143
L L A S T JN S E R T J D , 101 LAST J N S E R T _ID (), 126 LCA SE(), 127 LEA ST(), 127 LEA V E, 142 LEFT [OUTER] JO IN , 96, 97 LEFT(), 127 LENGTHO, 127 liczby, 23 LIKE, 110 LIM IT, 71, 99 literały, 42 binarne, 43 bitow e, 43 dziesiętne, 43
150 |
MySQL. Leksykon k eszonkowy
logiczne, 43 łańcuchow e, 42 N uli, 43 szesnastkow e, 43 LO AD , 85 LOAD D A TA IN FILE, 86, 95 LO A D _FILE(), 127 LOCA TE (), 127 LO CK, 88 LO CK IN SH ARE M O D E, 98 LO G(), 127 L O G 100, 127 LON G BLO B, 31 L O N G TEXT, 31 LOOP, 142 LO W ER(), 127 LPA D(), 128 LTRIM (), 128
Ł łańcuchy, 29
M M ac O S X, 14 M A K E_SET(), 128 M A STER_CO N N ECT_RETRY, 55 M A STER_H O ST, 55 M A STER_LO G _FILE, 55 M A STER_LO G _PO S, 56 M A STER_PA SSW O RD , 56 M A STER_PO RT, 56 M A STER_PO S_W A IT (), 128 M A STER_SSL, 56 M A STER_SSL_CA , 56 M A STER_SSL_CA _PA TH , 56 M A STER_SSL_CERT, 56
M A STER_SSL_CIPH ER, 56 M A STER_SSL_K EY, 56 M A S T E R JJS E R , 56 M A X(), 114 M A X_RO W S, 66 M D 5(), 128 m echanizm y składow ania danych, 8 M ED IU M BLO B, 31 M ED IU M IN T, 27 M ED IU M TEXT, 31 M ERG E, 9 M IC RO SEC O N D !), 128 M ID(), 129 M IN (), 114 M IN _RO W S, 66 M INUTE (), 129 M O D (), 129 M O N TH !), 129 M O N TH N AM E (), 129 m sql2m ysql, 18 m y.cnf, 13 m yisam chk, 18 m ysql, 18 M ySQ L, 10 M ySQ L 5, 7 m ysql_upgrade, 18 m ysqlaccess, 20 m ysqladm in, 19 m ysqlcheck, 21 m ysqld, 21 m ysqld_safe, 21 m ysqldum p, 17, 21 m ysqlim port, 21 m ysqlshow , 21 m ysqlslap, 21
N narzędzia w iersza poleceń, 18 N A TIO N A L CH A R, 32 N A TIO N A L C H A RA CTER, 32 N A TIO N A L V A RCH A R, 32 N A TU RA L LEFT [OUTER] JO IN , 97 nazw y bezw zględne, 44 kolum ny, 94 w zględne, 44 NC H A R, 32 N D B, 9 N D BCLU STER, 9 NO T, 111 N OT BETW EEN , 110 N OT IN , 110 NOT LIKE, 111 NOT N U LL, 62 N OT R EG EXP, 111 NO W (), 129 N U LL, 43, 63 N U L L IF 0 ,129 N U M ERIC, 28
0 obsługa zdarzeń, 144 OCT (), 129 OCTET_LEN G TH (), 129 opcje konfiguracyjne, 11 opcje sesji, 100 OPEN , 89 operatory, 108 arytm etyczne, 109 logiczne, 111
Skorow dz
| 151
operatory porów nania, 109 priorytety, 108 O PTIM IZE, 89 O PTIM IZE TA BLE, 72 O R, 111 O RD(), 130 O RD ER BY, 99 O U T, 139
P P A C K JŒ Y S , 66 param etry, 138 PA SSW O RD , 66, 101 P A SSW O R D 0, 130 PERIO D _A D D (), 130 PERIO D _D IFF(), 130 PI(), 130 plik konfiguracyjny, 12 pobieranie danych, 92 pobieranie M ySQ L, 10 porów nania, 109 PO SITIO N (), 130 POW (), 130 P O W E R 0, 130 PRIM A RY K EY, 63, 64 priorytety operatorów , 108 PRO CED U RE, 99 procedury składow ane, 7, 61, 138 logika, 139 param etry, 138 punkt zapisu transakcji, 92
Q QUARTERQ, 130
152 |
MySQL. Leksykon k eszonkowy
R R A D IA N S0, 130 RAN D(), 131 REAL, 28 REFEREN CES, 63 REG EXP, U l R ELA Y_LO G _FILE, 56 R ELA Y_LO G _PO S, 57 RELEA SE SA VEPO IN T, 90 RELEA SE_LO CK(), 131 REN A M E D A TA BA SE, 90 REN A M E U SER, 90 REPEA T, 142 R E P E A T 0, 131 REPLA CE, 90 REPLA CE (), 131 replikacja, 15 R E V E R SE 0, 131 REVO K E, 91 RIGHTO, 131 RLIK E, 111 rodzaje tabel, 137 R O LLBA CK , 91 R O U N D 0 ,131 R O W _FO RM A T, 66 R PA D (), 132 RTRIM (), 132
s SA VEPO IN T, 92 SEC_TO_TIM E (), 132 SE C O N D 0, 132 SELECT, 92 S E S IO N JJS E R 0 , 132 SET, 39, 100
SH A (), 132 SH OW , 103 SIGN(), 132 SIN(), 132 SLEEP(), 132 SM A LLIN T, 28 Solaris, 14 SO UN DEX(), 132 SPA CE(), 133 SQ L, 41 SQ L_A U T 0 _ I S_N U LL, 101 SQ L_BIG _RESU LT, 93 SQ L_BIG _SELECTS, 101 SQ L_BIG _TA BLES, 101 SQ L_BUFFER_RE SULT, 9 3 ,1 0 2 SQ L_CA CH E, 94 SQ L_CA LC_FO U N D _RO W S, 93 SQ L_LO G_O FF, 102 SQL_LOW _PRIORITY_UPDATES, 102 SOT ,_M A X JO TN _STZE, 102 SQ L_N O _C A CH E, 94 SQ L_Q U ERY_C A CH E_TYPE, 102 SQ L_SAFE_U PD ATE S, 102 SQ L_SELECT_LIM IT, 103 SQ L_SM A LL_RESU LT, 93 SQ L_U PD A TE_LO G, 103 SQ RT(), 133 STD D EV _PO P(), 114 STD D EV _SA M P(), 114 STRA IG H T JO IN , 93, 96 STRCM P(), 133 SU BDA TE(), 133 SUBSTRING (), 133 SU BSTRIN G JN D E X (), 133 SUM (), 114 SYSD A TE(), 133 SYSTEM J JS E R Q , 134
T tabele, 47, 61, 137 TA N (), 134 TEXT, 32 TIM E, 36 TIM E_FO RM A T (), 134 TIM E_TO _SEC (), 134 T IM ESTA M P, 22, 3 7 ,1 0 3 TIN YBLO B, 33 TIN YIN T, 28 TIN YTEXT, 33 TO _D A YS(), 134 transakcje, 54, 106 TRIM (), 134 TRU N CA TE, 104 TRU N CA TE(), 134 trygery, 7, 6 8 ,1 4 6 typy danych, 22
U U C A SE 0, 134 U DF, 59 U N C O M P R E SS0, 134 U N C O M PRESS_LEN G TH (), 135 U N D O, 145 U N H EX(), 135 U N IQ U E, 64 U nix, 15 UN IX_TIM E ST A M P(), 135 UN LO CK , 104 U PD A TE, 105 U PPER(), 135 upraw nienia, 79 urucham ianie M ySQ L, 14 USE, 105
Skorow dz
| 153
U SER(), 135 U T C _ D A T E (),135 U T C _ T IM E (),135 U TC_TIM ESTA M P(), 135 U U ID(), 136
X XOR, 112
Y V VA R_PO P()/ 114 V A R _ S A M P (),114 V A RBIN A RY, 33 VA RCH A R, 22, 34 V ERSIO N (), 136
W w arunki, 144 W EEK (), 136 W EEK D A Y(), 136 W EEK O FYEA R(), 136 W H ERE, 98 W H ILE, 143 w idoki, 7, 69 w ielkość liter, 41 w staw ianie danych, 84
154 |
MySQL. Leksykon k eszonkowy
YEAR, 37 YEAR(), 136 YEA RW EEK (), 136
Z zdarzenia, 9, 58 obsługa, 144 złączenia, 96 zm ienne, 70