You are on page 1of 57

IDZ DO

PRZYKADOWY ROZDZIA
SPIS TRECI

KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG

MySQL
Autor: Leon Atkinson
Tumaczenie: Jarosaw Dobrzaski, Tomasz mijewski
ISBN: 83-7361-170-3
Tytu oryginau: Core MySQL
Format: B5, stron: 608

TWJ KOSZYK
DODAJ DO KOSZYKA

CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK

Zaawansowani programici na caym wiecie wybieraj MySQL jako podstaw swoich


aplikacji opartych na WWW. Ksika, ktr trzymasz w rku, dostarczy Ci wiedzy
i przykadowego kodu; elementw niezbdnych do szybkiego pisania wasnych
aplikacje, niezalenie od stopnia ich skomplikowania.
Ksika rozpoczyna si od omwienia podstaw MySQL-a: zapyta SQL, zasad
projektowania baz danych, normalizacji, transakcji i przetwarzania rwnolegego.
Nastpnie w usystematyzowany sposb opisuje szczegowe moliwoci MySQL
oraz przedstawia efektywne techniki dostpu do baz MySQL-a z poziomu C, Javy,
PHP, Perla, Pythona i innych rodowisk programistycznych.
W ksice opisano midzy innymi:

CZYTELNIA
FRAGMENTY KSIEK ONLINE

Instalacj i korzystanie z MySQL-a -- wraz ze szczegowym opisem implementacji


SQL w MySQL-u
Typy danych, zmienne, funkcje wbudowane i narzdzia dostpne z linii komend
API MySQL w jzyku C
Administracj bazami MySQL, wykonywanie kopii zapasowych i usuwanie
skutkw awarii
Optymalizacj i zabezpieczanie aplikacji
Tworzenie rozproszonych baz danych
Rozszerzanie funkcjonalnoci MySQL-a
Tworzenie baz danych przenonych na inne platformy
Dokadnie przestudiowana i zalecana przez twrc MySQL-a, Michaela Wideniusa,
ksika MySQL dostarcza profesjonalnym programistom tego, czego poszukiwali:
dogbnej, przemylanej wiedzy, potrzebnej do tworzenia zaawansowanych aplikacji.

Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl

Leon Atkinson jest autorem ksiki PHP. Programowanie. Jest te inicjatorem projektu
FreeTrade: zestawu narzdzi open source wykorzystujcego MySQL i PHP. Atkinson
od 1997 roku uywa MySQL w wielu aplikacjach sieciowych i e-commerce.

Spis treci
Wstp............................................................................................................................................................11

Cz I MySQL i model relacyjny

13

Rozdzia 1. Wprowadzenie do MySQL ........................................................................................................15


Jak si korzysta z baz danych?....................................................................................... 16
Dlaczego bazy danych s lepsze ni pliki? ....................................................................... 23
Bazy danych nie s lekiem na cae zo ............................................................................ 25
Dlaczego MySQL? ......................................................................................................... 26
Historia MySQL............................................................................................................. 27

Rozdzia 2. Instalacja MySQL .................................................................................................................... 29


Pobieranie plikw instalacyjnych..................................................................................... 29
Linux RPM .................................................................................................................... 30
Windows ...................................................................................................................... 31
Kompilowanie kodu rdowego...................................................................................... 33
Nadawanie uprawnie ................................................................................................... 33

Rozdzia 3. Interakcja z MySQL ................................................................................................................ 35


Poczenie klient-serwer poprzez TCP/IP ......................................................................... 35
Narzdzia wiersza polece ............................................................................................. 36
Interfejsy graficzne ........................................................................................................ 38
ODBC........................................................................................................................... 39
Interfejsy WWW............................................................................................................. 40

Rozdzia 4. Modele baz danych ..................................................................................................................41


Historia........................................................................................................................ 41
Terminologia................................................................................................................. 43
DBMS system zarzdzania baz danych ..................................................................... 43
Bazy danych oparte na zwykych plikach.......................................................................... 44
Hierarchiczne bazy danych ............................................................................................. 45
Sieciowe bazy danych.................................................................................................... 46
Relacyjne bazy danych................................................................................................... 47
Obiektowe bazy danych ................................................................................................. 48
Obiektowo-relacyjne bazy danych .................................................................................... 49

Rozdzia 5. Model relacyjny.......................................................................................................................51


Algebra relacyjna .......................................................................................................... 51
Tabele, wiersze i kolumny .............................................................................................. 52
Klucze.......................................................................................................................... 53
Powizania ................................................................................................................... 55

MySQL
Operacje relacyjne......................................................................................................... 56
Czy MySQL to prawdziwy system RDMBS? ...................................................................... 62

Rozdzia 6. Jzyk zapyta strukturalnych.............................................................................................. 63


SQL jako jzyk czwartej generacji ................................................................................... 63
Definiowanie danych ..................................................................................................... 64
Wstawianie wierszy ....................................................................................................... 66
Aktualizacja wierszy....................................................................................................... 67
Usuwanie wierszy.......................................................................................................... 67
Zapytania ..................................................................................................................... 68
Zczenia ..................................................................................................................... 69
Porzdkowanie.............................................................................................................. 71
Grupowanie .................................................................................................................. 71
Stosowanie ogranicze.................................................................................................. 72
Zmiana formy tabeli ...................................................................................................... 73

Rozdzia 7. Projektowanie bazy danych .................................................................................................. 75


Specyfikacja wymaga................................................................................................... 76
Specyfikacja projektowa ................................................................................................ 79
Tworzenie diagramw .................................................................................................... 81
Jzyki modelowania....................................................................................................... 83
Diagramy ER................................................................................................................. 84
Tworzenie diagramu ...................................................................................................... 85
Implementacja projektu ................................................................................................. 85
Testowanie................................................................................................................... 88
Planowanie rozwoju ....................................................................................................... 88

Rozdzia 8. Normalizacja ............................................................................................................................91


Zasadno normalizacji ................................................................................................. 92
Pierwsza posta normalna ............................................................................................. 93
Druga posta normalna ................................................................................................. 94
Trzecia posta normalna................................................................................................ 96
Posta normalna Boyce-Codda ....................................................................................... 97
Czwarta posta normalna .............................................................................................. 98
Denormalizacja ............................................................................................................. 99

Rozdzia 9. Transakcje i wspbieno ..................................................................................................101


Wspbieno ........................................................................................................... 102
Transakcje ................................................................................................................. 102
Blokowanie................................................................................................................. 106
Sekwencje.................................................................................................................. 107

Cz II Encyklopedia MySQL

109

Rozdzia 10. Typy danych, zmienne i wyraenia...................................................................................... 111


Typy danych................................................................................................................ 111
Zmienne..................................................................................................................... 114
Operatory ................................................................................................................... 116
Wyraenia .................................................................................................................. 123
Nazwy ze spacjami ...................................................................................................... 124

Spis treci

Rozdzia 11. Typy kolumn i indeksw .......................................................................................................125


Liczby ........................................................................................................................ 126
acuchy.................................................................................................................... 128
Wartoci opisujce czas .............................................................................................. 131
Aliasy typw kolumn.................................................................................................... 133
Indeksy ...................................................................................................................... 133

Rozdzia 12. Funkcje wewntrzne ...........................................................................................................135


Diagnostyka i konfiguracja ........................................................................................... 136
Sterowanie przebiegiem egzekucji ................................................................................ 138
Grupowanie ................................................................................................................ 142
Funkcje matematyczne ................................................................................................ 146
acuchy.................................................................................................................... 154
Czas .......................................................................................................................... 169
Pozostae funkcje........................................................................................................ 181
Procedury ................................................................................................................... 183

Rozdzia 13. Instrukcje SQL ......................................................................................................................185


Komentarze................................................................................................................ 185
Alter Table.................................................................................................................. 186
Analyze Table ............................................................................................................. 190
Backup Table.............................................................................................................. 191
Begin [Work]............................................................................................................... 192
Change Master ........................................................................................................... 192
Check Table ............................................................................................................... 193
Commit ...................................................................................................................... 193
Create Database......................................................................................................... 194
Create Function .......................................................................................................... 194
Create Index............................................................................................................... 194
Create Table............................................................................................................... 195
Delete........................................................................................................................ 201
Describe .................................................................................................................... 202
Drop Database ........................................................................................................... 203
Drop Function ............................................................................................................. 204
Drop Index.................................................................................................................. 204
Drop Table ................................................................................................................. 204
Explain....................................................................................................................... 204
Flush ......................................................................................................................... 206
Grant ......................................................................................................................... 207
Insert......................................................................................................................... 209
Kill............................................................................................................................. 210
Lock Tables................................................................................................................ 210
Load Data Infile .......................................................................................................... 211
Load Table ................................................................................................................. 213
Optimize Table............................................................................................................ 214
Purge Master Logs...................................................................................................... 214
Rename Table ............................................................................................................ 214
Repair Table ............................................................................................................... 215
Replace ..................................................................................................................... 215
Reset Master ............................................................................................................. 216
Reset Slave................................................................................................................ 216

MySQL
Restore Table ............................................................................................................. 216
Revoke....................................................................................................................... 216
Rollback..................................................................................................................... 217
Select ........................................................................................................................ 217
Set ............................................................................................................................ 222
Set Transaction .......................................................................................................... 226
Show Columns............................................................................................................ 226
Show Create Table...................................................................................................... 227
Show Databases......................................................................................................... 228
Show Grants............................................................................................................... 228
Show Index................................................................................................................. 229
Show Logs ................................................................................................................. 229
Show Processlist ........................................................................................................ 230
Show Status............................................................................................................... 230
Show Table Status ...................................................................................................... 232
Show Tables............................................................................................................... 233
Show Variables........................................................................................................... 233
Slave ......................................................................................................................... 237
Truncate .................................................................................................................... 237
Unlock Tables............................................................................................................. 237
Update....................................................................................................................... 238
Use ........................................................................................................................... 239

Rozdzia 14. Narzdzia uruchamiane z wiersza polece.......................................................................241


Zmienne rodowiskowe ............................................................................................... 241
Pliki opcji ................................................................................................................... 242
comp_err.................................................................................................................... 244
isamchk ..................................................................................................................... 244
make_binary_distribution............................................................................................. 244
msql2mysql................................................................................................................ 244
my_print_defaults ....................................................................................................... 245
myisamchk................................................................................................................. 246
myisamlog.................................................................................................................. 252
myisampack ............................................................................................................... 254
mysql......................................................................................................................... 256
mysql_install_db ......................................................................................................... 268
mysqlaccess .............................................................................................................. 268
mysqladmin................................................................................................................ 269
mysqlbinlog ................................................................................................................ 277
mysqlbug ................................................................................................................... 279
mysqlc ....................................................................................................................... 279
mysqld....................................................................................................................... 280
mysqld-max ................................................................................................................ 296
mysqld-nt ................................................................................................................... 296
mysqld-opt ................................................................................................................. 297
mysqld_multi .............................................................................................................. 297
mysqldump ................................................................................................................ 299
mysqldumpslow .......................................................................................................... 306
mysqlhotcopy ............................................................................................................. 308
mysqlimport ............................................................................................................... 311
mysqlshow ................................................................................................................. 315

Spis treci

pack_isam ................................................................................................................. 317


perror ........................................................................................................................ 317
replace ...................................................................................................................... 318
safe_mysqld............................................................................................................... 319

Rozdzia 15. API C ......................................................................................................................................321


