Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

MySQL

1,174 views

Published on

Przewodnik zaawansowanego programisty

Zaawansowani programiści na całym świecie wybierają MySQL jako podstawę swoich aplikacji opartych na WWW. Książka, którą trzymasz w ręku, dostarczy Ci wiedzy i przykładowego kodu; elementów niezbędnych do szybkiego pisania własnych aplikacje, niezależnie od stopnia ich skomplikowania.

Książka rozpoczyna się od omówienia podstaw MySQL-a: zapytań SQL, zasad projektowania baz danych, normalizacji, transakcji i przetwarzania równoległego. Następnie w usystematyzowany sposób opisuje szczegółowe możliwości MySQL oraz przedstawia efektywne techniki dostępu do baz MySQL-a z poziomu C, Javy, PHP, Perla, Pythona i innych środowisk programistycznych.

W książce opisano między innymi:

* Instalację i korzystanie z MySQL-a -- wraz ze szczegółowym opisem
implementacji SQL w MySQL-u
* Typy danych, zmienne, funkcje wbudowane i narzędzia dostępne z linii
komend
* API MySQL w języku C
* Administrację bazami MySQL, wykonywanie kopii zapasowych i usuwanie
skutków awarii
* Optymalizację i zabezpieczanie aplikacji
* Tworzenie rozproszonych baz danych
* Rozszerzanie funkcjonalności MySQL-a
* Tworzenie baz danych przenośnych na inne platformy

Dokładnie przestudiowana i zalecana przez twórcę MySQL-a, Michaela Wideniusa, książka "MySQL" dostarcza profesjonalnym programistom tego, czego poszukiwali: dogłębnej, przemyślanej wiedzy, potrzebnej do tworzenia zaawansowanych aplikacji.

Leon Atkinson jest autorem książki "PHP. Programowanie". Jest też inicjatorem projektu FreeTrade: zestawu narzędzi open source wykorzystującego MySQL i PHP. Atkinson od 1997 roku używa MySQL w wielu aplikacjach sieciowych i e-commerce.

Polecana przez Michaela Wideniusa, twórcę MySQL-a

  • Be the first to comment

