Professional Documents
Culture Documents
PRZYKADOWY ROZDZIA
SPIS TRECI
KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG
TWJ KOSZYK
DODAJ DO KOSZYKA
CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK
CZYTELNIA
FRAGMENTY KSIEK ONLINE
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
5RKUVTGEK
Zastosowanie PHP ............................................................................................................... 36
Tworzenie przykadowej aplikacji: Czci samochodowe Janka...................................... 36
Formularz zamwienia .................................................................................................. 36
Przetwarzanie formularza .............................................................................................. 38
Osadzanie PHP w HTML..................................................................................................... 38
Zastosowanie znacznikw PHP ..................................................................................... 39
Style znacznikw PHP................................................................................................... 40
Instrukcje PHP............................................................................................................... 40
Odstpy.......................................................................................................................... 41
Komentarze.................................................................................................................... 41
Dodawanie zawartoci dynamicznej .................................................................................... 42
Wywoywanie funkcji.................................................................................................... 43
Uywanie funkcji date()................................................................................................. 43
Dostp do zmiennych formularza ........................................................................................ 44
Zmienne formularza....................................................................................................... 44
czenie cigw ............................................................................................................ 47
Zmienne i cigi znakw ................................................................................................. 48
Identyfikatory....................................................................................................................... 48
Tworzenie zmiennych zadeklarowanych przez uytkownika............................................... 49
Przypisywanie wartoci zmiennym ...................................................................................... 49
Typy zmiennych................................................................................................................... 49
Typy danych w PHP ...................................................................................................... 50
Sia typu......................................................................................................................... 50
Rzutowanie typu ............................................................................................................ 51
Zmienne zmiennych....................................................................................................... 51
Deklarowanie i uywanie staych......................................................................................... 51
Zasig zmiennych ................................................................................................................ 52
Uywanie operatorw .......................................................................................................... 53
Operatory arytmetyczne................................................................................................. 54
Operatory cigw........................................................................................................... 55
Operatory przypisania.................................................................................................... 55
Operatory porwna ...................................................................................................... 57
Operatory logiczne......................................................................................................... 58
Operatory bitowe ........................................................................................................... 59
Pozostae operatory........................................................................................................ 59
Rozdzia 2.
Zapisywanie danych do pniejszego uycia....................................................................... 79
Przechowywanie i wyszukiwanie zamwie Janka ............................................................. 80
Przetwarzanie plikw........................................................................................................... 81
Otwieranie pliku .................................................................................................................. 81
Tryby otwarcia pliku...................................................................................................... 81
Stosowanie funkcji fopen() do otwarcia pliku ............................................................... 82
Otwieranie pliku przez protok FTP lub HTTP............................................................ 84
Problemy z otwieraniem plikw .................................................................................... 85
Zapisywanie danych w pliku................................................................................................ 87
Parametry funkcji fwrite().............................................................................................. 88
Formaty plikw.............................................................................................................. 88
Zamykanie pliku .................................................................................................................. 89
Odczyt z pliku...................................................................................................................... 91
Otwieranie pliku w celu odczytu fopen().................................................................. 92
Wiedzie, kiedy przesta feof()................................................................................. 92
Odczytywanie pliku wiersz po wierszu fgets(), fgetss() i fgetcsv() .......................... 92
Odczyt caego pliku readfile(), fpassthru(), file()...................................................... 93
Odczyt pojedynczego znaku fgetc().......................................................................... 94
Odczytywanie zadanej dugoci fread() .................................................................... 95
Inne przydatne funkcje plikowe ........................................................................................... 95
Sprawdzanie istnienia pliku file_exists() .................................................................. 95
Okrelanie wielkoci pliku filesize()......................................................................... 96
Kasowanie pliku unlink().......................................................................................... 96
Poruszanie si wewntrz pliku rewind(), fseek() i ftell() .......................................... 96
Blokowanie pliku ................................................................................................................. 97
Lepszy sposb obrbki danych systemy zarzdzania bazami danych ............................. 99
Problemy zwizane ze stosowaniem plikw jednorodnych ........................................... 99
Jak RDBMS rozwizuj powysze problemy? .............................................................. 99
Propozycje dalszych lektur ................................................................................................ 100
W nastpnym rozdziale ...................................................................................................... 100
Spis treci
Rozdzia 3.
!"#
$
Czym s tablice? ................................................................................................................ 101
Tablice indeksowane numerycznie .................................................................................... 102
Inicjowanie tablic indeksowanych numerycznie.......................................................... 102
Dostp do zawartoci tablicy ....................................................................................... 103
Dostp do tablic przy zastosowaniu ptli..................................................................... 104
Tablice z innymi indeksami ............................................................................................... 105
Inicjowanie tablicy....................................................................................................... 105
Dostp do elementw tablicy....................................................................................... 105
Stosowanie ptli........................................................................................................... 105
Operatory tablicowe........................................................................................................... 107
Tablice wielowymiarowe ................................................................................................... 108
Sortowanie tablic ............................................................................................................... 112
Stosowanie funkcji sort() ............................................................................................. 112
Stosowanie funkcji asort() i ksort() do porzdkowania tablic...................................... 112
Sortowanie odwrotne ................................................................................................... 113
Sortowanie tablic wielowymiarowych ............................................................................... 113
Typy sortowa definiowane przez uytkownika.......................................................... 113
Odwrotne sortowanie zdefiniowane przez uytkownika................................................ 115
Zmiany kolejnoci elementw w tablicach .......................................................................... 115
Stosowanie funkcji shuffle() ........................................................................................ 116
Stosowanie funkcji array_reverse().............................................................................. 117
adowanie tablic z plikw ................................................................................................. 118
Wykonywanie innych dziaa na tablicach ........................................................................ 121
Poruszanie si wewntrz tablicy funkcje each(), current(), reset(),
end(), next(), pos() i prev() ....................................................................................... 121
Doczanie dowolnej funkcji do kadego elementu tablicy funkcja array_walk() ......122
Liczenie elementw tablicy: count(), sizeof() i array_count_values() ......................... 123
Konwersja tablic na zmienne skalarne funkcja extract()......................................... 124
Propozycje dalszych lektur ................................................................................................ 125
W nastpnym rozdziale ...................................................................................................... 125
Rozdzia 4.
%# &'()'#
Przykadowa aplikacja Inteligentny Formularz Pocztowy ............................................ 127
Formatowanie cigw ........................................................................................................ 129
Przycinanie cigw funkcje chop(), ltrim() i trim() ................................................ 130
Formatowanie cigw w celu ich prezentacji .............................................................. 130
Formatowanie cigw do przechowania funkcje addslashes() i stripslashes()........ 134
czenie i rozdzielanie cigw za pomoc funkcji cigw................................................ 135
Stosowanie funkcji explode(), implode() i join() ......................................................... 136
Stosowanie funkcji strtok() .......................................................................................... 136
Stosowanie funkcji substr() ......................................................................................... 137
Porwnywanie cigw ....................................................................................................... 138
Porzdkowanie cigw funkcje strcmp(), strcasecmp() i strnatcmp()..................... 138
Sprawdzanie dugoci cigu za pomoc funkcji strlen() .............................................. 139
Dopasowywanie i zamiana podcigw za pomoc funkcji cigw.................................... 139
Znajdowanie cigw w cigach funkcje strstr(), strchr(), strrchr() i stristr()........... 140
Odnajdywanie pozycji podcigu funkcje strpos() i strrpos()................................... 140
Zamiana podcigw funkcje str_replace() i substr_replace().................................. 141
Wprowadzenie do wyrae regularnych ............................................................................ 142
Podstawy...................................................................................................................... 143
Zbiory i klasy znakw.................................................................................................. 143
Powtarzalno .............................................................................................................. 145
Podwyraenia............................................................................................................... 145
Rozdzia 5.
* +
Ponowne stosowanie kodu ................................................................................................. 151
Koszt............................................................................................................................ 152
Niezawodno.............................................................................................................. 152
Spjno ...................................................................................................................... 152
Stosowanie funkcji require() i include() .............................................................................. 152
Funkcja require() ......................................................................................................... 153
Rozszerzenia plikw i require() ................................................................................... 154
Znaczniki PHP i require() ............................................................................................ 154
Stosowanie require() w szablonach stron WWW............................................................... 154
Stosowanie funkcji include() ....................................................................................... 159
Stosowanie funkcji require_once() i include_once().................................................... 159
Stosowanie opcji auto_prepend_file i auto_append_file .................................................. 159
Stosowanie funkcji w PHP................................................................................................. 160
Wywoywanie funkcji.................................................................................................. 160
Wywoanie niezdefiniowanej funkcji .......................................................................... 162
Wielko liter a nazwy funkcji..................................................................................... 163
Dlaczego powinno si definiowa wasne funkcje? ........................................................... 163
Podstawowa struktura funkcji ............................................................................................ 164
Nadawanie nazwy funkcji............................................................................................ 165
Parametry ........................................................................................................................... 166
Zasig................................................................................................................................. 168
Przekazanie przez referencj czy przekazanie przez warto? ........................................... 170
Powrt z funkcji................................................................................................................. 171
Zwracanie wartoci przez funkcje...................................................................................... 172
Bloki kodu ................................................................................................................... 173
Implementacja rekurencji................................................................................................... 174
Propozycje dalszych lektur ................................................................................................ 176
W nastpnym rozdziale ...................................................................................................... 176
Rozdzia 6.
"
Koncepcje programowania obiektowego ........................................................................... 178
Klasy i obiekty............................................................................................................. 178
Polimorfizm ................................................................................................................. 179
Dziedziczenie............................................................................................................... 180
Tworzenie klas, atrybutw i operacji w PHP ..................................................................... 180
Struktura klasy ............................................................................................................. 180
Konstruktory................................................................................................................ 181
Destruktory .................................................................................................................. 181
Tworzenie egzemplarzy ..................................................................................................... 182
Stosowanie atrybutw klasy............................................................................................... 182
Kontrolowanie dostpu przy uyciu private i public.......................................................... 184
Spis treci
Rozdzia 7.
"'+&, $
Koncepcja obsugi wyjtkw ............................................................................................. 209
Klasa Exception ................................................................................................................. 211
Wyjtki definiowane przez uytkownika ........................................................................... 212
Wyjtki w Czciach samochodowych Janka .................................................................... 214
Wyjtki i inne mechanizmy obsugi bdw w PHP .......................................................... 217
Propozycje dalszych lektur ................................................................................................ 218
W nastpnym rozdziale ...................................................................................................... 218
-
++"
Koncepcje relacyjnych baz danych .................................................................................... 222
Tabele .......................................................................................................................... 222
Kolumny ...................................................................................................................... 222
Wiersze ........................................................................................................................ 223
Wartoci....................................................................................................................... 223
Klucze.......................................................................................................................... 223
Schematy ..................................................................................................................... 224
Relacje ......................................................................................................................... 224
Jak zaprojektowa internetow baz danych? .................................................................... 225
Okrel obiekty wiata realnego, ktrych model chcesz wykona ................................ 225
Unikaj przechowywania redundantnych danych.......................................................... 226
Zapisuj atomowe wartoci kolumn .............................................................................. 228
Dobierz waciwe klucze ............................................................................................. 228
Pomyl o zapytaniach, ktre zadasz bazie ................................................................... 229
Unikaj tworzenia tabel z wieloma pustymi polami ...................................................... 229
Typy tabel podsumowanie ...................................................................................... 230
Architektura internetowej bazy danych.............................................................................. 230
Architektura ................................................................................................................. 230
Propozycje dalszych lektur ................................................................................................ 232
W nastpnym rozdziale ...................................................................................................... 232
10
.+"
Uytkowanie monitora MySQL ......................................................................................... 235
Logowanie si do serwera MySQL .................................................................................... 235
Tworzenie baz i rejestrowanie uytkownikw ................................................................... 237
Tworzenie bazy danych ............................................................................................... 237
Definiowanie uytkownikw i przywilejw ...................................................................... 237
Wprowadzenie do systemu przywilejw MySQL.............................................................. 237
Zasada najmniejszego przywileju ................................................................................ 238
Rejestrowanie uytkownikw: polecenie GRANT ...................................................... 238
Typy i poziomy przywilejw ....................................................................................... 240
Polecenie REVOKE..................................................................................................... 242
Przykady uycia polece GRANT i REVOKE........................................................... 242
Rejestrowanie uytkownika czcego si z Internetu ....................................................... 243
Wylogowanie si uytkownika root............................................................................. 244
Uywanie odpowiedniej bazy danych................................................................................ 244
Tworzenie tabel bazy danych............................................................................................. 244
Znaczenie dodatkowych atrybutw kolumn ................................................................ 246
Typy kolumn................................................................................................................ 246
Rzut oka na baz danych polecenia SHOW i DESCRIBE...................................... 249
Tworzenie indeksw .................................................................................................... 249
Uwaga na temat typw tabel........................................................................................ 250
Identyfikatory MySQL....................................................................................................... 250
Wybr typw danych w kolumnach................................................................................... 251
Typy liczbowe ............................................................................................................. 252
Propozycje dalszych lektur ................................................................................................ 256
W nastpnym rozdziale ...................................................................................................... 256
Spis treci
11
(%!/0#
Szczegy systemu przywilejw ........................................................................................ 299
Tabela user................................................................................................................... 300
Tabele db i host............................................................................................................ 302
Tabele tables_priv i columns_priv............................................................................... 302
Kontrola dostpu: w jaki sposb MySQL uywa tabel przywilejw ........................... 304
Zmiana przywilejw: kiedy zmiany zostan uwzgldnione? ....................................... 305
Ochrona bazy danych......................................................................................................... 305
MySQL z perspektywy systemu operacyjnego ............................................................ 305
Hasa ............................................................................................................................ 306
Przywileje uytkownikw............................................................................................ 307
MySQL i Internet......................................................................................................... 307
Uzyskiwanie szczegowych informacji o bazie danych ................................................... 308
Uzyskiwanie informacji poleceniem SHOW ............................................................... 308
Uzyskiwanie informacji o kolumnach za pomoc polecenia DESCRIBE ...................... 310
Jak wykonywane s zapytania: polecenie EXPLAIN .................................................. 311
Przyspieszanie wykonania zapyta za pomoc indeksw .................................................. 315
Optymalizowanie bazy danych .......................................................................................... 316
Optymalizacja projektu bazy danych ........................................................................... 316
Przywileje .................................................................................................................... 316
Optymalizacja tabel ..................................................................................................... 316
Stosowanie indeksw................................................................................................... 317
Uywanie wartoci domylnych .................................................................................. 317
Wicej wskazwek ...................................................................................................... 317
Tworzenie kopii zapasowej bazy danych MySQL ............................................................. 317
Przywracanie bazy danych MySQL ................................................................................... 318
Implementowanie replikacji............................................................................................... 318
Konfigurowanie serwera nadrzdnego......................................................................... 319
Transfer danych pocztkowych ................................................................................... 320
Konfigurowanie odbiorcy lub odbiorcw .................................................................... 321
Propozycje dalszych lektur ................................................................................................ 321
W nastpnym rozdziale ...................................................................................................... 321
3'(%!/0
Instrukcja LOAD DATA INFILE ...................................................................................... 323
Maszyny zapisu.................................................................................................................. 324
Transakcje.......................................................................................................................... 325
Definicje dotyczce transakcji ..................................................................................... 325
Uycie transakcji w InnoDB........................................................................................ 326
Klucze obce........................................................................................................................ 327
Procedury skadowane ....................................................................................................... 328
Prosty przykad ............................................................................................................ 329
Zmienne lokalne .......................................................................................................... 331
Kursory i struktury sterujce........................................................................................ 332
Propozycje dalszych lektur ................................................................................................ 335
W nastpnym rozdziale ...................................................................................................... 335
12
!"#
$
Spis treci
13
%
&
'()
14
;",4
Konfigurowanie obsugi obrazkw w PHP ........................................................................ 472
Formaty obrazkw ............................................................................................................. 473
JPEG ............................................................................................................................ 473
PNG ............................................................................................................................. 473
WBMP......................................................................................................................... 474
GIF............................................................................................................................... 474
Tworzenie obrazkw.......................................................................................................... 475
Tworzenie kadru obrazka............................................................................................. 476
Rysowanie lub umieszczanie tekstu w obrazku ........................................................... 476
Wywietlanie ostatecznej grafiki ................................................................................. 478
Kocowe czynnoci porzdkujce ............................................................................... 479
Stosowanie automatycznie generowanych obrazkw na innych stronach.......................... 480
Stosowanie tekstu i czcionek do tworzenia obrazkw............................................................ 480
Konfiguracja podstawowego kadru ............................................................................. 484
Dopasowanie tekstu do przycisku................................................................................ 484
Nadawanie tekstowi odpowiedniej pozycji.................................................................. 487
Wpisywanie tekstu do przycisku.................................................................................. 488
Etap kocowy .............................................................................................................. 488
Rysowanie figur i wykresw danych ................................................................................. 488
Inne funkcje obrazkw....................................................................................................... 495
Propozycje dalszych lektur ................................................................................................ 496
W nastpnym rozdziale ...................................................................................................... 496
!#+ 4
Czym jest kontrola sesji? ................................................................................................... 497
Podstawowa zasada dziaania sesji .................................................................................... 498
Czym jest cookie?........................................................................................................ 498
Konfiguracja cookies w PHP ....................................................................................... 498
Stosowanie cookies w sesji.......................................................................................... 499
Przechowywanie identyfikatora sesji........................................................................... 500
Spis treci
15
:<
Stosowanie magicznych cudzysoww .............................................................................. 513
Wykonywanie cigw funkcja eval()............................................................................ 514
Zakoczenie wykonania die i exit ................................................................................. 515
Serializacja zmiennych i obiektw..................................................................................... 516
Pobieranie informacji na temat rodowiska PHP ............................................................... 517
Uzyskiwanie informacji na temat zaadowanych rozszerze ....................................... 517
Identyfikacja waciciela skryptu................................................................................. 518
Uzyskiwanie informacji na temat daty modyfikacji skryptu........................................ 518
Dynamiczne dodawanie rozszerze ................................................................................... 518
Czasowa zmiana rodowiska wykonawczego .................................................................... 519
Podwietlanie rde .......................................................................................................... 520
Uywanie PHP w wierszu polece..................................................................................... 520
W nastpnej czci ............................................................................................................. 521
%
*
"
( '"
+( , -
4 !%!/0)
+
Zastosowanie inynierii oprogramowania w tworzeniu aplikacji WWW .......................... 526
Planowanie i prowadzenie projektu aplikacji WWW......................................................... 526
Ponowne stosowanie kodu ................................................................................................. 527
Tworzenie kodu atwego w utrzymaniu ............................................................................. 528
Standardy kodowania................................................................................................... 528
Dzielenie kodu............................................................................................................. 531
Stosowanie standardowej struktury katalogw ............................................................ 532
Dokumentacja i dzielenie wewntrznych funkcji ........................................................ 532
Implementacja kontroli wersji............................................................................................ 533
Wybr rodowiska programistycznego .............................................................................. 534
Dokumentacja projektw ................................................................................................... 534
Prototypowanie .................................................................................................................. 535
Oddzielanie logiki i zawartoci .......................................................................................... 536
Optymalizacja kodu ........................................................................................................... 537
Stosowanie prostych optymalizacji.............................................................................. 537
Stosowanie produktw firmy Zend.............................................................................. 538
Testowanie ......................................................................................................................... 538
Propozycje dalszych lektur ................................................................................................ 540
W nastpnym rozdziale ...................................................................................................... 540
9"2, 4
Bdy programistyczne ...................................................................................................... 541
Bdy skadni ............................................................................................................... 542
Bdy wykonania ......................................................................................................... 543
Bdy logiczne ............................................................................................................. 548
16
8 .#),# +
Problem.............................................................................................................................. 559
Skadniki rozwizania ........................................................................................................ 560
Identyfikacja uytkownika i personalizacja ................................................................. 560
Przechowywanie zakadek ........................................................................................... 561
Rekomendowanie zakadek ......................................................................................... 561
Przegld rozwizania ......................................................................................................... 561
Implementacja bazy danych............................................................................................... 563
Implementacja podstawowej witryny................................................................................. 565
Implementacja uwierzytelniania uytkownikw ................................................................ 567
Rejestracja ................................................................................................................... 567
Logowanie ................................................................................................................... 573
Wylogowanie............................................................................................................... 576
Zmiana hasa................................................................................................................ 577
Ustawianie zapomnianych hase .................................................................................. 579
Implementacja przechowywania i odczytywania zakadek ................................................ 584
Dodawanie zakadek .................................................................................................... 584
Wywietlanie zakadek ................................................................................................ 586
Usuwanie zakadek ...................................................................................................... 587
Implementacja rekomendacji ............................................................................................. 589
Rozwijanie projektu i moliwe rozszerzenia...................................................................... 592
W nastpnym rozdziale ...................................................................................................... 592
.
Problem.............................................................................................................................. 593
Skadniki rozwizania ........................................................................................................ 594
Tworzenie katalogu online........................................................................................... 594
ledzenie zakupw uytkownika podczas przegldania................................................... 594
Implementacja systemu patnoci ................................................................................ 594
Interfejs administratora ................................................................................................ 595
Przegld rozwizania ......................................................................................................... 595
Implementacja bazy danych............................................................................................... 599
Implementacja katalogu online .......................................................................................... 601
Przedstawianie kategorii .............................................................................................. 603
Wywietlanie ksiek danej kategorii.......................................................................... 605
Przedstawianie szczegowych danych ksiki ........................................................... 607
Implementacja koszyka na zakupy..................................................................................... 608
Stosowanie skryptu pokaz_kosz.php ........................................................................... 608
Podgld koszyka .......................................................................................................... 611
Dodawanie produktw do koszyka .............................................................................. 614
Zapisywanie uaktualnionego koszyka.......................................................................... 615
Wywietlanie podsumowania w pasku nagwka ........................................................ 616
Pobyt w kasie............................................................................................................... 616
Implementacja patnoci .................................................................................................... 622
Implementacja interfejsu administratora ............................................................................ 624
Rozwijanie projektu ........................................................................................................... 631
Zastosowanie istniejcego systemu.................................................................................... 632
W nastpnym rozdziale ...................................................................................................... 632
Spis treci
17
18
.(,#
*( =>
Problem.............................................................................................................................. 775
Ocena formatw dokumentw ..................................................................................... 776
Skadniki rozwizania ........................................................................................................ 780
System pyta i odpowiedzi .......................................................................................... 781
Oprogramowanie generujce dokumenty..................................................................... 781
Przegld rozwizania ......................................................................................................... 784
Zadawanie pyta.......................................................................................................... 785
Ocena odpowiedzi ....................................................................................................... 786
Tworzenie certyfikatu RTF.......................................................................................... 789
Tworzenie certyfikatu PDF z szablonu ........................................................................ 792
Generowanie dokumentu PDF za pomoc PDFlib....................................................... 795
Skrypt Witaj wiecie dla PDFlib .............................................................................. 796
Tworzenie certyfikatu za pomoc PDFlib.................................................................... 800
Problemy zwizane z nagwkami ..................................................................................... 807
Rozwijanie projektu ........................................................................................................... 807
Propozycje dalszych lektur ................................................................................................ 807
W nastpnym rozdziale ...................................................................................................... 808
Spis treci
19
.
/
( 0)
=
:# +%!/0 -
Uruchamianie PHP jako CGI lub moduu serwera............................................................. 852
Instalacja Apache, PHP i MySQL w systemie UNIX ........................................................ 852
Instalacja przy uyciu binariw ................................................................................... 852
Instalacja przy uyciu kodw rdowych ................................................................... 853
Plik httpd.conf informacje kocowe ....................................................................... 859
Czy obsuga PHP dziaa poprawnie? ........................................................................... 860
Czy SSL dziaa poprawnie? ......................................................................................... 861
Instalacja Apache, PHP i MySQL w systemie Windows ................................................... 862
Instalacja MySQL w systemie Windows ..................................................................... 862
Instalacja serwera Apache w systemie Windows......................................................... 866
Instalacja PHP w systemie Windows........................................................................... 868
Instalowanie PEAR............................................................................................................ 871
Inne konfiguracje ............................................................................................................... 872
=6
3"-
Zasoby powicone PHP.................................................................................................... 873
Zasoby powicone MySQL i SQL.................................................................................... 875
Zasoby powicone serwerowi Apache ............................................................................. 876
Zasoby powicone tworzeniu stron WWW ...................................................................... 876
! -
Rozdzia 9.
W rozdziale tym przedstawimy sposb tworzenia bazy danych MySQL, przeznaczonej do
udostpniania na stronach WWW.
W tym rozdziale zostan poruszone nastpujce zagadnienia:
tworzenie bazy danych,
definiowanie uytkownikw i przywilejw,
wprowadzenie do systemu przywilejw,
tworzenie tabel bazy danych,
tworzenie indeksw,
wybieranie typw kolumn w MySQL.
Naley rwnie przypomnie, i nazwy pl bdcych kluczami podstawowymi s podkrelone lini cig, a nazwy pl bdcych kluczami obcymi lini przerywan.
W celu przeanalizowania materiau zawartego w tym rozdziale naley zapewni sobie
dostp do serwera MySQL, co oznacza, e:
Trzeba przeprowadzi instalacj MySQL na serwerze WWW, obejmujc
nastpujce czynnoci:
instalacj plikw,
rejestracj uytkownika na serwerze MySQL,
234
Cz II Stosowanie MySQL
zdefiniowanie odpowiedniej cieki dostpu,
w razie koniecznoci uruchomienie aplikacji !&$$',
okrelenie hasa administratora,
usunicie uytkownika anonimowego,
uruchomienie serwera MySQL po raz pierwszy i skonfigurowanie go w taki
235
W przykadach przedstawionych w dalszej czci tego rozdziau oraz w rozdziale nastpnym kada komenda jest zakoczona znakiem rednika ((). Informuje on serwer MySQL
o koniecznoci wykonania zadanego polecenia. Opuszczenie rednika spowoduje brak
reakcji serwera, o czym czsto zapominaj uytkownicy, zwaszcza niedowiadczeni.
Opuszczenie znaku rednika spowoduje, e nastpi przejcie do nowego wiersza przed
zakoczeniem wpisywania tekstu komendy. Pozwolio to nam na zwikszenie czytelnoci
przykadw. Odnalezienie miejsca, w ktrym nastpio przejcie do nowego wiersza, nie
powinno sprawi adnych problemw MySQL wywietli tam znak kontynuacji w formie
strzaki przedstawionej poniej:
W celu zalogowania si do serwera MySQL naley przej do wiersza polece systemu
operacyjnego i wpisa nastpujc komend:
Polecenie !& wywouje monitor MySQL, majcy posta wiersza polece czcego
klienta z serwerem.
Opcji )* uywa si w celu wskazania komputera, do ktrego ma nastpi poczenie (na
maszynie tej pracuje serwer MySQL). Jeli polecenie to ma by wykonane na tym samym
komputerze, na ktrym znajduje si MySQL, to opcja )* oraz parametr
mog zosta pominite. W przeciwnym wypadku konieczne jest wpisanie w miejsce parametru
nazwy maszyny, na ktrej uruchomiony jest serwer bazy danych.
Opcja ) jest stosowana w celu wskazania identyfikatora uytkownika, na ktrego nastpuje logowanie. Jeli identyfikator ten nie zostanie podany, wwczas MySQL domylnie
uyje identyfikatora tego uytkownika, ktry jest aktualnie zalogowany do systemu operacyjnego.
Jeli MySQL zosta zainstalowany na komputerze lub serwerze czytelnika, bdzie on zmuszony zalogowa si jako uytkownik oraz samodzielnie utworzy baz danych, ktr bdzie wykorzystywa w trakcie uruchamiania zawartych w tym rozdziale przykadw.
Przy pierwszym uruchomieniu serwera uytkownik jest jedynym zarejestrowanym
236
Cz II Stosowanie MySQL
uytkownikiem. W trakcie pracy na serwerze zainstalowanym na komputerze administrowanym przez inn osob naley przy logowaniu uy identyfikatora uytkownika,
podanego przez administratora.
Opcja )+ informuje serwer o logowaniu si z uyciem hasa. Moe ona zosta pominita, jeli dla danego uytkownika haso nie zostao ustanowione.
Jeeli czytelnik loguje si jako uytkownik bez koniecznoci podania hasa, zalecane jest okrelenie hasa dostpu zgodnie z instrukcjami zawartymi w dodatku A. Jego
brak powoduje, i system bdzie niedostatecznie zabezpieczony.
Podawanie hasa w tym samym wierszu co polecenie !& nie jest obowizkowe. Jeeli
nie zostanie ono podane, to serwer MySQL sam o nie zapyta. Tak naprawd pominicie hasa jest waciwie lepszym rozwizaniem, gdy wpisane w wierszu polece bdzie
miao form zwykego tekstu, co umoliwi osobom postronnym jego wykrycie.
Po wpisaniu komendy podanej na pocztku podrozdziau wywietlona zostanie odpowied
w nastpujcej formie:
(jeeli polecenie to nie zadziaa, trzeba sprawdzi, czy serwer MySQL jest uruchomiony, a komenda !& moe by zrealizowana w biecej ciece dostpu).
Nastpnie naley poda haso dostpu. Jeli wszystko przebiegnie prawidowo, powinien
zosta wywietlony komunikat podobny do poniszego:
! "
#
$
%
%
&''
(
)
*
+
!+ +"+,
*
+"+
),,
Jeeli czytelnik pracuje na wasnym komputerze i komunikat nie bdzie przypomina powyszego, wwczas naley upewni si, czy uruchomiona jest aplikacja !&$$'
(jeeli jest wymagana) i czy zostao okrelone i wpisane prawidowo haso dostpu dla
uytkownika . Jeli praca odbywa si na zdalnej maszynie, trzeba upewni si, i
podane haso jest prawidowe.
Po zalogowaniu si do serwera kursor powinien znajdowa si przy znaku zachty, umoliwiajc stworzenie nowej bazy danych. Czytelnik pracujcy na wasnym komputerze
powinien stosowa si do instrukcji podanych w dalszej czci rozdziau. Czytelnik korzystajcy z maszyny administrowanej przez inn osob powinien mie utworzon i przypisan mu baz danych, moe wic od razu przej do lektury podrozdziau Uywanie
odpowiedniej bazy danych. Mona oczywicie zapozna si z poprzedzajcymi go podrozdziaami, nie bdzie jednak moliwoci (a przynajmniej nie powinno by) uruchamiania wyszczeglnionych w nich polece.
237
System baz danych MySQL jest w stanie obsugiwa wiele baz danych jednoczenie. Zazwyczaj jedna aplikacja wsppracuje z jedn baz danych. Dla ksigarni Ksikorama
baza ta nosi nazw .
Tworzenie bazy danych to czynno najprostsza. W wierszu polece MySQL naley
wpisa:
W miejsce naley poda nazw bazy danych, ktra ma zosta utworzona. W naszym przykadzie jest to baza o nazwie .
I to wszystko! Otrzymana odpowied powinna wyglda mniej wicej tak:
-./$
,,
0''1
2
Oznacza to, e operacja zostaa wykonana bez bdw. Jeli taki komunikat si nie pojawi,
naley upewni si, e na kocu komendy zosta wpisany znak rednika. Informuje on serwer MySQL o zakoczeniu wpisywania polecenia i o koniecznoci jego wykonania.
System MySQL moe obsugiwa wielu uytkownikw. Uytkownik powinien by
wykorzystywany w zasadzie tylko do celw administracyjnych, co jest podyktowane wzgldami bezpieczestwa. Dla kadego uytkownika, ktry bdzie pracowa w systemie, trzeba
utworzy konto i nada mu haso dostpu. Nie musz one by takie same, jak identyfikator uytkownika i haso wykorzystywane do zalogowania si do systemu operacyjnego.
Ta sama zasada odnosi si do uytkownika . Podane jest stosowanie rnych hase dostpu w razie logowania si do systemu operacyjnego i serwera MySQL, szczeglnie w przypadku uytkownika .
Nadawanie hasa nowym uytkownikom nie jest obowizkowe, jednak ze wzgldw bezpieczestwa podane jest, aby kady uytkownik posiada wasne haso dostpu. W przypadku tworzenia internetowej bazy danych wskazane jest utworzenie co najmniej jednego
uytkownika, ktry bdzie wykorzystywany tylko przez dan aplikacj bazodanow. Mona
by zada pytanie o cel tej operacji. Odpowied zwizana jest z systemem przywilejw.
!
Jedn z najwaniejszych cech MySQL jest obsuga wyrafinowanego systemu przywilejw. Przywilej to inaczej posiadane przez okrelonego uytkownika prawo do wykonania okrelonego polecenia na okrelonym obiekcie. Idea przywilejw jest zbliona do
koncepcji praw dostpu do plikw. Rejestrujc nowego uytkownika MySQL, naley
238
Cz II Stosowanie MySQL
Klauzule w nawiasach kwadratowych s opcjonalne. Poniej zostan omwione poszczeglne parametry tego polecenia. Pierwszy z nich,
, ma posta listy przywilejw
oddzielonych przecinkami. MySQL posiada liczny zbir przywilejw, opisanych w nastpnym podrozdziale.
Parametr
jest opcjonalny. Uywa si go w celu wskazania kolumn, do ktrych
podane przywileje zostan zastosowane. Mona poda nazw pojedynczej kolumny lub
list nazw kolumn oddzielonych przecinkami.
Parametr wskazuje baz lub tabel, do ktrej zostan zastosowane podane przywileje. W celu nadania przywilejw na wszystkie bazy danych w systemie powinien przyj warto 010. Wwczas przywileje zostay nadane na poziomie globalnym.
239
Ten sam efekt mona osign, przypisujc parametrowi warto 0, jeli nie jest
uywana adna baza danych. Czciej jednak wskazuje si wszystkie tabele w bazie,
wpisujc 10, konkretn tabel () lub pojedyncze
kolumny w danej tabeli poprzez wpisanie i nadanie odpowiedniej wartoci parametrowi
. Za pomoc tych metod nadaje si przywileje na
pozostaych trzech poziomach uprzywilejowania, odpowiednio: baza danych, tabela
i kolumna. Jeeli w trakcie wykonywania tego polecenia uywana jest konkretna baza
danych, to podanie samej nazwy tabeli bdzie zinterpretowane jako nadanie przywilejw tabeli o tej nazwie, znajdujcej si w uywanej bazie danych.
Parametr
powinien wskazywa identyfikator, za pomoc ktrego uytkownik loguje si do serwera MySQL. Oczywicie nie musi by to ten sam,
ktry jest uywany przy logowaniu si do systemu operacyjnego. Warto tego parametru
moe rwnie zawiera nazw komputera. Moliwo t wykorzystuje si na przykad
do odrnienia uytkownika (traktowanego jako 2*) od uytkownika 231. Rozwizanie to jest szczeglnie uyteczne w przypadku,
gdy uytkownicy z rnych domen maj te same identyfikatory. Poza tym metoda ta
zwiksza poziom bezpieczestwa systemu, gdy pozwala okreli, z jakiej domeny konkretny uytkownik moe si zalogowa, a nawet do jakich tabel lub baz ma on dostp
z okrelonej lokalizacji.
Wartoci parametru jest haso dostpu, ktrym powinien posugiwa si wskazany
uytkownik w trakcie logowania do serwera. Stosuje si tutaj standardowe zasady doboru
hase. Kwestie bezpieczestwa zostan omwione w dalszej czci ksiki, jednak naley
zaznaczy, e haso nie powinno by atwe do odgadnicia. Niewskazane jest uywanie
sw, ktre mona znale w sowniku ani nie powinno by takie samo, jak identyfikator uytkownika. Najlepszym rozwizaniem jest nadanie hasa skadajcego si z liter
maych i wielkich oraz znakw nie bdcych literami.
Klauzula %-45 %- pozwala wskaza, e uytkownik musi czy si poprzez protok
Secure Sockets Layer (SSL), a take wskaza opcje SSL. Wicej informacji na temat
pocze z serwerem MySQL za porednictwem SSL mona znale w podrczniku
MySQL.
Dodanie opcji 6,%
/# /
spowoduje, e wskazany uytkownik bdzie mg nadawa innym uytkownikom takie przywileje, jakie sam posiada.
Zamiast niej mona uy klauzuli 6 w postaci
5AB=49B?4B>-=4
lub
5AB=?:5*B?4B>-=4
lub
5AB -66 *9-6B?4B>-=4
Dziki tym klauzulom mona ograniczy liczb zapyta, uaktualnie lub pocze, jakie
jeden uytkownik moe zrealizowa w cigu godziny. Rozwizanie to moe przyda si
do ograniczania obcienia systemw wspuytkowanych generowanego przez jednego
uytkownika.
240
Cz II Stosowanie MySQL
Informacje dotyczce nadanych przywilejw zapamitywane s w czterech tabelach systemowych, znajdujcych si w bazie danych o nazwie !&. Tabele te nosz nazwy:
!&1, !&1', !&1*, !&1'$+7 oraz !&1$+7. Zamiast
wykorzystywa polecenie ,%
, mona zmienia dane bezporednio w wymienionych
tabelach. Szczegowe informacje na temat sposobu dziaania tych tabel oraz metod
wprowadzania zmian bezporednio w nich zostan przedstawione w rozdziale 12.
Kademu uytkownikowi mona przyporzdkowa przywileje dowolnego typu, najrozsdniejsze jednak jest nadawanie przywilejw dla administratorw tylko administratorom
systemu, czyli zgodnie ze wspomnian wczeniej zasad najmniejszego przywileju.
Uytkownikom naley nadawa takie przywileje, ktre umoliwi korzystanie tylko z potrzebnych im baz i tabel. Nikomu, z wyjtkiem administratora, nie naley udostpnia systemowej bazy !&, gdy w niej wanie przechowywane s identyfikatory wszystkich
uytkownikw, ich hasa dostpu itp. (szerzej zagadnienie to jest opisane w rozdziale 12.).
Przywileje przeznaczone dla zwykych uytkownikw odwouj si bezporednio do konkretnych rodzajw polece SQL i okrelaj, czy dany uytkownik moe wykonywa polecenia tego typu. Polecenia jzyka SQL zostan szerzej omwione w nastpnym rozdziale,
teraz ograniczymy si tylko do krtkiego opisu (tabela 9.1). Kolumna Zastosowanie
wskazuje obiekty, ktrym moe by nadany okrelony typ przywilejw.
Przywileje dla uytkownikw
Przywilej
Zastosowanie
Opis
*
Tabele, kolumny
964*
Tabele, kolumny
=?:5*
Tabele, kolumny
:*
Tabele
96:A
Tabele
5*4
Tabele
45*
:4-?
241
Wikszo przywilejw przeznaczonych dla zwykych uytkownikw nie powoduje zmniejszenia bezpieczestwa systemu. Przywilej 8 -% moe by wykorzystywany do obchodzenia systemu przywilejw poprzez zmian nazw tabel, jednak jest on potrzebny wikszoci
uytkownikw. Ochrona systemu jest zawsze rezultatem kompromisu midzy jego uytecznoci a poziomem zabezpiecze. Administrator powinien samodzielnie podejmowa
decyzj o nadaniu, lub nie, przywileju 8 -% zwykym uytkownikom. Zazwyczaj jednak
przywilej ten jest nadawany.
Oprcz przywilejw opisanych w tabeli 9.1 istnieje rwnie przywilej %-9-%-
"- (obecnie
nie jest on praktycznie uywany) oraz przywilej ,%
, nadawany czciej poprzez dodanie
opcji 6,%
/# /
ni przez doczanie go do listy wartoci parametru
.
W tabeli 9.2 opisano przywileje przeznaczone dla administratorw.
Przywileje dla administratorw
Przywilej
Opis
45**?-454#*5<
;9
- .*5<
?4-
4-5:
4?9 5*9-65C
>-:5*5<5
>=*:-6
=?4
242
Cz II Stosowanie MySQL
Opis
5
Nadaje wszystkie przywileje opisane w tabelach 9.1 i 9.2. Jest on rwnowany przywilejowi
=53
5?49C93
! "#$%"
Przeciwiestwem ,%
jest polecenie %-./-, uywane w celu odebrania uytkownikowi
okrelonych przywilejw. Jego skadnia jest bardzo podobna do skadni polecenia ,%
:
4C-.
7
8
-6
;4-
Polecenie to spowoduje nadanie wszystkich przywilejw na wszystkie bazy danych uytkownikowi o identyfikatorze 9, posugujcemu si hasem ':;<, oraz umoliwi nadanie dowolnego przywileju innym uytkownikom.
Niekiedy konieczne okazuje si wyeliminowanie tego uytkownika. Mona to zrobi w nastpujcy sposb:
Po rozmowie z Zosi wiadomo ju, w jaki sposb chce korzysta z bazy, mona wic nada
jej odpowiednie przywileje:
243
Jak wida, nie ma ju potrzeby podawania hasa dostpu, jakim posuguje si Zosia.
Jeeli administrator dojdzie do wniosku, e Zosia wykonaa ju cz swoich zada, moe
ograniczy nadane jej przywileje:
Kiedy Zosia nie bdzie ju potrzebowaa dostpu do bazy danych, mona odebra jej
wszystkie pozostae przywileje:
"
#$%$%
&
Konieczne jest zarejestrowanie uytkownika, ktry czy si z baz danych poprzez
stron WWW zawierajc skrypty PHP. Rwnie w tym przypadku naley zastosowa
zasad najmniejszego przywileju, trzeba wic rozway, jakie operacje ma wykonywa
skrypt PHP.
W wikszoci przypadkw wystarcz przywileje -8-" ,
-% ,
-8- - i 5#
-. Nadaje
si je w nastpujcy sposb:
Utwrz wic drug wersj uytkownika, gdy bdziemy jej potrzebowa w nastpnych
sekcjach.
244
Cz II Stosowanie MySQL
%'
Przed przystpieniem do lektury tego podrozdziau czytelnik powinien by ju zalogowany do serwera MySQL na koncie zwykego uytkownika, zaoonym w poprzednim podrozdziale lub te utworzonym przez administratora systemu.
Pierwsz czynnoci, jak naley wykona, jest wskazanie bazy danych, ktra zostanie wykorzystana. Suy do tego nastpujce polecenie:
Jeeli przed przystpieniem do pracy nie zostanie wybrana adna baza danych, serwer wywietli komunikat o bdzie:
44-4$'D10E:'''26:
)
%'
Nastpnym etapem tworzenia bazy danych jest konstrukcja tabel. Suy do tego polecenie
jzyka SQL "%- - 8-, ktrego skadnia przedstawia si nastpujco:
45**5<0
2
Parametr powinien okrela nazw tabeli, ktra ma zosta utworzona. Z kolei
parametr
powinien mie posta listy kolumn oddzielonych przecinkami, jakie
245
bdzie zawiera nowa tabela. Kada z kolumn musi by okrelona przez podanie jej nazwy i typu danych.
Przypomnijmy schemat bazy danych ksigarni Ksikorama:
!"
#!$
%$
%
0G
B
F
/
F
/
,
01/I2/
2!
)
F
GF
0)
0$E2
F
/
0&'2/
0$''2/
,
0D/I2
2!
)
GH
BG
0G
/
)
0$E2/
/
F
0G
/)2
2!
)
GH
BF
G
F
0)
0$E2
F
/
GH
(
2!
246
Cz II Stosowanie MySQL
Kod SQL zawarty w pliku ksiazkorama.sql zostanie wykonany po wpisaniu nastpujcego polecenia (zakadamy przy tym, e plik ksiazkorama.sql ma t sam lokalizacj, co
aplikacja !&):
"
#
# #$ #% "
/
588 oznacza, e pole, przy ktrym ten atrybut stoi, musi w kadym wierszu tabeli
mie nadan jak warto. Jeeli przy opisie nowej kolumny atrybut zosta pominity,
wwczas jej pola mog by puste (
588).
5 /$
"%--
Atrybut #% %=-= oznacza, e wskazana kolumna jest kluczem podstawowym tabeli,
a wartoci w niej zapisywane musz by unikalne. MySQL automatycznie indeksuje takie
kolumny. Zauwamy, e w pliku ksiazkorama.sql wszystkim kolumnom z atrybutem
5 /$
"%--
(np.
w tabeli ) przypisano rwnie atrybut #% %=-=,
dziki czemu zosta speniony wymg indeksowania pl z atrybutem 5 /$
"%--
.
Atrybut #% %= -= moe by wyszczeglniony zaraz za nazw nowej kolumny wycznie w przypadku, gdy tylko ta jedna kolumna jest kluczem podstawowym tabeli. Inny
sposb okrelenia klucza podstawowego zosta zaprezentowany dla tabeli #!$>
. Wykorzystanie omawianej metody jest wymuszone tym, e w skad klucza
podstawowego tabeli #!$ wchodzi nie jedna, ale dwie kolumny jednoczenie.
(To prowadzi rwnie do utworzenia indeksu bazujcego na obydwch kolumnach).
Atrybut 5
,
-
wpisany za identyfikatorem typu cakowitoliczbowego oznacza, e kolumna moe zawiera tylko wartoci nieujemne.
Rozwamy przykad pierwszej utworzonej tabeli:
247
)
F
0F
B
F
/
GF
0&'2/
0$''2/
H
0E'2
2!
Tworzc now tabel, naley kadej jej kolumnie przypisywa odpowiedni typ danych.
Wedug schematu tabela skada si z czterech kolumn. Pierwsza z nich,
,
jest kluczem podstawowym o wartociach typu cakowitoliczbowego (typ ). Co wicej, wszystkie pola ID (
,
) mog mie tylko wartoci nieujemne.
Wykorzystano rwnie cechy atrybutu 5 /$
"%--
, dziki ktremu MySQL sam dba
o spenienie powyszych wymogw mamy wic jeden kopot z gowy.
Pozostae kolumny bd przechowywa dane majce posta acuchw znakw nadano im wic typ * o okrelonej dla kadej kolumny dugoci acucha, zawartej w nawiasach okrgych. Na przykad w polu
mona zapisywa acuchy zawierajce nie wicej ni 50 znakw.
Nawet jeli nazwisko klienta liczy mniej ni 50 liter warto pola
, zawsze bdzie
zajmowa tyle pamici, ile trzeba do zapisania 50 znakw. MySQL automatycznie doda
do nazwiska tyle znakw spacji, ile brakuje do wykorzystania caej przydzielonej polu
pamici. Alternatyw dla typu * jest 7* wartoci pl tego typu zajmuj zawsze o jeden bajt wicej ni trzeba do zapamitania podanego acucha. Stosowanie pl
typu 7* generalnie oszczdza wic pami, moe jednak negatywnie wpywa na wydajno caego systemu.
Wikszo kolumn zostaa zadeklarowana jako
/
588. Zastosowanie takiego niewielkiego rozwizania optymalizacyjnego wszdzie tam, gdzie to moliwe, moe nieznacznie polepszy wydajno pracy systemu. Zagadnienia dotyczce optymalizacji pracy
serwera MySQL zostan poruszone w rozdziale 12.
W obrbie niektrych polece "%- - 8- zawarte s elementy, ktre nie zostay jeszcze omwione. Rozwamy kolejny przykad:
)
G
0G
B
F
/
F
/
,
01/I2/
2!
Kolumna jest zadeklarowana jako liczba zmiennoprzecinkowa typu ?. Dla
wikszoci typw liczbowych zmiennoprzecinkowych istnieje moliwo okrelenia
maksymalnej liczby cyfr, jakie bd wywietlane, oraz iloci miejsc znaczcych po
przecinku. W przykadzie ksigarni internetowej warto zamwie jest okrelana w zotwkach, zadeklarowano wic, i ma ona nie wicej ni sze cyfr plus dwie cyfry znaczce po przecinku.
Dane przechowywane w kolumnie
maj typ .
W rozwaanej tabeli wszystkie kolumny, oprcz kolumny , s zadeklarowane jako
/
588. Dlaczego? Ot wpisujc nowe zamwienie naley najpierw zapisa je w tabeli
248
Cz II Stosowanie MySQL
, nastpnie doda odpowiednie rekordy do tabeli #!$, po czym
obliczy warto caego zamwienia. W momencie wpisywania nowego zamwienia jego
warto nie zawsze jest znana, dlatego wartoci pola mog by nieokrelone.
W tym przypadku nie ma potrzeby tworzenia klucza podstawowego, poniewa kada publikacja ma wasny, unikalny numer ISBN. Nie liczc kolumny
, wszystkie pozostae
kolumny tej tabeli mog posiada wartoci
588. Mona bowiem wyobrazi sobie sytuacj, w ktrej znany jest tylko numer ISBN ksiki, zanim jeszcze zostanie ujawniony
jej tytu, autor i cena.
Na przykadzie tabeli #!$ zademonstrowano sposb deklarowania kluczy
podstawowych skadajcych si z wicej ni jednej kolumny:
)
GH
BG
0G
/
)
0$E2/
/
F
0G
/)2
2!
Pole , w ktrym zapamitywana jest liczba zamwionych egzemplarzy jednej ksiki,
jest typu
=
5
,
-
, a wic moe przyjmowa wartoci liczb cakowitych z zakresu
od 0 do 255.
Jak ju wspomnielimy, klucze podstawowe skadajce si z wicej ni jednej kolumny
naley deklarowa za pomoc klauzuli #% %=-=. Przykad jej uycia zaprezentowano
powyej.
Ostatnie polecenie z pliku ksiazkorama.sql powoduje utworzenie tabeli %$:
)
GH
BF
G
F
0)
0$E2
F
/
GH
(
2!
Uyto w nim nowego typu danych, ktry nie zosta jeszcze omwiony to typ @.
Jest on stosowany w przypadku duszych tekstw, np. artykuw prasowych. Istnieje kilka
jego wariantw, ktre zostan szczegowo opisane w dalszej czci tego rozdziau.
Dla jeszcze lepszego zrozumienia procesu tworzenia tabel podane zostan zasady nadawania nazw kolumnom oraz oglne informacje na temat identyfikatorw. Najpierw jednak
powrcimy na chwil do utworzonej bazy danych.
249
)
* +,$( -"+./0"
Po zalogowaniu si do serwera MySQL i wybraniu bazy mona sprawdzi, jakie
tabele wchodz w jej skad, wpisujc nastpujce polecenie:
"
&
Polecenia 6/ mona rwnie uy do wywietlenia wszystkich baz danych udostpnianych przez serwer:
"
&
-"% -:
"
&
MySQL wywietli wszystkie informacje, ktre naleao poda przy tworzeniu tabeli:
JJJJJJJ
@;
@*
@6@.
@:
,
@(
@
JJJJJJJ
@)@
0$E2@@?49@@@
@
@
0&'2@#@@6=@@
@@
0$''2@#@@6=@@
@
@,
0D/I2@#@@6=@@
JJJJJJJ
D
0''&
2
Oba polecenia s szczeglnie przydatne do przypomnienia sobie np. typu danych przechowywanych w konkretnej kolumnie czy przeanalizowania struktury bazy utworzonej
przez innego projektanta.
Ju wczeniej krtko wspominalimy o indeksach, poniewa definiowanie kluczy gwnych jest rwnoznaczne z utworzeniem indeksw na tych kolumnach.
250
Cz II Stosowanie MySQL
1
Niektrzy czytelnicy mog ju wiedzie, e MySQL udostpnia wicej ni jeden typ tabel
czy modu przechowywania danych, w tym rwnie te, ktre realizuj mechanizmy
transakcyjne. Wicej na temat typw tabel powiemy w rozdziale 13. Na razie wszystkie
tabele znajdujce si w naszych bazach danych bd uyway domylnego moduu przechowywania danych MyISAM.
&
MySQL rozrnia pi typw identyfikatorw: bazy danych, tabele, kolumny i indeksy
(wszystkie s ju czytelnikowi znane) oraz aliasy (zostan one szerzej omwione w nastpnym rozdziale).
Bazy danych w MySQL odwzorowuj nazwy katalogw w strukturze plikw systemu operacyjnego, natomiast tabele odpowiadaj pojedynczym plikom. Fakt ten ma bezporedni
wpyw na zasady nazewnictwa oraz warunkuje rozrnianie (lub nie) wielkich i maych
liter w nazwach baz i tabel. Jeeli system operacyjny rozrnia wielkie i mae litery,
wwczas czyni to rwnie serwer baz danych (tak jest w przypadku systemu Unix),
w przeciwnym razie wielko liter nie bdzie miaa znaczenia (np. w przypadku Windows). W nazwach kolumn i aliasw wielko liter nie odgrywa roli, jednak w obrbie jednego polecenia nazwy te musz by zapisywane w taki sam sposb.
Warto wspomnie, e lokalizacja katalogw i plikw z danymi jest ustawiana w plikach
konfiguracyjnych serwera MySQL. Mona j odnale, wpisujc w wierszu polece systemu operacyjnego nastpujc komend:
%
)
251
Dugo
maksymalna
Rozrnianie
wielkoci liter
Znaki dozwolone
Baza danych
64
Tabela
64
Kolumna
64
Nie
Wszystkie
Indeks
64
Nie
Wszystkie
Alias
255
Nie
Wszystkie
Wczeniejsze wersje systemu MySQL s pod tym wzgldem bardziej restrykcyjne i nie
dozwalaj wykona tak sformuowanego polecenia.
Oczywicie z tak szerokich moliwoci naley korzysta z umiarem. To, e baza moe
nosi nazw B'B, wcale nie oznacza, e powinna zosta tak nazwana.
Stosuje si tu standardow zasad nazewnictwa, wedug ktrej identyfikatory powinny
mie sensowne brzmienie.
252
Cz II Stosowanie MySQL
Typy liczbowe dziel si na cakowitoliczbowe i zmiennoprzecinkowe. W przypadku tych
ostatnich istnieje moliwo zadeklarowania liczby cyfr znaczcych po przecinku w tabelach wielko ta jest oznaczona symbolem D. Maksymalna warto parametru D jest
wyznaczona przez mniejsz spord dwch liczb: 30 i M 2 (tj. maksymalna szeroko wywietlania minus 2 jeden znak przecinka i jeden znak dla cakowitej czci danej liczby).
W przypadku typw cakowitoliczbowych mona je zawzi do typu 5
,
-
tak, jak
pokazano na listingu 9.1.
Dla wszystkich typw liczbowych mona ustawi atrybut -%/9 88. Powoduje on, e przy
wywietlaniu zawartoci kolumn posiadajcych ten atrybut zapisane w nich liczby zostan
poprzedzone zerami. Jeeli kolumna zostanie zdefiniowana jako -%/9 88, automatycznie bdzie ona rwnie mie typ 5
,
-
.
Typy cakowitoliczbowe zostay przedstawione w tabeli 9.5. W drugiej kolumnie tabeli
zawarto dopuszczalny zakres danych w przypadku braku atrybutu 5
,
-
(pierwszy
wiersz) i z ustawionym atrybutem 5
,
-
(drugi wiersz).
Typy cakowitoliczbowe
Typ
Zakres
Wykorzystanie
pamici
(w bajtach)
*96#96*7028
Opis
Bardzo mae liczby
cakowite
<9*
Synonim *96#96*
<--
Synonim *96#96*
596*7028
:9=96*7028
8388608..8388607
lub 0..16777215
96*7028
96*347028
<9396*7028
63
64
253
Zakres
Wykorzystanie
pamici
(w bajtach)
;-5*0 2
Zalenie od precyzji
rny
Uywany do deklarowania
liczb zmiennoprzecinkowych
o pojedynczej lub podwjnej
precyzji
;-5*70/28
1.175494351E38
3.402823466E+38
Liczby zmiennoprzecinkowe
o pojedynczej precyzji. Typ ten
jest rwnoznaczny z typem
;-5*0D2, pozwala przy tym
na okrelenie szerokoci
wywietlania i liczby cyfr
znaczcych po przecinku
:-=<70/28
1.7976931348623157E308
2.2250738585072014E+308
Liczby zmiennoprzecinkowe
o podwjnej precyzji. Typ ten jest
rwnoznaczny z typem ;-5*0N2,
pozwala przy tym na okrelenie
szerokoci wywietlania i liczby
cyfr znaczcych po przecinku
:-=<
?4 99-670/28
Jak wyej
4570/28
Jak wyej
: 95707/828
Rny
6=49 70/28
Jak wyej
: 70/28
Jak wyej
;9A:70/28
Jak wyej
M+2
Opis
Liczba zmiennoprzecinkowa
przechowywana jako zmienna
typu >54. Zakres zaley
od wartoci M szerokoci
wywietlania
MySQL obsuguje szereg typw daty i czasu s one zaprezentowane w tabeli 9.7.
Kady z nich pozwala na wpisanie danych w formie liczbowej lub acucha znakw.
Charakterystyczn cech typu - # jest to, e jeeli pole tego typu pozostanie
niewypenione, wwczas automatycznie zostan w nim zapisane czas i data aktualnie
wykonywanej operacji. Waciwo ta jest szczeglnie przydatna do analizy transakcji.
Tabela 9.8 prezentuje moliwe dostpne formaty wywietlania wartoci typu - #.
254
Cz II Stosowanie MySQL
Zakres
Opis
:5*
1000-01-01do 9999-12-31
*9
838:59:59 do 838:59:59
:5**9
1000-01-01 00:00:00
do 9999-12-31 23:59:59
*9*5?7028
1970-01-01 00:00:00
do roku 2037
#5470@28
Format wywietlania
*9*5?
RRRRMMDDGGMMSS
*9*5?0$D2
RRRRMMDDGGMMSS
*9*5?0$I2
RRMMDDGGMMSS
*9*5?0$'2
RRMMDDGGMM
*9*5?0N2
RRRRMMDD
*9*5?012
RRMMDD
*9*5?0D2
RRMM
*9*5?0I2
RR
Typy acuchowe dziel si na trzy grupy. Pierwsza z nich to klasyczne (zwyke) acuchy
znakw, czyli krtkie fragmenty tekstu. Do tej grupy zaliczamy typy "6% (acuchy o staej
dugoci) oraz .%"6% (acuchy o zmiennej dugoci). Dla kadego z nich mona okreli
dugo acucha. acuchy zapisywane w kolumnach typu "6% zostan uzupenione
spacjami w celu penego wykorzystania dopuszczalnego limitu ich dugoci. Natomiast
w kolumnach typu .%"6% acuchy s zapisywane w ich pierwotnej formie, dziki czemu zajmuj one tylko tyle pamici, ile potrzeba (tak wic w przypadku wartoci "6% MySQL usunie kocowe znaki spacji przy ich pobieraniu z bazy, natomiast ewentualne
znaki spacji znajdujce si na kocu acucha .%"6% zostan wyeliminowane w momencie zapisania go do bazy). Wybr ktrego z tych typw sprowadza si wic do rozstrzygnicia dylematu midzy zwikszeniem szybkoci dziaania kosztem uywanej pamici
a ograniczeniem zuycia pamici i spadkiem wydajnoci systemu. Zagadnienie to zostanie
wyczerpujco omwione w rozdziale 12.
255
Do drugiej grupy nale typy -A i 8/. Wartoci obu wymagaj zrnicowanych iloci
pamici. Typy te s przeznaczone do przechowywania, odpowiednio, duszych tekstw
oraz danych binarnych. Wartoci typu 8/ to tzw. due obiekty binarne (ang. binary large
objects), std te wywodzi si jego nazwa. Obiekty te mog przechowywa kady rodzaj
danych, np. obrazy, dwiki itp.
W praktyce jedyna rnica pomidzy oboma typami polega na tym, e w danych typu 8/
rozrniana jest wielko liter, typ -A natomiast tej waciwoci nie posiada. Poniewa oba typy pozwalaj na zapisywanie duych iloci danych, sposb ich wykorzystania jest nieco bardziej skomplikowany. Zagadnienie to zostanie szerzej przedstawione
w rozdziale 12.
Trzecia grupa skada si z dwch typw specjalnych - i -
5. Typ - jest uywany
w celu zawenia wartoci danych, ktre mog by zapisane w danej kolumnie, do z gry
okrelonego zbioru wartoci, przy czym dane zapisane w kolumnie mog mie wicej ni
jedn warto z tego zbioru. Podany zbir wartoci moe zawiera co najwyej 64 elementy.
-
5 to inaczej typ wyliczeniowy. Jest on bardzo podobny do typu - , z jedn rnic:
kolumny typu -
5 mog zawiera tylko jedn spord okrelonego zbioru wartoci lub
warto
588, a zbir wartoci dopuszczalnych moe zawiera do 65 535 elementw.
Zakres
Opis
765*9-658 >54027<9654#@
5 99@=69 -:8
1 255 znakw
1 255 znakw
>54
765*9-658C54 >54027<9654#8
Tabela 9.10 prezentuje typy -A i 8/. Maksymalna liczba znakw w polu typu -A jest
rwna maksymalnej wielkoci pliku, jaki mona by przechowywa w tym polu, mierzonej
w bajtach.
Tabela 9.11 prezentuje typy - i -
5.
256
Cz II Stosowanie MySQL
Opis
*96#<-<
28 1 (czyli 255)
*96#*A*
2 1 (czyli 255)
<-<
2 1 (czyli 65535)
:9=<-<
:9=*A*
-63*A*
2 1 (czyli 65535)
*A*
-63<-<
16
24
2 1 (czyli 16777215)
24
2 1 (czyli 16777215)
32
2 1 (czyli 4294967295)
32
2 1 (czyli 4294967295)
Maksymalna ilo
wartoci w zbiorze
65535
64
Opis
W kolumnie tego typu moe znajdowa si tylko
jedna warto ze zbioru wartoci dopuszczalnych
lub 6=
W kolumnie tego typu moe znajdowa si
podzbir zbioru wartoci dopuszczalnych lub 6=
!
Poniewa znamy ju metody rejestrowania uytkownikw, zakadania baz danych i tworzenia tabel, moemy przej do sposobw korzystania z bazy danych. W nastpnym rozdziale zostan przedstawione metody zapisywania danych do tabel, ich modyfikacji i usuwania oraz wysyania zapyta do bazy.