Typy danych................................................................................................................ 321
Funkcje klienckie ........................................................................................................ 325
Funkcje obsugi tablic.................................................................................................. 350
Funkcje zestaww znakw ........................................................................................... 350
Funkcje obsugi plikw................................................................................................. 352
Funkcje obsugi bdw ............................................................................................... 354
Funkcje mieszajce ..................................................................................................... 354
Funkcje list................................................................................................................. 355
Funkcje zarzdzajce pamici..................................................................................... 356
Funkcje opcji .............................................................................................................. 357
Funkcje obsugi hase.................................................................................................. 357
Funkcje acuchowe .................................................................................................... 358
Funkcje obsugi wtkw ............................................................................................... 360

Cz III Pisanie programw klienckich MySQL

361

Rozdzia 16. Programowanie w API jzyka C.........................................................................................363


Przygotowanie programu .............................................................................................. 363
Pobieranie danych....................................................................................................... 365
Przetwarzanie danych .................................................................................................. 367

Rozdzia 17. JDBC ......................................................................................................................................371


Przygotowanie programu .............................................................................................. 371
Pobieranie danych....................................................................................................... 373
Przetwarzanie danych .................................................................................................. 375

Rozdzia 18. VBScript i ODBC ...................................................................................................................377


Przygotowanie programu .............................................................................................. 377
Pobieranie danych....................................................................................................... 379
Przetwarzanie danych .................................................................................................. 381

Rozdzia 19. PHP .......................................................................................................................................385


Przygotowanie programu .............................................................................................. 385
Pobieranie danych....................................................................................................... 386
Przetwarzanie danych .................................................................................................. 388

Rozdzia 20. Perl .......................................................................................................................................391


Przygotowanie programu .............................................................................................. 391
Pobieranie danych....................................................................................................... 392
Przetwarzanie danych .................................................................................................. 393

Rozdzia 21. Python ..................................................................................................................................397


Przygotowanie programu .............................................................................................. 397
Pobieranie danych....................................................................................................... 398
Przetwarzanie danych .................................................................................................. 400

MySQL
Rozdzia 22. API MySQL++.......................................................................................................................403
Przygotowanie programu .............................................................................................. 403
Pobieranie danych....................................................................................................... 404
Przetwarzanie danych .................................................................................................. 406

Cz IV Zagadnienia zaawansowane

409

Rozdzia 23. Administracja baz danych .................................................................................................411


Zakres odpowiedzialnoci ............................................................................................ 411
Udostpnianie danych ................................................................................................. 412
Zapewnienie spjnoci bazy danych.............................................................................. 413
W razie awarii ............................................................................................................. 414
Pomoc uytkownikom .................................................................................................. 414
Tworzenie i wdraanie standardw................................................................................ 415

Rozdzia 24. Fizyczne struktury danych ................................................................................................417


Model bazy danych i tabel............................................................................................ 417
Partycje dedykowane ................................................................................................... 418
Typy tabel................................................................................................................... 418
Kolumny..................................................................................................................... 425
Blokowanie tabel ........................................................................................................ 426
Indeksy ...................................................................................................................... 426
Deskryptory plikw ...................................................................................................... 428
Pami systemowa ..................................................................................................... 429
Dzienniki .................................................................................................................... 429

Rozdzia 25. Jak radzi sobie z awari .................................................................................................435


Sprawdzanie tabel i ich naprawianie ............................................................................. 435
Kopie bezpieczestwa, odzyskiwanie danych ................................................................. 438

Rozdzia 26. Optymalizacja .....................................................................................................................445


Zanim zajmiesz si optymalizacj ................................................................................. 445
Badanie wydajnoci..................................................................................................... 446
Optymalizacja na etapie projektu.................................................................................. 450
Optymalizacja w aplikacjach......................................................................................... 451
Optymalizacja zapyta ................................................................................................. 452
Optymalizacja zapyta SQL .......................................................................................... 455
Troska o tabele........................................................................................................... 456
Dostrajanie serwera .................................................................................................... 457
Rekompilacja MySQL................................................................................................... 459

Rozdzia 27. Bezpieczestwo..................................................................................................................463


System uprawnie ...................................................................................................... 463
Nadawanie uprawnie ................................................................................................. 469
Zapewnianie bezpieczestwa ....................................................................................... 471

Rozdzia 28. Zmiana bazy danych...........................................................................................................475


Zmiana serwerw baz danych....................................................................................... 475
Uzupenianie moliwoci MySQL................................................................................... 476
Uycie trybu ANSI........................................................................................................ 481
Wyjtkowe cechy MySQL.............................................................................................. 482

Spis treci

Rozdzia 29. Rozproszone bazy danych .................................................................................................487


Pojcie rozproszonych baz danych ................................................................................ 487
Synchronizacja opniona ............................................................................................ 490
Replikacja w MySQL .................................................................................................... 492
Uruchamianie wielu serwerw ...................................................................................... 497

Rozdzia 30. Odwzorowanie na obiekty .................................................................................................499


Model obiektowy ......................................................................................................... 500
Serializacja obiektw................................................................................................... 500
Odwzorowanie obiektowoci i relacyjnoci ..................................................................... 503

Rozdzia 31. Rozszerzanie moliwoci ....................................................................................................513


Biblioteka do analizy bdw ........................................................................................ 513
Dodawanie zestaww znakw ...................................................................................... 515
Funkcje ...................................................................................................................... 520
Procedury ................................................................................................................... 523

Dodatki

525

Dodatek A Zasoby internetowe...............................................................................................................527


Oficjalne listy mailingowe............................................................................................. 527
Nieoficjalne listy wysykowe ......................................................................................... 529
Archiwa list wysykowych.............................................................................................. 529
Witryny....................................................................................................................... 530

Dodatek B Dalsza lektura ........................................................................................................................533


Dodatek C Biznes i kwestie prawne .......................................................................................................535
Licencja MySQL .......................................................................................................... 535
Publiczna licencja GNU ................................................................................................ 535
Stabilno .................................................................................................................. 542
Pomoc ....................................................................................................................... 542

Dodatek D Sowa zastrzeone ................................................................................................................545


Dodatek E Kody bdw MySQL ...............................................................................................................549
Dodatek F Styl kodowania w SQL .............................................................................................................561
Zalecenia oglne ........................................................................................................ 561
Identyfikatory.............................................................................................................. 562
Tabele ....................................................................................................................... 562
Instrukcje ................................................................................................................... 563

Dodatek G Projekt przykadowej bazy danych ..................................................................................... 565


Diagramy.................................................................................................................... 565
Schemat SQL ............................................................................................................. 567

Skorowidz ................................................................................................................................................579

Funkcje wewntrzne
W tym rozdziale:
n

Diagnostyka i konfiguracja

Sterowanie przebiegiem egzekucji

Grupowanie

Funkcje matematyczne

acuchy

Czas

Pozostae funkcje

Procedury

Funkcje zwracaj wartoci, ktre czasami zale od parametrw wejciowych. Funkcj


mona wywoa wszdzie tam, gdzie moliwe jest zastosowanie wyraenia. Dotyczy to
rwnie samych parametrw funkcji innymi sowy, moliwe jest zagniedanie wywoa
funkcji.
W przypadku wikszoci funkcji parametry s przesyane w nawiasach i nie moe by odstepu
pomidzy nazw funkcji a nawiasem otwierajcym. Pomaga to interpreterowi MySQL odrni nazwy funkcji od nazw kolumn. Wymg ten mona znie za pomoc odpowiednich
argumentw podanych z wiersza polece, ale w konsekwencji uywanie nazw funkcji do
nazywania kolumn bdzie niemoliwe.
Do kilku wymienionych w tym rozdziale funkcji lepiej pasowaoby okrelenie operator.
Zostay jednak umieszczone tutaj, poniewa ich dziaanie przypomina w wikszym stopniu
funkcj. Z ich opisw jasno wynika, e nie wymagaj nawiasw.
Kady opis funkcji rozpoczyna si od nagwka, prezentujcego form wywoania funkcji.
Wyrazy pisane duymi literami to sowa kluczowe. Wyrazy pisane maymi literami to przekazywane funkcji wartoci, ktre mog mie form staych, nazw kolumn lub wyrae. MySQL
rozpoznaje nazwy funkcji wpisane dowoln kombinacj duych i maych liter.

136

Cz II n Encyklopedia MySQL
Wielokropek () oznacza, e funkcja pobiera list wartoci oddzielonych przecinkami.
Wszystko, co umieszczone zostao w nawiasach kwadratowych, jest opcjonalne. Niektre
funkcje maj kilka poziomw parametrw opcjonalnych.
Jak pamitamy, wartoci wikszoci wyrae, ktre zawieraj warto , bdzie rwnie warto . Dotyczy to rwnie wywoa funkcji. Na przykad konkatenacja wartoci
 z dowolnym acuchem daje .

Diagnostyka i konfiguracja
Opisane tu funkcje zwracaj informacje o serwerze i pomagaj w diagnostyce.

BENCHMARK(rundy, warto)
Funkcja oblicza warto wyraenia tyle razy, na ile wskazuje pierwszy argument. Zwraca
zawsze zero, ale uywajc klienta , mona sprawdzi, ile czasu zajo jej wykonanie.
Rysunek 12.1 pokazuje, ile czasu zabiera MySQL przeprowadzenie 100 000 wywoa funkcji

.
Rysunek 12.1.
Funkcja
BENCHMARK


   
 !
"####################################"
$   
 $
"####################################"
$$
"####################################"
%&'()*+,

Naley pamita, e zgoszony czas to czas wykonania wywoania, a nie czas korzystania
z procesora. Tok na serwerze lub w sieci moe znaczco spowolni czas egzekucji.

CONNECTION_ID()
Funkcja zwraca identyfikator poczenia dla poczenia biecego patrz: rysunek 12.2.
Rysunek 12.2.
Funkcja
CONNECTION_ID


  -.- !
"#################"
$  -.- $
"#################"
$$
"#################"
%&'(),

Rozdzia 12. n Funkcje wewntrzne

137

DATABASE()
Funkcja zwraca nazw domylnej bazy danych. Jeeli nie zostaa wybrana adna domylna
baza danych, zwracana jest warto null patrz: rysunek 12.3.
Rysunek 12.3.
Funkcja
DATABASE


    !