MySQL

  1. 1. IDZ DO PRZYK£ADOWY ROZDZIA£ SPIS TRE CI MySQL KATALOG KSI¥¯EK Autor: Leon Atkinson T³umaczenie: Jaros³aw Dobrzañski, Tomasz ¯mijewski KATALOG ONLINE ISBN: 83-7361-170-3 Tytu³ orygina³u: Core MySQL ZAMÓW DRUKOWANY KATALOG Format: B5, stron: 608 TWÓJ KOSZYK DODAJ DO KOSZYKA Zaawansowani programi ci na ca³ym wiecie wybieraj¹ MySQL jako podstawê swoich aplikacji opartych na WWW. Ksi¹¿ka, któr¹ trzymasz w rêku, dostarczy Ci wiedzy i przyk³adowego kodu; elementów niezbêdnych do szybkiego pisania w³asnych CENNIK I INFORMACJE aplikacje, niezale¿nie od stopnia ich skomplikowania. Ksi¹¿ka rozpoczyna siê od omówienia podstaw MySQL-a: zapytañ SQL, zasad ZAMÓW INFORMACJE projektowania baz danych, normalizacji, transakcji i przetwarzania równoleg³ego. O NOWO CIACH Nastêpnie w usystematyzowany sposób opisuje szczegó³owe mo¿liwo ci MySQL oraz przedstawia efektywne techniki dostêpu do baz MySQL-a z poziomu C, Javy, ZAMÓW CENNIK PHP, Perla, Pythona i innych rodowisk programistycznych. W ksi¹¿ce opisano miêdzy innymi: • Instalacjê i korzystanie z MySQL-a -- wraz ze szczegó³owym opisem implementacji CZYTELNIA SQL w MySQL-u • Typy danych, zmienne, funkcje wbudowane i narzêdzia dostêpne z linii komend FRAGMENTY KSI¥¯EK ONLINE API MySQL w jêzyku C • Administracjê bazami MySQL, wykonywanie kopii zapasowych i usuwanie skutków awarii • Optymalizacjê i zabezpieczanie aplikacji • Tworzenie rozproszonych baz danych • Rozszerzanie funkcjonalno ci MySQL-a • Tworzenie baz danych przeno nych na inne platformy Dok³adnie przestudiowana i zalecana przez twórcê MySQL-a, Michaela Wideniusa, ksi¹¿ka „MySQL” dostarcza profesjonalnym programistom tego, czego poszukiwali: dog³êbnej, przemy lanej wiedzy, potrzebnej do tworzenia zaawansowanych aplikacji. Leon Atkinson jest autorem ksi¹¿ki „PHP. Programowanie”. Jest te¿ inicjatorem projektu Wydawnictwo Helion FreeTrade: zestawu narzêdzi open source wykorzystuj¹cego MySQL i PHP. Atkinson ul. Chopina 6 od 1997 roku u¿ywa MySQL w wielu aplikacjach sieciowych i e-commerce. 44-100 Gliwice tel. (32)230-98-63 e-mail: helion@helion.pl
  2. 2. Spis treści Wstęp............................................................................................................................................................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 całe zło ............................................................................ 25 Dlaczego MySQL? ......................................................................................................... 26 Historia MySQL............................................................................................................. 27 Rozdział 2. Instalacja MySQL .................................................................................................................... 29 Pobieranie plików instalacyjnych..................................................................................... 29 Linux RPM .................................................................................................................... 30 Windows ...................................................................................................................... 31 Kompilowanie kodu źródłowego...................................................................................... 33 Nadawanie uprawnień ................................................................................................... 33 Rozdział 3. Interakcja z MySQL ................................................................................................................ 35 Połączenie klient-serwer poprzez TCP/IP ......................................................................... 35 Narzędzia wiersza poleceń ............................................................................................. 36 Interfejsy graficzne ........................................................................................................ 38 ODBC........................................................................................................................... 39 Interfejsy WWW............................................................................................................. 40 Rozdział 4. Modele baz danych ..................................................................................................................41 Historia........................................................................................................................ 41 Terminologia................................................................................................................. 43 DBMS — system zarządzania bazą danych ..................................................................... 43 Bazy danych oparte na zwykłych 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 Powiązania ................................................................................................................... 55
  3. 3. 4 MySQL Operacje relacyjne......................................................................................................... 56 Czy MySQL to prawdziwy system RDMBS? ...................................................................... 62 Rozdział 6. Język zapytań strukturalnych.............................................................................................. 63 SQL jako język czwartej generacji ................................................................................... 63 Definiowanie danych ..................................................................................................... 64 Wstawianie wierszy ....................................................................................................... 66 Aktualizacja wierszy....................................................................................................... 67 Usuwanie wierszy.......................................................................................................... 67 Zapytania ..................................................................................................................... 68 Złączenia ..................................................................................................................... 69 Porządkowanie.............................................................................................................. 71 Grupowanie .................................................................................................................. 71 Stosowanie ograniczeń.................................................................................................. 72 Zmiana formy tabeli ...................................................................................................... 73 Rozdział 7. Projektowanie bazy danych .................................................................................................. 75 Specyfikacja wymagań................................................................................................... 76 Specyfikacja projektowa ................................................................................................ 79 Tworzenie diagramów .................................................................................................... 81 Języki 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 współbie ność ..................................................................................................101 Współbieżność ........................................................................................................... 102 Transakcje ................................................................................................................. 102 Blokowanie................................................................................................................. 106 Sekwencje.................................................................................................................. 107 Część II Encyklopedia MySQL 109 Rozdział 10. Typy danych, zmienne i wyra enia...................................................................................... 111 Typy danych................................................................................................................ 111 Zmienne..................................................................................................................... 114 Operatory ................................................................................................................... 116 Wyrażenia .................................................................................................................. 123 Nazwy ze spacjami ...................................................................................................... 124
  4. 4. Spis treści 5 Rozdział 11. Typy kolumn i indeksów .......................................................................................................125 Liczby ........................................................................................................................ 126 Łańcuchy.................................................................................................................... 128 Wartości opisujące czas .............................................................................................. 131 Aliasy typów kolumn.................................................................................................... 133 Indeksy ...................................................................................................................... 133 Rozdział 12. Funkcje wewnętrzne ...........................................................................................................135 Diagnostyka i konfiguracja ........................................................................................... 136 Sterowanie przebiegiem egzekucji ................................................................................ 138 Grupowanie ................................................................................................................ 142 Funkcje matematyczne ................................................................................................ 146 Łańcuchy.................................................................................................................... 154 Czas .......................................................................................................................... 169 Pozostałe 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
  5. 5. 6 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. Narzędzia 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
  6. 6. Spis treści 7 pack_isam ................................................................................................................. 317 perror ........................................................................................................................ 317 replace ...................................................................................................................... 318 safe_mysqld............................................................................................................... 319 Rozdział 15. API C ......................................................................................................................................321 Typy danych................................................................................................................ 321 Funkcje klienckie ........................................................................................................ 325 Funkcje obsługi tablic.................................................................................................. 350 Funkcje zestawów znaków ........................................................................................... 350 Funkcje obsługi plików................................................................................................. 352 Funkcje obsługi błędów ............................................................................................... 354 Funkcje mieszające ..................................................................................................... 354 Funkcje list................................................................................................................. 355 Funkcje zarządzające pamięcią..................................................................................... 356 Funkcje opcji .............................................................................................................. 357 Funkcje obsługi haseł.................................................................................................. 357 Funkcje łańcuchowe .................................................................................................... 358 Funkcje obsługi wątków ............................................................................................... 360 Część III Pisanie programów klienckich MySQL 361 Rozdział 16. Programowanie w API języka 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
  7. 7. 8 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 odpowiedzialności ............................................................................................ 411 Udostępnianie danych ................................................................................................. 412 Zapewnienie spójności bazy danych.............................................................................. 413 W razie awarii ............................................................................................................. 414 Pomoc użytkownikom .................................................................................................. 414 Tworzenie i wdrażanie standardów................................................................................ 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 plików ...................................................................................................... 428 Pamięć systemowa ..................................................................................................... 429 Dzienniki .................................................................................................................... 429 Rozdział 25. Jak radzić sobie z awarią .................................................................................................435 Sprawdzanie tabel i ich naprawianie ............................................................................. 435 Kopie bezpieczeństwa, odzyskiwanie danych ................................................................. 438 Rozdział 26. Optymalizacja .....................................................................................................................445 Zanim zajmiesz się optymalizacją ................................................................................. 445 Badanie wydajności..................................................................................................... 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. Bezpieczeństwo..................................................................................................................463 System uprawnień ...................................................................................................... 463 Nadawanie uprawnień ................................................................................................. 469 Zapewnianie bezpieczeństwa ....................................................................................... 471 Rozdział 28. Zmiana bazy danych...........................................................................................................475 Zmiana serwerów baz danych....................................................................................... 475 Uzupełnianie możliwości MySQL................................................................................... 476 Użycie trybu ANSI........................................................................................................ 481 Wyjątkowe cechy MySQL.............................................................................................. 482
  8. 8. Spis treści 9 Rozdział 29. Rozproszone bazy danych .................................................................................................487 Pojęcie rozproszonych baz danych ................................................................................ 487 Synchronizacja opóźniona ............................................................................................ 490 Replikacja w MySQL .................................................................................................... 492 Uruchamianie wielu serwerów ...................................................................................... 497 Rozdział 30. Odwzorowanie na obiekty .................................................................................................499 Model obiektowy ......................................................................................................... 500 Serializacja obiektów................................................................................................... 500 Odwzorowanie obiektowości i relacyjności ..................................................................... 503 Rozdział 31. Rozszerzanie mo liwości ....................................................................................................513 Biblioteka do analizy błędów ........................................................................................ 513 Dodawanie zestawów znaków ...................................................................................... 515 Funkcje ...................................................................................................................... 520 Procedury ................................................................................................................... 523 Dodatki 525 Dodatek A Zasoby internetowe...............................................................................................................527 Oficjalne listy mailingowe............................................................................................. 527 Nieoficjalne listy wysyłkowe ......................................................................................... 529 Archiwa list wysyłkowych.............................................................................................. 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 Słowa zastrze one ................................................................................................................545 Dodatek E Kody błędów MySQL ...............................................................................................................549 Dodatek F Styl kodowania w SQL .............................................................................................................561 Zalecenia ogólne ........................................................................................................ 561 Identyfikatory.............................................................................................................. 562 Tabele ....................................................................................................................... 562 Instrukcje ................................................................................................................... 563 Dodatek G Projekt przykładowej bazy danych ..................................................................................... 565 Diagramy.................................................................................................................... 565 Schemat SQL ............................................................................................................. 567 Skorowidz ................................................................................................................................................579
  9. 9. Funkcje wewnętrzne W tym rozdziale: n Diagnostyka i konfiguracja n Sterowanie przebiegiem egzekucji n Grupowanie n Funkcje matematyczne n Łańcuchy n Czas n Pozostałe funkcje n Procedury Funkcje zwracają wartości, które czasami zale ą od parametrów wejściowych. Funkcję mo na wywołać wszędzie tam, gdzie mo liwe jest zastosowanie wyra enia. Dotyczy to równie samych parametrów funkcji — innymi słowy, mo liwe jest zagnie d anie wywołań funkcji. W przypadku większości funkcji parametry są przesyłane w nawiasach i nie mo e być odstepu pomiędzy nazwą funkcji a nawiasem otwierającym. Pomaga to interpreterowi MySQL od- ró nić nazwy funkcji od nazw kolumn. Wymóg ten mo na znieść za pomocą odpowiednich argumentów podanych z wiersza poleceń, ale w konsekwencji u ywanie nazw funkcji do nazywania kolumn będzie niemo liwe. Do kilku wymienionych w tym rozdziale funkcji lepiej pasowałoby określenie „operator”. Zostały jednak umieszczone tutaj, poniewa ich działanie przypomina w większym stopniu funkcję. Z ich opisów jasno wynika, e nie wymagają nawiasów. Ka dy opis funkcji rozpoczyna się od nagłówka, prezentującego formę wywołania funkcji. Wyrazy pisane du ymi literami to słowa kluczowe. Wyrazy pisane małymi literami to prze- kazywane funkcji wartości, które mogą mieć formę stałych, nazw kolumn lub wyra eń. MySQL rozpoznaje nazwy funkcji wpisane dowolną kombinacją du ych i małych liter.
  10. 10. 136 Część II n Encyklopedia MySQL Wielokropek () oznacza, e funkcja pobiera listę wartości oddzielonych przecinkami. Wszystko, co umieszczone zostało w nawiasach kwadratowych, jest opcjonalne. Niektóre funkcje mają kilka poziomów parametrów opcjonalnych. Jak pamiętamy, wartością większości wyra eń, które zawierają wartość PWNN, będzie rów- nie wartość PWNN. Dotyczy to równie wywołań funkcji. Na przykład konkatenacja wartości PWNN z dowolnym łańcuchem daje PWNN. Diagnostyka i konfiguracja Opisane tu funkcje zwracają informacje o serwerze i pomagają w diagnostyce. BENCHMARK(rundy, wartość) Funkcja oblicza wartość wyra enia tyle razy, na ile wskazuje pierwszy argument. Zwraca zawsze zero, ale u ywając klienta O[USN, mo na sprawdzić, ile czasu zajęło jej wykonanie. Rysunek 12.1 pokazuje, ile czasu zabiera MySQL przeprowadzenie 100 000 wywołań funkcji 5170':. Rysunek 12.1. O[USN 5'.'%6 $'0%*/#4- 5170': .GQP Funkcja BENCHMARK ^ $'0%*/#4- 5170': .GQP ^ ^ ^ TQY KP UGV UGE Nale y pamiętać, e zgłoszony czas to czas wykonania wywołania, a nie czas korzystania z procesora. Tłok na serwerze lub w sieci mo e znacząco spowolnić czas egzekucji. CONNECTION_ID() Funkcja zwraca identyfikator połączenia dla połączenia bie ącego — patrz: rysunek 12.2. Rysunek 12.2. O[USN 5'.'%6 %100'%6+10A+ Funkcja CONNECTION_ID ^ %100'%6+10A+ ^ ^ ^ TQY KP UGV UGE
  11. 11. Rozdział 12. n Funkcje wewnętrzne 137 DATABASE() Funkcja zwraca nazwę domyślnej bazy danych. Je eli nie została wybrana adna domyślna baza danych, zwracana jest wartość „null” — patrz: rysunek 12.3. Rysunek 12.3. O[USN 5'.'%6 #6#$#5' Funkcja DATABASE ^ #6#$#5' ^ ^ VGUV ^ TQY KP UGV UGE LAST_INSERT_ID([klucz_główny]) MySQL dla ka dego połączenia przechowuje wartość ostatnio u ytego klucza głównego. Funkcja .#56A+05'46A+ zwraca tę wartość. Je eli prześlemy jej argument, wartość zostanie zgodnie z nim ustawiona. Istnieją dwa sposoby u ycia tej funkcji. Najczęściej stosowany dotyczy kolumn #761A+0%4'/'06. Je eli kolumnie nadana została wartość w wyniku automatycznej inkrementacji, to funkcji .#56A+05'46A+ przypisana zostaje właśnie ta wartość. Z kolei automatycznie inkrementowana kolumna, której nadamy wartość ręcznie zamiast podawania zera lub PWNN, nie spowoduje stosownej aktualizacji wartości zwracanej przez .#56A+05'46A+. Rysunek 12.4 przedstawia, jak zmienia się wartość .#56A+05'46A+ po wstawieniu wiersza z wartością PWNN dla ko- lumny automatycznie inkrementowanej. Rysunek 12.4. O[USN 5'.'%6 .#56A+05'46A+ Funkcja LAST_INSERT_ID ^ NCUVAKPUGTVAKF ^ ^ ^ TQY KP UGV UGE O[USN +05'46 +061 RTQFWMV[ 8#.7'5 07.. /[F Q VTÎLRCM 3WGT[ 1- TQY CHHGEVGF UGE O[USN 5'.'%6 .#56A+05'46A+ ^ NCUVAKPUGTVAKF ^ ^ ^ TQY KP UGV UGE Za pomocą funkcji .#56A+05'46A+ mo na równie symulować sekwencje, poprzez skoja- rzenie funkcji z jednokolumnową tabelą. Opis sekwencji i sposobu ich symulowania znaj- duje się w rozdziale 9. „Transakcje i współbie ność”.
  12. 12. 138 Część II n Encyklopedia MySQL SESSION_USER() Jest to alias funkcji 75'4. SYSTEM_USER() Jest to alias funkcji 75'4. USER() Funkcja zwraca nazwę u ytkownika, który zainicjował sesję, wraz z domeną komputera, z którego następuje połączenie — patrz: rysunek 12.5. Rysunek 12.5. O[USN 5'.'%6 75'4 Funkcja USER ^ 75'4 ^ ^ 1$%NQECNJQUV ^ TQY KP UGV UGE VERSION() Funkcja zwraca numer wersji serwera MySQL — patrz: rysunek 12.6. Rysunek 12.6. O[USN 5'.'%6 8'45+10 Funkcja VERSION ^ 8'45+10 ^ ^ PV ^ TQY KP UGV UGE Sterowanie przebiegiem egzekucji Opisane tu funkcje sterują przebiegiem egzekucji. +( oraz %#5' zostały zaimplementowane na wzór instrukcji języka trzeciej generacji i mimo e nie u ywa się z nimi nawiasów, korzysta się z nich tak, jak z funkcji. Dwie funkcje blokujące oraz funkcja wymuszająca oczekiwanie bazy nadrzędnej na podrzędną ułatwiają zarządzanie współbie nością.
  13. 13. Rozdział 12. n Funkcje wewnętrzne 139 CASE wartość_testowa WHEN przypadek1 THEN wartość_zwracana1 [WHEN przypadek2 THEN wartość_zwracana2] … [ELSE wartość_domyślna] END Instrukcja pobiera wartość testową i porównuje ją z jednym lub z kilkoma „przypadkami”. Je eli wartość testowa odpowiada któremuś przypadkowi, zwracana jest wartość z nim skoja- rzona. Je eli wartość testowa nie jest równa adnemu z przypadków, instrukcja %#5' zwraca opcjonalną wartość domyślną. Rysunek 12.7 przedstawia instrukcję %#5' zastosowaną dla tabeli o pięciu wierszach. Dla kolumn o liczbie porządkowej 1 i 2 zwracany jest numer kolumny słownie, a dla pozostałych domyślny łańcuch +PPC YCTVQ è. Rysunek 12.7. O[USN 5'.'%6 .R %#5' .R Instrukcja 9*'0 6*'0 ,GFGP CASE 9*'0 6*'0 YC '.5' +PPC YCTVQ è '0 #5 4GWNVCV[ FKC CPKC %#5' (41/ RTQFWMV[ ^ .R ^ 4GWNVCV[ FKC CPKC %#5' ^ ^ ^ ,GFGP ^ ^ ^ YC ^ ^ ^ +PPC YCTVQ è ^ ^ ^ +PPC YCTVQ è ^ ^ ^ +PPC YCTVQ è ^ TQYU KP UGV UGE CASE WHEN przypadek1 THEN wartość_zwracana1 [WHEN przypadek2 THEN wartość_zwracana2] … [ELSE wartość_domyślna] END Alternatywna wersja instrukcji %#5' oblicza wartość ka dego wyra enia, zamiast porów- nywać je do pojedynczych wartości. Przykład przedstawiony na rysunku 12.8 pokazuje, e wyra enia będące poszczególnymi przypadkami oraz wartości zwracane mogą być dowolnym prawidłowym wyra eniem, w tym wywołaniem funkcji lub odwołaniem do innej kolumny. Poniewa instrukcja %#5' mo e zmieniać typy dla ka dego wiersza, przyjmuje się, e ko- lumna ma typ zgodny z wartością zwracaną przez pierwszy warunek 9*'0. GET_LOCK(nazwa, limit_czasu) Przez określony czas mierzony w sekundach funkcja )'6A.1%- stara się uzyskać dostęp do blokady o podanej nazwie. Wywołanie zakończy się dopiero z chwilą upłynięcia zadanego czasu lub uzyskania dostępu do blokady.
  14. 14. 140 Część II n Encyklopedia MySQL Rysunek 12.8. O[USN 5'.'%6 .R %#5' Instrukcja 9*'0 .R 6*'0 219'4 .R CASE WHEN 9*'0 .R 6*'0 .R '.5' 0CYC '0 #5 4GWNVCV[ FKC CPKC %#5' (41/ RTQFWMV[ ^ .R ^ 4GWNVCV[ FKC CPKC %#5' ^ ^ ^ ^ ^ ^ ^ ^ ^ 5EQVMC ^ ^ ^ ^ ^ ^ /[F Q ^ TQYU KP UGV UGE Jedno połączenie mo e utrzymywać tylko jedną blokadę naraz. Wywołanie )'6A.1%- uwalnia blokadę utrzymywaną dotychczas, ale dobrym nawykiem jest u ywanie 4'.'#5'A.1%- z chwi- lą, gdy blokada nie jest ju potrzebna. Blokada jest zwalniana równie w chwili przerwania połączenia. Fakt utrzymywania blokady nie stwarza adnych ograniczeń dla innych połączeń ani nie daje adnych korzyści dla połączenia ją utrzymującego. Blokad mo na jednak u ywać w powią- zaniu, implementując w ten sposób dowolny poziom blokowania. Zastosowanie )'6A.1%- do implementacji powiązanego blokowania wierszy zostało opisane w rozdziale 9. Prosty przy- kład przedstawiono na rysunku 12.9. Rysunek 12.9. O[USN 5'.'%6 )'6A.1%- RTQFWMV[.R Funkcja GET_LOCK ^ )'6A.1%- RTQFWMV[.R ^ ^ ^ TQY KP UGV UGE O[USN 72#6' RTQFWMV[ 5'6 %GPC 9*'4' .R 3WGT[ 1- TQY CHHGEVGF UGE 4QYU OCVEJGF %JCPIGF 9CTPKPIU O[USN 5'.'%6 4'.'#5'A.1%- RTQFWMV[.R ^ 4'.'#5'A.1%- RTQFWMV[.R ^ ^ ^ TQY KP UGV UGE
  15. 15. Rozdział 12. n Funkcje wewnętrzne 141 IF(wartość_testowa, wartość_prawda, wartość_fałsz) Funkcja zwraca jedną wartość, je eli wyra enie testowe ma wartość VTWG, i inną, je eli ma ono wartość HCNUG. Wartość testowa jest konwertowana na liczbę całkowitą, dlatego nale y pamiętać o u yciu operatora porównania zamiast przesyłania jedynie liczby zmiennoprze- cinkowej. Podobnie jak w przypadku %#5', instrukcja +( mo e zwracać typy niezgodne z sobą w ka dym z dwóch wariantów. Je eli obydwie wartości są łańcuchami, obydwie zostaną zwrócone jako łańcuchy. Je eli ani jedna wartość nie jest łańcuchem, a przynajmniej jedna jest liczbą zmiennoprzecinkową, +( zwróci obydwie jako wartości zmiennoprzecinkowe. W pozostałych przypadkach zwrócone zostaną liczby całkowite. Rysunek 12.10 demonstruje u ycie in- strukcji +( do oznaczenia dnia jako dnia w tygodniu lub dnia w weekendzie. Rysunek 12.10. O[USN 5'.'%6 +( #;1(9''- 019 KP YGGMGPF FKG V[IQFPKC Instrukcja IF ^ +( #;1(9''- 019 KP YGGMGPF FKG V[IQFPKC ^ ^ FKG V[IQFPKC ^ TQY KP UGV UGE IFNULL(wartość_testowa, wartość_zwracana) Funkcja zwraca wartość testową, je eli jest ona niepusta — w innym przypadku zwracany jest drugi argument. Przykład przedstawiony na rysunku 12.11 pokazuje, jak mo na za pomocą instrukcji +(07.. zamieniać wartości PWNN stosownymi opisami. Rysunek 12.11. O[USN 5'.'%6 0CYC Funkcja +(07.. 1RKU $TCM QRKUW #5 1RKU IFNULL (41/ RTQFWMV[ ^ 0CYC ^ 1RKU ^ ^ 5EQVGEMC ^ $TCM QRKUW ^ ^ )TGDKG ^ $TCM QRKUW ^ ^ 5EQVMC ^ $TCM QRKUW ^ ^ 2CUVC ^ $TCM QRKUW ^ ^ /[F Q ^ VTÎLRCM ^ TQYU KP UGV UGE MASTER_POS_WAIT(nazwa, pozycja) Funkcja oczekuje, a serwer podrzędny „dogoni” serwer nadrzędny w obrębie środowiska replikacyjnego. Wymagane jest podanie nazwy pliku dziennika i pozycji w dzienniku, którą serwer podrzędny musi osiągnąć. Je eli serwer nie jest serwerem nadrzędnym, zwracana
  16. 16. 142 Część II n Encyklopedia MySQL jest od razu wartość PWNN. Je eli serwer podrzędny nie został jeszcze uruchomiony, funkcja będzie trwała w zablokowaniu, oczekując na uruchomienie serwera i jego dotarcie do okre- ślonej pozycji w dzienniku. Funkcja zwraca liczbę „przerobionych” w czasie oczekiwania zdarzeń w dzienniku. Więcej informacji na temat replikacji znajduje się w rozdziale 29. „Rozproszone bazy danych”. NULLIF(wartość_testowa1, wartość_testowa2) Funkcja zwraca PWNN, je eli obydwie wartości testowe są równe. W innym przypadku zwraca pierwszą wartość testową. Funkcja ta przydaje się do zamiany wartości zerowych na PWNN, co ilustruje rysunek 12.12. Rysunek 12.12. O[USN 5'.'%6 0CYC 07..+( /CIC[P #5 /CIC[P Funkcja (41/ RTQFWMV[ NULLIF ^ 0CYC ^ /CIC[P ^ ^ 5EQVGEMC ^ 07.. ^ ^ )TGDKG ^ 07.. ^ ^ 5EQVMC ^ 07.. ^ ^ 2CUVC ^ 07.. ^ ^ /[F Q ^ ^ TQYU KP UGV UGE RELEASE_LOCK(nazwa) Funkcja zwalnia blokadę wskazaną argumentem PCYC, uzyskaną wcześniej za pomocą funkcji )'6A.1%-. Je eli wskazana blokada nie jest utrzymywana, zwracana jest wartość PWNN. Przykład zastosowania znajduje się w opisie funkcji )'6A.1%-. Grupowanie Opisane tu funkcje działają na kilku wartościach w kolumnie. Je eli nie podano klauzuli )4172 $;, wówczas obejmują swoim działaniem wszystkie wiersze. Na potrzeby przykładów tu przedstawionych stworzona została nowa definicja tabeli, którą przedstawia rysunek 12.13. Kolumny z wartością PWNN są pomijane w obliczeniach, dokonywanych przez te funkcje. U ycie PWNN w wyra eniu zawsze spowoduje zwrócenie PWNN, ale funkcja grupująca zasto- sowana na kolumnie zawierającej PWNN nie powoduje tego efektu — PWNN jest wówczas ignorowane.
  17. 17. Rozdział 12. n Funkcje wewnętrzne 143 Rysunek 12.13. O[USN %4'#6' 6#$.' VGUVITWR Przykład .R +06 016 07.. #761A+0%4'/'06 grupowania TW[PC 8#4%*#4 danych 9[PKM +06 24+/#4; -'; .R 3WGT[ 1- TQYU CHHGEVGF UGE O[USN +05'46 +061 VGUVITWR TW[PC 9[PKM 8#.7'5 %GTYQPK %GTYQPK %GTYQPK %GTYQPK %GTYQPK %GTYQPK %GTYQPK %GTYQPK 0KGDKGUE[ 0KGDKGUE[ 0KGDKGUE[ 0KGDKGUE[ 0KGDKGUE[ 0KGDKGUE[ 0KGDKGUE[ 0KGDKGUE[ 3WGT[ 1- TQYU CHHGEVGF UGE 4GEQTFU WRNKECVGU 9CTPKPIU AVG(kolumna) Funkcja zwraca średnią arytmetyczną wyników z grupy. Jest ona definiowana jako suma wszystkich wartości w grupie podzielona przez ich liczbę. Rysunek 12.14 prezentuje średnie wyniki ka dej dru yny. Rysunek 12.14. O[USN 5'.'%6 TW[PC #8) 9[PKM Funkcja AVG (41/ VGUVITWR )4172 $; TW[PC ^ TW[PC ^ #8) 9[PKM ^ ^ %GTYQPK ^ ^ ^ 0KGDKGUE[ ^ ^ TQYU KP UGV UGE BIT_AND(kolumna) Funkcja wykonuje na grupie bitową operację AND i zwraca dziesiętną liczbę całkowitą — patrz: rysunek 12.15.
  18. 18. 144 Część II n Encyklopedia MySQL BIT_OR(kolumna) Funkcja wykonuje na grupie bitową operację OR i zwraca dziesiętną liczbę całkowitą. Ry- sunek 12.15 ukazuje, e nie ma bitów, które byłyby ustawione we wszystkich wynikach, ale pierwszych siedem jest ustawionych w co najmniej jednym wyniku. Rysunek 12.15. O[USN 5'.'%6 TW[PC $+6A#0 9[PKM $+6A14 9[PKM Funkcja (41/ VGUVITWR BIT_OR )4172 $; TW[PC ^ TW[PC ^ $+6A#0 9[PKM ^ $+6A14 9[PKM ^ ^ %GTYQPK ^ ^ ^ ^ 0KGDKGUE[ ^ ^ ^ TQYU KP UGV UGE COUNT(kolumna) Funkcja zwraca liczbę niepustych elementów w grupie. Mo na te zastosować znak gwiazdki (
  19. 19. ) do sprawdzenia liczby wierszy niezale nie od tego, czy mają wartość PWNN. Na rysunku 12.16 za ka dym razem widzimy 8 wyników. W dru ynie Czerwonych dwukrotnie pojawił się wynik 11, więc liczba niepowtarzalnych wyników wynosi dla niej 7. Rysunek 12.16. O[USN 5'.'%6 TW[PC %1706 9[PKM %1706 +56+0%6 9[PKM Funkcja (41/ VGUVITWR COUNT )4172 $; TW[PC ^ TW[PC ^ %1706 9[PKM ^ %1706 +56+0%6 9[PKM ^ ^ %GTYQPK ^ ^ ^ ^ 0KGDKGUE[ ^ ^ ^ TQYU KP UGV UGE COUNT([DISTINCT] …) Ta forma funkcji %1706 zwraca liczbę niepowtarzalnych kombinacji wartości kolumn poda- nych jako argumenty — patrz: rysunek 12.16. MAX(…) Funkcja zwraca największą wartość w grupie. Maksymalna wartość łańcuchowa jest defi- niowana jako ta, która występuje ostatnia w kolejności alfabetycznej. Poniewa daty mo na porządkować, maksymalna data to ostatnia w kolejności. Dwucyfrowe oznaczenia roku
  20. 20. Rozdział 12. n Funkcje wewnętrzne 145 mogą nie być poprawnie sortowane, chyba e stanowią część kolumny ;'#4. Konieczne mo e wówczas okazać się wymuszenie czterocyfrowych oznaczeń lat poprzez dodanie zera za pomocą funkcji #6'A#. Rysunek 12.17 przedstawia maksymalne i minimalne wyniki dla obu dru yn. Rysunek 12.17. O[USN 5'.'%6 TW[PC /+0 9[PKM /#: 9[PKM Funkcja MAX (41/ VGUVITWR )4172 $; TW[PC ^ TW[PC ^ /+0 9[PKM ^ /#: 9[PKM ^ ^ %GTYQPK ^ ^ ^ ^ 0KGDKGUE[ ^ ^ ^ TQYU KP UGV UGE MIN(…) Funkcja zwraca najmniejszą wartość w grupie. Minimalna wartość łańcuchowa to ta, która występuje pierwsza w kolejności alfabetycznej (patrz: rysunek 12.17). STD(…) Funkcja zwraca odchylenie standardowe dla grupy — patrz: rysunek 12.18. Rysunek 12.18. O[USN 5'.'%6 TW[PC 56 9[PKM Funkcja STD (41/ VGUVITWR )4172 $; TW[PC ^ TW[PC ^ 56 9[PKM ^ ^ %GTYQPK ^ ^ ^ 0KGDKGUE[ ^ ^ TQYU KP UGV UGE STDDEV(…) Jest to alias funkcji 56. SUM(…) Funkcja zwraca sumę elementów grupy. Łańcuchy i daty są przekształcane na liczby cał- kowite — patrz: rysunek 12.19.
  21. 21. 146 Część II n Encyklopedia MySQL Rysunek 12.19. O[USN 5'.'%6 TW[PC 57/ 9[PKM Funkcja SUM (41/ VGUVITWR )4172 $; TW[PC ^ TW[PC ^ 57/ 9[PKM ^ ^ %GTYQPK ^ ^ ^ 0KGDKGUE[ ^ ^ TQYU KP UGV UGE Funkcje matematyczne Opisane tu funkcje wykonują operacje matematyczne. Większość z nich pobiera i zwraca liczby zmiennoprzecinkowe. ABS(liczba) Funkcja zwraca wartość bezwzględną z liczby — patrz: rysunek 12.20. Rysunek 12.20. O[USN 5'.'%6 #$5 Funkcja ABS ^ #$5 ^ ^ ^ TQY KP UGV UGE ACOS(liczba) Funkcja zwraca arcus cosinus z liczby. Arcus cosinus z liczb większych od 1 lub mniejszych od 0 jest nieokreślony — patrz: rysunek 12.21. Rysunek 12.21. O[USN 5'.'%6 #%15 Funkcja ACOS ^ #%15 ^ ^ ^ TQY KP UGV UGE
  22. 22. Rozdział 12. n Funkcje wewnętrzne 147 ASIN(liczba) Funkcja zwraca arcus sinus z liczby. Arcus sinus z liczb większych od 1 lub mniejszych od 0 jest nieokreślony — patrz: rysunek 12.22. Rysunek 12.22. O[USN 5'.'%6 #5+0 Funkcja ASIN ^ #5+0 ^ ^ ^ TQY KP UGV UGE ATAN(liczba) Funkcja zwraca arcus tangens z liczby — patrz: rysunek 12.23. Rysunek 12.23. O[USN 5'.'%6 #6#0 Funkcja ATAN ^ #6#0 ^ ^ ^ TQY KP UGV UGE ATAN2(liczba, liczba) Funkcja zwraca kąt między odcinkiem łączącym dany punkt z początkiem układu współ- rzędnych a osią x, wyra ony w radianach — patrz: rysunek 12.24. Rysunek 12.24. O[USN 5'.'%6 #6#0 Funkcja ATAN2 ^ #6#0 ^ ^ ^ TQY KP UGV UGE CEILING(liczba) Funkcja zaokrągla liczbę zmiennoprzecinkową do najbli szej większej liczby całkowitej — patrz: rysunek 12.25.
  23. 23. 148 Część II n Encyklopedia MySQL Rysunek 12.25. O[USN 5'.'%6 %'+.+0) Funkcja CEILING ^ %'+.+0) ^ ^ ^ TQY KP UGV UGE COS(liczba) Funkcja zwraca cosinus z liczby wyra ony w radianach — patrz: rysunek 12.26. Rysunek 12.26. O[USN 5'.'%6 %15 Funkcja COS ^ %15 ^ ^ ^ TQY KP UGV UGE COT(liczba) Funkcja zwraca cotangens z liczby — patrz: rysunek 12.27. Rysunek 12.27. O[USN 5'.'%6 %16 Funkcja COT ^ %16 ^ ^ ^ TQY KP UGV UGE DEGREES(liczba) Funkcja zamienia radiany na stopnie — patrz: rysunek 12.28. Rysunek 12.28. O[USN 5'.'%6 ')4''5 Funkcja DEGREES ^ ')4''5 ^ ^ ^ TQY KP UGV UGE
  24. 24. Rozdział 12. n Funkcje wewnętrzne 149 EXP(liczba) Funkcja zwraca podstawę logarytmu naturalnego (e) podniesioną do podanej potęgi — patrz: rysunek 12.29. Rysunek 12.29. O[USN 5'.'%6 ':2 Funkcja EXP ^ ':2 ^ ^ ^ TQY KP UGV UGE FLOOR(liczba) Funkcja zwraca najbli szą mniejszą liczbę całkowitą dla podanej liczby zmiennoprzecin- kowej — patrz: rysunek 12.30. Rysunek 12.30. O[USN 5'.'%6 (.114 Funkcja FLOOR ^ (.114 ^ ^ ^ TQY KP UGV UGE GREATEST(…) Funkcja zwraca największą wartość z podanej listy, działając zarówno na łańcuchach, jak i na liczbach — patrz: rysunek 12.31. Rysunek 12.31. O[USN 5'.'%6 )4'#6'56 Funkcja GREATEST ^ )4'#6'56 ^ ^ ^ TQY KP UGV UGE LEAST(…) Funkcja zwraca najmniejszą wartość z podanej listy, działając zarówno na łańcuchach, jak i na liczbach — patrz: rysunek 12.32.
  25. 25. 150 Część II n Encyklopedia MySQL Rysunek 12.32. O[USN 5'.'%6 .'#56 Funkcja LEAST ^ .'#56 ^ ^ ^ TQY KP UGV UGE LOG(liczba) Funkcja zwraca logarytm naturalny z liczby — patrz: rysunek 12.33. Rysunek 12.33. O[USN 5'.'%6 .1) Funkcja LOG ^ .1) ^ ^ ^ TQY KP UGV UGE LOG10(liczba) Funkcja zwraca logarytm dziesiętny z liczby — patrz: rysunek 13.34. Rysunek 13.34. O[USN 5'.'%6 .1) Funkcja LOG10 ^ .1) ^ ^ ^ TQY KP UGV UGE MOD(liczba, liczba) Funkcja zwraca resztę z dzielenia, podobnie jak operator — patrz: rysunek 12.35. Rysunek 12.35. O[USN 5'.'%6 /1 Funkcja MOD ^ /1 ^ ^ ^ TQY KP UGV UGE
  26. 26. Rozdział 12. n Funkcje wewnętrzne 151 PI() Funkcja zwraca kilka pierwszych cyfr liczby π — patrz: rysunek 12.36. Wewnętrznie MySQL przechowuje pełną, podwójnej precyzji wartość π. Rysunek 12.36. O[USN 5'.'%6 2+ Funkcja PI ^ 2+ ^ ^ ^ TQY KP UGV UGE POW(liczba, liczba) Funkcja zwraca pierwszą liczbę podniesioną do potęgi liczby drugiej — patrz: rysunek 12.37. Rysunek 12.37. O[USN 5'.'%6 219 Funkcja POW ^ 219 ^ ^ ^ TQY KP UGV UGE POWER(liczba, liczba) Jest to alias funkcji 219. RADIANS(liczba) Funkcja zamienia stopnie na radiany — patrz: rysunek 12.38. Rysunek 12.38. O[USN 5'.'%6 4#+#05 Funkcja RADIANS ^ 4#+#05 ^ ^ ^ TQY KP UGV UGE
  27. 27. 152 Część II n Encyklopedia MySQL RAND([zarodek]) Funkcja zwraca liczbę pseudolosową z zakresu od 0 do 1. Zarodka nale y u ywać, aby roz- począć generowanie liczb pseudolosowych od określonego punktu w sekwencji. Je eli nie podamy zarodka, MySQL u yje jako zarodka dla generatora liczb pseudolosowych wartość pobraną z zegara systemowego — patrz: rysunek 12.39. Rysunek 12.39. O[USN 5'.'%6 4#0 Funkcja RAND ^ 4#0 ^ ^ ^ TQY KP UGV UGE ROUND(liczba[, dokładność]) Funkcja zaokrągla liczbę zmiennoprzecinkową do całkowitej lub opcjonalnie do podanej liczby cyfr po przecinku — patrz: rysunek 12.40. Rysunek 12.40. O[USN 5'.'%6 4170 Funkcja ROUND ^ 4170 ^ ^ ^ TQY KP UGV UGE SIGN(liczba) Funkcja zwraca –1, je eli liczba jest ujemna, lub 1, je eli jest dodatnia — patrz: rysunek 12.41. Rysunek 12.41. O[USN 5'.'%6 5+)0 Funkcja SIGN ^ 5+)0 ^ ^ ^ TQY KP UGV UGE SIN(liczba) Funkcja zwraca sinus z liczby — patrz: rysunek 12.42.
  28. 28. Rozdział 12. n Funkcje wewnętrzne 153 Rysunek 12.42. O[USN 5'.'%6 5+0 Funkcja SIN ^ 5+0 ^ ^ ^ TQY KP UGV UGE SQRT(liczba) Funkcja zwraca pierwiastek kwadratowy z liczby — patrz: rysunek 12.43. Rysunek 12.43. O[USN 5'.'%6 5346 Funkcja SQRT ^ 5346 ^ ^ ^ TQY KP UGV UGE TAN(liczba) Funkcja zwraca tangens z kąta wyra onego w radianach — patrz: rysunek 12.44. Rysunek 12.44. O[USN 5'.'%6 6#0 Funkcja TAN ^ 6#0 ^ ^ ^ TQY KP UGV UGE TRUNCATE(liczba, dokładność) Funkcja skraca część ułamkową liczby do podanej dokładności — patrz: rysunek 12.45. Rysunek 12.45. O[USN 5'.'%6 6470%#6' Funkcja TRUNCATE ^ 6470%#6' ^ ^ ^ TQY KP UGV UGE
  29. 29. 154 Część II n Encyklopedia MySQL Łańcuchy Opisane tu funkcje wykonują operacje na łańcuchach i zwracają łańcuchy. Jak pamiętamy, MySQL udostępnia operatory do porównywania łańcuchów, w tym .+-' i 4')':2. ASCII(znak) Funkcja zwraca kod ASCII pierwszego znaku w danym łańcuchu — patrz: rysunek 12.46. Rysunek 12.46. O[USN 5'.'%6 #5%++ C Funkcja ASCII ^ #5%++ C ^ ^ ^ TQY KP UGV UGE BIN(liczba_całk) Funkcja zwraca reprezentację binarną podanej liczby całkowitej — patrz: rysunek 12.47. Rysunek 12.47. O[USN 5'.'%6 $+0 Funkcja BIN ^ $+0 ^ ^ ^ TQY KP UGV UGE BINARY łańcuch Słowo kluczowe $+0#4; sprawia, e dany łańcuch jest traktowany jako binarny, co oznacza, e wielkość liter ma znaczenie przy porównaniach. Słowo $+0#4; ma wy szy priorytet ni ope- ratory porównania (wykonywane jest przed nimi). Rysunek 12.48 ilustruje zjawisko rozró nia- nia du ych i małych liter w łańcuchach binarnych i nierozró niania w łańcuchach normalnych. Rysunek 12.48. O[USN 5'.'%6 C # $+0#4; C # Słowo kluczowe BINARY ^ C # ^ $+0#4; C # ^ ^ ^ ^ TQY KP UGV UGE
  30. 30. Rozdział 12. n Funkcje wewnętrzne 155 CHAR(…) Funkcja zwraca łańcuch podany jako lista kodów ASCII — patrz: rysunek 12.49. Rysunek 12.49. O[USN 5'.'%6 %*#4 Funkcja CHAR ^ %*#4 ^ ^ CDE ^ TQY KP UGV UGE CHARACTER_LENGHT(łańcuch) Jest to alias funkcji %*#4A.'0)*6. CHAR_LENGTH(łańcuch) Funkcja zwraca liczbę znaków w łańcuchu— patrz: rysunek 12.50. Znaki wielobajtowe są liczone jako jeden znak. Rysunek 12.50. O[USN 5'.'%6 %*#4A.'0)6* /[53. Funkcja CHAR_LENGTH ^ %*#4A.'0)6* /[53. ^ ^ ^ TQY KP UGV UGE CONCAT(…) Funkcja dokonuje połączenia łańcuchów podanych w liście — patrz: rysunek 12.51. Je eli którykolwiek z podanych elementów ma wartość PWNN, zwracane jest równie PWNN. Rysunek 12.51. O[USN 5'.'%6 %10%#6 C D E Funkcja CONCAT ^ %10%#6 C D E ^ ^ CDE ^ TQY KP UGV UGE
  31. 31. 156 Część II n Encyklopedia MySQL CONCAT_WS(separator, …) Funkcja dokonuje połączenia łańcuchów, rozdzielając je separatorem — patrz: rysunek 12.52. W odró nieniu od funkcji %10%#6 wartość PWNN jest tu ignorowana. Separator o wartości PWNN powoduje, e funkcja zwraca PWNN. Rysunek 12.52. O[USN 5'.'%6 %10%#6A95 C D E Funkcja CONCAT_WS ^ %10%#6A95 C D E ^ ^ C D E ^ TQY KP UGV UGE CONV(liczba_całk, z_podstawy, do_podstawy) Funkcja dokonuje konwersji liczby całkowitej z jednego systemu liczenia na inny. Funkcja ta mo e zastępować funkcje $+0, *': i 1%6. Na rysunku 12.53 przedstawiono konwersję liczby ósemkowej na dziesiętną. Rysunek 12.53. O[USN 5'.'%6 %108 Funkcja CONV ^ %108 ^ ^ ^ TQY KP UGV UGE DECODE(tekst_zaszyfrowany, hasło) Funkcja odszyfrowuje łańcuch zaszyfrowany za pomocą funkcji '0%1' — patrz: rysunek 12.54. Rysunek 12.54. O[USN 5'.'%6 '%1' '0%1' /[53. JCU Q JCU Q Funkcja DECODE ^ '%1' '0%1' /[53. JCU Q JCU Q ^ ^ /[53. ^ TQY KP UGV UGE ELT(element, …) Funkcja zwraca element o indeksie wskazanym przez pierwszy argument — patrz: rysunek 12.55. Pierwszy element ma numer 1.
  32. 32. Rozdział 12. n Funkcje wewnętrzne 157 Rysunek 12.55. O[USN 5'.'%6 '.6 C D E F Funkcja ELT ^ '.6 C D E F ^ ^ E ^ TQY KP UGV UGE ENCODE(tekst, hasło) Funkcja zwraca łańcuch zaszyfrowany za pomocą podanego hasła. Zwrócony łańcuch jest łańcuchem binarnym o tej samej długości, co pierwotny tekst. Łańcuch mo na odszyfrować za pomocą funkcji '%1'. Funkcji tej nie nale y stosować dla kolumny 2CUUYQTF w tabeli uprawnień (ang. grant table) MySQL. Do tego celu słu y funkcja 2#55914. Rysunek 12.56 prezentuje zastosowanie '0%1' do ukrycia pól zawierających hasła w aplikacji. Rysunek 12.56. O[USN 72#6' W[VMQYPKM Funkcja 5'6 JCUNQ '0%1' UGMTGV JCU Q ENCODE 9*'4' .R 3WGT[ 1M TQY CHHGEVGF UGE 4QYU OCVEJGF %JCPIGF 9CTPKPIU ENCRYPT(łańcuch[, domieszka]) Funkcja odbudowuje funkcję ET[RV języka C — patrz: rysunek 12.57. Jest to szyfrowanie nieodwracalne. Drugi argument mo e być dwuznakowym łańcuchem poprawiającym loso- wość szyfrowania. Dłu sze łańcuchy są skracane. Funkcja ta nie jest kompatybilna z funkcją 2#55914 i ka dy system operacyjny mo e mieć odmienną implementację ET[RV (w bazach MySQL instalowanych w systemach Windows funkcja mo e zwracać wartość NULL). Rysunek 12.57. O[USN 5'.'%6 '0%4;26 JCU Q CD Funkcja ENCRYPT ^ '0%4;26 JCUNQ CD ^ ^ CD,PIIZJ$[9+ ^ TQY KP UGV UGE EXPORT_SET(pole_bitowe, opis_włączonej, opis_wyłączonej[, separator[,liczba_bitów]]) Funkcja zwraca łańcuch opcji odpowiadający bitom pierwszego argumentu. Bity, skonwer- towane kolejno od najmłodszego do najstarszego, budują łańcuch od lewej do prawej. Drugi i trzeci argument to ciągi tekstowe reprezentujące odpowiednio włączone i wyłączone bity.
  33. 33. 158 Część II n Encyklopedia MySQL Domyślnym separatorem jest przecinek, ale mo e być nim dowolny łańcuch. Domyślnie u ywane są wszystkie 64 bity reprezentacji liczby całkowitej, ale mo na to ograniczyć za pomocą piątego argumentu. Na rysunku 12.58 znaczniki T i N są rozdzielane pionową kreską. Ukazano 8 pól (bitów) — pola aktywne definiuje liczba 9 (dwójkowo 1001). Rysunek 12.58. O[USN 5'.'%6 ':2146A5'6 6 0 ^ Funkcja EXPORT_SET ^ ':2146A5'6 6 0 ^ ^ ^ 6^0^0^6^0^0^0^0 ^ TQY KP UGV UGE FIELD(element, …) Funkcja zwraca indeks pierwszego argumentu w obrębie listy, która po nim następuje — patrz: rysunek 12.59. Elementy listy są indeksowane od 1. Je eli szukany ciąg nie zostanie odnaleziony, na liście zwracane jest 0. Rysunek 12.59. O[USN 5'.'%6 (+'. D C D E F Funkcja FIELD ^ (+'. D C D E F ^ ^ ^ TQY KP UGV UGE FIND_IN_SET(łańcuch, lista) Funkcja zwraca indeks elementu listy łańcuchowej — listy elementów oddzielonych prze- cinkami, będącej łańcuchem (patrz: rysunek 12.60). Elementy listy są numerowane od 1. Rysunek 12.60. O[USN 5'.'%6 (+0A+0A5'6 E CDEF Funkcja FIND_IN_SET ^ (+0A+0A5'6 E CDEF ^ ^ ^ TQY KP UGV UGE FORMAT(liczba, dokładność) Funkcja zwraca liczbę zmiennoprzecinkową z przecinkami wstawionymi co trzy potęgi liczby 10 i z podaną liczbą cyfr w części ułamkowej — patrz: rysunek 12.61.
  34. 34. Rozdział 12. n Funkcje wewnętrzne 159 Rysunek 12.61. O[USN 5'.'%6 (14/#6 Funkcja FORMAT ^ (14/#6 ^ ^ ^ TQY KP UGV UGE HEX(liczba_całk) Funkcja zwraca szesnastkową reprezentację liczby całkowitej — patrz: rysunek 12.62. Rysunek 12.62. O[USN 5'.'%6 *': Funkcja HEX ^ *': ^ ^ #( ^ TQY KP UGV UGE INET_ATON(adres) Funkcja konwertuje adres internetowy zapisany jako łańcuch do postaci numerycznej. Adresy cztero- i ośmiobitowe są akceptowane — patrz: rysunek 12.63. Rysunek 12.63. O[USN 5'.'%6 +0'6A#610 Funkcja INET_ATON ^ +0'6A#610 ^ ^ ^ TQY KP UGV UGE INET_NTOA(adres) Funkcja zwraca łańcuchową reprezentację numerycznego adresu internetowego — patrz: rysunek 12.64. Rysunek 12.64. O[USN 5'.'%6 +0'6A061# Funkcja INET_NTOA ^ +0'6A061# ^ ^ ^ TQY KP UGV UGE
  35. 35. 160 Część II n Encyklopedia MySQL INSERT(ciąg, pozycja, długość, podciąg) Funkcja wstawia łańcuch, opcjonalnie nadpisując istniejący podciąg. Drugi argument wska- zuje znak, a trzeci określa, ile znaków usunąć od wskazanego znaku przed wstawieniem łańcucha. Rysunek 12.65 ilustruje wstawienie ciągu ABC w pozycji 3 z nadpisaniem jednego znaku. Rysunek 12.65. O[USN 5'.'%6 +05'46 CDEFGHI #$% Funkcja INSERT ^ +05'46 CDEFGHI #$% ^ ^ CD#$%FGHI ^ TQY KP UGV UGE INSTR(ciąg, podciąg) Funkcja zwraca wskaźnik do pierwszego wystąpienia podciągu w danym ciągu — patrz: rysunek 12.66. Rysunek 12.66. O[USN 5'.'%6 +0564 UCOQNQV NQV Funkcja INSTR ^ +0564 UCOQNQV NQV ^ ^ ^ TQY KP UGV UGE LCASE(ciąg) Funkcja zwraca łańcuch z wielkimi literami zamienionymi na małe — patrz: rysunek 12.67. Aliasem jest .19'4. Rysunek 12.67. O[USN 5'.'%6 .%#5' #D%F Funkcja LCASE ^ .%#5' #D%F ^ ^ CDEF ^ TQY KP UGV UGE LEFT(ciąg, długość) Funkcja zwraca podciąg z danego ciągu o podanej długości — patrz: rysunek 12.68.
  36. 36. Rozdział 12. n Funkcje wewnętrzne 161 Rysunek 12.68. O[USN 5'.'%6 .'(6 CDEFGH Funkcja LEFT ^ .'(6 CDEFGH ^ ^ CDE ^ TQY KP UGV UGE LENGTH(ciąg) Funkcja zwraca liczbę bajtów dla danego ciągu — patrz: rysunek 12.69. Znaki dwubajtowe są interpretowane przez tę funkcję jako 2. Aby odnaleźć liczbę znaków w ciągach zawie- rających znaki wielobajtowe, nale y zastosować funkcję %*#4A.'0)6*. Aliasem .'0)*6 jest 1%6'6A.'0)*6. Rysunek 12.69. O[USN 5'.'%6 .'0)6* CDE Funkcja LENGTH ^ .'0)6* CDE ^ ^ ^ TQY KP UGV UGE LOAD_FILE(nazwa) Funkcja zwraca zawartość pliku znajdującego się w systemie plików serwera. U ytkownik musi mieć uprawnienia do otwarcia tego pliku w obrębie MySQL, a sam plik musi być udo- stęniony do odczytu wszystkim u ytkownikom systemu. Na rysunku 12.70 przedstawiono ładowanie treści wiadomości z forum do tabeli przechowującej wiadomości. Rysunek 12.70. O[USN 72#6' YKCFQOQUEK Funkcja 5'6 VTGUE.1#A(+.' JQOGHQTWOVZV LOAD_FILE 9*'4' .R LOCATE(podciąg, ciąg[, pozycja]) Funkcja zwraca miejsce pierwszego wystąpienia podciągu w drugim argumencie — patrz: rysunek 12.71. Opcjonalnie wyszukiwanie mo na rozpocząć od określonej pozycji. Rysunek 12.71. O[USN 5'.'%6 .1%#6' D CDECDE Funkcja LOCATE ^ .1%#6' D CDECDE ^ ^ ^ TQY KP UGV UGE

×