"############"
$    $
"############"
$(($
"############"
%&'(),

LAST_INSERT_ID([klucz_gwny])
MySQL dla kadego poczenia przechowuje warto ostatnio uytego klucza gwnego.
Funkcja 
  zwraca t warto. Jeeli przelemy jej argument, warto zostanie
zgodnie z nim ustawiona.
Istniej dwa sposoby uycia tej funkcji. Najczciej stosowany dotyczy kolumn  
 
.
Jeeli kolumnie nadana zostaa warto w wyniku automatycznej inkrementacji, to funkcji

  przypisana zostaje wanie ta warto. Z kolei automatycznie inkrementowana
kolumna, ktrej nadamy warto rcznie zamiast podawania zera lub , nie spowoduje
stosownej aktualizacji wartoci zwracanej przez 
  . Rysunek 12.4 przedstawia,
jak zmienia si warto 
  po wstawieniu wiersza z wartoci  dla kolumny automatycznie inkrementowanej.
Rysunek 12.4.
Funkcja
LAST_INSERT_ID



 .-  .- !
"##################"
$/(.'%(.'0 $
"##################"
$$
"##################"
%&'(),
-  - 1%023(4
 

056)7+(%891/3
* !
:2%%&/;;,(0),


 .-  .- !
"##################"
$/(.'%(.'0 $
"##################"
$+$
"##################"
%&'(),

Za pomoc funkcji 


  mona rwnie symulowa sekwencje, poprzez skojarzenie funkcji z jednokolumnow tabel. Opis sekwencji i sposobu ich symulowania znajduje si w rozdziale 9. Transakcje i wspbieno.

138

Cz II n Encyklopedia MySQL

SESSION_USER()
Jest to alias funkcji  .

SYSTEM_USER()
Jest to alias funkcji  .

USER()
Funkcja zwraca nazw uytkownika, ktry zainicjowa sesj, wraz z domen komputera,
z ktrego nastpuje poczenie patrz: rysunek 12.5.
Rysunek 12.5.
Funkcja
USER


  !
"################"
$  $
"################"
$ <,/=($
"################"
%&'(),

VERSION()
Funkcja zwraca numer wersji serwera MySQL patrz: rysunek 12.6.
Rysunek 12.6.
Funkcja
VERSION


4 - !
"###########"
$4 - $
"###########"
$>))*#($
"###########"
%&'()*,

Sterowanie przebiegiem egzekucji


Opisane tu funkcje steruj przebiegiem egzekucji.  oraz  zostay zaimplementowane
na wzr instrukcji jzyka trzeciej generacji i mimo e nie uywa si z nimi nawiasw, korzysta
si z nich tak, jak z funkcji. Dwie funkcje blokujce oraz funkcja wymuszajca oczekiwanie
bazy nadrzdnej na podrzdn uatwiaj zarzdzanie wspbienoci.

Rozdzia 12. n Funkcje wewntrzne

139

CASE warto_testowa WHEN przypadek1 THEN


warto_zwracana1 [WHEN przypadek2 THEN
warto_zwracana2] [ELSE warto_domylna] END
Instrukcja pobiera warto testow i porwnuje j z jednym lub z kilkoma przypadkami.
Jeeli warto testowa odpowiada ktremu przypadkowi, zwracana jest warto z nim skojarzona. Jeeli warto testowa nie jest rwna adnemu z przypadkw, instrukcja  zwraca
opcjonaln warto domyln.
Rysunek 12.7 przedstawia instrukcj  zastosowan dla tabeli o piciu wierszach. Dla
kolumn o liczbie porzdkowej 1 i 2 zwracany jest numer kolumny sownie, a dla pozostaych
domylny acuch 
.
Rysunek 12.7.
Instrukcja
CASE



1  
1
#?   @0
#? *  &/
#
 -/&/%(AB
# C2(/(0C'/5/'/  
#D1%023(!
"####"#########################"
$
1$C2(/(0C'/5/'/  $
"####"#########################"
$$@0$
$*$&/$
$6$-/&/%(AB$
$>$-/&/%(AB$
$+$-/&/%(AB$
"####"#########################"
+%&'(),

CASE WHEN przypadek1 THEN warto_zwracana1 [WHEN przypadek2


THEN warto_zwracana2] [ELSE warto_domylna] END
Alternatywna wersja instrukcji  oblicza warto kadego wyraenia, zamiast porwnywa je do pojedynczych wartoci. Przykad przedstawiony na rysunku 12.8 pokazuje, e
wyraenia bdce poszczeglnymi przypadkami oraz wartoci zwracane mog by dowolnym
prawidowym wyraeniem, w tym wywoaniem funkcji lub odwoaniem do innej kolumny.
Poniewa instrukcja  moe zmienia typy dla kadego wiersza, przyjmuje si, e kolumna ma typ zgodny z wartoci zwracan przez pierwszy warunek 
.

GET_LOCK(nazwa, limit_czasu)
Przez okrelony czas mierzony w sekundach funkcja   stara si uzyska dostp do
blokady o podanej nazwie. Wywoanie zakoczy si dopiero z chwil upynicia zadanego
czasu lub uzyskania dostpu do blokady.

140

Cz II n Encyklopedia MySQL

Rysunek 12.8.
Instrukcja
CASE WHEN



1 
#? 
1E6  F? 
1*
#? 
1G>  
1
#
 /C&/
# C2(/(0C'/5/'/  
#D1%023(!
"####"##########################"
$
1$C2(/(0C'/5/'/  $
"####"##########################"
$$)$
$*$>)$
$6$C,C(3/$
$>$>$
$+$05$
"####"##########################"
+%&'(),

Jedno poczenie moe utrzymywa tylko jedn blokad naraz. Wywoanie   uwalnia
blokad utrzymywan dotychczas, ale dobrym nawykiem jest uywanie     z chwil, gdy blokada nie jest ju potrzebna. Blokada jest zwalniana rwnie w chwili przerwania
poczenia.
Fakt utrzymywania blokady nie stwarza adnych ogranicze dla innych pocze ani nie daje
adnych korzyci dla poczenia j utrzymujcego. Blokad mona jednak uywa w powizaniu, implementujc w ten sposb dowolny poziom blokowania. Zastosowanie   do
implementacji powizanego blokowania wierszy zostao opisane w rozdziale 9. Prosty przykad przedstawiono na rysunku 12.9.
Rysunek 12.9.
Funkcja
GET_LOCK


H .
 1%023()
1G6I !
"###############################"
$H .
 1%023()
1G6I $
"###############################"
$$
"###############################"
%&'(),
F 1%023(  /G6)+?  
1G6!
:2%%&/;;,(0),
&/(,=0J =/K0J?/%'KJ


 .
 1%023()
1G6 !
"###############################"
$
 .
 1%023()
1G6 $
"###############################"
$$
"###############################"
%&'(),

Rozdzia 12. n Funkcje wewntrzne

141

IF(warto_testowa, warto_prawda, warto_fasz)


Funkcja zwraca jedn warto, jeeli wyraenie testowe ma warto  , i inn, jeeli ma
ono warto  . Warto testowa jest konwertowana na liczb cakowit, dlatego naley
pamita o uyciu operatora porwnania zamiast przesyania jedynie liczby zmiennoprzecinkowej.
Podobnie jak w przypadku  , instrukcja  moe zwraca typy niezgodne z sob w kadym
z dwch wariantw. Jeeli obydwie wartoci s acuchami, obydwie zostan zwrcone jako
acuchy. Jeeli ani jedna warto nie jest acuchem, a przynajmniej jedna jest liczb
zmiennoprzecinkow,  zwrci obydwie jako wartoci zmiennoprzecinkowe. W pozostaych
przypadkach zwrcone zostan liczby cakowite. Rysunek 12.10 demonstruje uycie instrukcji  do oznaczenia dnia jako dnia w tygodniu lub dnia w weekendzie.
Rysunek 12.10.
Instrukcja IF


-DLD? ? 'I7 &300C'M(K0'/ !
"################################################################"
$-DLD? ? 'I7 &300C'M(K0'/ $
"################################################################"
$0C'M(K0'/$
"################################################################"
%&'(),

IFNULL(warto_testowa, warto_zwracana)
Funkcja zwraca warto testow, jeeli jest ona niepusta w innym przypadku zwracany
jest drugi argument. Przykad przedstawiony na rysunku 12.11 pokazuje, jak mona za pomoc
instrukcji 
 zamienia wartoci  stosownymi opisami.
Rysunek 12.11.
Funkcja
IFNULL


/C&/
#-D

1' %/31'2 1'


#D1%023(!
"#############"############"
$/C&/$1'$
"#############"############"
$C,C(,C3/$ %/31'2$
$H%CN'M$ %/31'2$
$C,C(3/$ %/31'2$
$F/(/$ %/31'2$
$05$(%891/3$
"#############"############"
+%&'(),

MASTER_POS_WAIT(nazwa, pozycja)
Funkcja oczekuje, a serwer podrzdny dogoni serwer nadrzdny w obrbie rodowiska
replikacyjnego. Wymagane jest podanie nazwy pliku dziennika i pozycji w dzienniku, ktr
serwer podrzdny musi osign. Jeeli serwer nie jest serwerem nadrzdnym, zwracana

142

Cz II n Encyklopedia MySQL
jest od razu warto . Jeeli serwer podrzdny nie zosta jeszcze uruchomiony, funkcja
bdzie trwaa w zablokowaniu, oczekujc na uruchomienie serwera i jego dotarcie do okrelonej pozycji w dzienniku.
Funkcja zwraca liczb przerobionych w czasie oczekiwania zdarze w dzienniku. Wicej
informacji na temat replikacji znajduje si w rozdziale 29. Rozproszone bazy danych.

NULLIF(warto_testowa1, warto_testowa2)
Funkcja zwraca , jeeli obydwie wartoci testowe s rwne. W innym przypadku zwraca
pierwsz warto testow. Funkcja ta przydaje si do zamiany wartoci zerowych na ,
co ilustruje rysunek 12.12.
Rysunek 12.12.
Funkcja
NULLIF


/C&/

-D/K/C /K/C
#D1%023(!
"#############"#########"
$/C&/$/K/C$
"#############"#########"
$C,C(,C3/$

$
$H%CN'M$

$
$C,C(3/$

$
$F/(/$

$
$05$*$
"#############"#########"
+%&'(),

RELEASE_LOCK(nazwa)
Funkcja zwalnia blokad wskazan argumentem , uzyskan wczeniej za pomoc
funkcji  . Jeeli wskazana blokada nie jest utrzymywana, zwracana jest warto
. Przykad zastosowania znajduje si w opisie funkcji  .

Grupowanie
Opisane tu funkcje dziaaj na kilku wartociach w kolumnie. Jeeli nie podano klauzuli
 , wwczas obejmuj swoim dziaaniem wszystkie wiersze. Na potrzeby przykadw
tu przedstawionych stworzona zostaa nowa definicja tabeli, ktr przedstawia rysunek 12.13.
Kolumny z wartoci  s pomijane w obliczeniach, dokonywanych przez te funkcje.
Uycie  w wyraeniu zawsze spowoduje zwrcenie , ale funkcja grupujca zastosowana na kolumnie zawierajcej  nie powoduje tego efektu  jest wwczas
ignorowane.

Rozdzia 12. n Funkcje wewntrzne


Rysunek 12.13.
Przykad
grupowania
danych

143

    
((K%21
#
1-  

 .-    
#%2C/4 I 
#?'3- 
#F-L L
1
# !
:2%%&/;;,(0),
-  - ((K%21%2C/?'3 4
 
# C%&' 
# C%&'>+ 
# C%&'OP 
# C%&'O 
# C%&' 
# C%&'67 
# C%&'7 
# C%&'7+ 
#'N',*6 
#'N',O 
#'N',P 
#'N',I6 
#'N',++ 
#'N',PO 
#'N',I> 
#'N',+ !
:2%I%&/;;,(0),
,%0JI21',/(J?/%'KJ

AVG(kolumna)
Funkcja zwraca redni arytmetyczn wynikw z grupy. Jest ona definiowana jako suma
wszystkich wartoci w grupie podzielona przez ich liczb. Rysunek 12.14 prezentuje rednie
wyniki kadej druyny.
Rysunek 12.14.
Funkcja AVG


%2C/4H?'3
#D((K%21
#HF L%2C/!
"###########"############"
$%2C/$4H?'3 $
"###########"############"
$ C%&'$6O)*+$
$'N',$+P)7+$
"###########"############"
*%&'(),

BIT_AND(kolumna)
Funkcja wykonuje na grupie bitow operacj AND i zwraca dziesitn liczb cakowit
patrz: rysunek 12.15.

144

Cz II n Encyklopedia MySQL

BIT_OR(kolumna)
Funkcja wykonuje na grupie bitow operacj OR i zwraca dziesitn liczb cakowit. Rysunek 12.15 ukazuje, e nie ma bitw, ktre byyby ustawione we wszystkich wynikach,
ale pierwszych siedem jest ustawionych w co najmniej jednym wyniku.
Rysunek 12.15.
Funkcja
BIT_OR


%2C/ - .?'3  - .?'3
#D((K%21
#HF L%2C/!
"###########"################"###############"
$%2C/$ - .?'3 $ - .?'3 $
"###########"################"###############"
$ C%&'$$*7$
$'N',$$*7$
"###########"################"###############"
*%&'(),

COUNT(kolumna)
Funkcja zwraca liczb niepustych elementw w grupie. Mona te zastosowa znak gwiazdki ()
do sprawdzenia liczby wierszy niezalenie od tego, czy maj warto . Na rysunku 12.16
za kadym razem widzimy 8 wynikw. W druynie Czerwonych dwukrotnie pojawi si
wynik 11, wic liczba niepowtarzalnych wynikw wynosi dla niej 7.
Rysunek 12.16.
Funkcja
COUNT


%2C/  ?'3   - - ?'3
#D((K%21
#HF L%2C/!
"###########"##############"#######################"
$%2C/$  ?'3 $  - - ?'3 $
"###########"##############"#######################"
$ C%&'$P$7$
$'N',$P$P$
"###########"##############"#######################"
*%&'(),

COUNT([DISTINCT] )
Ta forma funkcji 
 zwraca liczb niepowtarzalnych kombinacji wartoci kolumn podanych jako argumenty patrz: rysunek 12.16.

MAX()
Funkcja zwraca najwiksz warto w grupie. Maksymalna warto acuchowa jest definiowana jako ta, ktra wystpuje ostatnia w kolejnoci alfabetycznej. Poniewa daty mona
porzdkowa, maksymalna data to ostatnia w kolejnoci. Dwucyfrowe oznaczenia roku

Rozdzia 12. n Funkcje wewntrzne

145

mog nie by poprawnie sortowane, chyba e stanowi cz kolumny  . Konieczne


moe wwczas okaza si wymuszenie czterocyfrowych oznacze lat poprzez dodanie zera
za pomoc funkcji   . Rysunek 12.17 przedstawia maksymalne i minimalne wyniki
dla obu druyn.
Rysunek 12.17.
Funkcja MAX


%2C/-?'3 ?'3
#D((K%21
#HF L%2C/!
"###########"############"############"
$%2C/$-?'3 $?'3 $
"###########"############"############"
$ C%&'$$OP$
$'N',$+$O$
"###########"############"############"
*%&'(),

MIN()
Funkcja zwraca najmniejsz warto w grupie. Minimalna warto acuchowa to ta, ktra
wystpuje pierwsza w kolejnoci alfabetycznej (patrz: rysunek 12.17).

STD()
Funkcja zwraca odchylenie standardowe dla grupy patrz: rysunek 12.18.
Rysunek 12.18.
Funkcja STD


%2C/ ?'3
#D((K%21
#HF L%2C/!
"###########"############"
$%2C/$ ?'3 $
"###########"############"
$ C%&'$6)>6$
$'N',$*P)7O+I$
"###########"############"
*%&'(),

STDDEV()
Jest to alias funkcji  .

SUM()
Funkcja zwraca sum elementw grupy. acuchy i daty s przeksztacane na liczby cakowite patrz: rysunek 12.19.

146

Cz II n Encyklopedia MySQL

Rysunek 12.19.
Funkcja SUM


%2C/?'3
#D((K%21
#HF L%2C/!
"###########"############"
$%2C/$?'3 $
"###########"############"
$ C%&'$66$
$'N',$>7$
"###########"############"
*%&'(),

Funkcje matematyczne
Opisane tu funkcje wykonuj operacje matematyczne. Wikszo z nich pobiera i zwraca liczby
zmiennoprzecinkowe.

ABS(liczba)
Funkcja zwraca warto bezwzgldn z liczby patrz: rysunek 12.20.
Rysunek 12.20.
Funkcja ABS


 #7 !
"##########"
$ #7 $
"##########"
$7$
"##########"
%&'(),

ACOS(liczba)
Funkcja zwraca arcus cosinus z liczby. Arcus cosinus z liczb wikszych od 1 lub mniejszych
od 0 jest nieokrelony patrz: rysunek 12.21.
Rysunek 12.21.
Funkcja ACOS


  !
"##########"
$  $
"##########"
$)$
"##########"
%&'(),

Rozdzia 12. n Funkcje wewntrzne

147

ASIN(liczba)
Funkcja zwraca arcus sinus z liczby. Arcus sinus z liczb wikszych od 1 lub mniejszych od 0
jest nieokrelony patrz: rysunek 12.22.
Rysunek 12.22.
Funkcja ASIN


- !
"##########"
$- $
"##########"
$)+77OI$
"##########"
%&'(),

ATAN(liczba)
Funkcja zwraca arcus tangens z liczby patrz: rysunek 12.23.
Rysunek 12.23.
Funkcja ATAN


  !
"##########"
$  $
"##########"
$)7P+6OP$
"##########"
%&'(),

ATAN2(liczba, liczba)
Funkcja zwraca kt midzy odcinkiem czcym dany punkt z pocztkiem ukadu wsprzdnych a osi x, wyraony w radianach patrz: rysunek 12.24.
Rysunek 12.24.
Funkcja ATAN2


 *67 !
"############"
$ *67 $
"############"
$)>>PO*$
"############"
%&'(),

CEILING(liczba)
Funkcja zaokrgla liczb zmiennoprzecinkow do najbliszej wikszej liczby cakowitej
patrz: rysunek 12.25.

148

Cz II n Encyklopedia MySQL

Rysunek 12.25.
Funkcja
CEILING


 -
-H)6 !
"##############"
$ -
-H)6 $
"##############"
$*$
"##############"
%&'(),

COS(liczba)
Funkcja zwraca cosinus z liczby wyraony w radianach patrz: rysunek 12.26.
Rysunek 12.26.
Funkcja COS


  !
"##########"
$  $
"##########"
$)+>6*$
"##########"
%&'(),

COT(liczba)
Funkcja zwraca cotangens z liczby patrz: rysunek 12.27.
Rysunek 12.27.
Funkcja COT


   !
"############"
$   $
"############"
$)I>*O*I*$
"############"
%&'(),

DEGREES(liczba)
Funkcja zamienia radiany na stopnie patrz: rysunek 12.28.
Rysunek 12.28.
Funkcja
DEGREES


 H  !
"#################"
$ H  $
"#################"
$+7)*O+77O+6P*$
"#################"
%&'(),

Rozdzia 12. n Funkcje wewntrzne

149

EXP(liczba)
Funkcja zwraca podstaw logarytmu naturalnego (e) podniesion do podanej potgi patrz:
rysunek 12.29.
Rysunek 12.29.
Funkcja EXP


 F* !
"##########"
$ F* $
"##########"
$7)6PO+I$
"##########"
%&'(),

FLOOR(liczba)
Funkcja zwraca najblisz mniejsz liczb cakowit dla podanej liczby zmiennoprzecinkowej patrz: rysunek 12.30.
Rysunek 12.30.
Funkcja
FLOOR


D
)7 !
"############"
$D
)7 $
"############"
$$
"############"
%&'(),

GREATEST()
Funkcja zwraca najwiksz warto z podanej listy, dziaajc zarwno na acuchach, jak
i na liczbach patrz: rysunek 12.31.
Rysunek 12.31.
Funkcja
GREATEST


H   *6 !
"#################"
$H   *6 $
"#################"
$6$
"#################"
%&'(),

LEAST()
Funkcja zwraca najmniejsz warto z podanej listy, dziaajc zarwno na acuchach, jak i na
liczbach patrz: rysunek 12.32.

150

Cz II n Encyklopedia MySQL

Rysunek 12.32.
Funkcja LEAST



 *6 !
"##############"
$
 *6 $
"##############"
$$
"##############"
%&'(),

LOG(liczba)
Funkcja zwraca logarytm naturalny z liczby patrz: rysunek 12.33.
Rysunek 12.33.
Funkcja LOG



H !
"##########"
$
H $
"##########"
$*)6*+P+$
"##########"
%&'(),

LOG10(liczba)
Funkcja zwraca logarytm dziesitny z liczby patrz: rysunek 13.34.
Rysunek 13.34.
Funkcja LOG10



H*6> !
"#############"
$
H*6> $
"#############"
$6)O6+$
"#############"
%&'(),

MOD(liczba, liczba)
Funkcja zwraca reszt z dzielenia, podobnie jak operator  patrz: rysunek 12.35.
Rysunek 12.35.
Funkcja MOD


6+> !
"############"
$6+> $
"############"
$6$
"############"
%&'(),

Rozdzia 12. n Funkcje wewntrzne

151

PI()
Funkcja zwraca kilka pierwszych cyfr liczby patrz: rysunek 12.36. Wewntrznie MySQL
przechowuje pen, podwjnej precyzji warto .
Rysunek 12.36.
Funkcja PI


F- !
"##########"
$F- $
"##########"
$6)>+O6$
"##########"
%&'(),

POW(liczba, liczba)
Funkcja zwraca pierwsz liczb podniesion do potgi liczby drugiej patrz: rysunek 12.37.
Rysunek 12.37.
Funkcja POW


F?* !
"#############"
$F?* $
"#############"
$*>)$
"#############"
%&'(),

POWER(liczba, liczba)
Jest to alias funkcji .

RADIANS(liczba)
Funkcja zamienia stopnie na radiany patrz: rysunek 12.38.
Rysunek 12.38.
Funkcja
RADIANS


->+ !
"##################"
$->+ $
"##################"
$)7P+6OPI66O7>+$
"##################"
%&'(),

152

Cz II n Encyklopedia MySQL

RAND([zarodek])
Funkcja zwraca liczb pseudolosow z zakresu od 0 do 1. Zarodka naley uywa, aby rozpocz generowanie liczb pseudolosowych od okrelonego punktu w sekwencji. Jeeli nie
podamy zarodka, MySQL uyje jako zarodka dla generatora liczb pseudolosowych warto
pobran z zegara systemowego patrz: rysunek 12.39.
Rysunek 12.39.
Funkcja RAND


*6>+ !
"##################"
$*6>+ $
"##################"
$)II+76>6*6*66$
"##################"
%&'(),

ROUND(liczba[, dokadno])
Funkcja zaokrgla liczb zmiennoprzecinkow do cakowitej lub opcjonalnie do podanej liczby
cyfr po przecinku patrz: rysunek 12.40.
Rysunek 12.40.
Funkcja ROUND


+)III* !
"##################"
$+)III* $
"##################"
$+)I7$
"##################"
%&'(),

SIGN(liczba)
Funkcja zwraca 1, jeeli liczba jest ujemna, lub 1, jeeli jest dodatnia patrz: rysunek 12.41.
Rysunek 12.41.
Funkcja SIGN


-H# !
"###########"
$-H# $
"###########"
$#$
"###########"
%&'(),

SIN(liczba)
Funkcja zwraca sinus z liczby patrz: rysunek 12.42.

Rozdzia 12. n Funkcje wewntrzne


Rysunek 12.42.
Funkcja SIN


- !
"##########"
$- $
"##########"
$)P>>7$
"##########"
%&'(),

SQRT(liczba)
Funkcja zwraca pierwiastek kwadratowy z liczby patrz: rysunek 12.43.
Rysunek 12.43.
Funkcja SQRT


: + !
"##########"
$: + $
"##########"
$6)P7*OP6$
"##########"
%&'(),

TAN(liczba)
Funkcja zwraca tangens z kta wyraonego w radianach patrz: rysunek 12.44.
Rysunek 12.44.
Funkcja TAN


  !
"##########"
$  $
"##########"
$)++7>P$
"##########"
%&'(),

TRUNCATE(liczba, dokadno)
Funkcja skraca cz uamkow liczby do podanej dokadnoci patrz: rysunek 12.45.
Rysunek 12.45.
Funkcja
TRUNCATE


   )*6>+* !
"#####################"
$   )*6>+* $
"#####################"
$)*6$
"#####################"
%&'(),

153

154

Cz II n Encyklopedia MySQL

acuchy
Opisane tu funkcje wykonuj operacje na acuchach i zwracaj acuchy. Jak pamitamy,
MySQL udostpnia operatory do porwnywania acuchw, w tym  i   .

ASCII(znak)
Funkcja zwraca kod ASCII pierwszego znaku w danym acuchu patrz: rysunek 12.46.
Rysunek 12.46.
Funkcja ASCII


 --/ !
"############"
$ --/ $
"############"
$O7$
"############"
%&'(),

BIN(liczba_cak)
Funkcja zwraca reprezentacj binarn podanej liczby cakowitej patrz: rysunek 12.47.
Rysunek 12.47.
Funkcja BIN


 -6 !
"#########"
$ -6 $
"#########"
$$
"#########"
%&'(),

BINARY acuch
Sowo kluczowe 
 sprawia, e dany acuch jest traktowany jako binarny, co oznacza, e
wielko liter ma znaczenie przy porwnaniach. Sowo 
 ma wyszy priorytet ni operatory porwnania (wykonywane jest przed nimi). Rysunek 12.48 ilustruje zjawisko rozrniania duych i maych liter w acuchach binarnych i nierozrniania w acuchach normalnych.
Rysunek 12.48.
Sowo kluczowe
BINARY


/G -L/G!
"#########"################"
$/G$ -L/G$
"#########"################"
$$$
"#########"################"
%&'(),

Rozdzia 12. n Funkcje wewntrzne

155

CHAR()
Funkcja zwraca acuch podany jako lista kodw ASCII patrz: rysunek 12.49.
Rysunek 12.49.
Funkcja CHAR


 O7OPOO !
"################"
$ O7OPOO $
"################"
$/N,$
"################"
%&'(),

CHARACTER_LENGHT(acuch)
Jest to alias funkcji 
.

CHAR_LENGTH(acuch)
Funkcja zwraca liczb znakw w acuchu patrz: rysunek 12.50. Znaki wielobajtowe s
liczone jako jeden znak.
Rysunek 12.50.
Funkcja
CHAR_LENGTH


 .
H :
 !
"######################"
$ .
H :
 $
"######################"
$+$
"######################"
%&'(),

CONCAT()
Funkcja dokonuje poczenia acuchw podanych w licie patrz: rysunek 12.51. Jeeli
ktrykolwiek z podanych elementw ma warto , zwracane jest rwnie .
Rysunek 12.51.
Funkcja
CONCAT


   /N, !
"#######################"
$   /N, $
"#######################"
$/N,$
"#######################"
%&'(),

156

Cz II n Encyklopedia MySQL

CONCAT_WS(separator, )
Funkcja dokonuje poczenia acuchw, rozdzielajc je separatorem patrz: rysunek 12.52.
W odrnieniu od funkcji 
 warto  jest tu ignorowana. Separator o wartoci 
powoduje, e funkcja zwraca .
Rysunek 12.52.
Funkcja
CONCAT_WS


   .?E/N, !
"################################"
$   .?E/N, $
"################################"
$/ENE,$
"################################"
%&'(),

CONV(liczba_cak, z_podstawy, do_podstawy)


Funkcja dokonuje konwersji liczby cakowitej z jednego systemu liczenia na inny. Funkcja ta
moe zastpowa funkcje 
,  i . Na rysunku 12.53 przedstawiono konwersj liczby
semkowej na dziesitn.
Rysunek 12.53.
Funkcja
CONV


 4P !
"####################"
$ 4P $
"####################"
$I>$
"####################"
%&'(),

DECODE(tekst_zaszyfrowany, haso)
Funkcja odszyfrowuje acuch zaszyfrowany za pomoc funkcji
 patrz: rysunek 12.54.
Rysunek 12.54.
Funkcja
DECODE


     :
=/5 =/5 !
"###########################################"
$     :
=/5 =/5 $
"###########################################"
$:
$
"###########################################"
%&'(),

ELT(element, )
Funkcja zwraca element o indeksie wskazanym przez pierwszy argument patrz: rysunek
12.55. Pierwszy element ma numer 1.

Rozdzia 12. n Funkcje wewntrzne


Rysunek 12.55.
Funkcja ELT

157



6/N,0 !
"#########################"
$
6/N,0 $
"#########################"
$,$
"#########################"
%&'(),

ENCODE(tekst, haso)
Funkcja zwraca acuch zaszyfrowany za pomoc podanego hasa. Zwrcony acuch jest
acuchem binarnym o tej samej dugoci, co pierwotny tekst. acuch mona odszyfrowa
za pomoc funkcji  . Funkcji tej nie naley stosowa dla kolumny 
 w tabeli
uprawnie (ang. grant table) MySQL. Do tego celu suy funkcja  . Rysunek 12.56
prezentuje zastosowanie
 do ukrycia pl zawierajcych hasa w aplikacji.
Rysunek 12.56.
Funkcja
ENCODE

F 2C(3&'3
# =/G   3%(=/5
#?  
1G!
:2%3)%&/;;,(0),
&/(,=0 =/K0?/%'K

ENCRYPT(acuch[, domieszka])
Funkcja odbudowuje funkcj  jzyka C patrz: rysunek 12.57. Jest to szyfrowanie
nieodwracalne. Drugi argument moe by dwuznakowym acuchem poprawiajcym losowo szyfrowania. Dusze acuchy s skracane. Funkcja ta nie jest kompatybilna z funkcj
 i kady system operacyjny moe mie odmienn implementacj  (w bazach
MySQL instalowanych w systemach Windows funkcja moe zwraca warto NULL).
Rysunek 12.57.
Funkcja
ENCRYPT


  LF =/5/N !
"########################"
$  LF =//N $
"########################"
$/N@KKQ= R?-$
"########################"
%&'(),

EXPORT_SET(pole_bitowe, opis_wczonej,
opis_wyczonej[, separator[,liczba_bitw]])
Funkcja zwraca acuch opcji odpowiadajcy bitom pierwszego argumentu. Bity, skonwertowane kolejno od najmodszego do najstarszego, buduj acuch od lewej do prawej. Drugi
i trzeci argument to cigi tekstowe reprezentujce odpowiednio wczone i wyczone bity.

158

Cz II n Encyklopedia MySQL
Domylnym separatorem jest przecinek, ale moe by nim dowolny acuch. Domylnie
uywane s wszystkie 64 bity reprezentacji liczby cakowitej, ale mona to ograniczy za
pomoc pitego argumentu. Na rysunku 12.58 znaczniki T i N s rozdzielane pionow kresk.
Ukazano 8 pl (bitw) pola aktywne definiuje liczba 9 (dwjkowo 1001).

Rysunek 12.58.
Funkcja
EXPORT_SET


 F . O $P !
"#################################"
$ F . O $P $
"#################################"
$ $$$ $$$$$
"#################################"
%&'()>,

FIELD(element, )
Funkcja zwraca indeks pierwszego argumentu w obrbie listy, ktra po nim nastpuje
patrz: rysunek 12.59. Elementy listy s indeksowane od 1. Jeeli szukany cig nie zostanie
odnaleziony, na licie zwracane jest 0.
Rysunek 12.59.
Funkcja
FIELD


D-
N/N,0 !
"#############################"
$D-
N/N,0 $
"#############################"
$*$
"#############################"
%&'(),

FIND_IN_SET(acuch, lista)
Funkcja zwraca indeks elementu listy acuchowej listy elementw oddzielonych przecinkami, bdcej acuchem (patrz: rysunek 12.60). Elementy listy s numerowane od 1.
Rysunek 12.60.
Funkcja
FIND_IN_SET


D-.-. ,/N,0 !
"#############################"
$D-.-. ,/N,0 $
"#############################"
$6$
"#############################"
%&'(),

FORMAT(liczba, dokadno)
Funkcja zwraca liczb zmiennoprzecinkow z przecinkami wstawionymi co trzy potgi liczby
10 i z podan liczb cyfr w czci uamkowej patrz: rysunek 12.61.

Rozdzia 12. n Funkcje wewntrzne


Rysunek 12.61.
Funkcja
FORMAT

159


D *6>+I7P)OO** !
"############################"
$D *6>+I7P)OO** $
"############################"
$*6>+I7P)O$
"############################"
%&'(),

HEX(liczba_cak)
Funkcja zwraca szesnastkow reprezentacj liczby cakowitej patrz: rysunek 12.62.
Rysunek 12.62.
Funkcja HEX


 +I6P*6 !
"#############"
$ +I6P*6 $
"#############"
$POID$
"#############"
%&'(),

INET_ATON(adres)
Funkcja konwertuje adres internetowy zapisany jako acuch do postaci numerycznej. Adresy
cztero- i omiobitowe s akceptowane patrz: rysunek 12.63.
Rysunek 12.63.
Funkcja
INET_ATON


- . I>)*P)I7)7 !
"##########################"
$- . I>)*P)I7)7 $
"##########################"
$7++O>+>$
"##########################"
%&'(),

INET_NTOA(adres)
Funkcja zwraca acuchow reprezentacj numerycznego adresu internetowego patrz:
rysunek 12.64.
Rysunek 12.64.
Funkcja
INET_NTOA


- . 7++O>+> !
"#########################"
$- . 7++O>+> $
"#########################"
$I>)*P)I7)7$
"#########################"
%&'(),

160

Cz II n Encyklopedia MySQL

INSERT(cig, pozycja, dugo, podcig)


Funkcja wstawia acuch, opcjonalnie nadpisujc istniejcy podcig. Drugi argument wskazuje znak, a trzeci okrela, ile znakw usun od wskazanego znaku przed wstawieniem
acucha. Rysunek 12.65 ilustruje wstawienie cigu ABC w pozycji 3 z nadpisaniem jednego
znaku.
Rysunek 12.65.
Funkcja
INSERT


-  /N,0;K6  !
"################################"
$-  /N,0;K6  $
"################################"
$/N 0;K$
"################################"
%&'(),

INSTR(cig, podcig)
Funkcja zwraca wskanik do pierwszego wystpienia podcigu w danym cigu patrz:
rysunek 12.66.
Rysunek 12.66.
Funkcja
INSTR


- /(( !
"#########################"
$- /(( $
"#########################"
$+$
"#########################"
%&'(),

LCASE(cig)
Funkcja zwraca acuch z wielkimi literami zamienionymi na mae patrz: rysunek 12.67.
Aliasem jest  .
Rysunek 12.67.
Funkcja
LCASE



 N 0 !
"###############"
$
 N 0 $
"###############"
$/N,0$
"###############"
%&'(),

LEFT(cig, dugo)
Funkcja zwraca podcig z danego cigu o podanej dugoci patrz: rysunek 12.68.

Rozdzia 12. n Funkcje wewntrzne


Rysunek 12.68.
Funkcja
LEFT

161



D /N,0;6 !
"###################"
$
D /N,0;6 $
"###################"
$/N,$
"###################"
%&'(),

LENGTH(cig)
Funkcja zwraca liczb bajtw dla danego cigu patrz: rysunek 12.69. Znaki dwubajtowe
s interpretowane przez t funkcj jako 2. Aby odnale liczb znakw w cigach zawierajcych znaki wielobajtowe, naley zastosowa funkcj 
. Aliasem 
 jest
 
.
Rysunek 12.69.
Funkcja
LENGTH



H /N, !
"###############"
$
H /N, $
"###############"
$6$
"###############"
%&'(),

LOAD_FILE(nazwa)
Funkcja zwraca zawarto pliku znajdujcego si w systemie plikw serwera. Uytkownik
musi mie uprawnienia do otwarcia tego pliku w obrbie MySQL, a sam plik musi by udostniony do odczytu wszystkim uytkownikom systemu. Na rysunku 12.70 przedstawiono
adowanie treci wiadomoci z forum do tabeli przechowujcej wiadomoci.
Rysunek 12.70.
Funkcja
LOAD_FILE

F &'/0,'
 (%,G
.D-
R=R;%2R*6>)(Q(
?  
1G*>+!

LOCATE(podcig, cig[, pozycja])


Funkcja zwraca miejsce pierwszego wystpienia podcigu w drugim argumencie patrz:
rysunek 12.71. Opcjonalnie wyszukiwanie mona rozpocz od okrelonej pozycji.
Rysunek 12.71.
Funkcja
LOCATE



  N/N,/N,6 !
"##########################"
$
  N/N,/N,6 $
"##########################"
$+$
"##########################"
%&'(),

162

Cz II n Encyklopedia MySQL

LOWER(cig)
Jest to alias funkcji  .

LPAD(cig, dugo, wypenienie)


Funkcja dopenia cig do okrelonej dugoci, dodajc z lewej strony znaki podane w cigu
   patrz: rysunek 12.72. Cig wypeniajcy w razie potrzeby bdzie powtarzany.
Rysunek 12.72.
Funkcja
LPAD



F/N,+) !
"######################"
$
F/N,+) $
"######################"
$))))))))))))/N,$
"######################"
%&'(),

LTRIM(cig)
Funkcja usuwa spacje z lewej strony cigu patrz: rysunek 12.73.
Rysunek 12.73.
Funkcja
LTRIM



-/N, !
"###################"
$
-/N, $
"###################"
$/N,$
"###################"
%&'(),

MAKE_SET(pole_bitowe, )
Funkcja zwraca list acuchow utworzon w efekcie wybierania elementw z listy na podstawie pola bitowego. Cyfry binarne pola ustawione na 1 powoduj wybranie elementu z listy.
Pierwszy element z lewej odpowiada pierwszemu bitowi. Funkcja zwraca acuch z elementami zbioru oddzielonymi przecinkami. Na rysunku 12.74 liczba dziesitna 5 to dwjkowo 0101, co powoduje wybranie pierwszego i trzeciego elementu.
Rysunek 12.74.
Funkcja
MAKE_SET


 . +/N, !
"############################"
$ . +/N, $
"############################"
$/,$
"############################"
%&'(),

Rozdzia 12. n Funkcje wewntrzne

163

MATCH () AGAINST (cig)


Sowo kluczowe  dopasowuje acuch do listy kolumn i zwraca liczb zmiennoprzecinkow od 0,0 do 1,0. Wskazane kolumny musz mie przypisany indeks   .
Omwienie tego typu indeksw znajduje si w rozdziale 11. Typy kolumn i indeksw.
MySQL dzieli cig tekstowy przekazany do instrukcji  na poszczeglne wyrazy. Znakiem separujcym wyrazy jest spacja. Wyrazy mog by rwnie otoczone apostrofami lub
wzite w cudzysw. Wyrazy trzyliterowe oraz krtsze zostaj odrzucone. Instrukcja powoduje sortowanie wierszy wedug ich malejcej istotnoci. Wiersze nieistotne nie zostan
w ogle zwrcone. Rysunek 12.75 przedstawia wyszukiwanie treci wiadomoci w MySQL.
Rysunek 12.75.
Funkcja
MATCH



1
D&'/0,
?   (%, H- :
 !

MD5(cig)
Funkcja zwraca 32-znakow warto bdc efektem mieszania (ang. hash) zgodnie z dokumentem RFC 1321 patrz: rysunek 12.76. Identyfikatory MD5 teoretycznie s niepowtarzalne dla kadego acucha.
Rysunek 12.76.
Funkcja MD5


+'9(
&&'S !
"##################################"
$+'9(
&&'S $
"##################################"
$*NINNION>6*O0I+O*P>O670+>/$
"##################################"
%&'(),

MID(cig, pozycja, dugo)


Jest to alias funkcji  
.

OCT(liczba_cak)
Funkcja zwraca semkow reprezentacj dziesitnej liczby cakowitej patrz: rysunek 12.77.
Rysunek 12.77.
Funkcja OCT


 I !
"#########"
$ I $
"#########"
$*$
"#########"
%&'(),

164

Cz II n Encyklopedia MySQL

OCTET_LENGTH(cig)
Jest to alias funkcji 
.

ORD(cig)
Funkcja zwraca liczb porzdkow dla pierwszego znaku z lewej strony w danym cigu.
W odrnieniu od ,  bierze pod uwag znaki wielobajtowe.

PASSWORD(cig)
Funkcja szyfruje podane w formacie tekstowym haso. Proces szyfrowania jest nieodwracalny.
Funkcja ta jest przeznaczona do wstawiania wartoci do kolumny hase w  !" tabeli
uprawnie uytkownikw. Rysunek 12.78 przedstawia kod SQL zmieniajcy haso na sekret.
Rysunek 12.78.
Funkcja
PASSWORD

F 2%
 F/&%0GF?3%(
?  %G!

POSITION(podcig IN cig)
Jest to inna forma funkcji  . Rnica polega na innej postaci argumentw patrz:
rysunek 12.79.
Rysunek 12.79.
Funkcja
POSITION


F- -N-/N,/N, !
"###########################"
$F- -N-/N,/N, $
"###########################"
$*$
"###########################"
%&'(),

REPEAT(cig, powtrzenia)
Funkcja zwraca acuch zoony z danego cigu, powtrzonego okrelon liczb razy
patrz: rysunek 12.80.
Rysunek 12.80.
Funkcja
REPEAT


 F  / !
"#################"
$ F  / $
"#################"
$//////////$
"#################"
%&'(),

Rozdzia 12. n Funkcje wewntrzne

165

REPLACE(w_cigu, stary_cig, nowy_cig)


Funkcja zamienia kade wystpienie starego cigu w cigu na nowy cig patrz: rysunek 12.81.
Rysunek 12.81.
Funkcja
REPLACE


 F
 /#N#,#0#R !
"##############################"
$ F
 /#N#,#0#R $
"##############################"
$/RNR,R0$
"##############################"
%&'(),

REVERSE(cig)
Funkcja odwraca kolejno znakw w cigu patrz: rysunek 12.82.
Rysunek 12.82.
Funkcja
REVERSE


 4  /N,0; !
"###################"
$ 4  /N,0; $
"###################"
$;0,N/$
"###################"
%&'(),

RIGHT(cig, liczba)
Funkcja zwraca okrelon liczb znakw od prawej strony danego cigu. Do pobierania
znakw z lewej strony cigu suy funkcja   patrz: rysunek 12.83.
Rysunek 12.83.
Funkcja
RIGHT


-H /N,0;6 !
"####################"
$-H /N,0;6 $
"####################"
$0;$
"####################"
%&'(),

RPAD(cig, dugo, wypenienie)


Funkcja dopenia cig do okrelonej dugoci, dodajc z prawej strony znaki podane w cigu
   . Do wypeniania cigu po lewej stronie suy funkcja  . Rysunek 12.84
przedstawia prawostronne dopenianie acucha 15 kropkami.

166

Cz II n Encyklopedia MySQL

Rysunek 12.84.
Funkcja
RPAD


F/N,+) !
"######################"
$F/N,+) $
"######################"
$/N,))))))))))))$
"######################"
%&'(),

RTRIM(cig)
Funkcja usuwa spacje po prawej stronie cigu. Na rysunku 12.85 z cigu usunite zostaj
spacje z prawej strony, po czym jest on czony z innym cigiem, aby pokaza brak spacji.
Rysunek 12.85.
Funkcja
RTRIM


    -/N, 0; !
"#################################"
$    -/N, 0; $
"#################################"
$/N,0;$
"#################################"
%&'(),

SOUNDEX(cig)
Funkcja zwraca cig bdcy rezultatem mieszania, oparty na tym, jakie jest brzmienie danego sowa. Donald Knuth opisa ten algorytm w trzecim tomie ksiki Sztuka programowania (WNT, 2003). Rezultaty mieszania s czteroznakowe i rozpoczynaj si od litery.
Rysunek 12.86 ilustruje niewielk rnic w angielskiej wymowie sw lion i lying.
Rysunek 12.86.
Funkcja
SOUNDEX


 '  'K !
"#################"##################"
$ ' $ 'K $
"#################"##################"
$
+$
+*$
"#################"##################"
%&'(),

SPACE(liczba)
Funkcja zwraca acuch zoony z podanej liczby spacji patrz: rysunek 12.87. W zamian
mona zastosowa funkcj   .

Rozdzia 12. n Funkcje wewntrzne


Rysunek 12.87.
Funkcja
SPACE

167


   /F  N !
"#############################"
$   /F  N $
"#############################"
$/N$
"#############################"
%&'(),

STRCMP(cig, cig)
Funkcja porwnuje dwa acuchy i zwraca 0, jeeli s one rwne, 1 jeeli pierwszy poprzedza drugi w kolejnoci alfabetycznej, i 1 jeeli pierwszy wystpuje w kolejnoci alfabetycznej po drugim. Rysunek 12.88 pokazuje, e abc stoi przed abd.
Rysunek 12.88.
Funkcja
STRCMP


  F/N,/N0 !
"######################"
$  F/N,/N0 $
"######################"
$#$
"######################"
%&'(),

SUBSTRING(cig FROM pozycja [FOR dugo])


Funkcja zwraca podcig. W tej wersji do separacji parametrw uywane s sowa kluczowe.
Jest to zgodne z norm ANSI.

SUBSTRING(cig, pozycja[, dugo])


Funkcja zwraca podcig rozpoczynajcy si od podanej pozycji patrz: rysunek 12.89.
Znaki w cigu s numerowane od 1 i jeeli nie zostaa podana dugo, zwrcona zostaje
reszta cigu.
Rysunek 12.89.
Funkcja
SUBSTRING


  -H/N,0;66 !
"###########################"
$  -H/N,0;66 $
"###########################"
$,0$
"###########################"
%&'(),

168

Cz II n Encyklopedia MySQL

SUBSTRING_INDEX(cig, separator, liczba)


Funkcja zwraca podcig, ktry zawiera podan liczb elementw oddzielonych separatorami.
Jeeli ilo jest dodatnia, podcig jest pobierany od lewej. Jeeli ilo jest ujemna, podcig
jest pobierany od prawej. Na rysunku 12.90 zwrcone zostaj pierwsze dwie wartoci z listy
elementw oddzielonych przecinkami w cigu rdowym.
Rysunek 12.90.
Funkcja
SUBSTRING_INDEX


  -H.- /N,0* !
"####################################"
$  -H.- /N,0* $
"####################################"
$/N$
"####################################"
%&'(),

TRIM([BOTH|LEADING|TRAILING] wypenienie FROM] cig)


Funkcja usuwa znaki wypeniajce z cigu. Domylnie usuwa spacje po obu stronach acucha patrz: rysunek 12.91.
Rysunek 12.91.
Funkcja
TRIM


 -/N, !
"#######################"
$ -/N, $
"#######################"
$/N,$
"#######################"
%&'(),

UCASE(cig)
Funkcja zwraca acuch z maymi literami zamienionymi na wielkie patrz: rysunek 12.92.
Zamian cigu na mae litery umoliwia  .
Rysunek 12.92.
Funkcja
UCASE


  N 0 !
"###############"
$  N 0 $
"###############"
$ $
"###############"
%&'(),

UPPER(cig)
Jest to alias funkcji  .

Rozdzia 12. n Funkcje wewntrzne

169

Czas
Funkcje tu opisane operuj na wartociach opisujcych czas. W zalenoci od kontekstu
wartoci te przybieraj formy kolumn, acuchw i liczb cakowitych. Na przykad funkcja

 zwraca domylnie acuch typu  !, ale jeeli oczekiwana jest liczba
cakowita, to zwraca  !. Kada funkcja, ktra oczekuje daty lub czasu, zaakceptuje poczony czas i dat.

ADDDATE(data, INTERVAL typ wartoci)


Jest to alias funkcji   .

CURDATE()
Funkcja zwraca biec dat patrz: rysunek 12.93. Mona w tym celu uy rwnie  #


  .
Rysunek 12.93.
Funkcja
CURDATE


   !
"############"
$   $
"############"
$*6#+#*I$
"############"
%&'(),

CURRENT_DATE
Funkcja zwraca biec dat patrz: rysunek 12.94. Jak wida, nie wymaga ona adnych
nawiasw. Zamiennie mona zastosowa    .
Rysunek 12.94.
Funkcja
CURRENT_DATE


   . !
"##############"
$   . $
"##############"
$*6#+#*I$
"##############"
%&'(),

CURRENT_TIME
Funkcja zwraca biecy czas patrz: rysunek 12.95. Jak wida, nie wymaga ona adnych
nawiasw. Zamiennie mona zastosowa   .

170

Cz II n Encyklopedia MySQL

Rysunek 12.95.
Funkcja
CURRENT_TIME


   . - !
"##############"
$   . - $
"##############"
$+J*J*I$
"##############"
%&'(),

CURRENT_TIMESTAMP
Funkcja zwraca biec dat i czas patrz: rysunek 12.96. Jak wida, nie wymaga ona adnych
nawiasw. Zamiennie mona zastosowa
.
Rysunek 12.96.
Funkcja
CURRENT
_TIMESTAMP


   . -  F!
"#####################"
$   . -  F$
"#####################"
$*6#+#*I+J*6J*7$
"#####################"
%&'(),

CURTIME()
Funkcja zwraca biecy czas patrz:rysunek 12.97. Zamiennie mona uy  
 .
Rysunek 12.97.
Funkcja
CURTIME


  -  !
"###########"
$  -  $
"###########"
$+J*+J*$
"###########"
%&'(),

DATE_ADD(data, INTERVAL warto typ)


Funkcja dodaje czas do daty lub datownika. Czas jest okrelany za pomoc sowa kluczowego 
 $, po ktrym nastpuje liczba cakowita lub cig tekstowy i oznaczenie typu.
Typy i wymagane przez nie formaty zostay przedstawione w tabeli 12.1. Sowa oznaczaj
tu pene liczby.

Rozdzia 12. n Funkcje wewntrzne

171

Tabela 12.1. Typy interwaw


Typ

Format

L

dni

L.

'dni godziny'

L.-

'dni godziny:minuty'

L. 

'dni godziny:minuty:sekundy'



godziny

.-

'godziny:minuty'

. 

'godziny:minuty:sekundy'

-

minuty

- . 

'minuty:sekundy'

 

miesice

 

sekundy

L 

lata

L . 

'lata-miesice'

Interwa czasowy mona te doda do daty za pomoc operatora dodawania ("#, np.
%&
'
 $( . Aby odj czas od daty, naley posuy si funkcj    lub znakiem minusa. Pominicie czci wartoci interwau powoduje, e MySQL przyporzdkowuje wartoci od prawej do lewej, a brakujce wartoci ustawia na zero. Na przykad podanie ()* dla interwau 
 jest rwnorzdne uyciu 
  
. Rysunek 12.98
przedstawia czas biecy i czas sprzed dwch tygodni.
Rysunek 12.98.
Funkcja
DATE_ADD


?  .? - 4
>L !
"#####################"##################################"
$? $ .? - 4
>L $
"#####################"##################################"
$*6#+#*I+J6OJ*+$*6#I#O+J6OJ*+$
"#####################"##################################"
%&'(),

DATE_FORMAT(data, format)
Funkcja formatuje dat zgodnie z podanym formatem. acuch formatujcy moe zawiera
dowoln liczb kodw rozpoczynajcych si od znaku procenta (), symbolizujcych poszczeglne elementy daty. Reszta znakw acucha zostaje zwrcona w postaci dosownej.
Kody zostay wymienione w tabeli 12.2.

172

Cz II n Encyklopedia MySQL

Tabela 12.2. Kody DATE_FORMAT


Kod

Opis

Przykady

TT

Kod ucieczki dla T

T/

Skrcona nazwa dnia tygodnia

)))

TN

Skrcona nazwa miesica

@)))

T,

Numer miesica nie poprzedzony zerem

)))*

T0

Dzie miesica z angielskim przyrostkiem

 *6> )))

T

Dzie miesica poprzedzony zerem

)))6

T

Dzie miesica

)))6

T;

Mikrosekundy

)))OOOOOO

T

Godzina na zegarze 24-godzinnym poprzedzona zerem

)))*6

T=

Godzina na zegarze 12-godzinnym poprzedzona zerem

)))*

T-

Rwnoznaczny T=

)))*

T'

Minuty poprzedzone zerami

)))+O

T9

Numer dnia w roku poprzedzony zerami

)))6II

T3

Godzina na zegarze 24-godzinnym niepoprzedzona zerem

)))*6

T

Godzina na zegarze 12-godzinnym niepoprzedzona zerem

)))*

T

Nazwa miesica

@L)))  

T

Numer miesica poprzedzony zerem

)))*

T1

AM lub PM

F

T%

Czas na zegarze 12-godzinnym

J+J6

T

Sekundy

)))+O

T

Sekundy

)))+O

Czas na zegarze 24-godzinnym

+J6*J

T2

Numer tygodnia w roku, gdzie poniedziaek jest pierwszym


dniem tygodnia

)))+6

T

Numer tygodnia w roku, gdzie niedziela jest pierwszym dniem


tygodnia

)))+6

TU

Numer tygodnia w roku, gdzie poniedziaek jest pierwszym


dniem tygodnia

)))+6

T4

Numer tygodnia w roku, gdzie niedziela jest pierwszym dniem


tygodnia

)))+6

T&

Numer dnia tygodnia

)))I

T?

Nazwa dnia tygodnia

L))) L

TQ

Rok rozpoczynajcy si od poniedziaku odpowiada


numerowi tygodnia zwrconemu przez TU

)))OOOO

T

Rok rozpoczynajcy si od niedzieli odpowiada numerowi


tygodnia zwrconemu przez TU

)))OOOO

T

Rok w obrbie wieku

)))OO

TL

Rok

)))OOOO

Rozdzia 12. n Funkcje wewntrzne

173

Kody +, $, , i wykorzystuj zasad, e rok musi zaczyna si albo w niedziel, albo w poniedziaek. Zgodnie z t logik, 1 stycznia 1970 roku nalea do 53. tygodnia roku 1969.
Rysunek 12.99 przedstawia dat 1 stycznia 1970 sformatowan tak, aby zawieraa dzie tygodnia.
Rysunek 12.99.
Funkcja
DATE_FORMAT


 .D O7##T?TTTL !
"############################################"
$ .D O7##T?TTTL $
"############################################"
$ =2%0/@/2/%(O7$
"############################################"
%&'(),

DATE_SUB(data, INTERVAL warto typ)


Funkcja odejmuje interwa czasowy od daty lub datownika. Jej sposb uycia zosta opisany
przy okazji funkcji   . Do odejmowania od daty mona rwnie uy operatora odejmowania (-).

DAYNAME(data)
Funkcja zwraca nazw dnia tygodnia dla podanej daty. Z rysunku 12.100 wynika, e 1 stycznia
1970 roku przypada w czwartek.
Rysunek 12.100.
Funkcja
DAYNAME


L O7## !
"#######################"
$L O7## $
"#######################"
$ =2%0/$
"#######################"
%&'(),

DAYOFMONTH(data)
Funkcja zwraca dzie miesica na podstawie podanej daty. Z rysunku 12.101 wynika, e 1 stycznia 1970 by pierwszym dniem miesica.
Rysunek 12.101.
Funkcja
DAYOFMONTH


LD O7## !
"##########################"
$LD O7## $
"##########################"
$$
"##########################"
%&'(),

174

Cz II n Encyklopedia MySQL

DAYOFWEEK(data)
Funkcja zwraca dzie tygodnia jako liczb. Niedziela jest traktowana jako pierwszy dzie
tygodnia. Z rysunku 12.102 wynika, e 1 stycznia 1970 roku by pitym dniem tygodnia, czyli
czwartkiem.
Rysunek 12.102.
Funkcja
DAYOFWEEK


LD? O7## !
"#########################"
$LD? O7## $
"#########################"
$+$
"#########################"
%&'(),

DAYOFYEAR(data)
Funkcja zwraca liczb dni od pocztku roku, traktujc 1 stycznia jako pierwszy dzie. Z rysunku 12.103 wynika, e 6 maja 1984 roku by 127. dniem roku.
Rysunek 12.103.
Funkcja
DAYOFYEAR


LDL OP>#+#IJ6J !
"##################################"
$LDL OP>#+#IJ6J $
"##################################"
$*7$
"##################################"
%&'(),

EXTRACT(typ FROM data)


Funkcja pobiera z daty warto o okrelonym typie. Dopuszczalne typy to nazwy interwaw,
akceptowane przez funkcj   . Wymieniono je w tabeli 12.1. Rysunek 12.104 przedstawia pobieranie roku z daty.
Rysunek 12.104.
Funkcja
EXTRACT


   L DO7## !
"#################################"
$   L DO7## $
"#################################"
$O7$
"#################################"
%&'(),

Rozdzia 12. n Funkcje wewntrzne

175

FROM_DAYS(dni)
Funkcja zwraca dat na podstawie liczby dni od pocztku danego systemu kalendarzowego.
Jednak daty przed rokiem 1582 nie s przedstawiane dokadnie. MySQL nie bierze pod uwag
zmian, jakie nastpiy z chwil wprowadzenia kalendarza gregoriaskiego. Rysunek 12.105
demonstruje zastosowanie tej funkcji. Odwrotne dziaanie ma funkcja  .
Rysunek 12.105.
Funkcja
FROM_DAYS


D.L7O+*P !
"###################"
$D.L7O+*P $
"###################"
$O7##$
"###################"
%&'(),

FROM_UNIXTIME(sekundy[, format])
Funkcja zwraca dat na podstawie datownika UNIX-a, ktry jest liczb sekund od 1 stycznia
1970 roku. Opcjonalny argument 
$ definiuje format zwracanego acucha. Moe on
zawiera te same kody, ktrych uywa si z   patrz: tabela 12.2. Wartoci
przekazane do 
  s przeznaczone dla czasu Greenwich (GMT). Rysunek 12.106
przedstawia rezultaty dla komputera w strefie rodkowoeuropejskiej.
Rysunek 12.106.
Funkcja
FROM_UNIXTIME


D.- - *PP !
"######################"
$D.- - *PP $
"######################"
$O7##OJJ$
"######################"
%&'(),

HOUR(czas)
Funkcja zwraca godzin na podstawie podanego czasu patrz: rysunek 12.107.
Rysunek 12.107.
Funkcja
HOUR


J*6J>+ !
"##################"
$J*6J>+ $
"##################"
$$
"##################"
%&'(),

176

Cz II n Encyklopedia MySQL

MINUTE(czas)
Funkcja zwraca minut na podstawie podanego czasu patrz: rysunek 12.108.
Rysunek 12.108.
Funkcja
MINUTE


- J*6J>+ !
"####################"
$- J*6J>+ $
"####################"
$*6$
"####################"
%&'(),

MONTH(data)
Funkcja zwraca miesic jako liczb na podstawie podanej daty, poczwszy od 1 patrz:
rysunek 12.109.
Rysunek 12.109.
Funkcja
MONTH


 O7## !
"#####################"
$ O7## $
"#####################"
$$
"#####################"
%&'(),

MONTHNAME(data)
Funkcja zwraca nazw miesica na podstawie podanej daty patrz: rysunek 12.110.
Rysunek 12.110.
Funkcja
MONTHNAME


  O7## !
"#########################"
$  O7## $
"#########################"
$@/2/%$
"#########################"
%&'(),

NOW()
Funkcja zwraca biec dat i czas. Zwrcona warto bdzie odpowiednia do kontekstu
wywoania. Rysunek 12.111 przedstawia wersj acuchow.

Rozdzia 12. n Funkcje wewntrzne


Rysunek 12.111.
Funkcja NOW

177


? !
"#####################"
$? $
"#####################"
$*6#+#*I7J**J*$
"#####################"
%&'(),

PERIOD_ADD(okres, miesice)
Funkcja dodaje okrelon liczb miesicy do okresu, ktry jest miesicem pewnego roku. Z rysunku 12.112 wynika, e 15 miesicy po styczniu 1970 nastpi kwiecie 1971 roku.
Rysunek 12.112.
Funkcja
PERIOD_ADD


F -.O7+ !
"########################"
$F -.O7+ $
"########################"
$O7>$
"########################"
%&'(),

PERIOD_DIFF(okres, okres)
Funkcja zwraca rnic w miesicach pomidzy dwoma okresami. Okres to miesic okrelonego roku. Z rysunku 12.113 wynika, e stycze 1970 roku by o 15 miesicy wczeniej
ni kwiecie roku 1971.
Rysunek 12.113.
Funkcja
PERIOD_DIFF


F -.-DDO7O7> !
"#############################"
$F -.-DDO7O7> $
"#############################"
$#+$
"#############################"
%&'(),

QUARTER(data)
Funkcja zwraca kwarta roku dla danej daty. Pierwszy kwarta rozpoczyna si wraz z pocztkiem roku i obejmuje pierwsze trzy miesice. Z rysunku 12.114 wynika, e 1 stycznia
1970 roku przypada w pierwszym kwartale.

178

Cz II n Encyklopedia MySQL

Rysunek 12.114.
Funkcja
QUARTER


: O7## !
"#######################"
$: O7## $
"#######################"
$$
"#######################"
%&'(),

SECOND(czas)
Funkcja zwraca sekundy z podanego czasu patrz: rysunek 12.115.
Rysunek 12.115.
Funkcja
SECOND


 J*6J>+ !
"#####################"
$ J*6J>+ $
"#####################"
$>+$
"#####################"
%&'(),

SEC_TO_TIME(sekundy)
Funkcja zwraca czas na podstawie liczby sekund patrz: rysunek 12.116. Nie ma tu ograniczenia do wartoci, ktre mieszcz si w obrbie jednego dnia. Podanie liczby sekund
wikszej ni 86 400 spowoduje po prostu zwrcenie wartoci wikszej ni 24 godziny. Odwrotne dziaanie ma funkcja   .
Rysunek 12.116.
Funkcja
SEC_TO_TIME


 . . - +*+ !
"###################"
$ . . - +*+ $
"###################"
$J*6J>+$
"###################"
%&'(),

SUBDATE(data, INTERVAL warto typ)


Jest to alias funkcji   .

SYSDATE()
Jest to alias funkcji
.

Rozdzia 12. n Funkcje wewntrzne

179

TIME_FORMAT(czas, format)
Funkcja zwraca czas sformatowany zgodnie z kodami podanymi w argumencie 
$ .
Dopuszczalne kody s takie same, jak w przypadku funkcji  . Rysunek 12.117
przedstawia czas sformatowany dla zegara dwunastogodzinnego.
Rysunek 12.117.
Funkcja
TIME_FORMAT


 - .D *6J>+JT% !
"###############################"
$ - .D *6J>+JT% $
"###############################"
$J>+JF$
"###############################"
%&'(),

TIME_TO_SEC(czas)
Funkcja zwraca liczb sekund, jak reprezentuje podany czas patrz: rysunek 12.118.
Wykonuje ona operacj odwrotn do funkcji   .
Rysunek 12.118.
Funkcja
TIME_TO_SEC


 - . . J*6J>+ !
"#########################"
$ - . . J*6J>+ $
"#########################"
$+*+$
"#########################"
%&'()>,

TO_DAYS(data)
Funkcja zwraca liczb dni od pocztku systemu kalendarzowego do danej daty patrz rysunek 12.119. Daty przed 1582 rokiem nie s odwzorowywane dokadnie w zwizku ze
zmianami dokonanymi w kalendarzu gregoriaskim. Funkcja wykonuje operacj odwrotn
do  . Za jej pomoc mona oblicza liczb dni dzielc dwie daty. Na przykad
 %.*//(#/0#/(.&- %.*//(#/*#/(.& zwraca 212 liczb dni od 1 wrzenia
2001 do 1 lutego 2001 roku.
Rysunek 12.119.
Funkcja
TO_DAYS


 .LO7## !
"#######################"
$ .LO7## $
"#######################"
$7O+*P$
"#######################"
%&'(),

180

Cz II n Encyklopedia MySQL

UNIX_TIMESTAMP([data_i_czas])
Funkcja zwraca biecy czas jako datownik UNIX-a, ktry zdefiniowany jest jako liczba sekund od 1 stycznia 1970 roku dla czasu Greenwich patrz: rysunek 12.120. Jeeli podane
zostan opcjonalne data i czas, zwrcony zostanie datownik dla teje daty.
Rysunek 12.120.
Funkcja
UNIX_TIMESTAMP


-. -  F !
"##################"
$-. -  F $
"##################"
$+6O*O6I>$
"##################"
%&'(),

WEEK(data[, pierwszy_dzie])
Funkcja zwraca numer tygodnia na podstawie podanej daty patrz: rysunek 12.121. Tygodnie s liczone od pierwszego tygodnia roku. Pierwszy dzie tygodnia to domylnie niedziela,
ale jeeli drugi argument wynosi 1, wwczas za pocztek tygodnia uwaany jest poniedziaek.
Rysunek 12.121.
Funkcja
WEEK


? O7#I# !
"#######################"
$? O7#I# $
"#######################"
$**$
"#######################"
%&'(),

WEEKDAY(data)
Funkcja zwraca numer dnia tygodnia na podstawie podanej daty, gdzie poniedziaek ma
numer 0. Z rysunku 12.122 wynika, e 6 czerwca 1970 roku przypada w sobot.
Rysunek 12.122.
Funkcja
WEEKDAY


? LO7#I#I !
"#######################"
$? LO7#I#I $
"#######################"
$+$
"#######################"
%&'(),

Rozdzia 12. n Funkcje wewntrzne

181

YEAR(data)
Funkcja zwraca rok dla podanej daty patrz: rysunek 12.123.
Rysunek 12.123.
Funkcja
YEAR


L O7#I#I !
"####################"
$L O7#I#I $
"####################"
$O7$
"####################"
%&'(),

YEARWEEK(data[, pierwszy_dzie])
Funkcja zwraca okres na podstawie daty. Drugi argument decyduje o tym, czy tygodnie zaczynaj si od niedzieli, czy od poniedziaku. W pierwszym przypadku naley uy 0, a w drugim 1. Z rysunku 12.124 wynika, e 6 czerwca 1970 przypada w 22. tygodniu tego roku.
Rysunek 12.124.
Funkcja
YEARWEEK


L ? O7#I#I !
"###########################"
$L ? O7#I#I $
"###########################"
$O7**$
"###########################"
%&'(),

Pozostae funkcje
Opisane tu funkcje nie pasuj do adnej z wczeniejszych kategorii.

BIT_COUNT(liczba_cak)
Funkcja traktuje podan liczb cakowit jako liczb dwjkow i zwraca liczb ustawionych
w niej bitw. Z rysunku 12.125 wynika, e liczba dziesitna 19 ma w swej postaci dwjkowej
ustawione 3 bity.
Rysunek 12.125.
Funkcja
BIT_COUNT


 - .  O  -O !
"###############"#########"
$ - .  O $ -O $
"###############"#########"
$6$$
"###############"#########"
%&'(),

182

Cz II n Encyklopedia MySQL

COALESCE()
Funkcja zwraca pierwszy element, liczc od lewej strony listy, ktry nie jest wartoci .
Jeeli wszystkie elementy s puste, zwracana jest warto . Rysunek 12.126 przedstawia
jej dziaanie.
Rysunek 12.126.
Funkcja
COALESCE


 
 





*6 !
"#####################################"
$ 
 





*6 $
"#####################################"
$$
"#####################################"
%&'(),

INTERVAL(cel, )
Funkcja zwraca pozycj na licie elementw, od ktrej   jest wikszy, ale jednoczenie
mniejszy ni kolejna warto na licie. Elementy listy musz by posortowane od najmniejszego do najwikszego. W obrbie listy wykonywane jest wyszukiwanie binarne pierwszy element ma numer 1. Z rysunku 12.127 wynika, e 9 jest wiksze ni pity element,
ktrym jest 7, i mniejsze od 11 na pozycji szstej.
Rysunek 12.127.
Funkcja
INTERVAL


- 4
O*6+767 !
"################################"
$- 4
O*6+767 $
"################################"
$+$
"################################"
%&'(),

ISNULL(warto)
Funkcja 
 zwraca 1, jeeli argument ma warto null, lub 0 w innych przypadkach. Z rysunku 12.128 wynika, e do 
 przesane zostay trzy wyraenia.
Rysunek 12.128.
Funkcja
ISNULL


-

 -

2 -

"

!
"###########"##############"################"
$-

 $-

2 $-

"

$
"###########"##############"################"
$$$$
"###########"##############"################"
%&'(),

Rozdzia 12. n Funkcje wewntrzne

183

Procedury
Procedury to funkcje, ktre dziaaj na zbiorze wynikw, zanim zostanie on przesany do
klienta. Wywouje si je na kocu instrukcji wyboru. Do MySQL zaczona jest tylko jedna
procedura 121!. W rozdziale 31. Rozszerzanie moliwoci opisano tworzenie wasnych procedur.

analyse([elementy [, pami]])
Procedura zwraca analiz tabeli. Moliwe jest ograniczenie maksymalnej liczby elementw
branych pod uwag dla kadej kolumny. Mona rwnie poda maksymaln ilo pamici
do wykorzystania podczas analizy patrz: rysunek 12.129.
Rysunek 12.129.
Procedura analyse


/C&/ /
#D1%023(
#?  
1-*6
#F  // VH!
WWWWWWWWWWWWWWWWWWWWWWWWWWW)%&WWWWWWWWWWWWWWWWWWWWWWWWWWW
D'0./J1%023()/C&/
'.U/2JH%CN'M
/Q.U/2JC,C(3/
'.K(=JP
/Q.K(=J
 1('.%.C%J
2J
UK.U/2.%./UK.K(=JO)
(0J

1('/.;'0(1J H%CN'MC,C(,C3/C,C(3/  

WWWWWWWWWWWWWWWWWWWWWWWWWWW*)%&WWWWWWWWWWWWWWWWWWWWWWWWWWW
D'0./J1%023() /
'.U/2J)*+
/Q.U/2J6)+
'.K(=J>
/Q.K(=J>
 1('.%.C%J
2J
UK.U/2.%./UK.K(=J*)6
(0J)7O
1('/.;'0(1J )*+*)+6)+  

*%&'(),

You might also like