Professional Documents
Culture Documents
Mysql.-Opis-Jezyka - Pełna Wersja
Mysql.-Opis-Jezyka - Pełna Wersja
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
PRZYKADOWY ROZDZIA PRZYKADOWY ROZDZIA
IDZ DO IDZ DO
ZAMW DRUKOWANY KATALOG ZAMW DRUKOWANY KATALOG
KATALOG KSIEK KATALOG KSIEK
TWJ KOSZYK TWJ KOSZYK
CENNIK I INFORMACJE CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK ZAMW CENNIK
CZYTELNIA CZYTELNIA
FRAGMENTY KSIEK ONLINE FRAGMENTY KSIEK ONLINE
SPIS TRECI SPIS TRECI
DODAJ DO KOSZYKA DODAJ DO KOSZYKA
KATALOG ONLINE KATALOG ONLINE
MySQL. Opis jzyka
Autor: Paul Dubois
Tumaczenie: Pawe Gonera, Anna Zawadzka
ISBN: 83-7361-688-8
Tytu oryginau: MySQL Language Reference
Format: B5, stron: 472
MySQL to najpopularniejsza na wiecie baza danych dostpna na licencji open
source. Dziki swojej wydajnoci, szybkoci dziaania, stabilnoci i rozbudowanym
mechanizmom zabezpiecze jest wykorzystywana niemal do wszystkich zada, do
jakich moe by potrzebna baza danych. Stanowi zaplecze dla wielu aplikacji
korporacyjnych, witryn WWW i sklepw internetowych. Bogactwo funkcji i moliwoci
to ogromna zaleta rodowiska MySQL, jednake zapamitanie skadni, parametrw
i sposobw stosowania wszystkich polece i rozszerze jest praktycznie niemoliwe.
Kady, kto chce biegle posugiwa si t baz, powinien mie pod rk materiay
opisujce stosowany w niej jzyk SQL.
Ksika MySQL. Opis jzyka to najlepsze rdo takich informacji. Stworzona,
zredagowana i sprawdzona przez pracownikw dziaw pomocy i produkcji firmy
MySQL AB publikacja zawiera wszystko, co moe by potrzebne uytkownikowi bazy
danych MySQL. Przedstawia zarwno zagadnienia podstawowe, takie jak: struktura
jzyka, typy danych i zasady konstruowania zapyta, jak i tematy zaawansowane:
transakcje, replikacj oraz administrowanie baz. Szczegowo opisane s rwnie
wszystkie zagadnienia zwizane z zaimplementowanym w niej jzykiem SQL.
Podstawowe informacje o MySQL
Jzyk SQL instrukcje, typy danych, funkcje i operatory
Zapytania
Definiowanie danych
Obsuga transakcji
Zarzdzanie kontami uytkownikw
Konserwacja tabel
Replikacja baz danych
Rozszerzenia MySQL dla systemw GIS
Procedury skadowane
Obsuga bdw
Spis treci
Rozdzia 1. Informacje oglne.............................................................................. 9
1.1. Na temat tego podrcznika....................................................................................... 9
1.1.1. Zasady przyjte w tym podrczniku .......................................................... 10
1.2. Omwienie systemu zarzdzania baz danych MySQL......................................... 12
1.2.1. Historia MySQL........................................................................................ 13
1.2.2. Gwne cechy MySQL.............................................................................. 14
1.2.3. Stabilno MySQL .................................................................................... 17
1.2.4. Jak due mog by tabele MySQL ............................................................ 18
1.2.5. Zgodno z rokiem 2000 ........................................................................... 19
1.3. Omwienie MySQL AB ........................................................................................ 21
1.3.1. Model biznesowy i usugi MySQL AB...................................................... 22
1.3.2. Informacje o kontakcie .............................................................................. 25
1.4. Obsuga techniczna oraz wydawanie licencji MySQL........................................... 26
1.4.1. Obsuga techniczna oferowana przez MySQL AB........................................ 26
1.4.2. Prawa autorskie i licencje .......................................................................... 27
1.4.3. Licencje MySQL ....................................................................................... 28
1.4.4. Logo i znaki towarowe MySQL ................................................................ 30
1.5. Plany rozwoju MySQL .......................................................................................... 32
1.5.1. MySQL 4.0 w skrcie................................................................................ 33
1.5.2. MySQL 4.1 w skrcie................................................................................ 35
1.5.3. MySQL 5.0: nastpna wersja rozwojowa .................................................. 37
1.6. MySQL i przyszo (TODO) ................................................................................ 37
1.6.1. Nowe mechanizmy planowane dla wersji 4.1............................................ 38
1.6.2. Nowe funkcje planowane dla wersji 5.0.................................................... 38
1.6.3. Nowe funkcje planowane dla 5.1............................................................... 39
1.6.4. Nowe funkcje planowane w bliskiej przyszoci ......................................... 40
1.6.5. Nowe funkcje planowane w niezbyt odlegej przyszoci.......................... 43
1.6.6. Nowe funkcje, ktrych wdroenia nie planujemy.......................................... 44
1.7. rda informacji o MySQL .................................................................................. 45
1.7.1. Listy dyskusyjne powicone MySQL ...................................................... 45
1.7.2. Wspomaganie rodowiska MySQL na IRC (Internet Relay Chat)............. 54
1.8. Zgodno MySQL ze standardami ......................................................................... 55
1.8.1. Standardy speniane przez MySQL............................................................ 56
1.8.2. Wybieranie trybw MySQL ...................................................................... 56
1.8.3. Uruchamianie MySQL w trybie ANSI ...................................................... 56
1.8.4. Rozszerzenia MySQL do standardu SQL.................................................. 57
4 Spis treci
1.8.5. Rozbienoci midzy MySQL a standardem SQL ........................................ 60
1.8.6. Jak MySQL radzi sobie z ograniczeniami ................................................. 67
1.8.7. Znane bdy i projektowe braki w MySQL................................................ 69
Rozdzia 2. Struktura jzyka .............................................................................. 77
2.1. Literay................................................................................................................... 77
2.1.1. acuchy ................................................................................................... 77
2.1.2. Liczby........................................................................................................ 80
2.1.3. Wartoci szesnastkowe .............................................................................. 80
2.1.4. Wartoci logiczne ...................................................................................... 81
2.1.5. Wartoci NULL......................................................................................... 81
2.2. Nazwy baz danych, tabel, indeksw, kolumn i aliasw......................................... 81
2.2.1. Kwalifikatory identyfikatorw .................................................................. 83
2.2.2. Znaczenie wielkoci liter w nazwach identyfikatorw.............................. 83
2.3. Zmienne definiowane przez uytkownika.............................................................. 85
2.4. Zmienne systemowe............................................................................................... 87
2.4.1. Strukturalne zmienne systemowe .............................................................. 89
2.5. Skadnia komentarza .............................................................................................. 91
2.6. Traktowanie sw zastrzeonych w MySQL.......................................................... 92
Rozdzia 3. Obsuga zestaww znakw............................................................... 95
3.1. Oglne informacje o zestawach znakw i sortowaniu ........................................... 95
3.2. Zestawy znakw i porzdki sortowania w MySQL................................................ 96
3.3. Okrelanie domylnego zestawu znakw i sortowania........................................... 98
3.3.1. Zestaw znakw i sortowanie dla serwera................................................... 98
3.3.2. Zestaw znakw i sortowanie dla bazy danych........................................... 99
3.3.3. Zestaw znakw i sortowanie dla tabeli .................................................... 100
3.3.4. Zestaw znakw i sortowanie dla kolumny............................................... 100
3.3.5. Przykady przypisywania zestawu znakw i sortowania ......................... 101
3.3.6. Zestawy znakw i sortowanie dla poczenia .......................................... 102
3.3.7. Zestaw znakw i sortowanie dla acucha znakw.................................. 104
3.3.8. Wykorzystywanie COLLATE w instrukcjach SQL.................................... 105
3.3.9. Priorytet klauzuli COLLATE .................................................................. 106
3.3.10. Operator BINARY................................................................................... 106
3.3.11. Niektre przypadki specjalne, w ktrych trudno okreli sortowanie...... 106
3.3.12. Sortowania musz by odpowiednie dla danego zestawu znakw........... 107
3.3.13. Przykad wpywu porzdku sortowania ................................................... 108
3.4. Operacje, na ktre ma wpyw obsuga zestaww znakw.................................... 109
3.4.1. acuchy wyjciowe ............................................................................... 109
3.4.2. CONVERT()............................................................................................ 110
3.4.3. CAST() .................................................................................................... 110
3.4.4. Instrukcje SHOW .................................................................................... 111
3.5. Obsuga Unicode.................................................................................................. 112
3.6. UTF8 dla metadanych.......................................................................................... 113
3.7. Kompatybilno z innymi systemami zarzdzania baz danych .......................... 115
3.8. Nowy format pliku konfiguracji zestawu znakw................................................ 115
3.9. Narodowe zestawy znakw.................................................................................. 115
3.10. Aktualizacja zestaww znakw z MySQL 4.0..................................................... 116
3.10.1. Zestawy znakw w wersji 4.0 i odpowiadajce im w wersji 4.1 pary
skadajce si z zestawu znakw i sortowania......................................... 117
3.10.2. Przeksztacanie kolumn znakowych wersji 4.0 na format 4.1 ................. 118
3.11. Zestawy znakw i sortowania obsugiwane przez MySQL.................................. 118
3.11.1. Zestawy znakw standardu Unicode ....................................................... 119
3.11.2. Zestawy znakw zachodnioeuropejskich................................................. 120
3.11.3. Zestawy znakw dla Europy Centralnej .................................................. 121
Spis treci 5
3.11.4. Zestawy znakw poudniowoeuropejskich i rodkowowschodnich......... 122
3.11.5. Zestawy znakw regionu batyckiego...................................................... 123
3.11.6. Zestawy znakw dla cyrylicy................................................................... 123
3.11.7. Azjatyckie zestawy znakw..................................................................... 124
Rozdzia 4. Typy kolumn.................................................................................. 125
4.1. Przegld typw dla kolumny................................................................................ 126
4.1.1. Omwienie typw liczbowych ................................................................ 126
4.1.2. Przegld typw zwizanych z dat i czasem............................................ 129
4.1.3. Przegld typw acuchowych ................................................................ 130
4.2. Typy liczbowe...................................................................................................... 132
4.3. Typy zwizane z dat i czasem............................................................................ 135
4.3.1. Typy DATETIME, DATE i TIMESTAMP............................................. 137
4.3.2. Typ TIME................................................................................................ 142
4.3.3. Typ YEAR............................................................................................... 143
4.3.4. Problem roku 2000 a typy zwizane z dat.............................................. 144
4.4. Typy acuchowe ................................................................................................. 144
4.4.1. Typy CHAR i VARCHAR...................................................................... 144
4.4.2. Typy BLOB i TEXT................................................................................ 146
4.4.3. Typ Enum................................................................................................ 147
4.4.4. Typ SET .................................................................................................. 149
4.5. Rozmiar pamici potrzebnej dla typw kolumn................................................... 151
4.6. Wybieranie odpowiedniego typu dla kolumny..................................................... 152
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych ............... 153
Rozdzia 5. Funkcje i operatory........................................................................ 155
5.1. Operatory ............................................................................................................. 156
5.1.1. Nawiasy................................................................................................... 156
5.1.2. Operatory porwnania ............................................................................. 156
5.1.3. Operatory logiczne .................................................................................. 161
5.1.4. Operatory rozrniania wielkoci liter..................................................... 163
5.2. Funkcje kontroli przepywu ................................................................................. 163
5.3. Funkcje acuchowe............................................................................................. 166
5.3.1. Funkcje porwnywania acuchw.......................................................... 176
5.4. Funkcje liczbowe ................................................................................................. 178
5.4.1. Operatory arytmetyczne........................................................................... 178
5.4.2. Funkcje matematyczne ............................................................................ 180
5.5. Funkcje daty i godziny......................................................................................... 186
5.6. Funkcje obsugi wyszukiwania penotekstowego................................................. 202
5.6.1. Boolowskie wyszukiwania penotekstowe............................................... 205
5.6.2. Wyszukiwania penotekstowe z rozwijaniem zapytania .......................... 207
5.6.3. Ograniczenia dla wyszukiwania penotekstowego................................... 208
5.6.4. Modyfikowanie wyszukiwania penotekstowego MySQL ...................... 209
5.6.5. Lista rzeczy do zrobienia dla wyszukiwania penotekstowego................ 211
5.7. Funkcje konwersji typw..................................................................................... 211
5.8. Inne funkcje ......................................................................................................... 214
5.8.1. Funkcje bitowe ........................................................................................ 214
5.8.2. Funkcje szyfrujce................................................................................... 215
5.8.3. Funkcje informacyjne .............................................................................. 219
5.8.4. Funkcje rne .......................................................................................... 223
5.9. Funkcje i modyfikatory do zastosowania z klauzulami GROUP BY................... 226
5.9.1. Funkcje GROUP BY (agregujce)........................................................... 226
5.9.2. Modyfikatory GROUP BY...................................................................... 229
5.9.3. GROUP BY z ukrytymi polami............................................................... 232
6 Spis treci
Rozdzia 6. Skadnia instrukcji SQL .................................................................. 235
6.1. Instrukcje operujce na danych............................................................................ 235
6.1.1. Skadnia instrukcji DELETE................................................................... 235
6.1.2. Skadnia instrukcji DO ............................................................................ 238
6.1.3. Skadnia instrukcji HANDLER............................................................... 238
6.1.4. Skadnia instrukcji INSERT .................................................................... 240
6.1.5. Skadnia instrukcji LOAD DATA INFILE.............................................. 246
6.1.6. Skadnia instrukcji REPLACE................................................................. 255
6.1.7. Skadnia instrukcji SELECT.................................................................... 256
6.1.8. Skadnia podzapyta................................................................................ 265
6.1.9. Skadnia instrukcji TRUNCATE............................................................. 276
6.1.10. Skadnia instrukcji UPDATE................................................................... 276
6.2. Instrukcje definiowania danych ........................................................................... 278
6.2.1. Skadnia instrukcji ALTER DATABASE ............................................... 278
6.2.2. Skadnia instrukcji ALTER TABLE........................................................ 279
6.2.3. Skadnia instrukcji CREATE DATABASE............................................. 285
6.2.4. Skadnia instrukcji CREATE INDEX ..................................................... 285
6.2.5. Skadnia instrukcji CREATE TABLE..................................................... 287
6.2.6. Skadnia instrukcji DROP DATABASE.................................................. 301
6.2.7. Skadnia instrukcji DROP INDEX.......................................................... 302
6.2.8. Skadnia instrukcji DROP TABLE.......................................................... 302
6.2.9. Skadnia instrukcji RENAME TABLE.................................................... 303
6.3. Instrukcje programu MySQL............................................................................... 304
6.3.1. Skadnia instrukcji DESCRIBE
(odczytywanie informacji na temat kolumn) ........................................... 304
6.3.2. Skadnia instrukcji USE........................................................................... 304
6.4. Instrukcje obsugi transakcji i blokowania........................................................... 305
6.4.1. Skadnia instrukcji START TRANSACTION, COMMIT
oraz ROLLBACK.................................................................................... 305
6.4.2. Instrukcje niemoliwe do wycofania ....................................................... 306
6.4.3. Instrukcje wykonujce niejawne zatwierdzenie......................................... 306
6.4.4. Skadnia instrukcji SAVEPOINT i ROLLBACK TO SAVEPOINT....... 307
6.4.5. Skadnia instrukcji LOCK TABLES oraz UNLOCK TABLES .............. 307
6.4.6. Skadnia instrukcji SET TRANSACTION.............................................. 310
6.5. Administracja baz danych .................................................................................. 311
6.5.1. Instrukcje zarzdzajce kontami uytkownikw ....................................... 311
6.5.2. Instrukcje do konserwacji tabel ............................................................... 319
6.5.3. Skadnia instrukcji SET i SHOW ............................................................ 326
6.5.4. Inne instrukcje administracyjne ............................................................... 347
6.6. Instrukcje replikacji.............................................................................................. 352
6.6.1. Instrukcje SQL sterujce serwerem gwnym ......................................... 352
6.6.2. Instrukcje SQL sterujce serwerami podrzdnymi .................................. 354
Rozdzia 7. Rozszerzenia przestrzenne w MySQL............................................... 365
7.1. Wstp ................................................................................................................... 365
7.2. Model geometryczny OpenGIS............................................................................ 366
7.2.1. Hierarchia klas geometrycznych.............................................................. 366
7.2.2. Klasa Geometry ....................................................................................... 368
7.2.3. Klasa Point .............................................................................................. 369
7.2.4. Klasa Curve ............................................................................................. 369
7.2.5. Klasa LineString...................................................................................... 370
7.2.6. Klasa Surface........................................................................................... 370
7.2.7. Klasa Polygon.......................................................................................... 370
7.2.8. Klasa GeometryCollection....................................................................... 371
Spis treci 7
7.2.9. Klasa MultiPoint...................................................................................... 371
7.2.10. Klasa MultiCurve .................................................................................... 372
7.2.11. Klasa MultiLineString............................................................................. 372
7.2.12. Klasa MultiSurface .................................................................................. 372
7.2.13. Klasa MultiPolygon................................................................................. 373
7.3. Obsugiwane formaty danych przestrzennych...................................................... 373
7.3.1. Format tekstowy WKT............................................................................ 374
7.3.2. Format binarny WKB.............................................................................. 374
7.4. Tworzenie bazy danych z rozszerzeniami przestrzennymi................................... 375
7.4.1. Typy danych przestrzennych w MySQL ................................................. 375
7.4.2. Tworzenie wartoci przestrzennych......................................................... 376
7.4.3. Tworzenie kolumn przestrzennych.......................................................... 379
7.4.4. Wypenianie kolumn przestrzennych....................................................... 379
7.4.5. Pobieranie danych przestrzennych........................................................... 381
7.5. Analiza informacji przestrzennych....................................................................... 381
7.5.1. Funkcje konwersji formatw geometrycznych ........................................ 382
7.5.2. Funkcje klasy Geometry.......................................................................... 382
7.5.3. Funkcje tworzce nowe geometrie na podstawie istniejcych................. 388
7.5.4. Funkcje testujce relacje przestrzenne
midzy obiektami geometrycznymi ......................................................... 389
7.5.5. Relacje midzy minimalnymi prostoktami otaczajcymi
dla poszczeglnych geometrii.................................................................. 390
7.5.6. Funkcje sprawdzajce relacje przestrzenne pomidzy geometriami ........ 391
7.6. Optymalizacja analizy przestrzennej.................................................................... 392
7.6.1. Tworzenie indeksw przestrzennych....................................................... 392
7.6.2. Wykorzystanie indeksu przestrzennego................................................... 393
7.7. Zgodno MySQL ze standardem........................................................................ 395
7.7.1. Niezaimplementowane funkcje GIS ........................................................ 395
Rozdzia 8. Procedury i funkcje skadowane ..................................................... 397
8.1. Skadnia procedur skadowanych......................................................................... 398
8.1.1. Utrzymanie procedur skadowanych........................................................ 398
8.1.2. SHOW PROCEDURE STATUS oraz SHOW FUNCTION STATUS.... 401
8.1.3. Instrukcja CALL...................................................................................... 402
8.1.4. Instrukcja zoona BEGIN ... END.......................................................... 402
8.1.5. Instrukcja DECLARE.............................................................................. 402
8.1.6. Zmienne w procedurach skadowanych................................................... 402
8.1.7. Warunki i podprogramy obsugi .............................................................. 403
8.1.8. Kursory.................................................................................................... 405
8.1.9. Konstrukcje sterowania przepywem sterowania..................................... 406
Rozdzia 9. Obsuga bdw w MySQL .............................................................. 409
9.1. Zwracane bdy.................................................................................................... 409
9.2. Komunikaty bdw............................................................................................. 419
Dodatek A Rozwizywanie problemw z zapytaniami ........................................435
A.1. Zagadnienia zwizane z zapytaniami ................................................................... 435
A.1.1. Wielko liter przy wyszukiwaniu........................................................... 435
A.1.2. Problemy z kolumnami typu DATE ........................................................ 436
A.1.3. Problemy z wartociami NULL............................................................... 437
A.1.4. Problemy z synonimami kolumn ............................................................. 438
A.1.5. Bd wycofania dla tabel nietransakcyjnych............................................ 439
A.1.6. Usuwanie wierszy ze zwizanych tabel ................................................... 439
A.1.7. Rozwizywanie problemw z brakujcymi wierszami ............................ 440
A.1.8. Problemy z porwnaniami zmiennoprzecinkowymi................................ 441
8 Spis treci
A.2. Problemy zwizane z optymalizatorem................................................................ 443
A.3. Problemy z definicj tabel.................................................................................... 444
A.3.1. Problemy z instrukcj ALTER TABLE................................................... 444
A.3.2. Jak zmieni porzdek kolumn w tabeli .................................................... 445
A.3.3. Problemy z tabelami tymczasowymi ....................................................... 445
Dodatek B Wyraenia regularne w MySQL........................................................ 447
Skorowidz...................................................................................... 451
Rozdzia 4.
Typy kolumn
W MySQL dostpnych jest wiele typw danych, ktre mona pogrupowa w kilku pod-
stawowych kategoriach, takich jak typy liczbowe, typy zwizane z dat i czasem oraz
typy acuchowe. Na pocztku tego rozdziau przedstawiony zostanie przegld wspo-
mnianych przed chwil typw kolumn, po czym nastpi bardziej szczegowy opis ich
waciwoci z podziaem na poszczeglne kategorie i wreszcie zamieszczone zostanie
podsumowanie informacji dotyczcych wymaga co do rozmiaru pamici potrzebnej
do przechowania danej kolumny. Sam przegld jest z zamierzenia krtki. Dodatkowe
informacje o poszczeglnych typach kolumn, na przykad dopuszczalny format, w kt-
rym mona deklarowa wartoci, zostay uwzgldnione w szczegowych omwieniach.
Od wersji 4.1 MySQL rozpoznaje rozszerzenia do obsugi danych przestrzennych.
Informacje o typach przestrzennych znajduj si w rozdziale 7. tego podrcznika.
W czci opisu typw kolumn zastosowane zostay nastpujce reguy:
/
Wskazuje maksymalny rozmiar wywietlania liczby lub acucha.
Maksymalnym dopuszczalnym rozmiarem wywietlania jest 255.
&
Dotyczy typw zmiennoprzecinkowych i staoprzecinkowych. Okrela liczb
cyfr po kropce dziesitnej. Maksymalna dopuszczalna warto wynosi 30,
ale nie powinna przekracza /.
Nawiasy kwadratowe ( ) identyfikuj opcjonalne fragmenty deklaracji typu.
126 Rozdzia 4. Typy kolumn
4.1. Przegld typw dla kolumny
4.1.1. Omwienie typw liczbowych
Poniej znajduje si przegld liczbowych typw dla kolumn. Bardziej szczegowe
informacje mona znale w podrozdziale 4.2. Wymogi dotyczce rozmiaru pamici
potrzebnej do przechowywania kolumn znajduj si w podrozdziale 4.5.
Jeli dla kolumny liczbowej zostanie okrelony atrybut /lRO|1||, MySQL automatycznie
doda do kolumny atrybut UN1S1ONlD.
Naley uwaa podczas odejmowania dwch wartoci liczbowych, z ktrych jedna ma
typ UN1S1ONlD. Uzyskany wynik bdzie rwnie tego typu! patrz podrozdzia 5.7.
T1NY1NT/) UNS1ONlD /lRO|1||
Bardzo maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od `8
do `/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do bb.
B1T, BOO|, BOO|lAN
To s synonimy T1NY1NT`). Synonim BOO|lAN zosta dodany w MySQL 4.1.0.
Warto zerowa to inaczej fasz. Wartoci niezerowe traktowane s jako prawda.
W przyszoci wprowadzona zostanie pena, zgodna ze standardem SQL
obsuga typu boolowskiego.
SMA||1NT/) UNS1ONlD /lRO|1||
Maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od o/68
do o/6/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do 6bbob.
MlD1UM1NT/) UNS1ONlD /lRO|1||
rednia liczba cakowita. Dla liczb ze znakiem zakres wynosi od 8o88608
do 8o8860/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0
do `6///`b.
1NT/) UNS1ONlD /lRO|1||
Standardowa liczba cakowita. Dla liczb ze znakiem zakres wynosi
od `4/48o648 do `4/48o64/. W przypadku liczb bez znaku zakres
obejmuje wartoci od 0 do 49496/9b.
1NTlOlR/) UNS1ONlD /lRO|1||
Jest to synonim dla typu 1NT.
B1O1NT/) UNS1ONlD /lRO|1||
Dua liczba cakowita. Dla liczb ze znakiem zakres wynosi
od 9oo/0o68b4//b808 do 9oo/0o68b4//b80/. W przypadku liczb
bez znaku zakres obejmuje wartoci od 0 do `8446/440/o/09bb`6`b.
4.1. Przegld typw dla kolumny 127
Oto kilka spraw, o ktrych naley wiedzie odnonie kolumn typu B1O1NT:
Wszystkie obliczenia wykonywane s przy uyciu wartoci typu B1O1NT
lub DOUB|l ze znakiem. Oznacza to, e duych liczb cakowitych bez
znaku, wikszych ni 9oo/0o68b4//b80/ (63 bity), mona uywa tylko
z funkcjami bitowymi! Niezastosowanie si do tej zasady moe doprowadzi
do uzyskania w wyniku liczby, ktrej kilka ostatnich cyfr jest bdnych
z powodu bdw w zaokrglaniu podczas konwersji wartoci B1O1NT
na DOUB|l.
MySQL 4.0 potrafi obsugiwa B1O1NT w nastpujcych przypadkach:
Podczas wykorzystywania liczb cakowitych do przechowywania
duych wartoci bez znaku w kolumnie typu B1O1NT.
W M1NPC\YCAMQN) lub MAXPC\YCAMQN), gdzie PC\YCAMQN odnosi si
do kolumny B1O1NT.
Podczas korzystania z operatorw (midzy innymi , , *), gdy oba
argumenty s liczbami cakowitymi.
Zawsze istnieje moliwo zapisania w kolumnie B1O1NT dokadnej wartoci
liczby cakowitej. Wystarczy zapisa j przy uyciu acucha. W takim
przypadku zostanie dokonana konwersja acucha na liczb; konwersja
nie bdzie wymaga poredniego etapu przeksztacajcego liczb na jej
odpowiednik o podwjnej precyzji.
Podczas korzystania z operatorw , i * stosowana jest arytmetyka
B1O1NT, jeli oba argumenty maj warto liczby cakowitej! To oznacza,
e pomnoenie dwch duych liczb cakowitych (lub wynikw funkcji,
ktra zwraca liczby cakowite) moe spowodowa nieoczekiwane
rezultaty, jeli wynik przekroczy liczb 9oo/0o68b4//b80/.
||OATR) UNS1ONlD /lRO|1||
Liczba zmiennoprzecinkowa. Parametr R oznacza precyzj i moe przyjmowa
warto od 0 do 14 dla liczb zmiennoprzecinkowych o dokadnoci do jednego
znaku i od 25 do 53 dla liczb zmiennoprzecinkowych o dokadnoci do dwch
znakw. To przypomina opisane poniej typy ||OAT i DOUB|l. Typ ||OATR)
ma ten sam zakres, jaki posiadaj odpowiadajce mu typy ||OAT i DOUB|l,
ale w jego przypadku niezdefiniowany jest maksymalny rozmiar wywietlania
i liczba miejsc po przecinku.
Od wersji 3.23 MySQL jest to prawdziwa warto zmiennoprzecinkowa.
W wersjach wczeniejszych liczba typu ||OATR) bya zawsze liczb o dwch
miejscach po przecinku.
Ta skadnia zostaa dodana w celu zachowania zgodnoci ze standardem ODBC.
Stosowanie typu ||OAT moe spowodowa wystpienie pewnych
nieoczekiwanych problemw, poniewa wszystkie obliczenia w MySQL
s wykonywane z podwjn precyzj patrz punkt A.1.7).
||OAT/, &) UNS1ONlD /lRO|1||
128 Rozdzia 4. Typy kolumn
Maa liczba zmiennoprzecinkowa (o dokadnoci do jednego znaku). Liczba
ta moe przyj wartoci: od o408o466lo8 do ``/b494ob`lo8, 0,
i od ``/b494ob`lo8 do o408o466lo8. Jeli podany jest atrybut UN1S1ONlD,
niedozwolone s wartoci ujemne. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ ||OAT bez argumentw
lub typ ||OATR) (gdzie Rjest liczb z zakresu od 0 do 24) oznacza liczb
zmiennoprzecinkow o pojedynczej precyzji.
DOUB|l/, &) UNS1ONlD /lRO|1||
Standardowa liczba zmiennoprzecinkowa (o dokadnoci do dwch
znakw). Liczba ta moe przyj wartoci: od `/9/69o`o486o`b/lo08
do b0/o8b8b0/0`4lo08, 0, i od b0/o8b8b0/0`4lo08
do `/9/69o`o486o`b/lo08. Jeli podany jest atrybut UN1S1ONlD, wartoci
ujemne s niedozwolone. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ DOUB|l
bez argumentw lub ||OATR) (gdzie R jest liczb z zakresu od 25 do 53)
oznacza liczb zmiennoprzecinkow o podwjnej precyzji.
DOUB|l PRlC1S1ON/, &) UNS1ONlD /lRO|1||
RlA|/, &) UNS1ONlD /lRO|1||
S to synonimy DOUB|l. Wyjtek: Jeli dla parametru s;_cce serwera
wczono opcj RlA|_AS_||OAT, synonimem ||OAT jest RlA|, a nie DOUB|l.
DlC1MA|/, &) UNS1ONlD /lRO|1||
Niezapakowana liczba staoprzecinkowa. Zachowanie kolumny tego typu
przypomina kolumn typu CHAR. Niezapakowana oznacza, e liczba jest
przechowywana w postaci acucha przy uyciu jednego znaku na kad cyfr
wartoci. Parametr / definiuje maksymaln liczb cyfr, a & liczb miejsc
po przecinku. W parametrze / nie s brane pod uwag: kropka dziesitna
(odpowiadajca w naszej notacji przecinkowi) i (dla liczb ujemnych) znak ,
cho jest dla nich zarezerwowane miejsce. Wartoci nie maj miejsc
po przecinku lub czci uamkowych, jeli & jest rwne 0. Maksymalny zakres
wartoci typu DlC1MA| jest taki sam, jak dla typu DOUB|l, ale rzeczywisty zakres
danej kolumny DlC1MA| moe by ograniczony przez wybr argumentw / i &.
Jeli podany jest atrybut UN1S1ONlD, wartoci ujemne s niedozwolone.
W przypadku braku argumentu &, domyln wartoci jest 0. Jeli pominity
jest parametr /, domyln wartoci jest 10.
W wersjach poprzedzajcych MySQL 3.23 argument / musi by wystarczajco
duy, by zawiera obszar potrzebny dla znaku i kropki dziesitnej.
DlC/,&) UNS1ONlD /lRO|1||
NUMlR1C/,&) UNS1ONlD /lRO|1||
|1XlD/, &) UNS1ONlD /lRO|1||
S to synonimy typu DlC1MA|.
W MySQL 4.1.0 dodano synonim |1XlD w celu osignicia kompatybilnoci
z innymi serwerami.
4.1. Przegld typw dla kolumny 129
4.1.2. Przegld typw zwizanych z dat i czasem
Poniej znajduje si podsumowanie typw kolumn przeznaczonych dla czasu i daty.
Dodatkowe informacje na ten temat mona znale w podrozdziale 4.3. Wymogi do-
tyczce pamici potrzebnej do przechowywania danych w kolumnach zostay podane
w podrozdziale 4.5.
DATl
Data. Obsugiwany zakres obejmuje daty od ``0000`0`` do `9999`o``.
W MySQL wartoci DATl wywietlane s w formacie `RRRRMMDD`, ale mona
przypisywa wartoci do kolumn DATl przy uyciu acuchw lub liczb.
DATlT1Ml
Kombinacja daty i czasu. Obsugiwany zakres obejmuje wartoci
od ``0000`0` 000000` do `9999`o` ob9b9`. W MySQL wartoci
DATlT1Ml wywietlane s w formacie `RRRRMMDD OOMMSS`, ale mona
przypisywa wartoci do kolumn DATlT1Ml przy uyciu acuchw lub liczb.
T1MlSTAMP/)
Znacznik czasu. Obsugiwany zakres rozpoczyna si od daty ``9/00`0``
i siga roku 0o/.
Kolumna typu T1MlSTAMP przydaje si do rejestracji daty i godziny operacji
wstawiania lub aktualizacji. Pierwszej kolumnie T1MlSTAMP w tabeli
automatycznie przypisywana jest data i czas ostatniej operacji, jeli tylko tych
wartoci nie wprowadzi rcznie uytkownik. Dowolnej kolumnie T1MlSTAMP
mona rwnie przypisa biec dat i godzin, wpisujc do niej warto NU||.
Od MySQL 4.1 wartoci T1MlSTAMP s zwracane w postaci acuchw
w formacie `RRRRMMDD OOMMSS`. Aby uzyska warto w postaci liczby,
naley doda do kolumn tego typu 0. Inne szerokoci wywietlania
znacznika czasu nie s obsugiwane.
W wersjach poprzedzajcych MySQL 4.1 wartoci T1MlSTAMP s wywietlane
w formacie RRRRMMDDOOMMSS, RRMMDDOOMMSS, RRRRMMDD lub RRMMDD w zalenoci
od tego, czy parametr / jest rwny 14 (albo go brak), 12, 8 lub 6. Mona jednak
przypisywa wartoci do kolumn T1MlSTAMP przy uyciu acuchw lub liczb.
Argument / wpywa tylko na sposb wywietlania kolumny T1MlSTAMP, a nie
na jej przechowywanie. Wartoci kolumny s zawsze zapisywane w czterech
bajtach. W MySQL od wersji 4.0.12 pojawia si opcja ne., dziki ktrej
mona zmieni dziaanie serwera, upodabniajc je do MySQL 4.1.
Naley odnotowa, e kolumny T1MlSTAMP/), gdzie /jest rwne 8 lub 14,
s traktowane jako liczby, natomiast reszta kolumn T1MlSTAMP/) jest
traktowana jako acuchy. Jest to rodzaj gwarancji, e uytkownik bdzie
mg wiarygodnie usuwa i przywraca tabele tego typu.
T1Ml
Godzina. Obsugiwany zakres obejmuje wartoci od `8o8b9b9`
do ` 8o8b9b9`. W MySQL wartoci T1Ml wywietlane s w formacie
` OOMMSS`, ale mona przypisa wartoci do kolumn T1Ml przy uyciu
zarwno acuchw, jak i liczb.
130 Rozdzia 4. Typy kolumn
YlAR|4)
Rok w formacie dwu- lub czterocyfrowym. Domylnym formatem jest rok
zapisany za pomoc czterech cyfr. W tym formacie dostpne wartoci nale
do przedziau od `90` do `bb oraz 0. W formacie dwucyfrowym wartoci
dopuszczalne to liczby z zakresu od /0 do 69, ktre reprezentuj daty od roku
1970 do 2069. W MySQL wartoci YlAR wywietlane s w formacie RRRR,
ale mona przypisa wartoci do kolumn YlAR przy uyciu tak acuchw,
jak i liczb. Typ YlAR jest niedostpny dla wersji wczeniejszych ni MySQL 3.22.
4.1.3. Przegld typw acuchowych
Poniej znajduje si przegld typw acuchowych. Dodatkowe informacje mona
znale w podrozdziale 4.4. Wymogi dotyczce pamici potrzebnej do przechowywa-
nia danych w kolumnach zostay podane w podrozdziale 4.5.
W niektrych przypadkach MySQL moe zmieni kolumn typu acuchowego na typ,
ktry bdzie si rni od zadeklarowanego w instrukcji CRlATl TAB|l lub A|TlR TAB|l.
Wicej informacji na ten temat znajduje si w podpunkcie 6.2.5.2.
Od wersji 4.1 w MySQL pojawia si zmiana, ktra wpywa na wiele typw kolumn typu
acuchowego. Definicja kolumn typu znakowego moe zawiera atrybut CHARACTlR
SlT, ktry okrela zestaw znakw i opcjonalnie porzdek sortowania. Dotyczy to typw
CHAR, VARCHAR, rnych typw TlXT oraz lNUM i SlT, na przykad:
CRF/TF T/B|F !
FNUMYCTVQ
YCTVQ|
1 lub 2 bajty w zalenoci od liczby wartoci wyliczenia
(maksymalnie 65 535)
SFTYCTVQ
YCTVQ|
1, 2, 3, 4 lub 8 bajtw w zalenoci od liczby elementw zestawu
(maksymalnie 64)
Typy VARCHAR, B|OB i TlXT maj zmienn dugo. Dla kadego ilo pamici potrzeb-
nej do przechowania wartoci bdzie zalee od faktycznej dugoci wartoci kolumny
(reprezentowanej w ostatniej tabeli przez .), a nie od maksymalnego moliwego roz-
miaru danego typu. Kolumna VARCHAR`0) na przykad moe przechowywa acuch
o maksymalnej dugoci 10 znakw. Faktyczna ilo wymaganej pamici to dugo
acucha (.) plus 1 bajt do zapisania dugoci acucha. Dla acucha `.|cc` parametr
. jest rwny 4, a wymagany rozmiar pamici to 5 bajtw.
Typy B|OB i TlXT wymagaj 1, 2, 3 lub 4 bajtw do zapisu dugoci wartoci kolumny
w zalenoci od maksymalnej moliwej dugoci tego typu (patrz punkt 4.4.2).
Rozmiar obiektu lNUM jest ustalany na podstawie liczby rnych wartoci wyliczenia.
Przy wyliczeniach do 255 moliwych wartoci uywany jest jeden bajt, a przy wyli-
czeniach do 65 535 wartoci uywane s 2 bajty (patrz punkt 4.4.3).
Rozmiar obiektu SlT jest okrelany przez liczb rnych elementw zestawu. Jeli ze-
staw ma rozmiar 0, obiekt zajmuje 0/).8 bajtw, ktr to warto zaokrgla si do
1, 2, 3, 4 lub 8 bajtw. Obiekt SlT moe mie do 64 elementw (patrz punkt 4.4.4).
4.6. Wybieranie odpowiedniego typu
dla kolumny
Aby jak najbardziej wydajnie korzysta z pamici, naley we wszystkich przypadkach
stara si stosowa typ, ktry bdzie jak najbardziej dokadny. Jeli na przykad w kolum-
nie liczb cakowitych bd przechowywane wartoci z zakresu od ` do 99999, najlep-
szym wyborem bdzie typ MlD1UM1NT UNS1ONlD. Ze wszystkich typw, ktre reprezentuj
wszystkie wymagane wartoci, zajmuje najmniej pamici.
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych 153
Powszechnym problemem jest dokadne przedstawianie wartoci walutowych. W MySQL
naley do tego uywa typu DlC1MA|, za pomoc ktrego wartoci zapisywane s w for-
mie acucha. Dziki temu nie traci si na dokadnoci (mimo to obliczenia z wartociami
DlC1MA| mog by wci wykonywane przy uyciu operacji dziaajcych na liczbach
z podwjn precyzj). Jeli dokadno nie jest zbyt wana, by moe wystarczajco
dobrym typem bdzie DOUB|l.
Aby uzyska wiksz dokadno, mona zawsze przeksztaci warto na typ stao-
przecinkowy, przechowywany w B1O1NT. Pozwoli to wykonywa wszystkie obliczenia
na liczbach cakowitych i tylko w razie potrzeby przeksztaca wynik z powrotem na
wartoci zmiennoprzecinkowe.
4.7. Wykorzystywanie typw kolumn
z innych mechanizmw baz danych
Aby uatwi uytkownikowi zastosowanie kodu pochodzcego od innych producentw,
moliwe jest odwzorowanie typw kolumn w sposb przedstawiony w poniszej tabeli.
Odwzorowania te upraszczaj operacj importu do MySQL definicji tabel z innych
mechanizmw baz danych:
Typ innych producentw Typ MySQL
BTN/RY/| C'/R/| BTN/RY
C'/R V/RYTN/| V/RC'/R/|
F|J/T4 F|J/T
F|J/T8 OJUB|F
TNT1 TTNYTNT
TNT SM/||TNT
TNT: MFOTUMTNT
TNT4 TNT
TNT8 BTTNT
|JN V/RBTN/RY MFOTUMB|JB
|JN V/RC'/R MFOTUMTFXT
|JN MFOTUMTFXT oc M,SJ| 410|
MTOO|FTNT MFOTUMTNT
V/RBTN/RY/| C'/R/| BTN/RY
Odwzorowanie typw kolumn jest wykonywane podczas tworzenia tabeli, po czym
oryginalne deklaracje typu zostaj usunite. Jeli uytkownik utworzy tabel z typami
stosowanymi przez innych producentw, po czym wyda polecenie DlSCR1Bl PC\YCA
VCDGNK, zostanie przedstawiona struktura tabeli z odpowiadajcymi im typami MySQL.
4 Spis treci
1.8.5. Rozbienoci midzy MySQL a standardem SQL ........................................ 60
1.8.6. Jak MySQL radzi sobie z ograniczeniami ................................................. 67
1.8.7. Znane bdy i projektowe braki w MySQL................................................ 69
Rozdzia 2. Struktura jzyka .............................................................................. 77
2.1. Literay................................................................................................................... 77
2.1.1. acuchy ................................................................................................... 77
2.1.2. Liczby........................................................................................................ 80
2.1.3. Wartoci szesnastkowe .............................................................................. 80
2.1.4. Wartoci logiczne ...................................................................................... 81
2.1.5. Wartoci NULL......................................................................................... 81
2.2. Nazwy baz danych, tabel, indeksw, kolumn i aliasw......................................... 81
2.2.1. Kwalifikatory identyfikatorw .................................................................. 83
2.2.2. Znaczenie wielkoci liter w nazwach identyfikatorw.............................. 83
2.3. Zmienne definiowane przez uytkownika.............................................................. 85
2.4. Zmienne systemowe............................................................................................... 87
2.4.1. Strukturalne zmienne systemowe .............................................................. 89
2.5. Skadnia komentarza .............................................................................................. 91
2.6. Traktowanie sw zastrzeonych w MySQL.......................................................... 92
Rozdzia 3. Obsuga zestaww znakw............................................................... 95
3.1. Oglne informacje o zestawach znakw i sortowaniu ........................................... 95
3.2. Zestawy znakw i porzdki sortowania w MySQL................................................ 96
3.3. Okrelanie domylnego zestawu znakw i sortowania........................................... 98
3.3.1. Zestaw znakw i sortowanie dla serwera................................................... 98
3.3.2. Zestaw znakw i sortowanie dla bazy danych........................................... 99
3.3.3. Zestaw znakw i sortowanie dla tabeli .................................................... 100
3.3.4. Zestaw znakw i sortowanie dla kolumny............................................... 100
3.3.5. Przykady przypisywania zestawu znakw i sortowania ......................... 101
3.3.6. Zestawy znakw i sortowanie dla poczenia .......................................... 102
3.3.7. Zestaw znakw i sortowanie dla acucha znakw.................................. 104
3.3.8. Wykorzystywanie COLLATE w instrukcjach SQL.................................... 105
3.3.9. Priorytet klauzuli COLLATE .................................................................. 106
3.3.10. Operator BINARY................................................................................... 106
3.3.11. Niektre przypadki specjalne, w ktrych trudno okreli sortowanie...... 106
3.3.12. Sortowania musz by odpowiednie dla danego zestawu znakw........... 107
3.3.13. Przykad wpywu porzdku sortowania ................................................... 108
3.4. Operacje, na ktre ma wpyw obsuga zestaww znakw.................................... 109
3.4.1. acuchy wyjciowe ............................................................................... 109
3.4.2. CONVERT()............................................................................................ 110
3.4.3. CAST() .................................................................................................... 110
3.4.4. Instrukcje SHOW .................................................................................... 111
3.5. Obsuga Unicode.................................................................................................. 112
3.6. UTF8 dla metadanych.......................................................................................... 113
3.7. Kompatybilno z innymi systemami zarzdzania baz danych .......................... 115
3.8. Nowy format pliku konfiguracji zestawu znakw................................................ 115
3.9. Narodowe zestawy znakw.................................................................................. 115
3.10. Aktualizacja zestaww znakw z MySQL 4.0..................................................... 116
3.10.1. Zestawy znakw w wersji 4.0 i odpowiadajce im w wersji 4.1 pary
skadajce si z zestawu znakw i sortowania......................................... 117
3.10.2. Przeksztacanie kolumn znakowych wersji 4.0 na format 4.1 ................. 118
3.11. Zestawy znakw i sortowania obsugiwane przez MySQL.................................. 118
3.11.1. Zestawy znakw standardu Unicode ....................................................... 119
3.11.2. Zestawy znakw zachodnioeuropejskich................................................. 120
3.11.3. Zestawy znakw dla Europy Centralnej .................................................. 121
Spis treci 5
3.11.4. Zestawy znakw poudniowoeuropejskich i rodkowowschodnich......... 122
3.11.5. Zestawy znakw regionu batyckiego...................................................... 123
3.11.6. Zestawy znakw dla cyrylicy................................................................... 123
3.11.7. Azjatyckie zestawy znakw..................................................................... 124
Rozdzia 4. Typy kolumn.................................................................................. 125
4.1. Przegld typw dla kolumny................................................................................ 126
4.1.1. Omwienie typw liczbowych ................................................................ 126
4.1.2. Przegld typw zwizanych z dat i czasem............................................ 129
4.1.3. Przegld typw acuchowych ................................................................ 130
4.2. Typy liczbowe...................................................................................................... 132
4.3. Typy zwizane z dat i czasem............................................................................ 135
4.3.1. Typy DATETIME, DATE i TIMESTAMP............................................. 137
4.3.2. Typ TIME................................................................................................ 142
4.3.3. Typ YEAR............................................................................................... 143
4.3.4. Problem roku 2000 a typy zwizane z dat.............................................. 144
4.4. Typy acuchowe ................................................................................................. 144
4.4.1. Typy CHAR i VARCHAR...................................................................... 144
4.4.2. Typy BLOB i TEXT................................................................................ 146
4.4.3. Typ Enum................................................................................................ 147
4.4.4. Typ SET .................................................................................................. 149
4.5. Rozmiar pamici potrzebnej dla typw kolumn................................................... 151
4.6. Wybieranie odpowiedniego typu dla kolumny..................................................... 152
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych ............... 153
Rozdzia 5. Funkcje i operatory........................................................................ 155
5.1. Operatory ............................................................................................................. 156
5.1.1. Nawiasy................................................................................................... 156
5.1.2. Operatory porwnania ............................................................................. 156
5.1.3. Operatory logiczne .................................................................................. 161
5.1.4. Operatory rozrniania wielkoci liter..................................................... 163
5.2. Funkcje kontroli przepywu ................................................................................. 163
5.3. Funkcje acuchowe............................................................................................. 166
5.3.1. Funkcje porwnywania acuchw.......................................................... 176
5.4. Funkcje liczbowe ................................................................................................. 178
5.4.1. Operatory arytmetyczne........................................................................... 178
5.4.2. Funkcje matematyczne ............................................................................ 180
5.5. Funkcje daty i godziny......................................................................................... 186
5.6. Funkcje obsugi wyszukiwania penotekstowego................................................. 202
5.6.1. Boolowskie wyszukiwania penotekstowe............................................... 205
5.6.2. Wyszukiwania penotekstowe z rozwijaniem zapytania .......................... 207
5.6.3. Ograniczenia dla wyszukiwania penotekstowego................................... 208
5.6.4. Modyfikowanie wyszukiwania penotekstowego MySQL ...................... 209
5.6.5. Lista rzeczy do zrobienia dla wyszukiwania penotekstowego................ 211
5.7. Funkcje konwersji typw..................................................................................... 211
5.8. Inne funkcje ......................................................................................................... 214
5.8.1. Funkcje bitowe ........................................................................................ 214
5.8.2. Funkcje szyfrujce................................................................................... 215
5.8.3. Funkcje informacyjne .............................................................................. 219
5.8.4. Funkcje rne .......................................................................................... 223
5.9. Funkcje i modyfikatory do zastosowania z klauzulami GROUP BY................... 226
5.9.1. Funkcje GROUP BY (agregujce)........................................................... 226
5.9.2. Modyfikatory GROUP BY...................................................................... 229
5.9.3. GROUP BY z ukrytymi polami............................................................... 232
6 Spis treci
Rozdzia 6. Skadnia instrukcji SQL .................................................................. 235
6.1. Instrukcje operujce na danych............................................................................ 235
6.1.1. Skadnia instrukcji DELETE................................................................... 235
6.1.2. Skadnia instrukcji DO ............................................................................ 238
6.1.3. Skadnia instrukcji HANDLER............................................................... 238
6.1.4. Skadnia instrukcji INSERT .................................................................... 240
6.1.5. Skadnia instrukcji LOAD DATA INFILE.............................................. 246
6.1.6. Skadnia instrukcji REPLACE................................................................. 255
6.1.7. Skadnia instrukcji SELECT.................................................................... 256
6.1.8. Skadnia podzapyta................................................................................ 265
6.1.9. Skadnia instrukcji TRUNCATE............................................................. 276
6.1.10. Skadnia instrukcji UPDATE................................................................... 276
6.2. Instrukcje definiowania danych ........................................................................... 278
6.2.1. Skadnia instrukcji ALTER DATABASE ............................................... 278
6.2.2. Skadnia instrukcji ALTER TABLE........................................................ 279
6.2.3. Skadnia instrukcji CREATE DATABASE............................................. 285
6.2.4. Skadnia instrukcji CREATE INDEX ..................................................... 285
6.2.5. Skadnia instrukcji CREATE TABLE..................................................... 287
6.2.6. Skadnia instrukcji DROP DATABASE.................................................. 301
6.2.7. Skadnia instrukcji DROP INDEX.......................................................... 302
6.2.8. Skadnia instrukcji DROP TABLE.......................................................... 302
6.2.9. Skadnia instrukcji RENAME TABLE.................................................... 303
6.3. Instrukcje programu MySQL............................................................................... 304
6.3.1. Skadnia instrukcji DESCRIBE
(odczytywanie informacji na temat kolumn) ........................................... 304
6.3.2. Skadnia instrukcji USE........................................................................... 304
6.4. Instrukcje obsugi transakcji i blokowania........................................................... 305
6.4.1. Skadnia instrukcji START TRANSACTION, COMMIT
oraz ROLLBACK.................................................................................... 305
6.4.2. Instrukcje niemoliwe do wycofania ....................................................... 306
6.4.3. Instrukcje wykonujce niejawne zatwierdzenie......................................... 306
6.4.4. Skadnia instrukcji SAVEPOINT i ROLLBACK TO SAVEPOINT....... 307
6.4.5. Skadnia instrukcji LOCK TABLES oraz UNLOCK TABLES .............. 307
6.4.6. Skadnia instrukcji SET TRANSACTION.............................................. 310
6.5. Administracja baz danych .................................................................................. 311
6.5.1. Instrukcje zarzdzajce kontami uytkownikw ....................................... 311
6.5.2. Instrukcje do konserwacji tabel ............................................................... 319
6.5.3. Skadnia instrukcji SET i SHOW ............................................................ 326
6.5.4. Inne instrukcje administracyjne ............................................................... 347
6.6. Instrukcje replikacji.............................................................................................. 352
6.6.1. Instrukcje SQL sterujce serwerem gwnym ......................................... 352
6.6.2. Instrukcje SQL sterujce serwerami podrzdnymi .................................. 354
Rozdzia 7. Rozszerzenia przestrzenne w MySQL............................................... 365
7.1. Wstp ................................................................................................................... 365
7.2. Model geometryczny OpenGIS............................................................................ 366
7.2.1. Hierarchia klas geometrycznych.............................................................. 366
7.2.2. Klasa Geometry ....................................................................................... 368
7.2.3. Klasa Point .............................................................................................. 369
7.2.4. Klasa Curve ............................................................................................. 369
7.2.5. Klasa LineString...................................................................................... 370
7.2.6. Klasa Surface........................................................................................... 370
7.2.7. Klasa Polygon.......................................................................................... 370
7.2.8. Klasa GeometryCollection....................................................................... 371
Spis treci 7
7.2.9. Klasa MultiPoint...................................................................................... 371
7.2.10. Klasa MultiCurve .................................................................................... 372
7.2.11. Klasa MultiLineString............................................................................. 372
7.2.12. Klasa MultiSurface .................................................................................. 372
7.2.13. Klasa MultiPolygon................................................................................. 373
7.3. Obsugiwane formaty danych przestrzennych...................................................... 373
7.3.1. Format tekstowy WKT............................................................................ 374
7.3.2. Format binarny WKB.............................................................................. 374
7.4. Tworzenie bazy danych z rozszerzeniami przestrzennymi................................... 375
7.4.1. Typy danych przestrzennych w MySQL ................................................. 375
7.4.2. Tworzenie wartoci przestrzennych......................................................... 376
7.4.3. Tworzenie kolumn przestrzennych.......................................................... 379
7.4.4. Wypenianie kolumn przestrzennych....................................................... 379
7.4.5. Pobieranie danych przestrzennych........................................................... 381
7.5. Analiza informacji przestrzennych....................................................................... 381
7.5.1. Funkcje konwersji formatw geometrycznych ........................................ 382
7.5.2. Funkcje klasy Geometry.......................................................................... 382
7.5.3. Funkcje tworzce nowe geometrie na podstawie istniejcych................. 388
7.5.4. Funkcje testujce relacje przestrzenne
midzy obiektami geometrycznymi ......................................................... 389
7.5.5. Relacje midzy minimalnymi prostoktami otaczajcymi
dla poszczeglnych geometrii.................................................................. 390
7.5.6. Funkcje sprawdzajce relacje przestrzenne pomidzy geometriami ........ 391
7.6. Optymalizacja analizy przestrzennej.................................................................... 392
7.6.1. Tworzenie indeksw przestrzennych....................................................... 392
7.6.2. Wykorzystanie indeksu przestrzennego................................................... 393
7.7. Zgodno MySQL ze standardem........................................................................ 395
7.7.1. Niezaimplementowane funkcje GIS ........................................................ 395
Rozdzia 8. Procedury i funkcje skadowane ..................................................... 397
8.1. Skadnia procedur skadowanych......................................................................... 398
8.1.1. Utrzymanie procedur skadowanych........................................................ 398
8.1.2. SHOW PROCEDURE STATUS oraz SHOW FUNCTION STATUS.... 401
8.1.3. Instrukcja CALL...................................................................................... 402
8.1.4. Instrukcja zoona BEGIN ... END.......................................................... 402
8.1.5. Instrukcja DECLARE.............................................................................. 402
8.1.6. Zmienne w procedurach skadowanych................................................... 402
8.1.7. Warunki i podprogramy obsugi .............................................................. 403
8.1.8. Kursory.................................................................................................... 405
8.1.9. Konstrukcje sterowania przepywem sterowania..................................... 406
Rozdzia 9. Obsuga bdw w MySQL .............................................................. 409
9.1. Zwracane bdy.................................................................................................... 409
9.2. Komunikaty bdw............................................................................................. 419
Dodatek A Rozwizywanie problemw z zapytaniami ........................................435
A.1. Zagadnienia zwizane z zapytaniami ................................................................... 435
A.1.1. Wielko liter przy wyszukiwaniu........................................................... 435
A.1.2. Problemy z kolumnami typu DATE ........................................................ 436
A.1.3. Problemy z wartociami NULL............................................................... 437
A.1.4. Problemy z synonimami kolumn ............................................................. 438
A.1.5. Bd wycofania dla tabel nietransakcyjnych............................................ 439
A.1.6. Usuwanie wierszy ze zwizanych tabel ................................................... 439
A.1.7. Rozwizywanie problemw z brakujcymi wierszami ............................ 440
A.1.8. Problemy z porwnaniami zmiennoprzecinkowymi................................ 441
8 Spis treci
A.2. Problemy zwizane z optymalizatorem................................................................ 443
A.3. Problemy z definicj tabel.................................................................................... 444
A.3.1. Problemy z instrukcj ALTER TABLE................................................... 444
A.3.2. Jak zmieni porzdek kolumn w tabeli .................................................... 445
A.3.3. Problemy z tabelami tymczasowymi ....................................................... 445
Dodatek B Wyraenia regularne w MySQL........................................................ 447
Skorowidz...................................................................................... 451
Rozdzia 4.
Typy kolumn
W MySQL dostpnych jest wiele typw danych, ktre mona pogrupowa w kilku pod-
stawowych kategoriach, takich jak typy liczbowe, typy zwizane z dat i czasem oraz
typy acuchowe. Na pocztku tego rozdziau przedstawiony zostanie przegld wspo-
mnianych przed chwil typw kolumn, po czym nastpi bardziej szczegowy opis ich
waciwoci z podziaem na poszczeglne kategorie i wreszcie zamieszczone zostanie
podsumowanie informacji dotyczcych wymaga co do rozmiaru pamici potrzebnej
do przechowania danej kolumny. Sam przegld jest z zamierzenia krtki. Dodatkowe
informacje o poszczeglnych typach kolumn, na przykad dopuszczalny format, w kt-
rym mona deklarowa wartoci, zostay uwzgldnione w szczegowych omwieniach.
Od wersji 4.1 MySQL rozpoznaje rozszerzenia do obsugi danych przestrzennych.
Informacje o typach przestrzennych znajduj si w rozdziale 7. tego podrcznika.
W czci opisu typw kolumn zastosowane zostay nastpujce reguy:
/
Wskazuje maksymalny rozmiar wywietlania liczby lub acucha.
Maksymalnym dopuszczalnym rozmiarem wywietlania jest 255.
&
Dotyczy typw zmiennoprzecinkowych i staoprzecinkowych. Okrela liczb
cyfr po kropce dziesitnej. Maksymalna dopuszczalna warto wynosi 30,
ale nie powinna przekracza /.
Nawiasy kwadratowe ( ) identyfikuj opcjonalne fragmenty deklaracji typu.
126 Rozdzia 4. Typy kolumn
4.1. Przegld typw dla kolumny
4.1.1. Omwienie typw liczbowych
Poniej znajduje si przegld liczbowych typw dla kolumn. Bardziej szczegowe
informacje mona znale w podrozdziale 4.2. Wymogi dotyczce rozmiaru pamici
potrzebnej do przechowywania kolumn znajduj si w podrozdziale 4.5.
Jeli dla kolumny liczbowej zostanie okrelony atrybut /lRO|1||, MySQL automatycznie
doda do kolumny atrybut UN1S1ONlD.
Naley uwaa podczas odejmowania dwch wartoci liczbowych, z ktrych jedna ma
typ UN1S1ONlD. Uzyskany wynik bdzie rwnie tego typu! patrz podrozdzia 5.7.
T1NY1NT/) UNS1ONlD /lRO|1||
Bardzo maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od `8
do `/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do bb.
B1T, BOO|, BOO|lAN
To s synonimy T1NY1NT`). Synonim BOO|lAN zosta dodany w MySQL 4.1.0.
Warto zerowa to inaczej fasz. Wartoci niezerowe traktowane s jako prawda.
W przyszoci wprowadzona zostanie pena, zgodna ze standardem SQL
obsuga typu boolowskiego.
SMA||1NT/) UNS1ONlD /lRO|1||
Maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od o/68
do o/6/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do 6bbob.
MlD1UM1NT/) UNS1ONlD /lRO|1||
rednia liczba cakowita. Dla liczb ze znakiem zakres wynosi od 8o88608
do 8o8860/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0
do `6///`b.
1NT/) UNS1ONlD /lRO|1||
Standardowa liczba cakowita. Dla liczb ze znakiem zakres wynosi
od `4/48o648 do `4/48o64/. W przypadku liczb bez znaku zakres
obejmuje wartoci od 0 do 49496/9b.
1NTlOlR/) UNS1ONlD /lRO|1||
Jest to synonim dla typu 1NT.
B1O1NT/) UNS1ONlD /lRO|1||
Dua liczba cakowita. Dla liczb ze znakiem zakres wynosi
od 9oo/0o68b4//b808 do 9oo/0o68b4//b80/. W przypadku liczb
bez znaku zakres obejmuje wartoci od 0 do `8446/440/o/09bb`6`b.
4.1. Przegld typw dla kolumny 127
Oto kilka spraw, o ktrych naley wiedzie odnonie kolumn typu B1O1NT:
Wszystkie obliczenia wykonywane s przy uyciu wartoci typu B1O1NT
lub DOUB|l ze znakiem. Oznacza to, e duych liczb cakowitych bez
znaku, wikszych ni 9oo/0o68b4//b80/ (63 bity), mona uywa tylko
z funkcjami bitowymi! Niezastosowanie si do tej zasady moe doprowadzi
do uzyskania w wyniku liczby, ktrej kilka ostatnich cyfr jest bdnych
z powodu bdw w zaokrglaniu podczas konwersji wartoci B1O1NT
na DOUB|l.
MySQL 4.0 potrafi obsugiwa B1O1NT w nastpujcych przypadkach:
Podczas wykorzystywania liczb cakowitych do przechowywania
duych wartoci bez znaku w kolumnie typu B1O1NT.
W M1NPC\YCAMQN) lub MAXPC\YCAMQN), gdzie PC\YCAMQN odnosi si
do kolumny B1O1NT.
Podczas korzystania z operatorw (midzy innymi , , *), gdy oba
argumenty s liczbami cakowitymi.
Zawsze istnieje moliwo zapisania w kolumnie B1O1NT dokadnej wartoci
liczby cakowitej. Wystarczy zapisa j przy uyciu acucha. W takim
przypadku zostanie dokonana konwersja acucha na liczb; konwersja
nie bdzie wymaga poredniego etapu przeksztacajcego liczb na jej
odpowiednik o podwjnej precyzji.
Podczas korzystania z operatorw , i * stosowana jest arytmetyka
B1O1NT, jeli oba argumenty maj warto liczby cakowitej! To oznacza,
e pomnoenie dwch duych liczb cakowitych (lub wynikw funkcji,
ktra zwraca liczby cakowite) moe spowodowa nieoczekiwane
rezultaty, jeli wynik przekroczy liczb 9oo/0o68b4//b80/.
||OATR) UNS1ONlD /lRO|1||
Liczba zmiennoprzecinkowa. Parametr R oznacza precyzj i moe przyjmowa
warto od 0 do 14 dla liczb zmiennoprzecinkowych o dokadnoci do jednego
znaku i od 25 do 53 dla liczb zmiennoprzecinkowych o dokadnoci do dwch
znakw. To przypomina opisane poniej typy ||OAT i DOUB|l. Typ ||OATR)
ma ten sam zakres, jaki posiadaj odpowiadajce mu typy ||OAT i DOUB|l,
ale w jego przypadku niezdefiniowany jest maksymalny rozmiar wywietlania
i liczba miejsc po przecinku.
Od wersji 3.23 MySQL jest to prawdziwa warto zmiennoprzecinkowa.
W wersjach wczeniejszych liczba typu ||OATR) bya zawsze liczb o dwch
miejscach po przecinku.
Ta skadnia zostaa dodana w celu zachowania zgodnoci ze standardem ODBC.
Stosowanie typu ||OAT moe spowodowa wystpienie pewnych
nieoczekiwanych problemw, poniewa wszystkie obliczenia w MySQL
s wykonywane z podwjn precyzj patrz punkt A.1.7).
||OAT/, &) UNS1ONlD /lRO|1||
128 Rozdzia 4. Typy kolumn
Maa liczba zmiennoprzecinkowa (o dokadnoci do jednego znaku). Liczba
ta moe przyj wartoci: od o408o466lo8 do ``/b494ob`lo8, 0,
i od ``/b494ob`lo8 do o408o466lo8. Jeli podany jest atrybut UN1S1ONlD,
niedozwolone s wartoci ujemne. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ ||OAT bez argumentw
lub typ ||OATR) (gdzie Rjest liczb z zakresu od 0 do 24) oznacza liczb
zmiennoprzecinkow o pojedynczej precyzji.
DOUB|l/, &) UNS1ONlD /lRO|1||
Standardowa liczba zmiennoprzecinkowa (o dokadnoci do dwch
znakw). Liczba ta moe przyj wartoci: od `/9/69o`o486o`b/lo08
do b0/o8b8b0/0`4lo08, 0, i od b0/o8b8b0/0`4lo08
do `/9/69o`o486o`b/lo08. Jeli podany jest atrybut UN1S1ONlD, wartoci
ujemne s niedozwolone. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ DOUB|l
bez argumentw lub ||OATR) (gdzie R jest liczb z zakresu od 25 do 53)
oznacza liczb zmiennoprzecinkow o podwjnej precyzji.
DOUB|l PRlC1S1ON/, &) UNS1ONlD /lRO|1||
RlA|/, &) UNS1ONlD /lRO|1||
S to synonimy DOUB|l. Wyjtek: Jeli dla parametru s;_cce serwera
wczono opcj RlA|_AS_||OAT, synonimem ||OAT jest RlA|, a nie DOUB|l.
DlC1MA|/, &) UNS1ONlD /lRO|1||
Niezapakowana liczba staoprzecinkowa. Zachowanie kolumny tego typu
przypomina kolumn typu CHAR. Niezapakowana oznacza, e liczba jest
przechowywana w postaci acucha przy uyciu jednego znaku na kad cyfr
wartoci. Parametr / definiuje maksymaln liczb cyfr, a & liczb miejsc
po przecinku. W parametrze / nie s brane pod uwag: kropka dziesitna
(odpowiadajca w naszej notacji przecinkowi) i (dla liczb ujemnych) znak ,
cho jest dla nich zarezerwowane miejsce. Wartoci nie maj miejsc
po przecinku lub czci uamkowych, jeli & jest rwne 0. Maksymalny zakres
wartoci typu DlC1MA| jest taki sam, jak dla typu DOUB|l, ale rzeczywisty zakres
danej kolumny DlC1MA| moe by ograniczony przez wybr argumentw / i &.
Jeli podany jest atrybut UN1S1ONlD, wartoci ujemne s niedozwolone.
W przypadku braku argumentu &, domyln wartoci jest 0. Jeli pominity
jest parametr /, domyln wartoci jest 10.
W wersjach poprzedzajcych MySQL 3.23 argument / musi by wystarczajco
duy, by zawiera obszar potrzebny dla znaku i kropki dziesitnej.
DlC/,&) UNS1ONlD /lRO|1||
NUMlR1C/,&) UNS1ONlD /lRO|1||
|1XlD/, &) UNS1ONlD /lRO|1||
S to synonimy typu DlC1MA|.
W MySQL 4.1.0 dodano synonim |1XlD w celu osignicia kompatybilnoci
z innymi serwerami.
4.1. Przegld typw dla kolumny 129
4.1.2. Przegld typw zwizanych z dat i czasem
Poniej znajduje si podsumowanie typw kolumn przeznaczonych dla czasu i daty.
Dodatkowe informacje na ten temat mona znale w podrozdziale 4.3. Wymogi do-
tyczce pamici potrzebnej do przechowywania danych w kolumnach zostay podane
w podrozdziale 4.5.
DATl
Data. Obsugiwany zakres obejmuje daty od ``0000`0`` do `9999`o``.
W MySQL wartoci DATl wywietlane s w formacie `RRRRMMDD`, ale mona
przypisywa wartoci do kolumn DATl przy uyciu acuchw lub liczb.
DATlT1Ml
Kombinacja daty i czasu. Obsugiwany zakres obejmuje wartoci
od ``0000`0` 000000` do `9999`o` ob9b9`. W MySQL wartoci
DATlT1Ml wywietlane s w formacie `RRRRMMDD OOMMSS`, ale mona
przypisywa wartoci do kolumn DATlT1Ml przy uyciu acuchw lub liczb.
T1MlSTAMP/)
Znacznik czasu. Obsugiwany zakres rozpoczyna si od daty ``9/00`0``
i siga roku 0o/.
Kolumna typu T1MlSTAMP przydaje si do rejestracji daty i godziny operacji
wstawiania lub aktualizacji. Pierwszej kolumnie T1MlSTAMP w tabeli
automatycznie przypisywana jest data i czas ostatniej operacji, jeli tylko tych
wartoci nie wprowadzi rcznie uytkownik. Dowolnej kolumnie T1MlSTAMP
mona rwnie przypisa biec dat i godzin, wpisujc do niej warto NU||.
Od MySQL 4.1 wartoci T1MlSTAMP s zwracane w postaci acuchw
w formacie `RRRRMMDD OOMMSS`. Aby uzyska warto w postaci liczby,
naley doda do kolumn tego typu 0. Inne szerokoci wywietlania
znacznika czasu nie s obsugiwane.
W wersjach poprzedzajcych MySQL 4.1 wartoci T1MlSTAMP s wywietlane
w formacie RRRRMMDDOOMMSS, RRMMDDOOMMSS, RRRRMMDD lub RRMMDD w zalenoci
od tego, czy parametr / jest rwny 14 (albo go brak), 12, 8 lub 6. Mona jednak
przypisywa wartoci do kolumn T1MlSTAMP przy uyciu acuchw lub liczb.
Argument / wpywa tylko na sposb wywietlania kolumny T1MlSTAMP, a nie
na jej przechowywanie. Wartoci kolumny s zawsze zapisywane w czterech
bajtach. W MySQL od wersji 4.0.12 pojawia si opcja ne., dziki ktrej
mona zmieni dziaanie serwera, upodabniajc je do MySQL 4.1.
Naley odnotowa, e kolumny T1MlSTAMP/), gdzie /jest rwne 8 lub 14,
s traktowane jako liczby, natomiast reszta kolumn T1MlSTAMP/) jest
traktowana jako acuchy. Jest to rodzaj gwarancji, e uytkownik bdzie
mg wiarygodnie usuwa i przywraca tabele tego typu.
T1Ml
Godzina. Obsugiwany zakres obejmuje wartoci od `8o8b9b9`
do ` 8o8b9b9`. W MySQL wartoci T1Ml wywietlane s w formacie
` OOMMSS`, ale mona przypisa wartoci do kolumn T1Ml przy uyciu
zarwno acuchw, jak i liczb.
130 Rozdzia 4. Typy kolumn
YlAR|4)
Rok w formacie dwu- lub czterocyfrowym. Domylnym formatem jest rok
zapisany za pomoc czterech cyfr. W tym formacie dostpne wartoci nale
do przedziau od `90` do `bb oraz 0. W formacie dwucyfrowym wartoci
dopuszczalne to liczby z zakresu od /0 do 69, ktre reprezentuj daty od roku
1970 do 2069. W MySQL wartoci YlAR wywietlane s w formacie RRRR,
ale mona przypisa wartoci do kolumn YlAR przy uyciu tak acuchw,
jak i liczb. Typ YlAR jest niedostpny dla wersji wczeniejszych ni MySQL 3.22.
4.1.3. Przegld typw acuchowych
Poniej znajduje si przegld typw acuchowych. Dodatkowe informacje mona
znale w podrozdziale 4.4. Wymogi dotyczce pamici potrzebnej do przechowywa-
nia danych w kolumnach zostay podane w podrozdziale 4.5.
W niektrych przypadkach MySQL moe zmieni kolumn typu acuchowego na typ,
ktry bdzie si rni od zadeklarowanego w instrukcji CRlATl TAB|l lub A|TlR TAB|l.
Wicej informacji na ten temat znajduje si w podpunkcie 6.2.5.2.
Od wersji 4.1 w MySQL pojawia si zmiana, ktra wpywa na wiele typw kolumn typu
acuchowego. Definicja kolumn typu znakowego moe zawiera atrybut CHARACTlR
SlT, ktry okrela zestaw znakw i opcjonalnie porzdek sortowania. Dotyczy to typw
CHAR, VARCHAR, rnych typw TlXT oraz lNUM i SlT, na przykad:
CRF/TF T/B|F !
FNUMYCTVQ
YCTVQ|
1 lub 2 bajty w zalenoci od liczby wartoci wyliczenia
(maksymalnie 65 535)
SFTYCTVQ
YCTVQ|
1, 2, 3, 4 lub 8 bajtw w zalenoci od liczby elementw zestawu
(maksymalnie 64)
Typy VARCHAR, B|OB i TlXT maj zmienn dugo. Dla kadego ilo pamici potrzeb-
nej do przechowania wartoci bdzie zalee od faktycznej dugoci wartoci kolumny
(reprezentowanej w ostatniej tabeli przez .), a nie od maksymalnego moliwego roz-
miaru danego typu. Kolumna VARCHAR`0) na przykad moe przechowywa acuch
o maksymalnej dugoci 10 znakw. Faktyczna ilo wymaganej pamici to dugo
acucha (.) plus 1 bajt do zapisania dugoci acucha. Dla acucha `.|cc` parametr
. jest rwny 4, a wymagany rozmiar pamici to 5 bajtw.
Typy B|OB i TlXT wymagaj 1, 2, 3 lub 4 bajtw do zapisu dugoci wartoci kolumny
w zalenoci od maksymalnej moliwej dugoci tego typu (patrz punkt 4.4.2).
Rozmiar obiektu lNUM jest ustalany na podstawie liczby rnych wartoci wyliczenia.
Przy wyliczeniach do 255 moliwych wartoci uywany jest jeden bajt, a przy wyli-
czeniach do 65 535 wartoci uywane s 2 bajty (patrz punkt 4.4.3).
Rozmiar obiektu SlT jest okrelany przez liczb rnych elementw zestawu. Jeli ze-
staw ma rozmiar 0, obiekt zajmuje 0/).8 bajtw, ktr to warto zaokrgla si do
1, 2, 3, 4 lub 8 bajtw. Obiekt SlT moe mie do 64 elementw (patrz punkt 4.4.4).
4.6. Wybieranie odpowiedniego typu
dla kolumny
Aby jak najbardziej wydajnie korzysta z pamici, naley we wszystkich przypadkach
stara si stosowa typ, ktry bdzie jak najbardziej dokadny. Jeli na przykad w kolum-
nie liczb cakowitych bd przechowywane wartoci z zakresu od ` do 99999, najlep-
szym wyborem bdzie typ MlD1UM1NT UNS1ONlD. Ze wszystkich typw, ktre reprezentuj
wszystkie wymagane wartoci, zajmuje najmniej pamici.
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych 153
Powszechnym problemem jest dokadne przedstawianie wartoci walutowych. W MySQL
naley do tego uywa typu DlC1MA|, za pomoc ktrego wartoci zapisywane s w for-
mie acucha. Dziki temu nie traci si na dokadnoci (mimo to obliczenia z wartociami
DlC1MA| mog by wci wykonywane przy uyciu operacji dziaajcych na liczbach
z podwjn precyzj). Jeli dokadno nie jest zbyt wana, by moe wystarczajco
dobrym typem bdzie DOUB|l.
Aby uzyska wiksz dokadno, mona zawsze przeksztaci warto na typ stao-
przecinkowy, przechowywany w B1O1NT. Pozwoli to wykonywa wszystkie obliczenia
na liczbach cakowitych i tylko w razie potrzeby przeksztaca wynik z powrotem na
wartoci zmiennoprzecinkowe.
4.7. Wykorzystywanie typw kolumn
z innych mechanizmw baz danych
Aby uatwi uytkownikowi zastosowanie kodu pochodzcego od innych producentw,
moliwe jest odwzorowanie typw kolumn w sposb przedstawiony w poniszej tabeli.
Odwzorowania te upraszczaj operacj importu do MySQL definicji tabel z innych
mechanizmw baz danych:
Typ innych producentw Typ MySQL
BTN/RY/| C'/R/| BTN/RY
C'/R V/RYTN/| V/RC'/R/|
F|J/T4 F|J/T
F|J/T8 OJUB|F
TNT1 TTNYTNT
TNT SM/||TNT
TNT: MFOTUMTNT
TNT4 TNT
TNT8 BTTNT
|JN V/RBTN/RY MFOTUMB|JB
|JN V/RC'/R MFOTUMTFXT
|JN MFOTUMTFXT oc M,SJ| 410|
MTOO|FTNT MFOTUMTNT
V/RBTN/RY/| C'/R/| BTN/RY
Odwzorowanie typw kolumn jest wykonywane podczas tworzenia tabeli, po czym
oryginalne deklaracje typu zostaj usunite. Jeli uytkownik utworzy tabel z typami
stosowanymi przez innych producentw, po czym wyda polecenie DlSCR1Bl PC\YCA
VCDGNK, zostanie przedstawiona struktura tabeli z odpowiadajcymi im typami MySQL.
4 Spis treci
1.8.5. Rozbienoci midzy MySQL a standardem SQL ........................................ 60
1.8.6. Jak MySQL radzi sobie z ograniczeniami ................................................. 67
1.8.7. Znane bdy i projektowe braki w MySQL................................................ 69
Rozdzia 2. Struktura jzyka .............................................................................. 77
2.1. Literay................................................................................................................... 77
2.1.1. acuchy ................................................................................................... 77
2.1.2. Liczby........................................................................................................ 80
2.1.3. Wartoci szesnastkowe .............................................................................. 80
2.1.4. Wartoci logiczne ...................................................................................... 81
2.1.5. Wartoci NULL......................................................................................... 81
2.2. Nazwy baz danych, tabel, indeksw, kolumn i aliasw......................................... 81
2.2.1. Kwalifikatory identyfikatorw .................................................................. 83
2.2.2. Znaczenie wielkoci liter w nazwach identyfikatorw.............................. 83
2.3. Zmienne definiowane przez uytkownika.............................................................. 85
2.4. Zmienne systemowe............................................................................................... 87
2.4.1. Strukturalne zmienne systemowe .............................................................. 89
2.5. Skadnia komentarza .............................................................................................. 91
2.6. Traktowanie sw zastrzeonych w MySQL.......................................................... 92
Rozdzia 3. Obsuga zestaww znakw............................................................... 95
3.1. Oglne informacje o zestawach znakw i sortowaniu ........................................... 95
3.2. Zestawy znakw i porzdki sortowania w MySQL................................................ 96
3.3. Okrelanie domylnego zestawu znakw i sortowania........................................... 98
3.3.1. Zestaw znakw i sortowanie dla serwera................................................... 98
3.3.2. Zestaw znakw i sortowanie dla bazy danych........................................... 99
3.3.3. Zestaw znakw i sortowanie dla tabeli .................................................... 100
3.3.4. Zestaw znakw i sortowanie dla kolumny............................................... 100
3.3.5. Przykady przypisywania zestawu znakw i sortowania ......................... 101
3.3.6. Zestawy znakw i sortowanie dla poczenia .......................................... 102
3.3.7. Zestaw znakw i sortowanie dla acucha znakw.................................. 104
3.3.8. Wykorzystywanie COLLATE w instrukcjach SQL.................................... 105
3.3.9. Priorytet klauzuli COLLATE .................................................................. 106
3.3.10. Operator BINARY................................................................................... 106
3.3.11. Niektre przypadki specjalne, w ktrych trudno okreli sortowanie...... 106
3.3.12. Sortowania musz by odpowiednie dla danego zestawu znakw........... 107
3.3.13. Przykad wpywu porzdku sortowania ................................................... 108
3.4. Operacje, na ktre ma wpyw obsuga zestaww znakw.................................... 109
3.4.1. acuchy wyjciowe ............................................................................... 109
3.4.2. CONVERT()............................................................................................ 110
3.4.3. CAST() .................................................................................................... 110
3.4.4. Instrukcje SHOW .................................................................................... 111
3.5. Obsuga Unicode.................................................................................................. 112
3.6. UTF8 dla metadanych.......................................................................................... 113
3.7. Kompatybilno z innymi systemami zarzdzania baz danych .......................... 115
3.8. Nowy format pliku konfiguracji zestawu znakw................................................ 115
3.9. Narodowe zestawy znakw.................................................................................. 115
3.10. Aktualizacja zestaww znakw z MySQL 4.0..................................................... 116
3.10.1. Zestawy znakw w wersji 4.0 i odpowiadajce im w wersji 4.1 pary
skadajce si z zestawu znakw i sortowania......................................... 117
3.10.2. Przeksztacanie kolumn znakowych wersji 4.0 na format 4.1 ................. 118
3.11. Zestawy znakw i sortowania obsugiwane przez MySQL.................................. 118
3.11.1. Zestawy znakw standardu Unicode ....................................................... 119
3.11.2. Zestawy znakw zachodnioeuropejskich................................................. 120
3.11.3. Zestawy znakw dla Europy Centralnej .................................................. 121
Spis treci 5
3.11.4. Zestawy znakw poudniowoeuropejskich i rodkowowschodnich......... 122
3.11.5. Zestawy znakw regionu batyckiego...................................................... 123
3.11.6. Zestawy znakw dla cyrylicy................................................................... 123
3.11.7. Azjatyckie zestawy znakw..................................................................... 124
Rozdzia 4. Typy kolumn.................................................................................. 125
4.1. Przegld typw dla kolumny................................................................................ 126
4.1.1. Omwienie typw liczbowych ................................................................ 126
4.1.2. Przegld typw zwizanych z dat i czasem............................................ 129
4.1.3. Przegld typw acuchowych ................................................................ 130
4.2. Typy liczbowe...................................................................................................... 132
4.3. Typy zwizane z dat i czasem............................................................................ 135
4.3.1. Typy DATETIME, DATE i TIMESTAMP............................................. 137
4.3.2. Typ TIME................................................................................................ 142
4.3.3. Typ YEAR............................................................................................... 143
4.3.4. Problem roku 2000 a typy zwizane z dat.............................................. 144
4.4. Typy acuchowe ................................................................................................. 144
4.4.1. Typy CHAR i VARCHAR...................................................................... 144
4.4.2. Typy BLOB i TEXT................................................................................ 146
4.4.3. Typ Enum................................................................................................ 147
4.4.4. Typ SET .................................................................................................. 149
4.5. Rozmiar pamici potrzebnej dla typw kolumn................................................... 151
4.6. Wybieranie odpowiedniego typu dla kolumny..................................................... 152
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych ............... 153
Rozdzia 5. Funkcje i operatory........................................................................ 155
5.1. Operatory ............................................................................................................. 156
5.1.1. Nawiasy................................................................................................... 156
5.1.2. Operatory porwnania ............................................................................. 156
5.1.3. Operatory logiczne .................................................................................. 161
5.1.4. Operatory rozrniania wielkoci liter..................................................... 163
5.2. Funkcje kontroli przepywu ................................................................................. 163
5.3. Funkcje acuchowe............................................................................................. 166
5.3.1. Funkcje porwnywania acuchw.......................................................... 176
5.4. Funkcje liczbowe ................................................................................................. 178
5.4.1. Operatory arytmetyczne........................................................................... 178
5.4.2. Funkcje matematyczne ............................................................................ 180
5.5. Funkcje daty i godziny......................................................................................... 186
5.6. Funkcje obsugi wyszukiwania penotekstowego................................................. 202
5.6.1. Boolowskie wyszukiwania penotekstowe............................................... 205
5.6.2. Wyszukiwania penotekstowe z rozwijaniem zapytania .......................... 207
5.6.3. Ograniczenia dla wyszukiwania penotekstowego................................... 208
5.6.4. Modyfikowanie wyszukiwania penotekstowego MySQL ...................... 209
5.6.5. Lista rzeczy do zrobienia dla wyszukiwania penotekstowego................ 211
5.7. Funkcje konwersji typw..................................................................................... 211
5.8. Inne funkcje ......................................................................................................... 214
5.8.1. Funkcje bitowe ........................................................................................ 214
5.8.2. Funkcje szyfrujce................................................................................... 215
5.8.3. Funkcje informacyjne .............................................................................. 219
5.8.4. Funkcje rne .......................................................................................... 223
5.9. Funkcje i modyfikatory do zastosowania z klauzulami GROUP BY................... 226
5.9.1. Funkcje GROUP BY (agregujce)........................................................... 226
5.9.2. Modyfikatory GROUP BY...................................................................... 229
5.9.3. GROUP BY z ukrytymi polami............................................................... 232
6 Spis treci
Rozdzia 6. Skadnia instrukcji SQL .................................................................. 235
6.1. Instrukcje operujce na danych............................................................................ 235
6.1.1. Skadnia instrukcji DELETE................................................................... 235
6.1.2. Skadnia instrukcji DO ............................................................................ 238
6.1.3. Skadnia instrukcji HANDLER............................................................... 238
6.1.4. Skadnia instrukcji INSERT .................................................................... 240
6.1.5. Skadnia instrukcji LOAD DATA INFILE.............................................. 246
6.1.6. Skadnia instrukcji REPLACE................................................................. 255
6.1.7. Skadnia instrukcji SELECT.................................................................... 256
6.1.8. Skadnia podzapyta................................................................................ 265
6.1.9. Skadnia instrukcji TRUNCATE............................................................. 276
6.1.10. Skadnia instrukcji UPDATE................................................................... 276
6.2. Instrukcje definiowania danych ........................................................................... 278
6.2.1. Skadnia instrukcji ALTER DATABASE ............................................... 278
6.2.2. Skadnia instrukcji ALTER TABLE........................................................ 279
6.2.3. Skadnia instrukcji CREATE DATABASE............................................. 285
6.2.4. Skadnia instrukcji CREATE INDEX ..................................................... 285
6.2.5. Skadnia instrukcji CREATE TABLE..................................................... 287
6.2.6. Skadnia instrukcji DROP DATABASE.................................................. 301
6.2.7. Skadnia instrukcji DROP INDEX.......................................................... 302
6.2.8. Skadnia instrukcji DROP TABLE.......................................................... 302
6.2.9. Skadnia instrukcji RENAME TABLE.................................................... 303
6.3. Instrukcje programu MySQL............................................................................... 304
6.3.1. Skadnia instrukcji DESCRIBE
(odczytywanie informacji na temat kolumn) ........................................... 304
6.3.2. Skadnia instrukcji USE........................................................................... 304
6.4. Instrukcje obsugi transakcji i blokowania........................................................... 305
6.4.1. Skadnia instrukcji START TRANSACTION, COMMIT
oraz ROLLBACK.................................................................................... 305
6.4.2. Instrukcje niemoliwe do wycofania ....................................................... 306
6.4.3. Instrukcje wykonujce niejawne zatwierdzenie......................................... 306
6.4.4. Skadnia instrukcji SAVEPOINT i ROLLBACK TO SAVEPOINT....... 307
6.4.5. Skadnia instrukcji LOCK TABLES oraz UNLOCK TABLES .............. 307
6.4.6. Skadnia instrukcji SET TRANSACTION.............................................. 310
6.5. Administracja baz danych .................................................................................. 311
6.5.1. Instrukcje zarzdzajce kontami uytkownikw ....................................... 311
6.5.2. Instrukcje do konserwacji tabel ............................................................... 319
6.5.3. Skadnia instrukcji SET i SHOW ............................................................ 326
6.5.4. Inne instrukcje administracyjne ............................................................... 347
6.6. Instrukcje replikacji.............................................................................................. 352
6.6.1. Instrukcje SQL sterujce serwerem gwnym ......................................... 352
6.6.2. Instrukcje SQL sterujce serwerami podrzdnymi .................................. 354
Rozdzia 7. Rozszerzenia przestrzenne w MySQL............................................... 365
7.1. Wstp ................................................................................................................... 365
7.2. Model geometryczny OpenGIS............................................................................ 366
7.2.1. Hierarchia klas geometrycznych.............................................................. 366
7.2.2. Klasa Geometry ....................................................................................... 368
7.2.3. Klasa Point .............................................................................................. 369
7.2.4. Klasa Curve ............................................................................................. 369
7.2.5. Klasa LineString...................................................................................... 370
7.2.6. Klasa Surface........................................................................................... 370
7.2.7. Klasa Polygon.......................................................................................... 370
7.2.8. Klasa GeometryCollection....................................................................... 371
Spis treci 7
7.2.9. Klasa MultiPoint...................................................................................... 371
7.2.10. Klasa MultiCurve .................................................................................... 372
7.2.11. Klasa MultiLineString............................................................................. 372
7.2.12. Klasa MultiSurface .................................................................................. 372
7.2.13. Klasa MultiPolygon................................................................................. 373
7.3. Obsugiwane formaty danych przestrzennych...................................................... 373
7.3.1. Format tekstowy WKT............................................................................ 374
7.3.2. Format binarny WKB.............................................................................. 374
7.4. Tworzenie bazy danych z rozszerzeniami przestrzennymi................................... 375
7.4.1. Typy danych przestrzennych w MySQL ................................................. 375
7.4.2. Tworzenie wartoci przestrzennych......................................................... 376
7.4.3. Tworzenie kolumn przestrzennych.......................................................... 379
7.4.4. Wypenianie kolumn przestrzennych....................................................... 379
7.4.5. Pobieranie danych przestrzennych........................................................... 381
7.5. Analiza informacji przestrzennych....................................................................... 381
7.5.1. Funkcje konwersji formatw geometrycznych ........................................ 382
7.5.2. Funkcje klasy Geometry.......................................................................... 382
7.5.3. Funkcje tworzce nowe geometrie na podstawie istniejcych................. 388
7.5.4. Funkcje testujce relacje przestrzenne
midzy obiektami geometrycznymi ......................................................... 389
7.5.5. Relacje midzy minimalnymi prostoktami otaczajcymi
dla poszczeglnych geometrii.................................................................. 390
7.5.6. Funkcje sprawdzajce relacje przestrzenne pomidzy geometriami ........ 391
7.6. Optymalizacja analizy przestrzennej.................................................................... 392
7.6.1. Tworzenie indeksw przestrzennych....................................................... 392
7.6.2. Wykorzystanie indeksu przestrzennego................................................... 393
7.7. Zgodno MySQL ze standardem........................................................................ 395
7.7.1. Niezaimplementowane funkcje GIS ........................................................ 395
Rozdzia 8. Procedury i funkcje skadowane ..................................................... 397
8.1. Skadnia procedur skadowanych......................................................................... 398
8.1.1. Utrzymanie procedur skadowanych........................................................ 398
8.1.2. SHOW PROCEDURE STATUS oraz SHOW FUNCTION STATUS.... 401
8.1.3. Instrukcja CALL...................................................................................... 402
8.1.4. Instrukcja zoona BEGIN ... END.......................................................... 402
8.1.5. Instrukcja DECLARE.............................................................................. 402
8.1.6. Zmienne w procedurach skadowanych................................................... 402
8.1.7. Warunki i podprogramy obsugi .............................................................. 403
8.1.8. Kursory.................................................................................................... 405
8.1.9. Konstrukcje sterowania przepywem sterowania..................................... 406
Rozdzia 9. Obsuga bdw w MySQL .............................................................. 409
9.1. Zwracane bdy.................................................................................................... 409
9.2. Komunikaty bdw............................................................................................. 419
Dodatek A Rozwizywanie problemw z zapytaniami ........................................435
A.1. Zagadnienia zwizane z zapytaniami ................................................................... 435
A.1.1. Wielko liter przy wyszukiwaniu........................................................... 435
A.1.2. Problemy z kolumnami typu DATE ........................................................ 436
A.1.3. Problemy z wartociami NULL............................................................... 437
A.1.4. Problemy z synonimami kolumn ............................................................. 438
A.1.5. Bd wycofania dla tabel nietransakcyjnych............................................ 439
A.1.6. Usuwanie wierszy ze zwizanych tabel ................................................... 439
A.1.7. Rozwizywanie problemw z brakujcymi wierszami ............................ 440
A.1.8. Problemy z porwnaniami zmiennoprzecinkowymi................................ 441
8 Spis treci
A.2. Problemy zwizane z optymalizatorem................................................................ 443
A.3. Problemy z definicj tabel.................................................................................... 444
A.3.1. Problemy z instrukcj ALTER TABLE................................................... 444
A.3.2. Jak zmieni porzdek kolumn w tabeli .................................................... 445
A.3.3. Problemy z tabelami tymczasowymi ....................................................... 445
Dodatek B Wyraenia regularne w MySQL........................................................ 447
Skorowidz...................................................................................... 451
Rozdzia 4.
Typy kolumn
W MySQL dostpnych jest wiele typw danych, ktre mona pogrupowa w kilku pod-
stawowych kategoriach, takich jak typy liczbowe, typy zwizane z dat i czasem oraz
typy acuchowe. Na pocztku tego rozdziau przedstawiony zostanie przegld wspo-
mnianych przed chwil typw kolumn, po czym nastpi bardziej szczegowy opis ich
waciwoci z podziaem na poszczeglne kategorie i wreszcie zamieszczone zostanie
podsumowanie informacji dotyczcych wymaga co do rozmiaru pamici potrzebnej
do przechowania danej kolumny. Sam przegld jest z zamierzenia krtki. Dodatkowe
informacje o poszczeglnych typach kolumn, na przykad dopuszczalny format, w kt-
rym mona deklarowa wartoci, zostay uwzgldnione w szczegowych omwieniach.
Od wersji 4.1 MySQL rozpoznaje rozszerzenia do obsugi danych przestrzennych.
Informacje o typach przestrzennych znajduj si w rozdziale 7. tego podrcznika.
W czci opisu typw kolumn zastosowane zostay nastpujce reguy:
/
Wskazuje maksymalny rozmiar wywietlania liczby lub acucha.
Maksymalnym dopuszczalnym rozmiarem wywietlania jest 255.
&
Dotyczy typw zmiennoprzecinkowych i staoprzecinkowych. Okrela liczb
cyfr po kropce dziesitnej. Maksymalna dopuszczalna warto wynosi 30,
ale nie powinna przekracza /.
Nawiasy kwadratowe ( ) identyfikuj opcjonalne fragmenty deklaracji typu.
126 Rozdzia 4. Typy kolumn
4.1. Przegld typw dla kolumny
4.1.1. Omwienie typw liczbowych
Poniej znajduje si przegld liczbowych typw dla kolumn. Bardziej szczegowe
informacje mona znale w podrozdziale 4.2. Wymogi dotyczce rozmiaru pamici
potrzebnej do przechowywania kolumn znajduj si w podrozdziale 4.5.
Jeli dla kolumny liczbowej zostanie okrelony atrybut /lRO|1||, MySQL automatycznie
doda do kolumny atrybut UN1S1ONlD.
Naley uwaa podczas odejmowania dwch wartoci liczbowych, z ktrych jedna ma
typ UN1S1ONlD. Uzyskany wynik bdzie rwnie tego typu! patrz podrozdzia 5.7.
T1NY1NT/) UNS1ONlD /lRO|1||
Bardzo maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od `8
do `/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do bb.
B1T, BOO|, BOO|lAN
To s synonimy T1NY1NT`). Synonim BOO|lAN zosta dodany w MySQL 4.1.0.
Warto zerowa to inaczej fasz. Wartoci niezerowe traktowane s jako prawda.
W przyszoci wprowadzona zostanie pena, zgodna ze standardem SQL
obsuga typu boolowskiego.
SMA||1NT/) UNS1ONlD /lRO|1||
Maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od o/68
do o/6/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do 6bbob.
MlD1UM1NT/) UNS1ONlD /lRO|1||
rednia liczba cakowita. Dla liczb ze znakiem zakres wynosi od 8o88608
do 8o8860/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0
do `6///`b.
1NT/) UNS1ONlD /lRO|1||
Standardowa liczba cakowita. Dla liczb ze znakiem zakres wynosi
od `4/48o648 do `4/48o64/. W przypadku liczb bez znaku zakres
obejmuje wartoci od 0 do 49496/9b.
1NTlOlR/) UNS1ONlD /lRO|1||
Jest to synonim dla typu 1NT.
B1O1NT/) UNS1ONlD /lRO|1||
Dua liczba cakowita. Dla liczb ze znakiem zakres wynosi
od 9oo/0o68b4//b808 do 9oo/0o68b4//b80/. W przypadku liczb
bez znaku zakres obejmuje wartoci od 0 do `8446/440/o/09bb`6`b.
4.1. Przegld typw dla kolumny 127
Oto kilka spraw, o ktrych naley wiedzie odnonie kolumn typu B1O1NT:
Wszystkie obliczenia wykonywane s przy uyciu wartoci typu B1O1NT
lub DOUB|l ze znakiem. Oznacza to, e duych liczb cakowitych bez
znaku, wikszych ni 9oo/0o68b4//b80/ (63 bity), mona uywa tylko
z funkcjami bitowymi! Niezastosowanie si do tej zasady moe doprowadzi
do uzyskania w wyniku liczby, ktrej kilka ostatnich cyfr jest bdnych
z powodu bdw w zaokrglaniu podczas konwersji wartoci B1O1NT
na DOUB|l.
MySQL 4.0 potrafi obsugiwa B1O1NT w nastpujcych przypadkach:
Podczas wykorzystywania liczb cakowitych do przechowywania
duych wartoci bez znaku w kolumnie typu B1O1NT.
W M1NPC\YCAMQN) lub MAXPC\YCAMQN), gdzie PC\YCAMQN odnosi si
do kolumny B1O1NT.
Podczas korzystania z operatorw (midzy innymi , , *), gdy oba
argumenty s liczbami cakowitymi.
Zawsze istnieje moliwo zapisania w kolumnie B1O1NT dokadnej wartoci
liczby cakowitej. Wystarczy zapisa j przy uyciu acucha. W takim
przypadku zostanie dokonana konwersja acucha na liczb; konwersja
nie bdzie wymaga poredniego etapu przeksztacajcego liczb na jej
odpowiednik o podwjnej precyzji.
Podczas korzystania z operatorw , i * stosowana jest arytmetyka
B1O1NT, jeli oba argumenty maj warto liczby cakowitej! To oznacza,
e pomnoenie dwch duych liczb cakowitych (lub wynikw funkcji,
ktra zwraca liczby cakowite) moe spowodowa nieoczekiwane
rezultaty, jeli wynik przekroczy liczb 9oo/0o68b4//b80/.
||OATR) UNS1ONlD /lRO|1||
Liczba zmiennoprzecinkowa. Parametr R oznacza precyzj i moe przyjmowa
warto od 0 do 14 dla liczb zmiennoprzecinkowych o dokadnoci do jednego
znaku i od 25 do 53 dla liczb zmiennoprzecinkowych o dokadnoci do dwch
znakw. To przypomina opisane poniej typy ||OAT i DOUB|l. Typ ||OATR)
ma ten sam zakres, jaki posiadaj odpowiadajce mu typy ||OAT i DOUB|l,
ale w jego przypadku niezdefiniowany jest maksymalny rozmiar wywietlania
i liczba miejsc po przecinku.
Od wersji 3.23 MySQL jest to prawdziwa warto zmiennoprzecinkowa.
W wersjach wczeniejszych liczba typu ||OATR) bya zawsze liczb o dwch
miejscach po przecinku.
Ta skadnia zostaa dodana w celu zachowania zgodnoci ze standardem ODBC.
Stosowanie typu ||OAT moe spowodowa wystpienie pewnych
nieoczekiwanych problemw, poniewa wszystkie obliczenia w MySQL
s wykonywane z podwjn precyzj patrz punkt A.1.7).
||OAT/, &) UNS1ONlD /lRO|1||
128 Rozdzia 4. Typy kolumn
Maa liczba zmiennoprzecinkowa (o dokadnoci do jednego znaku). Liczba
ta moe przyj wartoci: od o408o466lo8 do ``/b494ob`lo8, 0,
i od ``/b494ob`lo8 do o408o466lo8. Jeli podany jest atrybut UN1S1ONlD,
niedozwolone s wartoci ujemne. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ ||OAT bez argumentw
lub typ ||OATR) (gdzie Rjest liczb z zakresu od 0 do 24) oznacza liczb
zmiennoprzecinkow o pojedynczej precyzji.
DOUB|l/, &) UNS1ONlD /lRO|1||
Standardowa liczba zmiennoprzecinkowa (o dokadnoci do dwch
znakw). Liczba ta moe przyj wartoci: od `/9/69o`o486o`b/lo08
do b0/o8b8b0/0`4lo08, 0, i od b0/o8b8b0/0`4lo08
do `/9/69o`o486o`b/lo08. Jeli podany jest atrybut UN1S1ONlD, wartoci
ujemne s niedozwolone. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ DOUB|l
bez argumentw lub ||OATR) (gdzie R jest liczb z zakresu od 25 do 53)
oznacza liczb zmiennoprzecinkow o podwjnej precyzji.
DOUB|l PRlC1S1ON/, &) UNS1ONlD /lRO|1||
RlA|/, &) UNS1ONlD /lRO|1||
S to synonimy DOUB|l. Wyjtek: Jeli dla parametru s;_cce serwera
wczono opcj RlA|_AS_||OAT, synonimem ||OAT jest RlA|, a nie DOUB|l.
DlC1MA|/, &) UNS1ONlD /lRO|1||
Niezapakowana liczba staoprzecinkowa. Zachowanie kolumny tego typu
przypomina kolumn typu CHAR. Niezapakowana oznacza, e liczba jest
przechowywana w postaci acucha przy uyciu jednego znaku na kad cyfr
wartoci. Parametr / definiuje maksymaln liczb cyfr, a & liczb miejsc
po przecinku. W parametrze / nie s brane pod uwag: kropka dziesitna
(odpowiadajca w naszej notacji przecinkowi) i (dla liczb ujemnych) znak ,
cho jest dla nich zarezerwowane miejsce. Wartoci nie maj miejsc
po przecinku lub czci uamkowych, jeli & jest rwne 0. Maksymalny zakres
wartoci typu DlC1MA| jest taki sam, jak dla typu DOUB|l, ale rzeczywisty zakres
danej kolumny DlC1MA| moe by ograniczony przez wybr argumentw / i &.
Jeli podany jest atrybut UN1S1ONlD, wartoci ujemne s niedozwolone.
W przypadku braku argumentu &, domyln wartoci jest 0. Jeli pominity
jest parametr /, domyln wartoci jest 10.
W wersjach poprzedzajcych MySQL 3.23 argument / musi by wystarczajco
duy, by zawiera obszar potrzebny dla znaku i kropki dziesitnej.
DlC/,&) UNS1ONlD /lRO|1||
NUMlR1C/,&) UNS1ONlD /lRO|1||
|1XlD/, &) UNS1ONlD /lRO|1||
S to synonimy typu DlC1MA|.
W MySQL 4.1.0 dodano synonim |1XlD w celu osignicia kompatybilnoci
z innymi serwerami.
4.1. Przegld typw dla kolumny 129
4.1.2. Przegld typw zwizanych z dat i czasem
Poniej znajduje si podsumowanie typw kolumn przeznaczonych dla czasu i daty.
Dodatkowe informacje na ten temat mona znale w podrozdziale 4.3. Wymogi do-
tyczce pamici potrzebnej do przechowywania danych w kolumnach zostay podane
w podrozdziale 4.5.
DATl
Data. Obsugiwany zakres obejmuje daty od ``0000`0`` do `9999`o``.
W MySQL wartoci DATl wywietlane s w formacie `RRRRMMDD`, ale mona
przypisywa wartoci do kolumn DATl przy uyciu acuchw lub liczb.
DATlT1Ml
Kombinacja daty i czasu. Obsugiwany zakres obejmuje wartoci
od ``0000`0` 000000` do `9999`o` ob9b9`. W MySQL wartoci
DATlT1Ml wywietlane s w formacie `RRRRMMDD OOMMSS`, ale mona
przypisywa wartoci do kolumn DATlT1Ml przy uyciu acuchw lub liczb.
T1MlSTAMP/)
Znacznik czasu. Obsugiwany zakres rozpoczyna si od daty ``9/00`0``
i siga roku 0o/.
Kolumna typu T1MlSTAMP przydaje si do rejestracji daty i godziny operacji
wstawiania lub aktualizacji. Pierwszej kolumnie T1MlSTAMP w tabeli
automatycznie przypisywana jest data i czas ostatniej operacji, jeli tylko tych
wartoci nie wprowadzi rcznie uytkownik. Dowolnej kolumnie T1MlSTAMP
mona rwnie przypisa biec dat i godzin, wpisujc do niej warto NU||.
Od MySQL 4.1 wartoci T1MlSTAMP s zwracane w postaci acuchw
w formacie `RRRRMMDD OOMMSS`. Aby uzyska warto w postaci liczby,
naley doda do kolumn tego typu 0. Inne szerokoci wywietlania
znacznika czasu nie s obsugiwane.
W wersjach poprzedzajcych MySQL 4.1 wartoci T1MlSTAMP s wywietlane
w formacie RRRRMMDDOOMMSS, RRMMDDOOMMSS, RRRRMMDD lub RRMMDD w zalenoci
od tego, czy parametr / jest rwny 14 (albo go brak), 12, 8 lub 6. Mona jednak
przypisywa wartoci do kolumn T1MlSTAMP przy uyciu acuchw lub liczb.
Argument / wpywa tylko na sposb wywietlania kolumny T1MlSTAMP, a nie
na jej przechowywanie. Wartoci kolumny s zawsze zapisywane w czterech
bajtach. W MySQL od wersji 4.0.12 pojawia si opcja ne., dziki ktrej
mona zmieni dziaanie serwera, upodabniajc je do MySQL 4.1.
Naley odnotowa, e kolumny T1MlSTAMP/), gdzie /jest rwne 8 lub 14,
s traktowane jako liczby, natomiast reszta kolumn T1MlSTAMP/) jest
traktowana jako acuchy. Jest to rodzaj gwarancji, e uytkownik bdzie
mg wiarygodnie usuwa i przywraca tabele tego typu.
T1Ml
Godzina. Obsugiwany zakres obejmuje wartoci od `8o8b9b9`
do ` 8o8b9b9`. W MySQL wartoci T1Ml wywietlane s w formacie
` OOMMSS`, ale mona przypisa wartoci do kolumn T1Ml przy uyciu
zarwno acuchw, jak i liczb.
130 Rozdzia 4. Typy kolumn
YlAR|4)
Rok w formacie dwu- lub czterocyfrowym. Domylnym formatem jest rok
zapisany za pomoc czterech cyfr. W tym formacie dostpne wartoci nale
do przedziau od `90` do `bb oraz 0. W formacie dwucyfrowym wartoci
dopuszczalne to liczby z zakresu od /0 do 69, ktre reprezentuj daty od roku
1970 do 2069. W MySQL wartoci YlAR wywietlane s w formacie RRRR,
ale mona przypisa wartoci do kolumn YlAR przy uyciu tak acuchw,
jak i liczb. Typ YlAR jest niedostpny dla wersji wczeniejszych ni MySQL 3.22.
4.1.3. Przegld typw acuchowych
Poniej znajduje si przegld typw acuchowych. Dodatkowe informacje mona
znale w podrozdziale 4.4. Wymogi dotyczce pamici potrzebnej do przechowywa-
nia danych w kolumnach zostay podane w podrozdziale 4.5.
W niektrych przypadkach MySQL moe zmieni kolumn typu acuchowego na typ,
ktry bdzie si rni od zadeklarowanego w instrukcji CRlATl TAB|l lub A|TlR TAB|l.
Wicej informacji na ten temat znajduje si w podpunkcie 6.2.5.2.
Od wersji 4.1 w MySQL pojawia si zmiana, ktra wpywa na wiele typw kolumn typu
acuchowego. Definicja kolumn typu znakowego moe zawiera atrybut CHARACTlR
SlT, ktry okrela zestaw znakw i opcjonalnie porzdek sortowania. Dotyczy to typw
CHAR, VARCHAR, rnych typw TlXT oraz lNUM i SlT, na przykad:
CRF/TF T/B|F !
FNUMYCTVQ
YCTVQ|
1 lub 2 bajty w zalenoci od liczby wartoci wyliczenia
(maksymalnie 65 535)
SFTYCTVQ
YCTVQ|
1, 2, 3, 4 lub 8 bajtw w zalenoci od liczby elementw zestawu
(maksymalnie 64)
Typy VARCHAR, B|OB i TlXT maj zmienn dugo. Dla kadego ilo pamici potrzeb-
nej do przechowania wartoci bdzie zalee od faktycznej dugoci wartoci kolumny
(reprezentowanej w ostatniej tabeli przez .), a nie od maksymalnego moliwego roz-
miaru danego typu. Kolumna VARCHAR`0) na przykad moe przechowywa acuch
o maksymalnej dugoci 10 znakw. Faktyczna ilo wymaganej pamici to dugo
acucha (.) plus 1 bajt do zapisania dugoci acucha. Dla acucha `.|cc` parametr
. jest rwny 4, a wymagany rozmiar pamici to 5 bajtw.
Typy B|OB i TlXT wymagaj 1, 2, 3 lub 4 bajtw do zapisu dugoci wartoci kolumny
w zalenoci od maksymalnej moliwej dugoci tego typu (patrz punkt 4.4.2).
Rozmiar obiektu lNUM jest ustalany na podstawie liczby rnych wartoci wyliczenia.
Przy wyliczeniach do 255 moliwych wartoci uywany jest jeden bajt, a przy wyli-
czeniach do 65 535 wartoci uywane s 2 bajty (patrz punkt 4.4.3).
Rozmiar obiektu SlT jest okrelany przez liczb rnych elementw zestawu. Jeli ze-
staw ma rozmiar 0, obiekt zajmuje 0/).8 bajtw, ktr to warto zaokrgla si do
1, 2, 3, 4 lub 8 bajtw. Obiekt SlT moe mie do 64 elementw (patrz punkt 4.4.4).
4.6. Wybieranie odpowiedniego typu
dla kolumny
Aby jak najbardziej wydajnie korzysta z pamici, naley we wszystkich przypadkach
stara si stosowa typ, ktry bdzie jak najbardziej dokadny. Jeli na przykad w kolum-
nie liczb cakowitych bd przechowywane wartoci z zakresu od ` do 99999, najlep-
szym wyborem bdzie typ MlD1UM1NT UNS1ONlD. Ze wszystkich typw, ktre reprezentuj
wszystkie wymagane wartoci, zajmuje najmniej pamici.
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych 153
Powszechnym problemem jest dokadne przedstawianie wartoci walutowych. W MySQL
naley do tego uywa typu DlC1MA|, za pomoc ktrego wartoci zapisywane s w for-
mie acucha. Dziki temu nie traci si na dokadnoci (mimo to obliczenia z wartociami
DlC1MA| mog by wci wykonywane przy uyciu operacji dziaajcych na liczbach
z podwjn precyzj). Jeli dokadno nie jest zbyt wana, by moe wystarczajco
dobrym typem bdzie DOUB|l.
Aby uzyska wiksz dokadno, mona zawsze przeksztaci warto na typ stao-
przecinkowy, przechowywany w B1O1NT. Pozwoli to wykonywa wszystkie obliczenia
na liczbach cakowitych i tylko w razie potrzeby przeksztaca wynik z powrotem na
wartoci zmiennoprzecinkowe.
4.7. Wykorzystywanie typw kolumn
z innych mechanizmw baz danych
Aby uatwi uytkownikowi zastosowanie kodu pochodzcego od innych producentw,
moliwe jest odwzorowanie typw kolumn w sposb przedstawiony w poniszej tabeli.
Odwzorowania te upraszczaj operacj importu do MySQL definicji tabel z innych
mechanizmw baz danych:
Typ innych producentw Typ MySQL
BTN/RY/| C'/R/| BTN/RY
C'/R V/RYTN/| V/RC'/R/|
F|J/T4 F|J/T
F|J/T8 OJUB|F
TNT1 TTNYTNT
TNT SM/||TNT
TNT: MFOTUMTNT
TNT4 TNT
TNT8 BTTNT
|JN V/RBTN/RY MFOTUMB|JB
|JN V/RC'/R MFOTUMTFXT
|JN MFOTUMTFXT oc M,SJ| 410|
MTOO|FTNT MFOTUMTNT
V/RBTN/RY/| C'/R/| BTN/RY
Odwzorowanie typw kolumn jest wykonywane podczas tworzenia tabeli, po czym
oryginalne deklaracje typu zostaj usunite. Jeli uytkownik utworzy tabel z typami
stosowanymi przez innych producentw, po czym wyda polecenie DlSCR1Bl PC\YCA
VCDGNK, zostanie przedstawiona struktura tabeli z odpowiadajcymi im typami MySQL.
4 Spis treci
1.8.5. Rozbienoci midzy MySQL a standardem SQL ........................................ 60
1.8.6. Jak MySQL radzi sobie z ograniczeniami ................................................. 67
1.8.7. Znane bdy i projektowe braki w MySQL................................................ 69
Rozdzia 2. Struktura jzyka .............................................................................. 77
2.1. Literay................................................................................................................... 77
2.1.1. acuchy ................................................................................................... 77
2.1.2. Liczby........................................................................................................ 80
2.1.3. Wartoci szesnastkowe .............................................................................. 80
2.1.4. Wartoci logiczne ...................................................................................... 81
2.1.5. Wartoci NULL......................................................................................... 81
2.2. Nazwy baz danych, tabel, indeksw, kolumn i aliasw......................................... 81
2.2.1. Kwalifikatory identyfikatorw .................................................................. 83
2.2.2. Znaczenie wielkoci liter w nazwach identyfikatorw.............................. 83
2.3. Zmienne definiowane przez uytkownika.............................................................. 85
2.4. Zmienne systemowe............................................................................................... 87
2.4.1. Strukturalne zmienne systemowe .............................................................. 89
2.5. Skadnia komentarza .............................................................................................. 91
2.6. Traktowanie sw zastrzeonych w MySQL.......................................................... 92
Rozdzia 3. Obsuga zestaww znakw............................................................... 95
3.1. Oglne informacje o zestawach znakw i sortowaniu ........................................... 95
3.2. Zestawy znakw i porzdki sortowania w MySQL................................................ 96
3.3. Okrelanie domylnego zestawu znakw i sortowania........................................... 98
3.3.1. Zestaw znakw i sortowanie dla serwera................................................... 98
3.3.2. Zestaw znakw i sortowanie dla bazy danych........................................... 99
3.3.3. Zestaw znakw i sortowanie dla tabeli .................................................... 100
3.3.4. Zestaw znakw i sortowanie dla kolumny............................................... 100
3.3.5. Przykady przypisywania zestawu znakw i sortowania ......................... 101
3.3.6. Zestawy znakw i sortowanie dla poczenia .......................................... 102
3.3.7. Zestaw znakw i sortowanie dla acucha znakw.................................. 104
3.3.8. Wykorzystywanie COLLATE w instrukcjach SQL.................................... 105
3.3.9. Priorytet klauzuli COLLATE .................................................................. 106
3.3.10. Operator BINARY................................................................................... 106
3.3.11. Niektre przypadki specjalne, w ktrych trudno okreli sortowanie...... 106
3.3.12. Sortowania musz by odpowiednie dla danego zestawu znakw........... 107
3.3.13. Przykad wpywu porzdku sortowania ................................................... 108
3.4. Operacje, na ktre ma wpyw obsuga zestaww znakw.................................... 109
3.4.1. acuchy wyjciowe ............................................................................... 109
3.4.2. CONVERT()............................................................................................ 110
3.4.3. CAST() .................................................................................................... 110
3.4.4. Instrukcje SHOW .................................................................................... 111
3.5. Obsuga Unicode.................................................................................................. 112
3.6. UTF8 dla metadanych.......................................................................................... 113
3.7. Kompatybilno z innymi systemami zarzdzania baz danych .......................... 115
3.8. Nowy format pliku konfiguracji zestawu znakw................................................ 115
3.9. Narodowe zestawy znakw.................................................................................. 115
3.10. Aktualizacja zestaww znakw z MySQL 4.0..................................................... 116
3.10.1. Zestawy znakw w wersji 4.0 i odpowiadajce im w wersji 4.1 pary
skadajce si z zestawu znakw i sortowania......................................... 117
3.10.2. Przeksztacanie kolumn znakowych wersji 4.0 na format 4.1 ................. 118
3.11. Zestawy znakw i sortowania obsugiwane przez MySQL.................................. 118
3.11.1. Zestawy znakw standardu Unicode ....................................................... 119
3.11.2. Zestawy znakw zachodnioeuropejskich................................................. 120
3.11.3. Zestawy znakw dla Europy Centralnej .................................................. 121
Spis treci 5
3.11.4. Zestawy znakw poudniowoeuropejskich i rodkowowschodnich......... 122
3.11.5. Zestawy znakw regionu batyckiego...................................................... 123
3.11.6. Zestawy znakw dla cyrylicy................................................................... 123
3.11.7. Azjatyckie zestawy znakw..................................................................... 124
Rozdzia 4. Typy kolumn.................................................................................. 125
4.1. Przegld typw dla kolumny................................................................................ 126
4.1.1. Omwienie typw liczbowych ................................................................ 126
4.1.2. Przegld typw zwizanych z dat i czasem............................................ 129
4.1.3. Przegld typw acuchowych ................................................................ 130
4.2. Typy liczbowe...................................................................................................... 132
4.3. Typy zwizane z dat i czasem............................................................................ 135
4.3.1. Typy DATETIME, DATE i TIMESTAMP............................................. 137
4.3.2. Typ TIME................................................................................................ 142
4.3.3. Typ YEAR............................................................................................... 143
4.3.4. Problem roku 2000 a typy zwizane z dat.............................................. 144
4.4. Typy acuchowe ................................................................................................. 144
4.4.1. Typy CHAR i VARCHAR...................................................................... 144
4.4.2. Typy BLOB i TEXT................................................................................ 146
4.4.3. Typ Enum................................................................................................ 147
4.4.4. Typ SET .................................................................................................. 149
4.5. Rozmiar pamici potrzebnej dla typw kolumn................................................... 151
4.6. Wybieranie odpowiedniego typu dla kolumny..................................................... 152
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych ............... 153
Rozdzia 5. Funkcje i operatory........................................................................ 155
5.1. Operatory ............................................................................................................. 156
5.1.1. Nawiasy................................................................................................... 156
5.1.2. Operatory porwnania ............................................................................. 156
5.1.3. Operatory logiczne .................................................................................. 161
5.1.4. Operatory rozrniania wielkoci liter..................................................... 163
5.2. Funkcje kontroli przepywu ................................................................................. 163
5.3. Funkcje acuchowe............................................................................................. 166
5.3.1. Funkcje porwnywania acuchw.......................................................... 176
5.4. Funkcje liczbowe ................................................................................................. 178
5.4.1. Operatory arytmetyczne........................................................................... 178
5.4.2. Funkcje matematyczne ............................................................................ 180
5.5. Funkcje daty i godziny......................................................................................... 186
5.6. Funkcje obsugi wyszukiwania penotekstowego................................................. 202
5.6.1. Boolowskie wyszukiwania penotekstowe............................................... 205
5.6.2. Wyszukiwania penotekstowe z rozwijaniem zapytania .......................... 207
5.6.3. Ograniczenia dla wyszukiwania penotekstowego................................... 208
5.6.4. Modyfikowanie wyszukiwania penotekstowego MySQL ...................... 209
5.6.5. Lista rzeczy do zrobienia dla wyszukiwania penotekstowego................ 211
5.7. Funkcje konwersji typw..................................................................................... 211
5.8. Inne funkcje ......................................................................................................... 214
5.8.1. Funkcje bitowe ........................................................................................ 214
5.8.2. Funkcje szyfrujce................................................................................... 215
5.8.3. Funkcje informacyjne .............................................................................. 219
5.8.4. Funkcje rne .......................................................................................... 223
5.9. Funkcje i modyfikatory do zastosowania z klauzulami GROUP BY................... 226
5.9.1. Funkcje GROUP BY (agregujce)........................................................... 226
5.9.2. Modyfikatory GROUP BY...................................................................... 229
5.9.3. GROUP BY z ukrytymi polami............................................................... 232
6 Spis treci
Rozdzia 6. Skadnia instrukcji SQL .................................................................. 235
6.1. Instrukcje operujce na danych............................................................................ 235
6.1.1. Skadnia instrukcji DELETE................................................................... 235
6.1.2. Skadnia instrukcji DO ............................................................................ 238
6.1.3. Skadnia instrukcji HANDLER............................................................... 238
6.1.4. Skadnia instrukcji INSERT .................................................................... 240
6.1.5. Skadnia instrukcji LOAD DATA INFILE.............................................. 246
6.1.6. Skadnia instrukcji REPLACE................................................................. 255
6.1.7. Skadnia instrukcji SELECT.................................................................... 256
6.1.8. Skadnia podzapyta................................................................................ 265
6.1.9. Skadnia instrukcji TRUNCATE............................................................. 276
6.1.10. Skadnia instrukcji UPDATE................................................................... 276
6.2. Instrukcje definiowania danych ........................................................................... 278
6.2.1. Skadnia instrukcji ALTER DATABASE ............................................... 278
6.2.2. Skadnia instrukcji ALTER TABLE........................................................ 279
6.2.3. Skadnia instrukcji CREATE DATABASE............................................. 285
6.2.4. Skadnia instrukcji CREATE INDEX ..................................................... 285
6.2.5. Skadnia instrukcji CREATE TABLE..................................................... 287
6.2.6. Skadnia instrukcji DROP DATABASE.................................................. 301
6.2.7. Skadnia instrukcji DROP INDEX.......................................................... 302
6.2.8. Skadnia instrukcji DROP TABLE.......................................................... 302
6.2.9. Skadnia instrukcji RENAME TABLE.................................................... 303
6.3. Instrukcje programu MySQL............................................................................... 304
6.3.1. Skadnia instrukcji DESCRIBE
(odczytywanie informacji na temat kolumn) ........................................... 304
6.3.2. Skadnia instrukcji USE........................................................................... 304
6.4. Instrukcje obsugi transakcji i blokowania........................................................... 305
6.4.1. Skadnia instrukcji START TRANSACTION, COMMIT
oraz ROLLBACK.................................................................................... 305
6.4.2. Instrukcje niemoliwe do wycofania ....................................................... 306
6.4.3. Instrukcje wykonujce niejawne zatwierdzenie......................................... 306
6.4.4. Skadnia instrukcji SAVEPOINT i ROLLBACK TO SAVEPOINT....... 307
6.4.5. Skadnia instrukcji LOCK TABLES oraz UNLOCK TABLES .............. 307
6.4.6. Skadnia instrukcji SET TRANSACTION.............................................. 310
6.5. Administracja baz danych .................................................................................. 311
6.5.1. Instrukcje zarzdzajce kontami uytkownikw ....................................... 311
6.5.2. Instrukcje do konserwacji tabel ............................................................... 319
6.5.3. Skadnia instrukcji SET i SHOW ............................................................ 326
6.5.4. Inne instrukcje administracyjne ............................................................... 347
6.6. Instrukcje replikacji.............................................................................................. 352
6.6.1. Instrukcje SQL sterujce serwerem gwnym ......................................... 352
6.6.2. Instrukcje SQL sterujce serwerami podrzdnymi .................................. 354
Rozdzia 7. Rozszerzenia przestrzenne w MySQL............................................... 365
7.1. Wstp ................................................................................................................... 365
7.2. Model geometryczny OpenGIS............................................................................ 366
7.2.1. Hierarchia klas geometrycznych.............................................................. 366
7.2.2. Klasa Geometry ....................................................................................... 368
7.2.3. Klasa Point .............................................................................................. 369
7.2.4. Klasa Curve ............................................................................................. 369
7.2.5. Klasa LineString...................................................................................... 370
7.2.6. Klasa Surface........................................................................................... 370
7.2.7. Klasa Polygon.......................................................................................... 370
7.2.8. Klasa GeometryCollection....................................................................... 371
Spis treci 7
7.2.9. Klasa MultiPoint...................................................................................... 371
7.2.10. Klasa MultiCurve .................................................................................... 372
7.2.11. Klasa MultiLineString............................................................................. 372
7.2.12. Klasa MultiSurface .................................................................................. 372
7.2.13. Klasa MultiPolygon................................................................................. 373
7.3. Obsugiwane formaty danych przestrzennych...................................................... 373
7.3.1. Format tekstowy WKT............................................................................ 374
7.3.2. Format binarny WKB.............................................................................. 374
7.4. Tworzenie bazy danych z rozszerzeniami przestrzennymi................................... 375
7.4.1. Typy danych przestrzennych w MySQL ................................................. 375
7.4.2. Tworzenie wartoci przestrzennych......................................................... 376
7.4.3. Tworzenie kolumn przestrzennych.......................................................... 379
7.4.4. Wypenianie kolumn przestrzennych....................................................... 379
7.4.5. Pobieranie danych przestrzennych........................................................... 381
7.5. Analiza informacji przestrzennych....................................................................... 381
7.5.1. Funkcje konwersji formatw geometrycznych ........................................ 382
7.5.2. Funkcje klasy Geometry.......................................................................... 382
7.5.3. Funkcje tworzce nowe geometrie na podstawie istniejcych................. 388
7.5.4. Funkcje testujce relacje przestrzenne
midzy obiektami geometrycznymi ......................................................... 389
7.5.5. Relacje midzy minimalnymi prostoktami otaczajcymi
dla poszczeglnych geometrii.................................................................. 390
7.5.6. Funkcje sprawdzajce relacje przestrzenne pomidzy geometriami ........ 391
7.6. Optymalizacja analizy przestrzennej.................................................................... 392
7.6.1. Tworzenie indeksw przestrzennych....................................................... 392
7.6.2. Wykorzystanie indeksu przestrzennego................................................... 393
7.7. Zgodno MySQL ze standardem........................................................................ 395
7.7.1. Niezaimplementowane funkcje GIS ........................................................ 395
Rozdzia 8. Procedury i funkcje skadowane ..................................................... 397
8.1. Skadnia procedur skadowanych......................................................................... 398
8.1.1. Utrzymanie procedur skadowanych........................................................ 398
8.1.2. SHOW PROCEDURE STATUS oraz SHOW FUNCTION STATUS.... 401
8.1.3. Instrukcja CALL...................................................................................... 402
8.1.4. Instrukcja zoona BEGIN ... END.......................................................... 402
8.1.5. Instrukcja DECLARE.............................................................................. 402
8.1.6. Zmienne w procedurach skadowanych................................................... 402
8.1.7. Warunki i podprogramy obsugi .............................................................. 403
8.1.8. Kursory.................................................................................................... 405
8.1.9. Konstrukcje sterowania przepywem sterowania..................................... 406
Rozdzia 9. Obsuga bdw w MySQL .............................................................. 409
9.1. Zwracane bdy.................................................................................................... 409
9.2. Komunikaty bdw............................................................................................. 419
Dodatek A Rozwizywanie problemw z zapytaniami ........................................435
A.1. Zagadnienia zwizane z zapytaniami ................................................................... 435
A.1.1. Wielko liter przy wyszukiwaniu........................................................... 435
A.1.2. Problemy z kolumnami typu DATE ........................................................ 436
A.1.3. Problemy z wartociami NULL............................................................... 437
A.1.4. Problemy z synonimami kolumn ............................................................. 438
A.1.5. Bd wycofania dla tabel nietransakcyjnych............................................ 439
A.1.6. Usuwanie wierszy ze zwizanych tabel ................................................... 439
A.1.7. Rozwizywanie problemw z brakujcymi wierszami ............................ 440
A.1.8. Problemy z porwnaniami zmiennoprzecinkowymi................................ 441
8 Spis treci
A.2. Problemy zwizane z optymalizatorem................................................................ 443
A.3. Problemy z definicj tabel.................................................................................... 444
A.3.1. Problemy z instrukcj ALTER TABLE................................................... 444
A.3.2. Jak zmieni porzdek kolumn w tabeli .................................................... 445
A.3.3. Problemy z tabelami tymczasowymi ....................................................... 445
Dodatek B Wyraenia regularne w MySQL........................................................ 447
Skorowidz...................................................................................... 451
Rozdzia 4.
Typy kolumn
W MySQL dostpnych jest wiele typw danych, ktre mona pogrupowa w kilku pod-
stawowych kategoriach, takich jak typy liczbowe, typy zwizane z dat i czasem oraz
typy acuchowe. Na pocztku tego rozdziau przedstawiony zostanie przegld wspo-
mnianych przed chwil typw kolumn, po czym nastpi bardziej szczegowy opis ich
waciwoci z podziaem na poszczeglne kategorie i wreszcie zamieszczone zostanie
podsumowanie informacji dotyczcych wymaga co do rozmiaru pamici potrzebnej
do przechowania danej kolumny. Sam przegld jest z zamierzenia krtki. Dodatkowe
informacje o poszczeglnych typach kolumn, na przykad dopuszczalny format, w kt-
rym mona deklarowa wartoci, zostay uwzgldnione w szczegowych omwieniach.
Od wersji 4.1 MySQL rozpoznaje rozszerzenia do obsugi danych przestrzennych.
Informacje o typach przestrzennych znajduj si w rozdziale 7. tego podrcznika.
W czci opisu typw kolumn zastosowane zostay nastpujce reguy:
/
Wskazuje maksymalny rozmiar wywietlania liczby lub acucha.
Maksymalnym dopuszczalnym rozmiarem wywietlania jest 255.
&
Dotyczy typw zmiennoprzecinkowych i staoprzecinkowych. Okrela liczb
cyfr po kropce dziesitnej. Maksymalna dopuszczalna warto wynosi 30,
ale nie powinna przekracza /.
Nawiasy kwadratowe ( ) identyfikuj opcjonalne fragmenty deklaracji typu.
126 Rozdzia 4. Typy kolumn
4.1. Przegld typw dla kolumny
4.1.1. Omwienie typw liczbowych
Poniej znajduje si przegld liczbowych typw dla kolumn. Bardziej szczegowe
informacje mona znale w podrozdziale 4.2. Wymogi dotyczce rozmiaru pamici
potrzebnej do przechowywania kolumn znajduj si w podrozdziale 4.5.
Jeli dla kolumny liczbowej zostanie okrelony atrybut /lRO|1||, MySQL automatycznie
doda do kolumny atrybut UN1S1ONlD.
Naley uwaa podczas odejmowania dwch wartoci liczbowych, z ktrych jedna ma
typ UN1S1ONlD. Uzyskany wynik bdzie rwnie tego typu! patrz podrozdzia 5.7.
T1NY1NT/) UNS1ONlD /lRO|1||
Bardzo maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od `8
do `/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do bb.
B1T, BOO|, BOO|lAN
To s synonimy T1NY1NT`). Synonim BOO|lAN zosta dodany w MySQL 4.1.0.
Warto zerowa to inaczej fasz. Wartoci niezerowe traktowane s jako prawda.
W przyszoci wprowadzona zostanie pena, zgodna ze standardem SQL
obsuga typu boolowskiego.
SMA||1NT/) UNS1ONlD /lRO|1||
Maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od o/68
do o/6/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do 6bbob.
MlD1UM1NT/) UNS1ONlD /lRO|1||
rednia liczba cakowita. Dla liczb ze znakiem zakres wynosi od 8o88608
do 8o8860/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0
do `6///`b.
1NT/) UNS1ONlD /lRO|1||
Standardowa liczba cakowita. Dla liczb ze znakiem zakres wynosi
od `4/48o648 do `4/48o64/. W przypadku liczb bez znaku zakres
obejmuje wartoci od 0 do 49496/9b.
1NTlOlR/) UNS1ONlD /lRO|1||
Jest to synonim dla typu 1NT.
B1O1NT/) UNS1ONlD /lRO|1||
Dua liczba cakowita. Dla liczb ze znakiem zakres wynosi
od 9oo/0o68b4//b808 do 9oo/0o68b4//b80/. W przypadku liczb
bez znaku zakres obejmuje wartoci od 0 do `8446/440/o/09bb`6`b.
4.1. Przegld typw dla kolumny 127
Oto kilka spraw, o ktrych naley wiedzie odnonie kolumn typu B1O1NT:
Wszystkie obliczenia wykonywane s przy uyciu wartoci typu B1O1NT
lub DOUB|l ze znakiem. Oznacza to, e duych liczb cakowitych bez
znaku, wikszych ni 9oo/0o68b4//b80/ (63 bity), mona uywa tylko
z funkcjami bitowymi! Niezastosowanie si do tej zasady moe doprowadzi
do uzyskania w wyniku liczby, ktrej kilka ostatnich cyfr jest bdnych
z powodu bdw w zaokrglaniu podczas konwersji wartoci B1O1NT
na DOUB|l.
MySQL 4.0 potrafi obsugiwa B1O1NT w nastpujcych przypadkach:
Podczas wykorzystywania liczb cakowitych do przechowywania
duych wartoci bez znaku w kolumnie typu B1O1NT.
W M1NPC\YCAMQN) lub MAXPC\YCAMQN), gdzie PC\YCAMQN odnosi si
do kolumny B1O1NT.
Podczas korzystania z operatorw (midzy innymi , , *), gdy oba
argumenty s liczbami cakowitymi.
Zawsze istnieje moliwo zapisania w kolumnie B1O1NT dokadnej wartoci
liczby cakowitej. Wystarczy zapisa j przy uyciu acucha. W takim
przypadku zostanie dokonana konwersja acucha na liczb; konwersja
nie bdzie wymaga poredniego etapu przeksztacajcego liczb na jej
odpowiednik o podwjnej precyzji.
Podczas korzystania z operatorw , i * stosowana jest arytmetyka
B1O1NT, jeli oba argumenty maj warto liczby cakowitej! To oznacza,
e pomnoenie dwch duych liczb cakowitych (lub wynikw funkcji,
ktra zwraca liczby cakowite) moe spowodowa nieoczekiwane
rezultaty, jeli wynik przekroczy liczb 9oo/0o68b4//b80/.
||OATR) UNS1ONlD /lRO|1||
Liczba zmiennoprzecinkowa. Parametr R oznacza precyzj i moe przyjmowa
warto od 0 do 14 dla liczb zmiennoprzecinkowych o dokadnoci do jednego
znaku i od 25 do 53 dla liczb zmiennoprzecinkowych o dokadnoci do dwch
znakw. To przypomina opisane poniej typy ||OAT i DOUB|l. Typ ||OATR)
ma ten sam zakres, jaki posiadaj odpowiadajce mu typy ||OAT i DOUB|l,
ale w jego przypadku niezdefiniowany jest maksymalny rozmiar wywietlania
i liczba miejsc po przecinku.
Od wersji 3.23 MySQL jest to prawdziwa warto zmiennoprzecinkowa.
W wersjach wczeniejszych liczba typu ||OATR) bya zawsze liczb o dwch
miejscach po przecinku.
Ta skadnia zostaa dodana w celu zachowania zgodnoci ze standardem ODBC.
Stosowanie typu ||OAT moe spowodowa wystpienie pewnych
nieoczekiwanych problemw, poniewa wszystkie obliczenia w MySQL
s wykonywane z podwjn precyzj patrz punkt A.1.7).
||OAT/, &) UNS1ONlD /lRO|1||
128 Rozdzia 4. Typy kolumn
Maa liczba zmiennoprzecinkowa (o dokadnoci do jednego znaku). Liczba
ta moe przyj wartoci: od o408o466lo8 do ``/b494ob`lo8, 0,
i od ``/b494ob`lo8 do o408o466lo8. Jeli podany jest atrybut UN1S1ONlD,
niedozwolone s wartoci ujemne. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ ||OAT bez argumentw
lub typ ||OATR) (gdzie Rjest liczb z zakresu od 0 do 24) oznacza liczb
zmiennoprzecinkow o pojedynczej precyzji.
DOUB|l/, &) UNS1ONlD /lRO|1||
Standardowa liczba zmiennoprzecinkowa (o dokadnoci do dwch
znakw). Liczba ta moe przyj wartoci: od `/9/69o`o486o`b/lo08
do b0/o8b8b0/0`4lo08, 0, i od b0/o8b8b0/0`4lo08
do `/9/69o`o486o`b/lo08. Jeli podany jest atrybut UN1S1ONlD, wartoci
ujemne s niedozwolone. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ DOUB|l
bez argumentw lub ||OATR) (gdzie R jest liczb z zakresu od 25 do 53)
oznacza liczb zmiennoprzecinkow o podwjnej precyzji.
DOUB|l PRlC1S1ON/, &) UNS1ONlD /lRO|1||
RlA|/, &) UNS1ONlD /lRO|1||
S to synonimy DOUB|l. Wyjtek: Jeli dla parametru s;_cce serwera
wczono opcj RlA|_AS_||OAT, synonimem ||OAT jest RlA|, a nie DOUB|l.
DlC1MA|/, &) UNS1ONlD /lRO|1||
Niezapakowana liczba staoprzecinkowa. Zachowanie kolumny tego typu
przypomina kolumn typu CHAR. Niezapakowana oznacza, e liczba jest
przechowywana w postaci acucha przy uyciu jednego znaku na kad cyfr
wartoci. Parametr / definiuje maksymaln liczb cyfr, a & liczb miejsc
po przecinku. W parametrze / nie s brane pod uwag: kropka dziesitna
(odpowiadajca w naszej notacji przecinkowi) i (dla liczb ujemnych) znak ,
cho jest dla nich zarezerwowane miejsce. Wartoci nie maj miejsc
po przecinku lub czci uamkowych, jeli & jest rwne 0. Maksymalny zakres
wartoci typu DlC1MA| jest taki sam, jak dla typu DOUB|l, ale rzeczywisty zakres
danej kolumny DlC1MA| moe by ograniczony przez wybr argumentw / i &.
Jeli podany jest atrybut UN1S1ONlD, wartoci ujemne s niedozwolone.
W przypadku braku argumentu &, domyln wartoci jest 0. Jeli pominity
jest parametr /, domyln wartoci jest 10.
W wersjach poprzedzajcych MySQL 3.23 argument / musi by wystarczajco
duy, by zawiera obszar potrzebny dla znaku i kropki dziesitnej.
DlC/,&) UNS1ONlD /lRO|1||
NUMlR1C/,&) UNS1ONlD /lRO|1||
|1XlD/, &) UNS1ONlD /lRO|1||
S to synonimy typu DlC1MA|.
W MySQL 4.1.0 dodano synonim |1XlD w celu osignicia kompatybilnoci
z innymi serwerami.
4.1. Przegld typw dla kolumny 129
4.1.2. Przegld typw zwizanych z dat i czasem
Poniej znajduje si podsumowanie typw kolumn przeznaczonych dla czasu i daty.
Dodatkowe informacje na ten temat mona znale w podrozdziale 4.3. Wymogi do-
tyczce pamici potrzebnej do przechowywania danych w kolumnach zostay podane
w podrozdziale 4.5.
DATl
Data. Obsugiwany zakres obejmuje daty od ``0000`0`` do `9999`o``.
W MySQL wartoci DATl wywietlane s w formacie `RRRRMMDD`, ale mona
przypisywa wartoci do kolumn DATl przy uyciu acuchw lub liczb.
DATlT1Ml
Kombinacja daty i czasu. Obsugiwany zakres obejmuje wartoci
od ``0000`0` 000000` do `9999`o` ob9b9`. W MySQL wartoci
DATlT1Ml wywietlane s w formacie `RRRRMMDD OOMMSS`, ale mona
przypisywa wartoci do kolumn DATlT1Ml przy uyciu acuchw lub liczb.
T1MlSTAMP/)
Znacznik czasu. Obsugiwany zakres rozpoczyna si od daty ``9/00`0``
i siga roku 0o/.
Kolumna typu T1MlSTAMP przydaje si do rejestracji daty i godziny operacji
wstawiania lub aktualizacji. Pierwszej kolumnie T1MlSTAMP w tabeli
automatycznie przypisywana jest data i czas ostatniej operacji, jeli tylko tych
wartoci nie wprowadzi rcznie uytkownik. Dowolnej kolumnie T1MlSTAMP
mona rwnie przypisa biec dat i godzin, wpisujc do niej warto NU||.
Od MySQL 4.1 wartoci T1MlSTAMP s zwracane w postaci acuchw
w formacie `RRRRMMDD OOMMSS`. Aby uzyska warto w postaci liczby,
naley doda do kolumn tego typu 0. Inne szerokoci wywietlania
znacznika czasu nie s obsugiwane.
W wersjach poprzedzajcych MySQL 4.1 wartoci T1MlSTAMP s wywietlane
w formacie RRRRMMDDOOMMSS, RRMMDDOOMMSS, RRRRMMDD lub RRMMDD w zalenoci
od tego, czy parametr / jest rwny 14 (albo go brak), 12, 8 lub 6. Mona jednak
przypisywa wartoci do kolumn T1MlSTAMP przy uyciu acuchw lub liczb.
Argument / wpywa tylko na sposb wywietlania kolumny T1MlSTAMP, a nie
na jej przechowywanie. Wartoci kolumny s zawsze zapisywane w czterech
bajtach. W MySQL od wersji 4.0.12 pojawia si opcja ne., dziki ktrej
mona zmieni dziaanie serwera, upodabniajc je do MySQL 4.1.
Naley odnotowa, e kolumny T1MlSTAMP/), gdzie /jest rwne 8 lub 14,
s traktowane jako liczby, natomiast reszta kolumn T1MlSTAMP/) jest
traktowana jako acuchy. Jest to rodzaj gwarancji, e uytkownik bdzie
mg wiarygodnie usuwa i przywraca tabele tego typu.
T1Ml
Godzina. Obsugiwany zakres obejmuje wartoci od `8o8b9b9`
do ` 8o8b9b9`. W MySQL wartoci T1Ml wywietlane s w formacie
` OOMMSS`, ale mona przypisa wartoci do kolumn T1Ml przy uyciu
zarwno acuchw, jak i liczb.
130 Rozdzia 4. Typy kolumn
YlAR|4)
Rok w formacie dwu- lub czterocyfrowym. Domylnym formatem jest rok
zapisany za pomoc czterech cyfr. W tym formacie dostpne wartoci nale
do przedziau od `90` do `bb oraz 0. W formacie dwucyfrowym wartoci
dopuszczalne to liczby z zakresu od /0 do 69, ktre reprezentuj daty od roku
1970 do 2069. W MySQL wartoci YlAR wywietlane s w formacie RRRR,
ale mona przypisa wartoci do kolumn YlAR przy uyciu tak acuchw,
jak i liczb. Typ YlAR jest niedostpny dla wersji wczeniejszych ni MySQL 3.22.
4.1.3. Przegld typw acuchowych
Poniej znajduje si przegld typw acuchowych. Dodatkowe informacje mona
znale w podrozdziale 4.4. Wymogi dotyczce pamici potrzebnej do przechowywa-
nia danych w kolumnach zostay podane w podrozdziale 4.5.
W niektrych przypadkach MySQL moe zmieni kolumn typu acuchowego na typ,
ktry bdzie si rni od zadeklarowanego w instrukcji CRlATl TAB|l lub A|TlR TAB|l.
Wicej informacji na ten temat znajduje si w podpunkcie 6.2.5.2.
Od wersji 4.1 w MySQL pojawia si zmiana, ktra wpywa na wiele typw kolumn typu
acuchowego. Definicja kolumn typu znakowego moe zawiera atrybut CHARACTlR
SlT, ktry okrela zestaw znakw i opcjonalnie porzdek sortowania. Dotyczy to typw
CHAR, VARCHAR, rnych typw TlXT oraz lNUM i SlT, na przykad:
CRF/TF T/B|F !
FNUMYCTVQ
YCTVQ|
1 lub 2 bajty w zalenoci od liczby wartoci wyliczenia
(maksymalnie 65 535)
SFTYCTVQ
YCTVQ|
1, 2, 3, 4 lub 8 bajtw w zalenoci od liczby elementw zestawu
(maksymalnie 64)
Typy VARCHAR, B|OB i TlXT maj zmienn dugo. Dla kadego ilo pamici potrzeb-
nej do przechowania wartoci bdzie zalee od faktycznej dugoci wartoci kolumny
(reprezentowanej w ostatniej tabeli przez .), a nie od maksymalnego moliwego roz-
miaru danego typu. Kolumna VARCHAR`0) na przykad moe przechowywa acuch
o maksymalnej dugoci 10 znakw. Faktyczna ilo wymaganej pamici to dugo
acucha (.) plus 1 bajt do zapisania dugoci acucha. Dla acucha `.|cc` parametr
. jest rwny 4, a wymagany rozmiar pamici to 5 bajtw.
Typy B|OB i TlXT wymagaj 1, 2, 3 lub 4 bajtw do zapisu dugoci wartoci kolumny
w zalenoci od maksymalnej moliwej dugoci tego typu (patrz punkt 4.4.2).
Rozmiar obiektu lNUM jest ustalany na podstawie liczby rnych wartoci wyliczenia.
Przy wyliczeniach do 255 moliwych wartoci uywany jest jeden bajt, a przy wyli-
czeniach do 65 535 wartoci uywane s 2 bajty (patrz punkt 4.4.3).
Rozmiar obiektu SlT jest okrelany przez liczb rnych elementw zestawu. Jeli ze-
staw ma rozmiar 0, obiekt zajmuje 0/).8 bajtw, ktr to warto zaokrgla si do
1, 2, 3, 4 lub 8 bajtw. Obiekt SlT moe mie do 64 elementw (patrz punkt 4.4.4).
4.6. Wybieranie odpowiedniego typu
dla kolumny
Aby jak najbardziej wydajnie korzysta z pamici, naley we wszystkich przypadkach
stara si stosowa typ, ktry bdzie jak najbardziej dokadny. Jeli na przykad w kolum-
nie liczb cakowitych bd przechowywane wartoci z zakresu od ` do 99999, najlep-
szym wyborem bdzie typ MlD1UM1NT UNS1ONlD. Ze wszystkich typw, ktre reprezentuj
wszystkie wymagane wartoci, zajmuje najmniej pamici.
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych 153
Powszechnym problemem jest dokadne przedstawianie wartoci walutowych. W MySQL
naley do tego uywa typu DlC1MA|, za pomoc ktrego wartoci zapisywane s w for-
mie acucha. Dziki temu nie traci si na dokadnoci (mimo to obliczenia z wartociami
DlC1MA| mog by wci wykonywane przy uyciu operacji dziaajcych na liczbach
z podwjn precyzj). Jeli dokadno nie jest zbyt wana, by moe wystarczajco
dobrym typem bdzie DOUB|l.
Aby uzyska wiksz dokadno, mona zawsze przeksztaci warto na typ stao-
przecinkowy, przechowywany w B1O1NT. Pozwoli to wykonywa wszystkie obliczenia
na liczbach cakowitych i tylko w razie potrzeby przeksztaca wynik z powrotem na
wartoci zmiennoprzecinkowe.
4.7. Wykorzystywanie typw kolumn
z innych mechanizmw baz danych
Aby uatwi uytkownikowi zastosowanie kodu pochodzcego od innych producentw,
moliwe jest odwzorowanie typw kolumn w sposb przedstawiony w poniszej tabeli.
Odwzorowania te upraszczaj operacj importu do MySQL definicji tabel z innych
mechanizmw baz danych:
Typ innych producentw Typ MySQL
BTN/RY/| C'/R/| BTN/RY
C'/R V/RYTN/| V/RC'/R/|
F|J/T4 F|J/T
F|J/T8 OJUB|F
TNT1 TTNYTNT
TNT SM/||TNT
TNT: MFOTUMTNT
TNT4 TNT
TNT8 BTTNT
|JN V/RBTN/RY MFOTUMB|JB
|JN V/RC'/R MFOTUMTFXT
|JN MFOTUMTFXT oc M,SJ| 410|
MTOO|FTNT MFOTUMTNT
V/RBTN/RY/| C'/R/| BTN/RY
Odwzorowanie typw kolumn jest wykonywane podczas tworzenia tabeli, po czym
oryginalne deklaracje typu zostaj usunite. Jeli uytkownik utworzy tabel z typami
stosowanymi przez innych producentw, po czym wyda polecenie DlSCR1Bl PC\YCA
VCDGNK, zostanie przedstawiona struktura tabeli z odpowiadajcymi im typami MySQL.
4 Spis treci
1.8.5. Rozbienoci midzy MySQL a standardem SQL ........................................ 60
1.8.6. Jak MySQL radzi sobie z ograniczeniami ................................................. 67
1.8.7. Znane bdy i projektowe braki w MySQL................................................ 69
Rozdzia 2. Struktura jzyka .............................................................................. 77
2.1. Literay................................................................................................................... 77
2.1.1. acuchy ................................................................................................... 77
2.1.2. Liczby........................................................................................................ 80
2.1.3. Wartoci szesnastkowe .............................................................................. 80
2.1.4. Wartoci logiczne ...................................................................................... 81
2.1.5. Wartoci NULL......................................................................................... 81
2.2. Nazwy baz danych, tabel, indeksw, kolumn i aliasw......................................... 81
2.2.1. Kwalifikatory identyfikatorw .................................................................. 83
2.2.2. Znaczenie wielkoci liter w nazwach identyfikatorw.............................. 83
2.3. Zmienne definiowane przez uytkownika.............................................................. 85
2.4. Zmienne systemowe............................................................................................... 87
2.4.1. Strukturalne zmienne systemowe .............................................................. 89
2.5. Skadnia komentarza .............................................................................................. 91
2.6. Traktowanie sw zastrzeonych w MySQL.......................................................... 92
Rozdzia 3. Obsuga zestaww znakw............................................................... 95
3.1. Oglne informacje o zestawach znakw i sortowaniu ........................................... 95
3.2. Zestawy znakw i porzdki sortowania w MySQL................................................ 96
3.3. Okrelanie domylnego zestawu znakw i sortowania........................................... 98
3.3.1. Zestaw znakw i sortowanie dla serwera................................................... 98
3.3.2. Zestaw znakw i sortowanie dla bazy danych........................................... 99
3.3.3. Zestaw znakw i sortowanie dla tabeli .................................................... 100
3.3.4. Zestaw znakw i sortowanie dla kolumny............................................... 100
3.3.5. Przykady przypisywania zestawu znakw i sortowania ......................... 101
3.3.6. Zestawy znakw i sortowanie dla poczenia .......................................... 102
3.3.7. Zestaw znakw i sortowanie dla acucha znakw.................................. 104
3.3.8. Wykorzystywanie COLLATE w instrukcjach SQL.................................... 105
3.3.9. Priorytet klauzuli COLLATE .................................................................. 106
3.3.10. Operator BINARY................................................................................... 106
3.3.11. Niektre przypadki specjalne, w ktrych trudno okreli sortowanie...... 106
3.3.12. Sortowania musz by odpowiednie dla danego zestawu znakw........... 107
3.3.13. Przykad wpywu porzdku sortowania ................................................... 108
3.4. Operacje, na ktre ma wpyw obsuga zestaww znakw.................................... 109
3.4.1. acuchy wyjciowe ............................................................................... 109
3.4.2. CONVERT()............................................................................................ 110
3.4.3. CAST() .................................................................................................... 110
3.4.4. Instrukcje SHOW .................................................................................... 111
3.5. Obsuga Unicode.................................................................................................. 112
3.6. UTF8 dla metadanych.......................................................................................... 113
3.7. Kompatybilno z innymi systemami zarzdzania baz danych .......................... 115
3.8. Nowy format pliku konfiguracji zestawu znakw................................................ 115
3.9. Narodowe zestawy znakw.................................................................................. 115
3.10. Aktualizacja zestaww znakw z MySQL 4.0..................................................... 116
3.10.1. Zestawy znakw w wersji 4.0 i odpowiadajce im w wersji 4.1 pary
skadajce si z zestawu znakw i sortowania......................................... 117
3.10.2. Przeksztacanie kolumn znakowych wersji 4.0 na format 4.1 ................. 118
3.11. Zestawy znakw i sortowania obsugiwane przez MySQL.................................. 118
3.11.1. Zestawy znakw standardu Unicode ....................................................... 119
3.11.2. Zestawy znakw zachodnioeuropejskich................................................. 120
3.11.3. Zestawy znakw dla Europy Centralnej .................................................. 121
Spis treci 5
3.11.4. Zestawy znakw poudniowoeuropejskich i rodkowowschodnich......... 122
3.11.5. Zestawy znakw regionu batyckiego...................................................... 123
3.11.6. Zestawy znakw dla cyrylicy................................................................... 123
3.11.7. Azjatyckie zestawy znakw..................................................................... 124
Rozdzia 4. Typy kolumn.................................................................................. 125
4.1. Przegld typw dla kolumny................................................................................ 126
4.1.1. Omwienie typw liczbowych ................................................................ 126
4.1.2. Przegld typw zwizanych z dat i czasem............................................ 129
4.1.3. Przegld typw acuchowych ................................................................ 130
4.2. Typy liczbowe...................................................................................................... 132
4.3. Typy zwizane z dat i czasem............................................................................ 135
4.3.1. Typy DATETIME, DATE i TIMESTAMP............................................. 137
4.3.2. Typ TIME................................................................................................ 142
4.3.3. Typ YEAR............................................................................................... 143
4.3.4. Problem roku 2000 a typy zwizane z dat.............................................. 144
4.4. Typy acuchowe ................................................................................................. 144
4.4.1. Typy CHAR i VARCHAR...................................................................... 144
4.4.2. Typy BLOB i TEXT................................................................................ 146
4.4.3. Typ Enum................................................................................................ 147
4.4.4. Typ SET .................................................................................................. 149
4.5. Rozmiar pamici potrzebnej dla typw kolumn................................................... 151
4.6. Wybieranie odpowiedniego typu dla kolumny..................................................... 152
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych ............... 153
Rozdzia 5. Funkcje i operatory........................................................................ 155
5.1. Operatory ............................................................................................................. 156
5.1.1. Nawiasy................................................................................................... 156
5.1.2. Operatory porwnania ............................................................................. 156
5.1.3. Operatory logiczne .................................................................................. 161
5.1.4. Operatory rozrniania wielkoci liter..................................................... 163
5.2. Funkcje kontroli przepywu ................................................................................. 163
5.3. Funkcje acuchowe............................................................................................. 166
5.3.1. Funkcje porwnywania acuchw.......................................................... 176
5.4. Funkcje liczbowe ................................................................................................. 178
5.4.1. Operatory arytmetyczne........................................................................... 178
5.4.2. Funkcje matematyczne ............................................................................ 180
5.5. Funkcje daty i godziny......................................................................................... 186
5.6. Funkcje obsugi wyszukiwania penotekstowego................................................. 202
5.6.1. Boolowskie wyszukiwania penotekstowe............................................... 205
5.6.2. Wyszukiwania penotekstowe z rozwijaniem zapytania .......................... 207
5.6.3. Ograniczenia dla wyszukiwania penotekstowego................................... 208
5.6.4. Modyfikowanie wyszukiwania penotekstowego MySQL ...................... 209
5.6.5. Lista rzeczy do zrobienia dla wyszukiwania penotekstowego................ 211
5.7. Funkcje konwersji typw..................................................................................... 211
5.8. Inne funkcje ......................................................................................................... 214
5.8.1. Funkcje bitowe ........................................................................................ 214
5.8.2. Funkcje szyfrujce................................................................................... 215
5.8.3. Funkcje informacyjne .............................................................................. 219
5.8.4. Funkcje rne .......................................................................................... 223
5.9. Funkcje i modyfikatory do zastosowania z klauzulami GROUP BY................... 226
5.9.1. Funkcje GROUP BY (agregujce)........................................................... 226
5.9.2. Modyfikatory GROUP BY...................................................................... 229
5.9.3. GROUP BY z ukrytymi polami............................................................... 232
6 Spis treci
Rozdzia 6. Skadnia instrukcji SQL .................................................................. 235
6.1. Instrukcje operujce na danych............................................................................ 235
6.1.1. Skadnia instrukcji DELETE................................................................... 235
6.1.2. Skadnia instrukcji DO ............................................................................ 238
6.1.3. Skadnia instrukcji HANDLER............................................................... 238
6.1.4. Skadnia instrukcji INSERT .................................................................... 240
6.1.5. Skadnia instrukcji LOAD DATA INFILE.............................................. 246
6.1.6. Skadnia instrukcji REPLACE................................................................. 255
6.1.7. Skadnia instrukcji SELECT.................................................................... 256
6.1.8. Skadnia podzapyta................................................................................ 265
6.1.9. Skadnia instrukcji TRUNCATE............................................................. 276
6.1.10. Skadnia instrukcji UPDATE................................................................... 276
6.2. Instrukcje definiowania danych ........................................................................... 278
6.2.1. Skadnia instrukcji ALTER DATABASE ............................................... 278
6.2.2. Skadnia instrukcji ALTER TABLE........................................................ 279
6.2.3. Skadnia instrukcji CREATE DATABASE............................................. 285
6.2.4. Skadnia instrukcji CREATE INDEX ..................................................... 285
6.2.5. Skadnia instrukcji CREATE TABLE..................................................... 287
6.2.6. Skadnia instrukcji DROP DATABASE.................................................. 301
6.2.7. Skadnia instrukcji DROP INDEX.......................................................... 302
6.2.8. Skadnia instrukcji DROP TABLE.......................................................... 302
6.2.9. Skadnia instrukcji RENAME TABLE.................................................... 303
6.3. Instrukcje programu MySQL............................................................................... 304
6.3.1. Skadnia instrukcji DESCRIBE
(odczytywanie informacji na temat kolumn) ........................................... 304
6.3.2. Skadnia instrukcji USE........................................................................... 304
6.4. Instrukcje obsugi transakcji i blokowania........................................................... 305
6.4.1. Skadnia instrukcji START TRANSACTION, COMMIT
oraz ROLLBACK.................................................................................... 305
6.4.2. Instrukcje niemoliwe do wycofania ....................................................... 306
6.4.3. Instrukcje wykonujce niejawne zatwierdzenie......................................... 306
6.4.4. Skadnia instrukcji SAVEPOINT i ROLLBACK TO SAVEPOINT....... 307
6.4.5. Skadnia instrukcji LOCK TABLES oraz UNLOCK TABLES .............. 307
6.4.6. Skadnia instrukcji SET TRANSACTION.............................................. 310
6.5. Administracja baz danych .................................................................................. 311
6.5.1. Instrukcje zarzdzajce kontami uytkownikw ....................................... 311
6.5.2. Instrukcje do konserwacji tabel ............................................................... 319
6.5.3. Skadnia instrukcji SET i SHOW ............................................................ 326
6.5.4. Inne instrukcje administracyjne ............................................................... 347
6.6. Instrukcje replikacji.............................................................................................. 352
6.6.1. Instrukcje SQL sterujce serwerem gwnym ......................................... 352
6.6.2. Instrukcje SQL sterujce serwerami podrzdnymi .................................. 354
Rozdzia 7. Rozszerzenia przestrzenne w MySQL............................................... 365
7.1. Wstp ................................................................................................................... 365
7.2. Model geometryczny OpenGIS............................................................................ 366
7.2.1. Hierarchia klas geometrycznych.............................................................. 366
7.2.2. Klasa Geometry ....................................................................................... 368
7.2.3. Klasa Point .............................................................................................. 369
7.2.4. Klasa Curve ............................................................................................. 369
7.2.5. Klasa LineString...................................................................................... 370
7.2.6. Klasa Surface........................................................................................... 370
7.2.7. Klasa Polygon.......................................................................................... 370
7.2.8. Klasa GeometryCollection....................................................................... 371
Spis treci 7
7.2.9. Klasa MultiPoint...................................................................................... 371
7.2.10. Klasa MultiCurve .................................................................................... 372
7.2.11. Klasa MultiLineString............................................................................. 372
7.2.12. Klasa MultiSurface .................................................................................. 372
7.2.13. Klasa MultiPolygon................................................................................. 373
7.3. Obsugiwane formaty danych przestrzennych...................................................... 373
7.3.1. Format tekstowy WKT............................................................................ 374
7.3.2. Format binarny WKB.............................................................................. 374
7.4. Tworzenie bazy danych z rozszerzeniami przestrzennymi................................... 375
7.4.1. Typy danych przestrzennych w MySQL ................................................. 375
7.4.2. Tworzenie wartoci przestrzennych......................................................... 376
7.4.3. Tworzenie kolumn przestrzennych.......................................................... 379
7.4.4. Wypenianie kolumn przestrzennych....................................................... 379
7.4.5. Pobieranie danych przestrzennych........................................................... 381
7.5. Analiza informacji przestrzennych....................................................................... 381
7.5.1. Funkcje konwersji formatw geometrycznych ........................................ 382
7.5.2. Funkcje klasy Geometry.......................................................................... 382
7.5.3. Funkcje tworzce nowe geometrie na podstawie istniejcych................. 388
7.5.4. Funkcje testujce relacje przestrzenne
midzy obiektami geometrycznymi ......................................................... 389
7.5.5. Relacje midzy minimalnymi prostoktami otaczajcymi
dla poszczeglnych geometrii.................................................................. 390
7.5.6. Funkcje sprawdzajce relacje przestrzenne pomidzy geometriami ........ 391
7.6. Optymalizacja analizy przestrzennej.................................................................... 392
7.6.1. Tworzenie indeksw przestrzennych....................................................... 392
7.6.2. Wykorzystanie indeksu przestrzennego................................................... 393
7.7. Zgodno MySQL ze standardem........................................................................ 395
7.7.1. Niezaimplementowane funkcje GIS ........................................................ 395
Rozdzia 8. Procedury i funkcje skadowane ..................................................... 397
8.1. Skadnia procedur skadowanych......................................................................... 398
8.1.1. Utrzymanie procedur skadowanych........................................................ 398
8.1.2. SHOW PROCEDURE STATUS oraz SHOW FUNCTION STATUS.... 401
8.1.3. Instrukcja CALL...................................................................................... 402
8.1.4. Instrukcja zoona BEGIN ... END.......................................................... 402
8.1.5. Instrukcja DECLARE.............................................................................. 402
8.1.6. Zmienne w procedurach skadowanych................................................... 402
8.1.7. Warunki i podprogramy obsugi .............................................................. 403
8.1.8. Kursory.................................................................................................... 405
8.1.9. Konstrukcje sterowania przepywem sterowania..................................... 406
Rozdzia 9. Obsuga bdw w MySQL .............................................................. 409
9.1. Zwracane bdy.................................................................................................... 409
9.2. Komunikaty bdw............................................................................................. 419
Dodatek A Rozwizywanie problemw z zapytaniami ........................................435
A.1. Zagadnienia zwizane z zapytaniami ................................................................... 435
A.1.1. Wielko liter przy wyszukiwaniu........................................................... 435
A.1.2. Problemy z kolumnami typu DATE ........................................................ 436
A.1.3. Problemy z wartociami NULL............................................................... 437
A.1.4. Problemy z synonimami kolumn ............................................................. 438
A.1.5. Bd wycofania dla tabel nietransakcyjnych............................................ 439
A.1.6. Usuwanie wierszy ze zwizanych tabel ................................................... 439
A.1.7. Rozwizywanie problemw z brakujcymi wierszami ............................ 440
A.1.8. Problemy z porwnaniami zmiennoprzecinkowymi................................ 441
8 Spis treci
A.2. Problemy zwizane z optymalizatorem................................................................ 443
A.3. Problemy z definicj tabel.................................................................................... 444
A.3.1. Problemy z instrukcj ALTER TABLE................................................... 444
A.3.2. Jak zmieni porzdek kolumn w tabeli .................................................... 445
A.3.3. Problemy z tabelami tymczasowymi ....................................................... 445
Dodatek B Wyraenia regularne w MySQL........................................................ 447
Skorowidz...................................................................................... 451
Rozdzia 4.
Typy kolumn
W MySQL dostpnych jest wiele typw danych, ktre mona pogrupowa w kilku pod-
stawowych kategoriach, takich jak typy liczbowe, typy zwizane z dat i czasem oraz
typy acuchowe. Na pocztku tego rozdziau przedstawiony zostanie przegld wspo-
mnianych przed chwil typw kolumn, po czym nastpi bardziej szczegowy opis ich
waciwoci z podziaem na poszczeglne kategorie i wreszcie zamieszczone zostanie
podsumowanie informacji dotyczcych wymaga co do rozmiaru pamici potrzebnej
do przechowania danej kolumny. Sam przegld jest z zamierzenia krtki. Dodatkowe
informacje o poszczeglnych typach kolumn, na przykad dopuszczalny format, w kt-
rym mona deklarowa wartoci, zostay uwzgldnione w szczegowych omwieniach.
Od wersji 4.1 MySQL rozpoznaje rozszerzenia do obsugi danych przestrzennych.
Informacje o typach przestrzennych znajduj si w rozdziale 7. tego podrcznika.
W czci opisu typw kolumn zastosowane zostay nastpujce reguy:
/
Wskazuje maksymalny rozmiar wywietlania liczby lub acucha.
Maksymalnym dopuszczalnym rozmiarem wywietlania jest 255.
&
Dotyczy typw zmiennoprzecinkowych i staoprzecinkowych. Okrela liczb
cyfr po kropce dziesitnej. Maksymalna dopuszczalna warto wynosi 30,
ale nie powinna przekracza /.
Nawiasy kwadratowe ( ) identyfikuj opcjonalne fragmenty deklaracji typu.
126 Rozdzia 4. Typy kolumn
4.1. Przegld typw dla kolumny
4.1.1. Omwienie typw liczbowych
Poniej znajduje si przegld liczbowych typw dla kolumn. Bardziej szczegowe
informacje mona znale w podrozdziale 4.2. Wymogi dotyczce rozmiaru pamici
potrzebnej do przechowywania kolumn znajduj si w podrozdziale 4.5.
Jeli dla kolumny liczbowej zostanie okrelony atrybut /lRO|1||, MySQL automatycznie
doda do kolumny atrybut UN1S1ONlD.
Naley uwaa podczas odejmowania dwch wartoci liczbowych, z ktrych jedna ma
typ UN1S1ONlD. Uzyskany wynik bdzie rwnie tego typu! patrz podrozdzia 5.7.
T1NY1NT/) UNS1ONlD /lRO|1||
Bardzo maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od `8
do `/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do bb.
B1T, BOO|, BOO|lAN
To s synonimy T1NY1NT`). Synonim BOO|lAN zosta dodany w MySQL 4.1.0.
Warto zerowa to inaczej fasz. Wartoci niezerowe traktowane s jako prawda.
W przyszoci wprowadzona zostanie pena, zgodna ze standardem SQL
obsuga typu boolowskiego.
SMA||1NT/) UNS1ONlD /lRO|1||
Maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od o/68
do o/6/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do 6bbob.
MlD1UM1NT/) UNS1ONlD /lRO|1||
rednia liczba cakowita. Dla liczb ze znakiem zakres wynosi od 8o88608
do 8o8860/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0
do `6///`b.
1NT/) UNS1ONlD /lRO|1||
Standardowa liczba cakowita. Dla liczb ze znakiem zakres wynosi
od `4/48o648 do `4/48o64/. W przypadku liczb bez znaku zakres
obejmuje wartoci od 0 do 49496/9b.
1NTlOlR/) UNS1ONlD /lRO|1||
Jest to synonim dla typu 1NT.
B1O1NT/) UNS1ONlD /lRO|1||
Dua liczba cakowita. Dla liczb ze znakiem zakres wynosi
od 9oo/0o68b4//b808 do 9oo/0o68b4//b80/. W przypadku liczb
bez znaku zakres obejmuje wartoci od 0 do `8446/440/o/09bb`6`b.
4.1. Przegld typw dla kolumny 127
Oto kilka spraw, o ktrych naley wiedzie odnonie kolumn typu B1O1NT:
Wszystkie obliczenia wykonywane s przy uyciu wartoci typu B1O1NT
lub DOUB|l ze znakiem. Oznacza to, e duych liczb cakowitych bez
znaku, wikszych ni 9oo/0o68b4//b80/ (63 bity), mona uywa tylko
z funkcjami bitowymi! Niezastosowanie si do tej zasady moe doprowadzi
do uzyskania w wyniku liczby, ktrej kilka ostatnich cyfr jest bdnych
z powodu bdw w zaokrglaniu podczas konwersji wartoci B1O1NT
na DOUB|l.
MySQL 4.0 potrafi obsugiwa B1O1NT w nastpujcych przypadkach:
Podczas wykorzystywania liczb cakowitych do przechowywania
duych wartoci bez znaku w kolumnie typu B1O1NT.
W M1NPC\YCAMQN) lub MAXPC\YCAMQN), gdzie PC\YCAMQN odnosi si
do kolumny B1O1NT.
Podczas korzystania z operatorw (midzy innymi , , *), gdy oba
argumenty s liczbami cakowitymi.
Zawsze istnieje moliwo zapisania w kolumnie B1O1NT dokadnej wartoci
liczby cakowitej. Wystarczy zapisa j przy uyciu acucha. W takim
przypadku zostanie dokonana konwersja acucha na liczb; konwersja
nie bdzie wymaga poredniego etapu przeksztacajcego liczb na jej
odpowiednik o podwjnej precyzji.
Podczas korzystania z operatorw , i * stosowana jest arytmetyka
B1O1NT, jeli oba argumenty maj warto liczby cakowitej! To oznacza,
e pomnoenie dwch duych liczb cakowitych (lub wynikw funkcji,
ktra zwraca liczby cakowite) moe spowodowa nieoczekiwane
rezultaty, jeli wynik przekroczy liczb 9oo/0o68b4//b80/.
||OATR) UNS1ONlD /lRO|1||
Liczba zmiennoprzecinkowa. Parametr R oznacza precyzj i moe przyjmowa
warto od 0 do 14 dla liczb zmiennoprzecinkowych o dokadnoci do jednego
znaku i od 25 do 53 dla liczb zmiennoprzecinkowych o dokadnoci do dwch
znakw. To przypomina opisane poniej typy ||OAT i DOUB|l. Typ ||OATR)
ma ten sam zakres, jaki posiadaj odpowiadajce mu typy ||OAT i DOUB|l,
ale w jego przypadku niezdefiniowany jest maksymalny rozmiar wywietlania
i liczba miejsc po przecinku.
Od wersji 3.23 MySQL jest to prawdziwa warto zmiennoprzecinkowa.
W wersjach wczeniejszych liczba typu ||OATR) bya zawsze liczb o dwch
miejscach po przecinku.
Ta skadnia zostaa dodana w celu zachowania zgodnoci ze standardem ODBC.
Stosowanie typu ||OAT moe spowodowa wystpienie pewnych
nieoczekiwanych problemw, poniewa wszystkie obliczenia w MySQL
s wykonywane z podwjn precyzj patrz punkt A.1.7).
||OAT/, &) UNS1ONlD /lRO|1||
128 Rozdzia 4. Typy kolumn
Maa liczba zmiennoprzecinkowa (o dokadnoci do jednego znaku). Liczba
ta moe przyj wartoci: od o408o466lo8 do ``/b494ob`lo8, 0,
i od ``/b494ob`lo8 do o408o466lo8. Jeli podany jest atrybut UN1S1ONlD,
niedozwolone s wartoci ujemne. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ ||OAT bez argumentw
lub typ ||OATR) (gdzie Rjest liczb z zakresu od 0 do 24) oznacza liczb
zmiennoprzecinkow o pojedynczej precyzji.
DOUB|l/, &) UNS1ONlD /lRO|1||
Standardowa liczba zmiennoprzecinkowa (o dokadnoci do dwch
znakw). Liczba ta moe przyj wartoci: od `/9/69o`o486o`b/lo08
do b0/o8b8b0/0`4lo08, 0, i od b0/o8b8b0/0`4lo08
do `/9/69o`o486o`b/lo08. Jeli podany jest atrybut UN1S1ONlD, wartoci
ujemne s niedozwolone. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ DOUB|l
bez argumentw lub ||OATR) (gdzie R jest liczb z zakresu od 25 do 53)
oznacza liczb zmiennoprzecinkow o podwjnej precyzji.
DOUB|l PRlC1S1ON/, &) UNS1ONlD /lRO|1||
RlA|/, &) UNS1ONlD /lRO|1||
S to synonimy DOUB|l. Wyjtek: Jeli dla parametru s;_cce serwera
wczono opcj RlA|_AS_||OAT, synonimem ||OAT jest RlA|, a nie DOUB|l.
DlC1MA|/, &) UNS1ONlD /lRO|1||
Niezapakowana liczba staoprzecinkowa. Zachowanie kolumny tego typu
przypomina kolumn typu CHAR. Niezapakowana oznacza, e liczba jest
przechowywana w postaci acucha przy uyciu jednego znaku na kad cyfr
wartoci. Parametr / definiuje maksymaln liczb cyfr, a & liczb miejsc
po przecinku. W parametrze / nie s brane pod uwag: kropka dziesitna
(odpowiadajca w naszej notacji przecinkowi) i (dla liczb ujemnych) znak ,
cho jest dla nich zarezerwowane miejsce. Wartoci nie maj miejsc
po przecinku lub czci uamkowych, jeli & jest rwne 0. Maksymalny zakres
wartoci typu DlC1MA| jest taki sam, jak dla typu DOUB|l, ale rzeczywisty zakres
danej kolumny DlC1MA| moe by ograniczony przez wybr argumentw / i &.
Jeli podany jest atrybut UN1S1ONlD, wartoci ujemne s niedozwolone.
W przypadku braku argumentu &, domyln wartoci jest 0. Jeli pominity
jest parametr /, domyln wartoci jest 10.
W wersjach poprzedzajcych MySQL 3.23 argument / musi by wystarczajco
duy, by zawiera obszar potrzebny dla znaku i kropki dziesitnej.
DlC/,&) UNS1ONlD /lRO|1||
NUMlR1C/,&) UNS1ONlD /lRO|1||
|1XlD/, &) UNS1ONlD /lRO|1||
S to synonimy typu DlC1MA|.
W MySQL 4.1.0 dodano synonim |1XlD w celu osignicia kompatybilnoci
z innymi serwerami.
4.1. Przegld typw dla kolumny 129
4.1.2. Przegld typw zwizanych z dat i czasem
Poniej znajduje si podsumowanie typw kolumn przeznaczonych dla czasu i daty.
Dodatkowe informacje na ten temat mona znale w podrozdziale 4.3. Wymogi do-
tyczce pamici potrzebnej do przechowywania danych w kolumnach zostay podane
w podrozdziale 4.5.
DATl
Data. Obsugiwany zakres obejmuje daty od ``0000`0`` do `9999`o``.
W MySQL wartoci DATl wywietlane s w formacie `RRRRMMDD`, ale mona
przypisywa wartoci do kolumn DATl przy uyciu acuchw lub liczb.
DATlT1Ml
Kombinacja daty i czasu. Obsugiwany zakres obejmuje wartoci
od ``0000`0` 000000` do `9999`o` ob9b9`. W MySQL wartoci
DATlT1Ml wywietlane s w formacie `RRRRMMDD OOMMSS`, ale mona
przypisywa wartoci do kolumn DATlT1Ml przy uyciu acuchw lub liczb.
T1MlSTAMP/)
Znacznik czasu. Obsugiwany zakres rozpoczyna si od daty ``9/00`0``
i siga roku 0o/.
Kolumna typu T1MlSTAMP przydaje si do rejestracji daty i godziny operacji
wstawiania lub aktualizacji. Pierwszej kolumnie T1MlSTAMP w tabeli
automatycznie przypisywana jest data i czas ostatniej operacji, jeli tylko tych
wartoci nie wprowadzi rcznie uytkownik. Dowolnej kolumnie T1MlSTAMP
mona rwnie przypisa biec dat i godzin, wpisujc do niej warto NU||.
Od MySQL 4.1 wartoci T1MlSTAMP s zwracane w postaci acuchw
w formacie `RRRRMMDD OOMMSS`. Aby uzyska warto w postaci liczby,
naley doda do kolumn tego typu 0. Inne szerokoci wywietlania
znacznika czasu nie s obsugiwane.
W wersjach poprzedzajcych MySQL 4.1 wartoci T1MlSTAMP s wywietlane
w formacie RRRRMMDDOOMMSS, RRMMDDOOMMSS, RRRRMMDD lub RRMMDD w zalenoci
od tego, czy parametr / jest rwny 14 (albo go brak), 12, 8 lub 6. Mona jednak
przypisywa wartoci do kolumn T1MlSTAMP przy uyciu acuchw lub liczb.
Argument / wpywa tylko na sposb wywietlania kolumny T1MlSTAMP, a nie
na jej przechowywanie. Wartoci kolumny s zawsze zapisywane w czterech
bajtach. W MySQL od wersji 4.0.12 pojawia si opcja ne., dziki ktrej
mona zmieni dziaanie serwera, upodabniajc je do MySQL 4.1.
Naley odnotowa, e kolumny T1MlSTAMP/), gdzie /jest rwne 8 lub 14,
s traktowane jako liczby, natomiast reszta kolumn T1MlSTAMP/) jest
traktowana jako acuchy. Jest to rodzaj gwarancji, e uytkownik bdzie
mg wiarygodnie usuwa i przywraca tabele tego typu.
T1Ml
Godzina. Obsugiwany zakres obejmuje wartoci od `8o8b9b9`
do ` 8o8b9b9`. W MySQL wartoci T1Ml wywietlane s w formacie
` OOMMSS`, ale mona przypisa wartoci do kolumn T1Ml przy uyciu
zarwno acuchw, jak i liczb.
130 Rozdzia 4. Typy kolumn
YlAR|4)
Rok w formacie dwu- lub czterocyfrowym. Domylnym formatem jest rok
zapisany za pomoc czterech cyfr. W tym formacie dostpne wartoci nale
do przedziau od `90` do `bb oraz 0. W formacie dwucyfrowym wartoci
dopuszczalne to liczby z zakresu od /0 do 69, ktre reprezentuj daty od roku
1970 do 2069. W MySQL wartoci YlAR wywietlane s w formacie RRRR,
ale mona przypisa wartoci do kolumn YlAR przy uyciu tak acuchw,
jak i liczb. Typ YlAR jest niedostpny dla wersji wczeniejszych ni MySQL 3.22.
4.1.3. Przegld typw acuchowych
Poniej znajduje si przegld typw acuchowych. Dodatkowe informacje mona
znale w podrozdziale 4.4. Wymogi dotyczce pamici potrzebnej do przechowywa-
nia danych w kolumnach zostay podane w podrozdziale 4.5.
W niektrych przypadkach MySQL moe zmieni kolumn typu acuchowego na typ,
ktry bdzie si rni od zadeklarowanego w instrukcji CRlATl TAB|l lub A|TlR TAB|l.
Wicej informacji na ten temat znajduje si w podpunkcie 6.2.5.2.
Od wersji 4.1 w MySQL pojawia si zmiana, ktra wpywa na wiele typw kolumn typu
acuchowego. Definicja kolumn typu znakowego moe zawiera atrybut CHARACTlR
SlT, ktry okrela zestaw znakw i opcjonalnie porzdek sortowania. Dotyczy to typw
CHAR, VARCHAR, rnych typw TlXT oraz lNUM i SlT, na przykad:
CRF/TF T/B|F !
FNUMYCTVQ
YCTVQ|
1 lub 2 bajty w zalenoci od liczby wartoci wyliczenia
(maksymalnie 65 535)
SFTYCTVQ
YCTVQ|
1, 2, 3, 4 lub 8 bajtw w zalenoci od liczby elementw zestawu
(maksymalnie 64)
Typy VARCHAR, B|OB i TlXT maj zmienn dugo. Dla kadego ilo pamici potrzeb-
nej do przechowania wartoci bdzie zalee od faktycznej dugoci wartoci kolumny
(reprezentowanej w ostatniej tabeli przez .), a nie od maksymalnego moliwego roz-
miaru danego typu. Kolumna VARCHAR`0) na przykad moe przechowywa acuch
o maksymalnej dugoci 10 znakw. Faktyczna ilo wymaganej pamici to dugo
acucha (.) plus 1 bajt do zapisania dugoci acucha. Dla acucha `.|cc` parametr
. jest rwny 4, a wymagany rozmiar pamici to 5 bajtw.
Typy B|OB i TlXT wymagaj 1, 2, 3 lub 4 bajtw do zapisu dugoci wartoci kolumny
w zalenoci od maksymalnej moliwej dugoci tego typu (patrz punkt 4.4.2).
Rozmiar obiektu lNUM jest ustalany na podstawie liczby rnych wartoci wyliczenia.
Przy wyliczeniach do 255 moliwych wartoci uywany jest jeden bajt, a przy wyli-
czeniach do 65 535 wartoci uywane s 2 bajty (patrz punkt 4.4.3).
Rozmiar obiektu SlT jest okrelany przez liczb rnych elementw zestawu. Jeli ze-
staw ma rozmiar 0, obiekt zajmuje 0/).8 bajtw, ktr to warto zaokrgla si do
1, 2, 3, 4 lub 8 bajtw. Obiekt SlT moe mie do 64 elementw (patrz punkt 4.4.4).
4.6. Wybieranie odpowiedniego typu
dla kolumny
Aby jak najbardziej wydajnie korzysta z pamici, naley we wszystkich przypadkach
stara si stosowa typ, ktry bdzie jak najbardziej dokadny. Jeli na przykad w kolum-
nie liczb cakowitych bd przechowywane wartoci z zakresu od ` do 99999, najlep-
szym wyborem bdzie typ MlD1UM1NT UNS1ONlD. Ze wszystkich typw, ktre reprezentuj
wszystkie wymagane wartoci, zajmuje najmniej pamici.
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych 153
Powszechnym problemem jest dokadne przedstawianie wartoci walutowych. W MySQL
naley do tego uywa typu DlC1MA|, za pomoc ktrego wartoci zapisywane s w for-
mie acucha. Dziki temu nie traci si na dokadnoci (mimo to obliczenia z wartociami
DlC1MA| mog by wci wykonywane przy uyciu operacji dziaajcych na liczbach
z podwjn precyzj). Jeli dokadno nie jest zbyt wana, by moe wystarczajco
dobrym typem bdzie DOUB|l.
Aby uzyska wiksz dokadno, mona zawsze przeksztaci warto na typ stao-
przecinkowy, przechowywany w B1O1NT. Pozwoli to wykonywa wszystkie obliczenia
na liczbach cakowitych i tylko w razie potrzeby przeksztaca wynik z powrotem na
wartoci zmiennoprzecinkowe.
4.7. Wykorzystywanie typw kolumn
z innych mechanizmw baz danych
Aby uatwi uytkownikowi zastosowanie kodu pochodzcego od innych producentw,
moliwe jest odwzorowanie typw kolumn w sposb przedstawiony w poniszej tabeli.
Odwzorowania te upraszczaj operacj importu do MySQL definicji tabel z innych
mechanizmw baz danych:
Typ innych producentw Typ MySQL
BTN/RY/| C'/R/| BTN/RY
C'/R V/RYTN/| V/RC'/R/|
F|J/T4 F|J/T
F|J/T8 OJUB|F
TNT1 TTNYTNT
TNT SM/||TNT
TNT: MFOTUMTNT
TNT4 TNT
TNT8 BTTNT
|JN V/RBTN/RY MFOTUMB|JB
|JN V/RC'/R MFOTUMTFXT
|JN MFOTUMTFXT oc M,SJ| 410|
MTOO|FTNT MFOTUMTNT
V/RBTN/RY/| C'/R/| BTN/RY
Odwzorowanie typw kolumn jest wykonywane podczas tworzenia tabeli, po czym
oryginalne deklaracje typu zostaj usunite. Jeli uytkownik utworzy tabel z typami
stosowanymi przez innych producentw, po czym wyda polecenie DlSCR1Bl PC\YCA
VCDGNK, zostanie przedstawiona struktura tabeli z odpowiadajcymi im typami MySQL.
4 Spis treci
1.8.5. Rozbienoci midzy MySQL a standardem SQL ........................................ 60
1.8.6. Jak MySQL radzi sobie z ograniczeniami ................................................. 67
1.8.7. Znane bdy i projektowe braki w MySQL................................................ 69
Rozdzia 2. Struktura jzyka .............................................................................. 77
2.1. Literay................................................................................................................... 77
2.1.1. acuchy ................................................................................................... 77
2.1.2. Liczby........................................................................................................ 80
2.1.3. Wartoci szesnastkowe .............................................................................. 80
2.1.4. Wartoci logiczne ...................................................................................... 81
2.1.5. Wartoci NULL......................................................................................... 81
2.2. Nazwy baz danych, tabel, indeksw, kolumn i aliasw......................................... 81
2.2.1. Kwalifikatory identyfikatorw .................................................................. 83
2.2.2. Znaczenie wielkoci liter w nazwach identyfikatorw.............................. 83
2.3. Zmienne definiowane przez uytkownika.............................................................. 85
2.4. Zmienne systemowe............................................................................................... 87
2.4.1. Strukturalne zmienne systemowe .............................................................. 89
2.5. Skadnia komentarza .............................................................................................. 91
2.6. Traktowanie sw zastrzeonych w MySQL.......................................................... 92
Rozdzia 3. Obsuga zestaww znakw............................................................... 95
3.1. Oglne informacje o zestawach znakw i sortowaniu ........................................... 95
3.2. Zestawy znakw i porzdki sortowania w MySQL................................................ 96
3.3. Okrelanie domylnego zestawu znakw i sortowania........................................... 98
3.3.1. Zestaw znakw i sortowanie dla serwera................................................... 98
3.3.2. Zestaw znakw i sortowanie dla bazy danych........................................... 99
3.3.3. Zestaw znakw i sortowanie dla tabeli .................................................... 100
3.3.4. Zestaw znakw i sortowanie dla kolumny............................................... 100
3.3.5. Przykady przypisywania zestawu znakw i sortowania ......................... 101
3.3.6. Zestawy znakw i sortowanie dla poczenia .......................................... 102
3.3.7. Zestaw znakw i sortowanie dla acucha znakw.................................. 104
3.3.8. Wykorzystywanie COLLATE w instrukcjach SQL.................................... 105
3.3.9. Priorytet klauzuli COLLATE .................................................................. 106
3.3.10. Operator BINARY................................................................................... 106
3.3.11. Niektre przypadki specjalne, w ktrych trudno okreli sortowanie...... 106
3.3.12. Sortowania musz by odpowiednie dla danego zestawu znakw........... 107
3.3.13. Przykad wpywu porzdku sortowania ................................................... 108
3.4. Operacje, na ktre ma wpyw obsuga zestaww znakw.................................... 109
3.4.1. acuchy wyjciowe ............................................................................... 109
3.4.2. CONVERT()............................................................................................ 110
3.4.3. CAST() .................................................................................................... 110
3.4.4. Instrukcje SHOW .................................................................................... 111
3.5. Obsuga Unicode.................................................................................................. 112
3.6. UTF8 dla metadanych.......................................................................................... 113
3.7. Kompatybilno z innymi systemami zarzdzania baz danych .......................... 115
3.8. Nowy format pliku konfiguracji zestawu znakw................................................ 115
3.9. Narodowe zestawy znakw.................................................................................. 115
3.10. Aktualizacja zestaww znakw z MySQL 4.0..................................................... 116
3.10.1. Zestawy znakw w wersji 4.0 i odpowiadajce im w wersji 4.1 pary
skadajce si z zestawu znakw i sortowania......................................... 117
3.10.2. Przeksztacanie kolumn znakowych wersji 4.0 na format 4.1 ................. 118
3.11. Zestawy znakw i sortowania obsugiwane przez MySQL.................................. 118
3.11.1. Zestawy znakw standardu Unicode ....................................................... 119
3.11.2. Zestawy znakw zachodnioeuropejskich................................................. 120
3.11.3. Zestawy znakw dla Europy Centralnej .................................................. 121
Spis treci 5
3.11.4. Zestawy znakw poudniowoeuropejskich i rodkowowschodnich......... 122
3.11.5. Zestawy znakw regionu batyckiego...................................................... 123
3.11.6. Zestawy znakw dla cyrylicy................................................................... 123
3.11.7. Azjatyckie zestawy znakw..................................................................... 124
Rozdzia 4. Typy kolumn.................................................................................. 125
4.1. Przegld typw dla kolumny................................................................................ 126
4.1.1. Omwienie typw liczbowych ................................................................ 126
4.1.2. Przegld typw zwizanych z dat i czasem............................................ 129
4.1.3. Przegld typw acuchowych ................................................................ 130
4.2. Typy liczbowe...................................................................................................... 132
4.3. Typy zwizane z dat i czasem............................................................................ 135
4.3.1. Typy DATETIME, DATE i TIMESTAMP............................................. 137
4.3.2. Typ TIME................................................................................................ 142
4.3.3. Typ YEAR............................................................................................... 143
4.3.4. Problem roku 2000 a typy zwizane z dat.............................................. 144
4.4. Typy acuchowe ................................................................................................. 144
4.4.1. Typy CHAR i VARCHAR...................................................................... 144
4.4.2. Typy BLOB i TEXT................................................................................ 146
4.4.3. Typ Enum................................................................................................ 147
4.4.4. Typ SET .................................................................................................. 149
4.5. Rozmiar pamici potrzebnej dla typw kolumn................................................... 151
4.6. Wybieranie odpowiedniego typu dla kolumny..................................................... 152
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych ............... 153
Rozdzia 5. Funkcje i operatory........................................................................ 155
5.1. Operatory ............................................................................................................. 156
5.1.1. Nawiasy................................................................................................... 156
5.1.2. Operatory porwnania ............................................................................. 156
5.1.3. Operatory logiczne .................................................................................. 161
5.1.4. Operatory rozrniania wielkoci liter..................................................... 163
5.2. Funkcje kontroli przepywu ................................................................................. 163
5.3. Funkcje acuchowe............................................................................................. 166
5.3.1. Funkcje porwnywania acuchw.......................................................... 176
5.4. Funkcje liczbowe ................................................................................................. 178
5.4.1. Operatory arytmetyczne........................................................................... 178
5.4.2. Funkcje matematyczne ............................................................................ 180
5.5. Funkcje daty i godziny......................................................................................... 186
5.6. Funkcje obsugi wyszukiwania penotekstowego................................................. 202
5.6.1. Boolowskie wyszukiwania penotekstowe............................................... 205
5.6.2. Wyszukiwania penotekstowe z rozwijaniem zapytania .......................... 207
5.6.3. Ograniczenia dla wyszukiwania penotekstowego................................... 208
5.6.4. Modyfikowanie wyszukiwania penotekstowego MySQL ...................... 209
5.6.5. Lista rzeczy do zrobienia dla wyszukiwania penotekstowego................ 211
5.7. Funkcje konwersji typw..................................................................................... 211
5.8. Inne funkcje ......................................................................................................... 214
5.8.1. Funkcje bitowe ........................................................................................ 214
5.8.2. Funkcje szyfrujce................................................................................... 215
5.8.3. Funkcje informacyjne .............................................................................. 219
5.8.4. Funkcje rne .......................................................................................... 223
5.9. Funkcje i modyfikatory do zastosowania z klauzulami GROUP BY................... 226
5.9.1. Funkcje GROUP BY (agregujce)........................................................... 226
5.9.2. Modyfikatory GROUP BY...................................................................... 229
5.9.3. GROUP BY z ukrytymi polami............................................................... 232
6 Spis treci
Rozdzia 6. Skadnia instrukcji SQL .................................................................. 235
6.1. Instrukcje operujce na danych............................................................................ 235
6.1.1. Skadnia instrukcji DELETE................................................................... 235
6.1.2. Skadnia instrukcji DO ............................................................................ 238
6.1.3. Skadnia instrukcji HANDLER............................................................... 238
6.1.4. Skadnia instrukcji INSERT .................................................................... 240
6.1.5. Skadnia instrukcji LOAD DATA INFILE.............................................. 246
6.1.6. Skadnia instrukcji REPLACE................................................................. 255
6.1.7. Skadnia instrukcji SELECT.................................................................... 256
6.1.8. Skadnia podzapyta................................................................................ 265
6.1.9. Skadnia instrukcji TRUNCATE............................................................. 276
6.1.10. Skadnia instrukcji UPDATE................................................................... 276
6.2. Instrukcje definiowania danych ........................................................................... 278
6.2.1. Skadnia instrukcji ALTER DATABASE ............................................... 278
6.2.2. Skadnia instrukcji ALTER TABLE........................................................ 279
6.2.3. Skadnia instrukcji CREATE DATABASE............................................. 285
6.2.4. Skadnia instrukcji CREATE INDEX ..................................................... 285
6.2.5. Skadnia instrukcji CREATE TABLE..................................................... 287
6.2.6. Skadnia instrukcji DROP DATABASE.................................................. 301
6.2.7. Skadnia instrukcji DROP INDEX.......................................................... 302
6.2.8. Skadnia instrukcji DROP TABLE.......................................................... 302
6.2.9. Skadnia instrukcji RENAME TABLE.................................................... 303
6.3. Instrukcje programu MySQL............................................................................... 304
6.3.1. Skadnia instrukcji DESCRIBE
(odczytywanie informacji na temat kolumn) ........................................... 304
6.3.2. Skadnia instrukcji USE........................................................................... 304
6.4. Instrukcje obsugi transakcji i blokowania........................................................... 305
6.4.1. Skadnia instrukcji START TRANSACTION, COMMIT
oraz ROLLBACK.................................................................................... 305
6.4.2. Instrukcje niemoliwe do wycofania ....................................................... 306
6.4.3. Instrukcje wykonujce niejawne zatwierdzenie......................................... 306
6.4.4. Skadnia instrukcji SAVEPOINT i ROLLBACK TO SAVEPOINT....... 307
6.4.5. Skadnia instrukcji LOCK TABLES oraz UNLOCK TABLES .............. 307
6.4.6. Skadnia instrukcji SET TRANSACTION.............................................. 310
6.5. Administracja baz danych .................................................................................. 311
6.5.1. Instrukcje zarzdzajce kontami uytkownikw ....................................... 311
6.5.2. Instrukcje do konserwacji tabel ............................................................... 319
6.5.3. Skadnia instrukcji SET i SHOW ............................................................ 326
6.5.4. Inne instrukcje administracyjne ............................................................... 347
6.6. Instrukcje replikacji.............................................................................................. 352
6.6.1. Instrukcje SQL sterujce serwerem gwnym ......................................... 352
6.6.2. Instrukcje SQL sterujce serwerami podrzdnymi .................................. 354
Rozdzia 7. Rozszerzenia przestrzenne w MySQL............................................... 365
7.1. Wstp ................................................................................................................... 365
7.2. Model geometryczny OpenGIS............................................................................ 366
7.2.1. Hierarchia klas geometrycznych.............................................................. 366
7.2.2. Klasa Geometry ....................................................................................... 368
7.2.3. Klasa Point .............................................................................................. 369
7.2.4. Klasa Curve ............................................................................................. 369
7.2.5. Klasa LineString...................................................................................... 370
7.2.6. Klasa Surface........................................................................................... 370
7.2.7. Klasa Polygon.......................................................................................... 370
7.2.8. Klasa GeometryCollection....................................................................... 371
Spis treci 7
7.2.9. Klasa MultiPoint...................................................................................... 371
7.2.10. Klasa MultiCurve .................................................................................... 372
7.2.11. Klasa MultiLineString............................................................................. 372
7.2.12. Klasa MultiSurface .................................................................................. 372
7.2.13. Klasa MultiPolygon................................................................................. 373
7.3. Obsugiwane formaty danych przestrzennych...................................................... 373
7.3.1. Format tekstowy WKT............................................................................ 374
7.3.2. Format binarny WKB.............................................................................. 374
7.4. Tworzenie bazy danych z rozszerzeniami przestrzennymi................................... 375
7.4.1. Typy danych przestrzennych w MySQL ................................................. 375
7.4.2. Tworzenie wartoci przestrzennych......................................................... 376
7.4.3. Tworzenie kolumn przestrzennych.......................................................... 379
7.4.4. Wypenianie kolumn przestrzennych....................................................... 379
7.4.5. Pobieranie danych przestrzennych........................................................... 381
7.5. Analiza informacji przestrzennych....................................................................... 381
7.5.1. Funkcje konwersji formatw geometrycznych ........................................ 382
7.5.2. Funkcje klasy Geometry.......................................................................... 382
7.5.3. Funkcje tworzce nowe geometrie na podstawie istniejcych................. 388
7.5.4. Funkcje testujce relacje przestrzenne
midzy obiektami geometrycznymi ......................................................... 389
7.5.5. Relacje midzy minimalnymi prostoktami otaczajcymi
dla poszczeglnych geometrii.................................................................. 390
7.5.6. Funkcje sprawdzajce relacje przestrzenne pomidzy geometriami ........ 391
7.6. Optymalizacja analizy przestrzennej.................................................................... 392
7.6.1. Tworzenie indeksw przestrzennych....................................................... 392
7.6.2. Wykorzystanie indeksu przestrzennego................................................... 393
7.7. Zgodno MySQL ze standardem........................................................................ 395
7.7.1. Niezaimplementowane funkcje GIS ........................................................ 395
Rozdzia 8. Procedury i funkcje skadowane ..................................................... 397
8.1. Skadnia procedur skadowanych......................................................................... 398
8.1.1. Utrzymanie procedur skadowanych........................................................ 398
8.1.2. SHOW PROCEDURE STATUS oraz SHOW FUNCTION STATUS.... 401
8.1.3. Instrukcja CALL...................................................................................... 402
8.1.4. Instrukcja zoona BEGIN ... END.......................................................... 402
8.1.5. Instrukcja DECLARE.............................................................................. 402
8.1.6. Zmienne w procedurach skadowanych................................................... 402
8.1.7. Warunki i podprogramy obsugi .............................................................. 403
8.1.8. Kursory.................................................................................................... 405
8.1.9. Konstrukcje sterowania przepywem sterowania..................................... 406
Rozdzia 9. Obsuga bdw w MySQL .............................................................. 409
9.1. Zwracane bdy.................................................................................................... 409
9.2. Komunikaty bdw............................................................................................. 419
Dodatek A Rozwizywanie problemw z zapytaniami ........................................435
A.1. Zagadnienia zwizane z zapytaniami ................................................................... 435
A.1.1. Wielko liter przy wyszukiwaniu........................................................... 435
A.1.2. Problemy z kolumnami typu DATE ........................................................ 436
A.1.3. Problemy z wartociami NULL............................................................... 437
A.1.4. Problemy z synonimami kolumn ............................................................. 438
A.1.5. Bd wycofania dla tabel nietransakcyjnych............................................ 439
A.1.6. Usuwanie wierszy ze zwizanych tabel ................................................... 439
A.1.7. Rozwizywanie problemw z brakujcymi wierszami ............................ 440
A.1.8. Problemy z porwnaniami zmiennoprzecinkowymi................................ 441
8 Spis treci
A.2. Problemy zwizane z optymalizatorem................................................................ 443
A.3. Problemy z definicj tabel.................................................................................... 444
A.3.1. Problemy z instrukcj ALTER TABLE................................................... 444
A.3.2. Jak zmieni porzdek kolumn w tabeli .................................................... 445
A.3.3. Problemy z tabelami tymczasowymi ....................................................... 445
Dodatek B Wyraenia regularne w MySQL........................................................ 447
Skorowidz...................................................................................... 451
Rozdzia 4.
Typy kolumn
W MySQL dostpnych jest wiele typw danych, ktre mona pogrupowa w kilku pod-
stawowych kategoriach, takich jak typy liczbowe, typy zwizane z dat i czasem oraz
typy acuchowe. Na pocztku tego rozdziau przedstawiony zostanie przegld wspo-
mnianych przed chwil typw kolumn, po czym nastpi bardziej szczegowy opis ich
waciwoci z podziaem na poszczeglne kategorie i wreszcie zamieszczone zostanie
podsumowanie informacji dotyczcych wymaga co do rozmiaru pamici potrzebnej
do przechowania danej kolumny. Sam przegld jest z zamierzenia krtki. Dodatkowe
informacje o poszczeglnych typach kolumn, na przykad dopuszczalny format, w kt-
rym mona deklarowa wartoci, zostay uwzgldnione w szczegowych omwieniach.
Od wersji 4.1 MySQL rozpoznaje rozszerzenia do obsugi danych przestrzennych.
Informacje o typach przestrzennych znajduj si w rozdziale 7. tego podrcznika.
W czci opisu typw kolumn zastosowane zostay nastpujce reguy:
/
Wskazuje maksymalny rozmiar wywietlania liczby lub acucha.
Maksymalnym dopuszczalnym rozmiarem wywietlania jest 255.
&
Dotyczy typw zmiennoprzecinkowych i staoprzecinkowych. Okrela liczb
cyfr po kropce dziesitnej. Maksymalna dopuszczalna warto wynosi 30,
ale nie powinna przekracza /.
Nawiasy kwadratowe ( ) identyfikuj opcjonalne fragmenty deklaracji typu.
126 Rozdzia 4. Typy kolumn
4.1. Przegld typw dla kolumny
4.1.1. Omwienie typw liczbowych
Poniej znajduje si przegld liczbowych typw dla kolumn. Bardziej szczegowe
informacje mona znale w podrozdziale 4.2. Wymogi dotyczce rozmiaru pamici
potrzebnej do przechowywania kolumn znajduj si w podrozdziale 4.5.
Jeli dla kolumny liczbowej zostanie okrelony atrybut /lRO|1||, MySQL automatycznie
doda do kolumny atrybut UN1S1ONlD.
Naley uwaa podczas odejmowania dwch wartoci liczbowych, z ktrych jedna ma
typ UN1S1ONlD. Uzyskany wynik bdzie rwnie tego typu! patrz podrozdzia 5.7.
T1NY1NT/) UNS1ONlD /lRO|1||
Bardzo maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od `8
do `/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do bb.
B1T, BOO|, BOO|lAN
To s synonimy T1NY1NT`). Synonim BOO|lAN zosta dodany w MySQL 4.1.0.
Warto zerowa to inaczej fasz. Wartoci niezerowe traktowane s jako prawda.
W przyszoci wprowadzona zostanie pena, zgodna ze standardem SQL
obsuga typu boolowskiego.
SMA||1NT/) UNS1ONlD /lRO|1||
Maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od o/68
do o/6/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do 6bbob.
MlD1UM1NT/) UNS1ONlD /lRO|1||
rednia liczba cakowita. Dla liczb ze znakiem zakres wynosi od 8o88608
do 8o8860/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0
do `6///`b.
1NT/) UNS1ONlD /lRO|1||
Standardowa liczba cakowita. Dla liczb ze znakiem zakres wynosi
od `4/48o648 do `4/48o64/. W przypadku liczb bez znaku zakres
obejmuje wartoci od 0 do 49496/9b.
1NTlOlR/) UNS1ONlD /lRO|1||
Jest to synonim dla typu 1NT.
B1O1NT/) UNS1ONlD /lRO|1||
Dua liczba cakowita. Dla liczb ze znakiem zakres wynosi
od 9oo/0o68b4//b808 do 9oo/0o68b4//b80/. W przypadku liczb
bez znaku zakres obejmuje wartoci od 0 do `8446/440/o/09bb`6`b.
4.1. Przegld typw dla kolumny 127
Oto kilka spraw, o ktrych naley wiedzie odnonie kolumn typu B1O1NT:
Wszystkie obliczenia wykonywane s przy uyciu wartoci typu B1O1NT
lub DOUB|l ze znakiem. Oznacza to, e duych liczb cakowitych bez
znaku, wikszych ni 9oo/0o68b4//b80/ (63 bity), mona uywa tylko
z funkcjami bitowymi! Niezastosowanie si do tej zasady moe doprowadzi
do uzyskania w wyniku liczby, ktrej kilka ostatnich cyfr jest bdnych
z powodu bdw w zaokrglaniu podczas konwersji wartoci B1O1NT
na DOUB|l.
MySQL 4.0 potrafi obsugiwa B1O1NT w nastpujcych przypadkach:
Podczas wykorzystywania liczb cakowitych do przechowywania
duych wartoci bez znaku w kolumnie typu B1O1NT.
W M1NPC\YCAMQN) lub MAXPC\YCAMQN), gdzie PC\YCAMQN odnosi si
do kolumny B1O1NT.
Podczas korzystania z operatorw (midzy innymi , , *), gdy oba
argumenty s liczbami cakowitymi.
Zawsze istnieje moliwo zapisania w kolumnie B1O1NT dokadnej wartoci
liczby cakowitej. Wystarczy zapisa j przy uyciu acucha. W takim
przypadku zostanie dokonana konwersja acucha na liczb; konwersja
nie bdzie wymaga poredniego etapu przeksztacajcego liczb na jej
odpowiednik o podwjnej precyzji.
Podczas korzystania z operatorw , i * stosowana jest arytmetyka
B1O1NT, jeli oba argumenty maj warto liczby cakowitej! To oznacza,
e pomnoenie dwch duych liczb cakowitych (lub wynikw funkcji,
ktra zwraca liczby cakowite) moe spowodowa nieoczekiwane
rezultaty, jeli wynik przekroczy liczb 9oo/0o68b4//b80/.
||OATR) UNS1ONlD /lRO|1||
Liczba zmiennoprzecinkowa. Parametr R oznacza precyzj i moe przyjmowa
warto od 0 do 14 dla liczb zmiennoprzecinkowych o dokadnoci do jednego
znaku i od 25 do 53 dla liczb zmiennoprzecinkowych o dokadnoci do dwch
znakw. To przypomina opisane poniej typy ||OAT i DOUB|l. Typ ||OATR)
ma ten sam zakres, jaki posiadaj odpowiadajce mu typy ||OAT i DOUB|l,
ale w jego przypadku niezdefiniowany jest maksymalny rozmiar wywietlania
i liczba miejsc po przecinku.
Od wersji 3.23 MySQL jest to prawdziwa warto zmiennoprzecinkowa.
W wersjach wczeniejszych liczba typu ||OATR) bya zawsze liczb o dwch
miejscach po przecinku.
Ta skadnia zostaa dodana w celu zachowania zgodnoci ze standardem ODBC.
Stosowanie typu ||OAT moe spowodowa wystpienie pewnych
nieoczekiwanych problemw, poniewa wszystkie obliczenia w MySQL
s wykonywane z podwjn precyzj patrz punkt A.1.7).
||OAT/, &) UNS1ONlD /lRO|1||
128 Rozdzia 4. Typy kolumn
Maa liczba zmiennoprzecinkowa (o dokadnoci do jednego znaku). Liczba
ta moe przyj wartoci: od o408o466lo8 do ``/b494ob`lo8, 0,
i od ``/b494ob`lo8 do o408o466lo8. Jeli podany jest atrybut UN1S1ONlD,
niedozwolone s wartoci ujemne. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ ||OAT bez argumentw
lub typ ||OATR) (gdzie Rjest liczb z zakresu od 0 do 24) oznacza liczb
zmiennoprzecinkow o pojedynczej precyzji.
DOUB|l/, &) UNS1ONlD /lRO|1||
Standardowa liczba zmiennoprzecinkowa (o dokadnoci do dwch
znakw). Liczba ta moe przyj wartoci: od `/9/69o`o486o`b/lo08
do b0/o8b8b0/0`4lo08, 0, i od b0/o8b8b0/0`4lo08
do `/9/69o`o486o`b/lo08. Jeli podany jest atrybut UN1S1ONlD, wartoci
ujemne s niedozwolone. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ DOUB|l
bez argumentw lub ||OATR) (gdzie R jest liczb z zakresu od 25 do 53)
oznacza liczb zmiennoprzecinkow o podwjnej precyzji.
DOUB|l PRlC1S1ON/, &) UNS1ONlD /lRO|1||
RlA|/, &) UNS1ONlD /lRO|1||
S to synonimy DOUB|l. Wyjtek: Jeli dla parametru s;_cce serwera
wczono opcj RlA|_AS_||OAT, synonimem ||OAT jest RlA|, a nie DOUB|l.
DlC1MA|/, &) UNS1ONlD /lRO|1||
Niezapakowana liczba staoprzecinkowa. Zachowanie kolumny tego typu
przypomina kolumn typu CHAR. Niezapakowana oznacza, e liczba jest
przechowywana w postaci acucha przy uyciu jednego znaku na kad cyfr
wartoci. Parametr / definiuje maksymaln liczb cyfr, a & liczb miejsc
po przecinku. W parametrze / nie s brane pod uwag: kropka dziesitna
(odpowiadajca w naszej notacji przecinkowi) i (dla liczb ujemnych) znak ,
cho jest dla nich zarezerwowane miejsce. Wartoci nie maj miejsc
po przecinku lub czci uamkowych, jeli & jest rwne 0. Maksymalny zakres
wartoci typu DlC1MA| jest taki sam, jak dla typu DOUB|l, ale rzeczywisty zakres
danej kolumny DlC1MA| moe by ograniczony przez wybr argumentw / i &.
Jeli podany jest atrybut UN1S1ONlD, wartoci ujemne s niedozwolone.
W przypadku braku argumentu &, domyln wartoci jest 0. Jeli pominity
jest parametr /, domyln wartoci jest 10.
W wersjach poprzedzajcych MySQL 3.23 argument / musi by wystarczajco
duy, by zawiera obszar potrzebny dla znaku i kropki dziesitnej.
DlC/,&) UNS1ONlD /lRO|1||
NUMlR1C/,&) UNS1ONlD /lRO|1||
|1XlD/, &) UNS1ONlD /lRO|1||
S to synonimy typu DlC1MA|.
W MySQL 4.1.0 dodano synonim |1XlD w celu osignicia kompatybilnoci
z innymi serwerami.
4.1. Przegld typw dla kolumny 129
4.1.2. Przegld typw zwizanych z dat i czasem
Poniej znajduje si podsumowanie typw kolumn przeznaczonych dla czasu i daty.
Dodatkowe informacje na ten temat mona znale w podrozdziale 4.3. Wymogi do-
tyczce pamici potrzebnej do przechowywania danych w kolumnach zostay podane
w podrozdziale 4.5.
DATl
Data. Obsugiwany zakres obejmuje daty od ``0000`0`` do `9999`o``.
W MySQL wartoci DATl wywietlane s w formacie `RRRRMMDD`, ale mona
przypisywa wartoci do kolumn DATl przy uyciu acuchw lub liczb.
DATlT1Ml
Kombinacja daty i czasu. Obsugiwany zakres obejmuje wartoci
od ``0000`0` 000000` do `9999`o` ob9b9`. W MySQL wartoci
DATlT1Ml wywietlane s w formacie `RRRRMMDD OOMMSS`, ale mona
przypisywa wartoci do kolumn DATlT1Ml przy uyciu acuchw lub liczb.
T1MlSTAMP/)
Znacznik czasu. Obsugiwany zakres rozpoczyna si od daty ``9/00`0``
i siga roku 0o/.
Kolumna typu T1MlSTAMP przydaje si do rejestracji daty i godziny operacji
wstawiania lub aktualizacji. Pierwszej kolumnie T1MlSTAMP w tabeli
automatycznie przypisywana jest data i czas ostatniej operacji, jeli tylko tych
wartoci nie wprowadzi rcznie uytkownik. Dowolnej kolumnie T1MlSTAMP
mona rwnie przypisa biec dat i godzin, wpisujc do niej warto NU||.
Od MySQL 4.1 wartoci T1MlSTAMP s zwracane w postaci acuchw
w formacie `RRRRMMDD OOMMSS`. Aby uzyska warto w postaci liczby,
naley doda do kolumn tego typu 0. Inne szerokoci wywietlania
znacznika czasu nie s obsugiwane.
W wersjach poprzedzajcych MySQL 4.1 wartoci T1MlSTAMP s wywietlane
w formacie RRRRMMDDOOMMSS, RRMMDDOOMMSS, RRRRMMDD lub RRMMDD w zalenoci
od tego, czy parametr / jest rwny 14 (albo go brak), 12, 8 lub 6. Mona jednak
przypisywa wartoci do kolumn T1MlSTAMP przy uyciu acuchw lub liczb.
Argument / wpywa tylko na sposb wywietlania kolumny T1MlSTAMP, a nie
na jej przechowywanie. Wartoci kolumny s zawsze zapisywane w czterech
bajtach. W MySQL od wersji 4.0.12 pojawia si opcja ne., dziki ktrej
mona zmieni dziaanie serwera, upodabniajc je do MySQL 4.1.
Naley odnotowa, e kolumny T1MlSTAMP/), gdzie /jest rwne 8 lub 14,
s traktowane jako liczby, natomiast reszta kolumn T1MlSTAMP/) jest
traktowana jako acuchy. Jest to rodzaj gwarancji, e uytkownik bdzie
mg wiarygodnie usuwa i przywraca tabele tego typu.
T1Ml
Godzina. Obsugiwany zakres obejmuje wartoci od `8o8b9b9`
do ` 8o8b9b9`. W MySQL wartoci T1Ml wywietlane s w formacie
` OOMMSS`, ale mona przypisa wartoci do kolumn T1Ml przy uyciu
zarwno acuchw, jak i liczb.
130 Rozdzia 4. Typy kolumn
YlAR|4)
Rok w formacie dwu- lub czterocyfrowym. Domylnym formatem jest rok
zapisany za pomoc czterech cyfr. W tym formacie dostpne wartoci nale
do przedziau od `90` do `bb oraz 0. W formacie dwucyfrowym wartoci
dopuszczalne to liczby z zakresu od /0 do 69, ktre reprezentuj daty od roku
1970 do 2069. W MySQL wartoci YlAR wywietlane s w formacie RRRR,
ale mona przypisa wartoci do kolumn YlAR przy uyciu tak acuchw,
jak i liczb. Typ YlAR jest niedostpny dla wersji wczeniejszych ni MySQL 3.22.
4.1.3. Przegld typw acuchowych
Poniej znajduje si przegld typw acuchowych. Dodatkowe informacje mona
znale w podrozdziale 4.4. Wymogi dotyczce pamici potrzebnej do przechowywa-
nia danych w kolumnach zostay podane w podrozdziale 4.5.
W niektrych przypadkach MySQL moe zmieni kolumn typu acuchowego na typ,
ktry bdzie si rni od zadeklarowanego w instrukcji CRlATl TAB|l lub A|TlR TAB|l.
Wicej informacji na ten temat znajduje si w podpunkcie 6.2.5.2.
Od wersji 4.1 w MySQL pojawia si zmiana, ktra wpywa na wiele typw kolumn typu
acuchowego. Definicja kolumn typu znakowego moe zawiera atrybut CHARACTlR
SlT, ktry okrela zestaw znakw i opcjonalnie porzdek sortowania. Dotyczy to typw
CHAR, VARCHAR, rnych typw TlXT oraz lNUM i SlT, na przykad:
CRF/TF T/B|F !
FNUMYCTVQ
YCTVQ|
1 lub 2 bajty w zalenoci od liczby wartoci wyliczenia
(maksymalnie 65 535)
SFTYCTVQ
YCTVQ|
1, 2, 3, 4 lub 8 bajtw w zalenoci od liczby elementw zestawu
(maksymalnie 64)
Typy VARCHAR, B|OB i TlXT maj zmienn dugo. Dla kadego ilo pamici potrzeb-
nej do przechowania wartoci bdzie zalee od faktycznej dugoci wartoci kolumny
(reprezentowanej w ostatniej tabeli przez .), a nie od maksymalnego moliwego roz-
miaru danego typu. Kolumna VARCHAR`0) na przykad moe przechowywa acuch
o maksymalnej dugoci 10 znakw. Faktyczna ilo wymaganej pamici to dugo
acucha (.) plus 1 bajt do zapisania dugoci acucha. Dla acucha `.|cc` parametr
. jest rwny 4, a wymagany rozmiar pamici to 5 bajtw.
Typy B|OB i TlXT wymagaj 1, 2, 3 lub 4 bajtw do zapisu dugoci wartoci kolumny
w zalenoci od maksymalnej moliwej dugoci tego typu (patrz punkt 4.4.2).
Rozmiar obiektu lNUM jest ustalany na podstawie liczby rnych wartoci wyliczenia.
Przy wyliczeniach do 255 moliwych wartoci uywany jest jeden bajt, a przy wyli-
czeniach do 65 535 wartoci uywane s 2 bajty (patrz punkt 4.4.3).
Rozmiar obiektu SlT jest okrelany przez liczb rnych elementw zestawu. Jeli ze-
staw ma rozmiar 0, obiekt zajmuje 0/).8 bajtw, ktr to warto zaokrgla si do
1, 2, 3, 4 lub 8 bajtw. Obiekt SlT moe mie do 64 elementw (patrz punkt 4.4.4).
4.6. Wybieranie odpowiedniego typu
dla kolumny
Aby jak najbardziej wydajnie korzysta z pamici, naley we wszystkich przypadkach
stara si stosowa typ, ktry bdzie jak najbardziej dokadny. Jeli na przykad w kolum-
nie liczb cakowitych bd przechowywane wartoci z zakresu od ` do 99999, najlep-
szym wyborem bdzie typ MlD1UM1NT UNS1ONlD. Ze wszystkich typw, ktre reprezentuj
wszystkie wymagane wartoci, zajmuje najmniej pamici.
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych 153
Powszechnym problemem jest dokadne przedstawianie wartoci walutowych. W MySQL
naley do tego uywa typu DlC1MA|, za pomoc ktrego wartoci zapisywane s w for-
mie acucha. Dziki temu nie traci si na dokadnoci (mimo to obliczenia z wartociami
DlC1MA| mog by wci wykonywane przy uyciu operacji dziaajcych na liczbach
z podwjn precyzj). Jeli dokadno nie jest zbyt wana, by moe wystarczajco
dobrym typem bdzie DOUB|l.
Aby uzyska wiksz dokadno, mona zawsze przeksztaci warto na typ stao-
przecinkowy, przechowywany w B1O1NT. Pozwoli to wykonywa wszystkie obliczenia
na liczbach cakowitych i tylko w razie potrzeby przeksztaca wynik z powrotem na
wartoci zmiennoprzecinkowe.
4.7. Wykorzystywanie typw kolumn
z innych mechanizmw baz danych
Aby uatwi uytkownikowi zastosowanie kodu pochodzcego od innych producentw,
moliwe jest odwzorowanie typw kolumn w sposb przedstawiony w poniszej tabeli.
Odwzorowania te upraszczaj operacj importu do MySQL definicji tabel z innych
mechanizmw baz danych:
Typ innych producentw Typ MySQL
BTN/RY/| C'/R/| BTN/RY
C'/R V/RYTN/| V/RC'/R/|
F|J/T4 F|J/T
F|J/T8 OJUB|F
TNT1 TTNYTNT
TNT SM/||TNT
TNT: MFOTUMTNT
TNT4 TNT
TNT8 BTTNT
|JN V/RBTN/RY MFOTUMB|JB
|JN V/RC'/R MFOTUMTFXT
|JN MFOTUMTFXT oc M,SJ| 410|
MTOO|FTNT MFOTUMTNT
V/RBTN/RY/| C'/R/| BTN/RY
Odwzorowanie typw kolumn jest wykonywane podczas tworzenia tabeli, po czym
oryginalne deklaracje typu zostaj usunite. Jeli uytkownik utworzy tabel z typami
stosowanymi przez innych producentw, po czym wyda polecenie DlSCR1Bl PC\YCA
VCDGNK, zostanie przedstawiona struktura tabeli z odpowiadajcymi im typami MySQL.
4 Spis treci
1.8.5. Rozbienoci midzy MySQL a standardem SQL ........................................ 60
1.8.6. Jak MySQL radzi sobie z ograniczeniami ................................................. 67
1.8.7. Znane bdy i projektowe braki w MySQL................................................ 69
Rozdzia 2. Struktura jzyka .............................................................................. 77
2.1. Literay................................................................................................................... 77
2.1.1. acuchy ................................................................................................... 77
2.1.2. Liczby........................................................................................................ 80
2.1.3. Wartoci szesnastkowe .............................................................................. 80
2.1.4. Wartoci logiczne ...................................................................................... 81
2.1.5. Wartoci NULL......................................................................................... 81
2.2. Nazwy baz danych, tabel, indeksw, kolumn i aliasw......................................... 81
2.2.1. Kwalifikatory identyfikatorw .................................................................. 83
2.2.2. Znaczenie wielkoci liter w nazwach identyfikatorw.............................. 83
2.3. Zmienne definiowane przez uytkownika.............................................................. 85
2.4. Zmienne systemowe............................................................................................... 87
2.4.1. Strukturalne zmienne systemowe .............................................................. 89
2.5. Skadnia komentarza .............................................................................................. 91
2.6. Traktowanie sw zastrzeonych w MySQL.......................................................... 92
Rozdzia 3. Obsuga zestaww znakw............................................................... 95
3.1. Oglne informacje o zestawach znakw i sortowaniu ........................................... 95
3.2. Zestawy znakw i porzdki sortowania w MySQL................................................ 96
3.3. Okrelanie domylnego zestawu znakw i sortowania........................................... 98
3.3.1. Zestaw znakw i sortowanie dla serwera................................................... 98
3.3.2. Zestaw znakw i sortowanie dla bazy danych........................................... 99
3.3.3. Zestaw znakw i sortowanie dla tabeli .................................................... 100
3.3.4. Zestaw znakw i sortowanie dla kolumny............................................... 100
3.3.5. Przykady przypisywania zestawu znakw i sortowania ......................... 101
3.3.6. Zestawy znakw i sortowanie dla poczenia .......................................... 102
3.3.7. Zestaw znakw i sortowanie dla acucha znakw.................................. 104
3.3.8. Wykorzystywanie COLLATE w instrukcjach SQL.................................... 105
3.3.9. Priorytet klauzuli COLLATE .................................................................. 106
3.3.10. Operator BINARY................................................................................... 106
3.3.11. Niektre przypadki specjalne, w ktrych trudno okreli sortowanie...... 106
3.3.12. Sortowania musz by odpowiednie dla danego zestawu znakw........... 107
3.3.13. Przykad wpywu porzdku sortowania ................................................... 108
3.4. Operacje, na ktre ma wpyw obsuga zestaww znakw.................................... 109
3.4.1. acuchy wyjciowe ............................................................................... 109
3.4.2. CONVERT()............................................................................................ 110
3.4.3. CAST() .................................................................................................... 110
3.4.4. Instrukcje SHOW .................................................................................... 111
3.5. Obsuga Unicode.................................................................................................. 112
3.6. UTF8 dla metadanych.......................................................................................... 113
3.7. Kompatybilno z innymi systemami zarzdzania baz danych .......................... 115
3.8. Nowy format pliku konfiguracji zestawu znakw................................................ 115
3.9. Narodowe zestawy znakw.................................................................................. 115
3.10. Aktualizacja zestaww znakw z MySQL 4.0..................................................... 116
3.10.1. Zestawy znakw w wersji 4.0 i odpowiadajce im w wersji 4.1 pary
skadajce si z zestawu znakw i sortowania......................................... 117
3.10.2. Przeksztacanie kolumn znakowych wersji 4.0 na format 4.1 ................. 118
3.11. Zestawy znakw i sortowania obsugiwane przez MySQL.................................. 118
3.11.1. Zestawy znakw standardu Unicode ....................................................... 119
3.11.2. Zestawy znakw zachodnioeuropejskich................................................. 120
3.11.3. Zestawy znakw dla Europy Centralnej .................................................. 121
Spis treci 5
3.11.4. Zestawy znakw poudniowoeuropejskich i rodkowowschodnich......... 122
3.11.5. Zestawy znakw regionu batyckiego...................................................... 123
3.11.6. Zestawy znakw dla cyrylicy................................................................... 123
3.11.7. Azjatyckie zestawy znakw..................................................................... 124
Rozdzia 4. Typy kolumn.................................................................................. 125
4.1. Przegld typw dla kolumny................................................................................ 126
4.1.1. Omwienie typw liczbowych ................................................................ 126
4.1.2. Przegld typw zwizanych z dat i czasem............................................ 129
4.1.3. Przegld typw acuchowych ................................................................ 130
4.2. Typy liczbowe...................................................................................................... 132
4.3. Typy zwizane z dat i czasem............................................................................ 135
4.3.1. Typy DATETIME, DATE i TIMESTAMP............................................. 137
4.3.2. Typ TIME................................................................................................ 142
4.3.3. Typ YEAR............................................................................................... 143
4.3.4. Problem roku 2000 a typy zwizane z dat.............................................. 144
4.4. Typy acuchowe ................................................................................................. 144
4.4.1. Typy CHAR i VARCHAR...................................................................... 144
4.4.2. Typy BLOB i TEXT................................................................................ 146
4.4.3. Typ Enum................................................................................................ 147
4.4.4. Typ SET .................................................................................................. 149
4.5. Rozmiar pamici potrzebnej dla typw kolumn................................................... 151
4.6. Wybieranie odpowiedniego typu dla kolumny..................................................... 152
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych ............... 153
Rozdzia 5. Funkcje i operatory........................................................................ 155
5.1. Operatory ............................................................................................................. 156
5.1.1. Nawiasy................................................................................................... 156
5.1.2. Operatory porwnania ............................................................................. 156
5.1.3. Operatory logiczne .................................................................................. 161
5.1.4. Operatory rozrniania wielkoci liter..................................................... 163
5.2. Funkcje kontroli przepywu ................................................................................. 163
5.3. Funkcje acuchowe............................................................................................. 166
5.3.1. Funkcje porwnywania acuchw.......................................................... 176
5.4. Funkcje liczbowe ................................................................................................. 178
5.4.1. Operatory arytmetyczne........................................................................... 178
5.4.2. Funkcje matematyczne ............................................................................ 180
5.5. Funkcje daty i godziny......................................................................................... 186
5.6. Funkcje obsugi wyszukiwania penotekstowego................................................. 202
5.6.1. Boolowskie wyszukiwania penotekstowe............................................... 205
5.6.2. Wyszukiwania penotekstowe z rozwijaniem zapytania .......................... 207
5.6.3. Ograniczenia dla wyszukiwania penotekstowego................................... 208
5.6.4. Modyfikowanie wyszukiwania penotekstowego MySQL ...................... 209
5.6.5. Lista rzeczy do zrobienia dla wyszukiwania penotekstowego................ 211
5.7. Funkcje konwersji typw..................................................................................... 211
5.8. Inne funkcje ......................................................................................................... 214
5.8.1. Funkcje bitowe ........................................................................................ 214
5.8.2. Funkcje szyfrujce................................................................................... 215
5.8.3. Funkcje informacyjne .............................................................................. 219
5.8.4. Funkcje rne .......................................................................................... 223
5.9. Funkcje i modyfikatory do zastosowania z klauzulami GROUP BY................... 226
5.9.1. Funkcje GROUP BY (agregujce)........................................................... 226
5.9.2. Modyfikatory GROUP BY...................................................................... 229
5.9.3. GROUP BY z ukrytymi polami............................................................... 232
6 Spis treci
Rozdzia 6. Skadnia instrukcji SQL .................................................................. 235
6.1. Instrukcje operujce na danych............................................................................ 235
6.1.1. Skadnia instrukcji DELETE................................................................... 235
6.1.2. Skadnia instrukcji DO ............................................................................ 238
6.1.3. Skadnia instrukcji HANDLER............................................................... 238
6.1.4. Skadnia instrukcji INSERT .................................................................... 240
6.1.5. Skadnia instrukcji LOAD DATA INFILE.............................................. 246
6.1.6. Skadnia instrukcji REPLACE................................................................. 255
6.1.7. Skadnia instrukcji SELECT.................................................................... 256
6.1.8. Skadnia podzapyta................................................................................ 265
6.1.9. Skadnia instrukcji TRUNCATE............................................................. 276
6.1.10. Skadnia instrukcji UPDATE................................................................... 276
6.2. Instrukcje definiowania danych ........................................................................... 278
6.2.1. Skadnia instrukcji ALTER DATABASE ............................................... 278
6.2.2. Skadnia instrukcji ALTER TABLE........................................................ 279
6.2.3. Skadnia instrukcji CREATE DATABASE............................................. 285
6.2.4. Skadnia instrukcji CREATE INDEX ..................................................... 285
6.2.5. Skadnia instrukcji CREATE TABLE..................................................... 287
6.2.6. Skadnia instrukcji DROP DATABASE.................................................. 301
6.2.7. Skadnia instrukcji DROP INDEX.......................................................... 302
6.2.8. Skadnia instrukcji DROP TABLE.......................................................... 302
6.2.9. Skadnia instrukcji RENAME TABLE.................................................... 303
6.3. Instrukcje programu MySQL............................................................................... 304
6.3.1. Skadnia instrukcji DESCRIBE
(odczytywanie informacji na temat kolumn) ........................................... 304
6.3.2. Skadnia instrukcji USE........................................................................... 304
6.4. Instrukcje obsugi transakcji i blokowania........................................................... 305
6.4.1. Skadnia instrukcji START TRANSACTION, COMMIT
oraz ROLLBACK.................................................................................... 305
6.4.2. Instrukcje niemoliwe do wycofania ....................................................... 306
6.4.3. Instrukcje wykonujce niejawne zatwierdzenie......................................... 306
6.4.4. Skadnia instrukcji SAVEPOINT i ROLLBACK TO SAVEPOINT....... 307
6.4.5. Skadnia instrukcji LOCK TABLES oraz UNLOCK TABLES .............. 307
6.4.6. Skadnia instrukcji SET TRANSACTION.............................................. 310
6.5. Administracja baz danych .................................................................................. 311
6.5.1. Instrukcje zarzdzajce kontami uytkownikw ....................................... 311
6.5.2. Instrukcje do konserwacji tabel ............................................................... 319
6.5.3. Skadnia instrukcji SET i SHOW ............................................................ 326
6.5.4. Inne instrukcje administracyjne ............................................................... 347
6.6. Instrukcje replikacji.............................................................................................. 352
6.6.1. Instrukcje SQL sterujce serwerem gwnym ......................................... 352
6.6.2. Instrukcje SQL sterujce serwerami podrzdnymi .................................. 354
Rozdzia 7. Rozszerzenia przestrzenne w MySQL............................................... 365
7.1. Wstp ................................................................................................................... 365
7.2. Model geometryczny OpenGIS............................................................................ 366
7.2.1. Hierarchia klas geometrycznych.............................................................. 366
7.2.2. Klasa Geometry ....................................................................................... 368
7.2.3. Klasa Point .............................................................................................. 369
7.2.4. Klasa Curve ............................................................................................. 369
7.2.5. Klasa LineString...................................................................................... 370
7.2.6. Klasa Surface........................................................................................... 370
7.2.7. Klasa Polygon.......................................................................................... 370
7.2.8. Klasa GeometryCollection....................................................................... 371
Spis treci 7
7.2.9. Klasa MultiPoint...................................................................................... 371
7.2.10. Klasa MultiCurve .................................................................................... 372
7.2.11. Klasa MultiLineString............................................................................. 372
7.2.12. Klasa MultiSurface .................................................................................. 372
7.2.13. Klasa MultiPolygon................................................................................. 373
7.3. Obsugiwane formaty danych przestrzennych...................................................... 373
7.3.1. Format tekstowy WKT............................................................................ 374
7.3.2. Format binarny WKB.............................................................................. 374
7.4. Tworzenie bazy danych z rozszerzeniami przestrzennymi................................... 375
7.4.1. Typy danych przestrzennych w MySQL ................................................. 375
7.4.2. Tworzenie wartoci przestrzennych......................................................... 376
7.4.3. Tworzenie kolumn przestrzennych.......................................................... 379
7.4.4. Wypenianie kolumn przestrzennych....................................................... 379
7.4.5. Pobieranie danych przestrzennych........................................................... 381
7.5. Analiza informacji przestrzennych....................................................................... 381
7.5.1. Funkcje konwersji formatw geometrycznych ........................................ 382
7.5.2. Funkcje klasy Geometry.......................................................................... 382
7.5.3. Funkcje tworzce nowe geometrie na podstawie istniejcych................. 388
7.5.4. Funkcje testujce relacje przestrzenne
midzy obiektami geometrycznymi ......................................................... 389
7.5.5. Relacje midzy minimalnymi prostoktami otaczajcymi
dla poszczeglnych geometrii.................................................................. 390
7.5.6. Funkcje sprawdzajce relacje przestrzenne pomidzy geometriami ........ 391
7.6. Optymalizacja analizy przestrzennej.................................................................... 392
7.6.1. Tworzenie indeksw przestrzennych....................................................... 392
7.6.2. Wykorzystanie indeksu przestrzennego................................................... 393
7.7. Zgodno MySQL ze standardem........................................................................ 395
7.7.1. Niezaimplementowane funkcje GIS ........................................................ 395
Rozdzia 8. Procedury i funkcje skadowane ..................................................... 397
8.1. Skadnia procedur skadowanych......................................................................... 398
8.1.1. Utrzymanie procedur skadowanych........................................................ 398
8.1.2. SHOW PROCEDURE STATUS oraz SHOW FUNCTION STATUS.... 401
8.1.3. Instrukcja CALL...................................................................................... 402
8.1.4. Instrukcja zoona BEGIN ... END.......................................................... 402
8.1.5. Instrukcja DECLARE.............................................................................. 402
8.1.6. Zmienne w procedurach skadowanych................................................... 402
8.1.7. Warunki i podprogramy obsugi .............................................................. 403
8.1.8. Kursory.................................................................................................... 405
8.1.9. Konstrukcje sterowania przepywem sterowania..................................... 406
Rozdzia 9. Obsuga bdw w MySQL .............................................................. 409
9.1. Zwracane bdy.................................................................................................... 409
9.2. Komunikaty bdw............................................................................................. 419
Dodatek A Rozwizywanie problemw z zapytaniami ........................................435
A.1. Zagadnienia zwizane z zapytaniami ................................................................... 435
A.1.1. Wielko liter przy wyszukiwaniu........................................................... 435
A.1.2. Problemy z kolumnami typu DATE ........................................................ 436
A.1.3. Problemy z wartociami NULL............................................................... 437
A.1.4. Problemy z synonimami kolumn ............................................................. 438
A.1.5. Bd wycofania dla tabel nietransakcyjnych............................................ 439
A.1.6. Usuwanie wierszy ze zwizanych tabel ................................................... 439
A.1.7. Rozwizywanie problemw z brakujcymi wierszami ............................ 440
A.1.8. Problemy z porwnaniami zmiennoprzecinkowymi................................ 441
8 Spis treci
A.2. Problemy zwizane z optymalizatorem................................................................ 443
A.3. Problemy z definicj tabel.................................................................................... 444
A.3.1. Problemy z instrukcj ALTER TABLE................................................... 444
A.3.2. Jak zmieni porzdek kolumn w tabeli .................................................... 445
A.3.3. Problemy z tabelami tymczasowymi ....................................................... 445
Dodatek B Wyraenia regularne w MySQL........................................................ 447
Skorowidz...................................................................................... 451
Rozdzia 4.
Typy kolumn
W MySQL dostpnych jest wiele typw danych, ktre mona pogrupowa w kilku pod-
stawowych kategoriach, takich jak typy liczbowe, typy zwizane z dat i czasem oraz
typy acuchowe. Na pocztku tego rozdziau przedstawiony zostanie przegld wspo-
mnianych przed chwil typw kolumn, po czym nastpi bardziej szczegowy opis ich
waciwoci z podziaem na poszczeglne kategorie i wreszcie zamieszczone zostanie
podsumowanie informacji dotyczcych wymaga co do rozmiaru pamici potrzebnej
do przechowania danej kolumny. Sam przegld jest z zamierzenia krtki. Dodatkowe
informacje o poszczeglnych typach kolumn, na przykad dopuszczalny format, w kt-
rym mona deklarowa wartoci, zostay uwzgldnione w szczegowych omwieniach.
Od wersji 4.1 MySQL rozpoznaje rozszerzenia do obsugi danych przestrzennych.
Informacje o typach przestrzennych znajduj si w rozdziale 7. tego podrcznika.
W czci opisu typw kolumn zastosowane zostay nastpujce reguy:
/
Wskazuje maksymalny rozmiar wywietlania liczby lub acucha.
Maksymalnym dopuszczalnym rozmiarem wywietlania jest 255.
&
Dotyczy typw zmiennoprzecinkowych i staoprzecinkowych. Okrela liczb
cyfr po kropce dziesitnej. Maksymalna dopuszczalna warto wynosi 30,
ale nie powinna przekracza /.
Nawiasy kwadratowe ( ) identyfikuj opcjonalne fragmenty deklaracji typu.
126 Rozdzia 4. Typy kolumn
4.1. Przegld typw dla kolumny
4.1.1. Omwienie typw liczbowych
Poniej znajduje si przegld liczbowych typw dla kolumn. Bardziej szczegowe
informacje mona znale w podrozdziale 4.2. Wymogi dotyczce rozmiaru pamici
potrzebnej do przechowywania kolumn znajduj si w podrozdziale 4.5.
Jeli dla kolumny liczbowej zostanie okrelony atrybut /lRO|1||, MySQL automatycznie
doda do kolumny atrybut UN1S1ONlD.
Naley uwaa podczas odejmowania dwch wartoci liczbowych, z ktrych jedna ma
typ UN1S1ONlD. Uzyskany wynik bdzie rwnie tego typu! patrz podrozdzia 5.7.
T1NY1NT/) UNS1ONlD /lRO|1||
Bardzo maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od `8
do `/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do bb.
B1T, BOO|, BOO|lAN
To s synonimy T1NY1NT`). Synonim BOO|lAN zosta dodany w MySQL 4.1.0.
Warto zerowa to inaczej fasz. Wartoci niezerowe traktowane s jako prawda.
W przyszoci wprowadzona zostanie pena, zgodna ze standardem SQL
obsuga typu boolowskiego.
SMA||1NT/) UNS1ONlD /lRO|1||
Maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od o/68
do o/6/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do 6bbob.
MlD1UM1NT/) UNS1ONlD /lRO|1||
rednia liczba cakowita. Dla liczb ze znakiem zakres wynosi od 8o88608
do 8o8860/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0
do `6///`b.
1NT/) UNS1ONlD /lRO|1||
Standardowa liczba cakowita. Dla liczb ze znakiem zakres wynosi
od `4/48o648 do `4/48o64/. W przypadku liczb bez znaku zakres
obejmuje wartoci od 0 do 49496/9b.
1NTlOlR/) UNS1ONlD /lRO|1||
Jest to synonim dla typu 1NT.
B1O1NT/) UNS1ONlD /lRO|1||
Dua liczba cakowita. Dla liczb ze znakiem zakres wynosi
od 9oo/0o68b4//b808 do 9oo/0o68b4//b80/. W przypadku liczb
bez znaku zakres obejmuje wartoci od 0 do `8446/440/o/09bb`6`b.
4.1. Przegld typw dla kolumny 127
Oto kilka spraw, o ktrych naley wiedzie odnonie kolumn typu B1O1NT:
Wszystkie obliczenia wykonywane s przy uyciu wartoci typu B1O1NT
lub DOUB|l ze znakiem. Oznacza to, e duych liczb cakowitych bez
znaku, wikszych ni 9oo/0o68b4//b80/ (63 bity), mona uywa tylko
z funkcjami bitowymi! Niezastosowanie si do tej zasady moe doprowadzi
do uzyskania w wyniku liczby, ktrej kilka ostatnich cyfr jest bdnych
z powodu bdw w zaokrglaniu podczas konwersji wartoci B1O1NT
na DOUB|l.
MySQL 4.0 potrafi obsugiwa B1O1NT w nastpujcych przypadkach:
Podczas wykorzystywania liczb cakowitych do przechowywania
duych wartoci bez znaku w kolumnie typu B1O1NT.
W M1NPC\YCAMQN) lub MAXPC\YCAMQN), gdzie PC\YCAMQN odnosi si
do kolumny B1O1NT.
Podczas korzystania z operatorw (midzy innymi , , *), gdy oba
argumenty s liczbami cakowitymi.
Zawsze istnieje moliwo zapisania w kolumnie B1O1NT dokadnej wartoci
liczby cakowitej. Wystarczy zapisa j przy uyciu acucha. W takim
przypadku zostanie dokonana konwersja acucha na liczb; konwersja
nie bdzie wymaga poredniego etapu przeksztacajcego liczb na jej
odpowiednik o podwjnej precyzji.
Podczas korzystania z operatorw , i * stosowana jest arytmetyka
B1O1NT, jeli oba argumenty maj warto liczby cakowitej! To oznacza,
e pomnoenie dwch duych liczb cakowitych (lub wynikw funkcji,
ktra zwraca liczby cakowite) moe spowodowa nieoczekiwane
rezultaty, jeli wynik przekroczy liczb 9oo/0o68b4//b80/.
||OATR) UNS1ONlD /lRO|1||
Liczba zmiennoprzecinkowa. Parametr R oznacza precyzj i moe przyjmowa
warto od 0 do 14 dla liczb zmiennoprzecinkowych o dokadnoci do jednego
znaku i od 25 do 53 dla liczb zmiennoprzecinkowych o dokadnoci do dwch
znakw. To przypomina opisane poniej typy ||OAT i DOUB|l. Typ ||OATR)
ma ten sam zakres, jaki posiadaj odpowiadajce mu typy ||OAT i DOUB|l,
ale w jego przypadku niezdefiniowany jest maksymalny rozmiar wywietlania
i liczba miejsc po przecinku.
Od wersji 3.23 MySQL jest to prawdziwa warto zmiennoprzecinkowa.
W wersjach wczeniejszych liczba typu ||OATR) bya zawsze liczb o dwch
miejscach po przecinku.
Ta skadnia zostaa dodana w celu zachowania zgodnoci ze standardem ODBC.
Stosowanie typu ||OAT moe spowodowa wystpienie pewnych
nieoczekiwanych problemw, poniewa wszystkie obliczenia w MySQL
s wykonywane z podwjn precyzj patrz punkt A.1.7).
||OAT/, &) UNS1ONlD /lRO|1||
128 Rozdzia 4. Typy kolumn
Maa liczba zmiennoprzecinkowa (o dokadnoci do jednego znaku). Liczba
ta moe przyj wartoci: od o408o466lo8 do ``/b494ob`lo8, 0,
i od ``/b494ob`lo8 do o408o466lo8. Jeli podany jest atrybut UN1S1ONlD,
niedozwolone s wartoci ujemne. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ ||OAT bez argumentw
lub typ ||OATR) (gdzie Rjest liczb z zakresu od 0 do 24) oznacza liczb
zmiennoprzecinkow o pojedynczej precyzji.
DOUB|l/, &) UNS1ONlD /lRO|1||
Standardowa liczba zmiennoprzecinkowa (o dokadnoci do dwch
znakw). Liczba ta moe przyj wartoci: od `/9/69o`o486o`b/lo08
do b0/o8b8b0/0`4lo08, 0, i od b0/o8b8b0/0`4lo08
do `/9/69o`o486o`b/lo08. Jeli podany jest atrybut UN1S1ONlD, wartoci
ujemne s niedozwolone. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ DOUB|l
bez argumentw lub ||OATR) (gdzie R jest liczb z zakresu od 25 do 53)
oznacza liczb zmiennoprzecinkow o podwjnej precyzji.
DOUB|l PRlC1S1ON/, &) UNS1ONlD /lRO|1||
RlA|/, &) UNS1ONlD /lRO|1||
S to synonimy DOUB|l. Wyjtek: Jeli dla parametru s;_cce serwera
wczono opcj RlA|_AS_||OAT, synonimem ||OAT jest RlA|, a nie DOUB|l.
DlC1MA|/, &) UNS1ONlD /lRO|1||
Niezapakowana liczba staoprzecinkowa. Zachowanie kolumny tego typu
przypomina kolumn typu CHAR. Niezapakowana oznacza, e liczba jest
przechowywana w postaci acucha przy uyciu jednego znaku na kad cyfr
wartoci. Parametr / definiuje maksymaln liczb cyfr, a & liczb miejsc
po przecinku. W parametrze / nie s brane pod uwag: kropka dziesitna
(odpowiadajca w naszej notacji przecinkowi) i (dla liczb ujemnych) znak ,
cho jest dla nich zarezerwowane miejsce. Wartoci nie maj miejsc
po przecinku lub czci uamkowych, jeli & jest rwne 0. Maksymalny zakres
wartoci typu DlC1MA| jest taki sam, jak dla typu DOUB|l, ale rzeczywisty zakres
danej kolumny DlC1MA| moe by ograniczony przez wybr argumentw / i &.
Jeli podany jest atrybut UN1S1ONlD, wartoci ujemne s niedozwolone.
W przypadku braku argumentu &, domyln wartoci jest 0. Jeli pominity
jest parametr /, domyln wartoci jest 10.
W wersjach poprzedzajcych MySQL 3.23 argument / musi by wystarczajco
duy, by zawiera obszar potrzebny dla znaku i kropki dziesitnej.
DlC/,&) UNS1ONlD /lRO|1||
NUMlR1C/,&) UNS1ONlD /lRO|1||
|1XlD/, &) UNS1ONlD /lRO|1||
S to synonimy typu DlC1MA|.
W MySQL 4.1.0 dodano synonim |1XlD w celu osignicia kompatybilnoci
z innymi serwerami.
4.1. Przegld typw dla kolumny 129
4.1.2. Przegld typw zwizanych z dat i czasem
Poniej znajduje si podsumowanie typw kolumn przeznaczonych dla czasu i daty.
Dodatkowe informacje na ten temat mona znale w podrozdziale 4.3. Wymogi do-
tyczce pamici potrzebnej do przechowywania danych w kolumnach zostay podane
w podrozdziale 4.5.
DATl
Data. Obsugiwany zakres obejmuje daty od ``0000`0`` do `9999`o``.
W MySQL wartoci DATl wywietlane s w formacie `RRRRMMDD`, ale mona
przypisywa wartoci do kolumn DATl przy uyciu acuchw lub liczb.
DATlT1Ml
Kombinacja daty i czasu. Obsugiwany zakres obejmuje wartoci
od ``0000`0` 000000` do `9999`o` ob9b9`. W MySQL wartoci
DATlT1Ml wywietlane s w formacie `RRRRMMDD OOMMSS`, ale mona
przypisywa wartoci do kolumn DATlT1Ml przy uyciu acuchw lub liczb.
T1MlSTAMP/)
Znacznik czasu. Obsugiwany zakres rozpoczyna si od daty ``9/00`0``
i siga roku 0o/.
Kolumna typu T1MlSTAMP przydaje si do rejestracji daty i godziny operacji
wstawiania lub aktualizacji. Pierwszej kolumnie T1MlSTAMP w tabeli
automatycznie przypisywana jest data i czas ostatniej operacji, jeli tylko tych
wartoci nie wprowadzi rcznie uytkownik. Dowolnej kolumnie T1MlSTAMP
mona rwnie przypisa biec dat i godzin, wpisujc do niej warto NU||.
Od MySQL 4.1 wartoci T1MlSTAMP s zwracane w postaci acuchw
w formacie `RRRRMMDD OOMMSS`. Aby uzyska warto w postaci liczby,
naley doda do kolumn tego typu 0. Inne szerokoci wywietlania
znacznika czasu nie s obsugiwane.
W wersjach poprzedzajcych MySQL 4.1 wartoci T1MlSTAMP s wywietlane
w formacie RRRRMMDDOOMMSS, RRMMDDOOMMSS, RRRRMMDD lub RRMMDD w zalenoci
od tego, czy parametr / jest rwny 14 (albo go brak), 12, 8 lub 6. Mona jednak
przypisywa wartoci do kolumn T1MlSTAMP przy uyciu acuchw lub liczb.
Argument / wpywa tylko na sposb wywietlania kolumny T1MlSTAMP, a nie
na jej przechowywanie. Wartoci kolumny s zawsze zapisywane w czterech
bajtach. W MySQL od wersji 4.0.12 pojawia si opcja ne., dziki ktrej
mona zmieni dziaanie serwera, upodabniajc je do MySQL 4.1.
Naley odnotowa, e kolumny T1MlSTAMP/), gdzie /jest rwne 8 lub 14,
s traktowane jako liczby, natomiast reszta kolumn T1MlSTAMP/) jest
traktowana jako acuchy. Jest to rodzaj gwarancji, e uytkownik bdzie
mg wiarygodnie usuwa i przywraca tabele tego typu.
T1Ml
Godzina. Obsugiwany zakres obejmuje wartoci od `8o8b9b9`
do ` 8o8b9b9`. W MySQL wartoci T1Ml wywietlane s w formacie
` OOMMSS`, ale mona przypisa wartoci do kolumn T1Ml przy uyciu
zarwno acuchw, jak i liczb.
130 Rozdzia 4. Typy kolumn
YlAR|4)
Rok w formacie dwu- lub czterocyfrowym. Domylnym formatem jest rok
zapisany za pomoc czterech cyfr. W tym formacie dostpne wartoci nale
do przedziau od `90` do `bb oraz 0. W formacie dwucyfrowym wartoci
dopuszczalne to liczby z zakresu od /0 do 69, ktre reprezentuj daty od roku
1970 do 2069. W MySQL wartoci YlAR wywietlane s w formacie RRRR,
ale mona przypisa wartoci do kolumn YlAR przy uyciu tak acuchw,
jak i liczb. Typ YlAR jest niedostpny dla wersji wczeniejszych ni MySQL 3.22.
4.1.3. Przegld typw acuchowych
Poniej znajduje si przegld typw acuchowych. Dodatkowe informacje mona
znale w podrozdziale 4.4. Wymogi dotyczce pamici potrzebnej do przechowywa-
nia danych w kolumnach zostay podane w podrozdziale 4.5.
W niektrych przypadkach MySQL moe zmieni kolumn typu acuchowego na typ,
ktry bdzie si rni od zadeklarowanego w instrukcji CRlATl TAB|l lub A|TlR TAB|l.
Wicej informacji na ten temat znajduje si w podpunkcie 6.2.5.2.
Od wersji 4.1 w MySQL pojawia si zmiana, ktra wpywa na wiele typw kolumn typu
acuchowego. Definicja kolumn typu znakowego moe zawiera atrybut CHARACTlR
SlT, ktry okrela zestaw znakw i opcjonalnie porzdek sortowania. Dotyczy to typw
CHAR, VARCHAR, rnych typw TlXT oraz lNUM i SlT, na przykad:
CRF/TF T/B|F !
FNUMYCTVQ
YCTVQ|
1 lub 2 bajty w zalenoci od liczby wartoci wyliczenia
(maksymalnie 65 535)
SFTYCTVQ
YCTVQ|
1, 2, 3, 4 lub 8 bajtw w zalenoci od liczby elementw zestawu
(maksymalnie 64)
Typy VARCHAR, B|OB i TlXT maj zmienn dugo. Dla kadego ilo pamici potrzeb-
nej do przechowania wartoci bdzie zalee od faktycznej dugoci wartoci kolumny
(reprezentowanej w ostatniej tabeli przez .), a nie od maksymalnego moliwego roz-
miaru danego typu. Kolumna VARCHAR`0) na przykad moe przechowywa acuch
o maksymalnej dugoci 10 znakw. Faktyczna ilo wymaganej pamici to dugo
acucha (.) plus 1 bajt do zapisania dugoci acucha. Dla acucha `.|cc` parametr
. jest rwny 4, a wymagany rozmiar pamici to 5 bajtw.
Typy B|OB i TlXT wymagaj 1, 2, 3 lub 4 bajtw do zapisu dugoci wartoci kolumny
w zalenoci od maksymalnej moliwej dugoci tego typu (patrz punkt 4.4.2).
Rozmiar obiektu lNUM jest ustalany na podstawie liczby rnych wartoci wyliczenia.
Przy wyliczeniach do 255 moliwych wartoci uywany jest jeden bajt, a przy wyli-
czeniach do 65 535 wartoci uywane s 2 bajty (patrz punkt 4.4.3).
Rozmiar obiektu SlT jest okrelany przez liczb rnych elementw zestawu. Jeli ze-
staw ma rozmiar 0, obiekt zajmuje 0/).8 bajtw, ktr to warto zaokrgla si do
1, 2, 3, 4 lub 8 bajtw. Obiekt SlT moe mie do 64 elementw (patrz punkt 4.4.4).
4.6. Wybieranie odpowiedniego typu
dla kolumny
Aby jak najbardziej wydajnie korzysta z pamici, naley we wszystkich przypadkach
stara si stosowa typ, ktry bdzie jak najbardziej dokadny. Jeli na przykad w kolum-
nie liczb cakowitych bd przechowywane wartoci z zakresu od ` do 99999, najlep-
szym wyborem bdzie typ MlD1UM1NT UNS1ONlD. Ze wszystkich typw, ktre reprezentuj
wszystkie wymagane wartoci, zajmuje najmniej pamici.
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych 153
Powszechnym problemem jest dokadne przedstawianie wartoci walutowych. W MySQL
naley do tego uywa typu DlC1MA|, za pomoc ktrego wartoci zapisywane s w for-
mie acucha. Dziki temu nie traci si na dokadnoci (mimo to obliczenia z wartociami
DlC1MA| mog by wci wykonywane przy uyciu operacji dziaajcych na liczbach
z podwjn precyzj). Jeli dokadno nie jest zbyt wana, by moe wystarczajco
dobrym typem bdzie DOUB|l.
Aby uzyska wiksz dokadno, mona zawsze przeksztaci warto na typ stao-
przecinkowy, przechowywany w B1O1NT. Pozwoli to wykonywa wszystkie obliczenia
na liczbach cakowitych i tylko w razie potrzeby przeksztaca wynik z powrotem na
wartoci zmiennoprzecinkowe.
4.7. Wykorzystywanie typw kolumn
z innych mechanizmw baz danych
Aby uatwi uytkownikowi zastosowanie kodu pochodzcego od innych producentw,
moliwe jest odwzorowanie typw kolumn w sposb przedstawiony w poniszej tabeli.
Odwzorowania te upraszczaj operacj importu do MySQL definicji tabel z innych
mechanizmw baz danych:
Typ innych producentw Typ MySQL
BTN/RY/| C'/R/| BTN/RY
C'/R V/RYTN/| V/RC'/R/|
F|J/T4 F|J/T
F|J/T8 OJUB|F
TNT1 TTNYTNT
TNT SM/||TNT
TNT: MFOTUMTNT
TNT4 TNT
TNT8 BTTNT
|JN V/RBTN/RY MFOTUMB|JB
|JN V/RC'/R MFOTUMTFXT
|JN MFOTUMTFXT oc M,SJ| 410|
MTOO|FTNT MFOTUMTNT
V/RBTN/RY/| C'/R/| BTN/RY
Odwzorowanie typw kolumn jest wykonywane podczas tworzenia tabeli, po czym
oryginalne deklaracje typu zostaj usunite. Jeli uytkownik utworzy tabel z typami
stosowanymi przez innych producentw, po czym wyda polecenie DlSCR1Bl PC\YCA
VCDGNK, zostanie przedstawiona struktura tabeli z odpowiadajcymi im typami MySQL.
4 Spis treci
1.8.5. Rozbienoci midzy MySQL a standardem SQL ........................................ 60
1.8.6. Jak MySQL radzi sobie z ograniczeniami ................................................. 67
1.8.7. Znane bdy i projektowe braki w MySQL................................................ 69
Rozdzia 2. Struktura jzyka .............................................................................. 77
2.1. Literay................................................................................................................... 77
2.1.1. acuchy ................................................................................................... 77
2.1.2. Liczby........................................................................................................ 80
2.1.3. Wartoci szesnastkowe .............................................................................. 80
2.1.4. Wartoci logiczne ...................................................................................... 81
2.1.5. Wartoci NULL......................................................................................... 81
2.2. Nazwy baz danych, tabel, indeksw, kolumn i aliasw......................................... 81
2.2.1. Kwalifikatory identyfikatorw .................................................................. 83
2.2.2. Znaczenie wielkoci liter w nazwach identyfikatorw.............................. 83
2.3. Zmienne definiowane przez uytkownika.............................................................. 85
2.4. Zmienne systemowe............................................................................................... 87
2.4.1. Strukturalne zmienne systemowe .............................................................. 89
2.5. Skadnia komentarza .............................................................................................. 91
2.6. Traktowanie sw zastrzeonych w MySQL.......................................................... 92
Rozdzia 3. Obsuga zestaww znakw............................................................... 95
3.1. Oglne informacje o zestawach znakw i sortowaniu ........................................... 95
3.2. Zestawy znakw i porzdki sortowania w MySQL................................................ 96
3.3. Okrelanie domylnego zestawu znakw i sortowania........................................... 98
3.3.1. Zestaw znakw i sortowanie dla serwera................................................... 98
3.3.2. Zestaw znakw i sortowanie dla bazy danych........................................... 99
3.3.3. Zestaw znakw i sortowanie dla tabeli .................................................... 100
3.3.4. Zestaw znakw i sortowanie dla kolumny............................................... 100
3.3.5. Przykady przypisywania zestawu znakw i sortowania ......................... 101
3.3.6. Zestawy znakw i sortowanie dla poczenia .......................................... 102
3.3.7. Zestaw znakw i sortowanie dla acucha znakw.................................. 104
3.3.8. Wykorzystywanie COLLATE w instrukcjach SQL.................................... 105
3.3.9. Priorytet klauzuli COLLATE .................................................................. 106
3.3.10. Operator BINARY................................................................................... 106
3.3.11. Niektre przypadki specjalne, w ktrych trudno okreli sortowanie...... 106
3.3.12. Sortowania musz by odpowiednie dla danego zestawu znakw........... 107
3.3.13. Przykad wpywu porzdku sortowania ................................................... 108
3.4. Operacje, na ktre ma wpyw obsuga zestaww znakw.................................... 109
3.4.1. acuchy wyjciowe ............................................................................... 109
3.4.2. CONVERT()............................................................................................ 110
3.4.3. CAST() .................................................................................................... 110
3.4.4. Instrukcje SHOW .................................................................................... 111
3.5. Obsuga Unicode.................................................................................................. 112
3.6. UTF8 dla metadanych.......................................................................................... 113
3.7. Kompatybilno z innymi systemami zarzdzania baz danych .......................... 115
3.8. Nowy format pliku konfiguracji zestawu znakw................................................ 115
3.9. Narodowe zestawy znakw.................................................................................. 115
3.10. Aktualizacja zestaww znakw z MySQL 4.0..................................................... 116
3.10.1. Zestawy znakw w wersji 4.0 i odpowiadajce im w wersji 4.1 pary
skadajce si z zestawu znakw i sortowania......................................... 117
3.10.2. Przeksztacanie kolumn znakowych wersji 4.0 na format 4.1 ................. 118
3.11. Zestawy znakw i sortowania obsugiwane przez MySQL.................................. 118
3.11.1. Zestawy znakw standardu Unicode ....................................................... 119
3.11.2. Zestawy znakw zachodnioeuropejskich................................................. 120
3.11.3. Zestawy znakw dla Europy Centralnej .................................................. 121
Spis treci 5
3.11.4. Zestawy znakw poudniowoeuropejskich i rodkowowschodnich......... 122
3.11.5. Zestawy znakw regionu batyckiego...................................................... 123
3.11.6. Zestawy znakw dla cyrylicy................................................................... 123
3.11.7. Azjatyckie zestawy znakw..................................................................... 124
Rozdzia 4. Typy kolumn.................................................................................. 125
4.1. Przegld typw dla kolumny................................................................................ 126
4.1.1. Omwienie typw liczbowych ................................................................ 126
4.1.2. Przegld typw zwizanych z dat i czasem............................................ 129
4.1.3. Przegld typw acuchowych ................................................................ 130
4.2. Typy liczbowe...................................................................................................... 132
4.3. Typy zwizane z dat i czasem............................................................................ 135
4.3.1. Typy DATETIME, DATE i TIMESTAMP............................................. 137
4.3.2. Typ TIME................................................................................................ 142
4.3.3. Typ YEAR............................................................................................... 143
4.3.4. Problem roku 2000 a typy zwizane z dat.............................................. 144
4.4. Typy acuchowe ................................................................................................. 144
4.4.1. Typy CHAR i VARCHAR...................................................................... 144
4.4.2. Typy BLOB i TEXT................................................................................ 146
4.4.3. Typ Enum................................................................................................ 147
4.4.4. Typ SET .................................................................................................. 149
4.5. Rozmiar pamici potrzebnej dla typw kolumn................................................... 151
4.6. Wybieranie odpowiedniego typu dla kolumny..................................................... 152
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych ............... 153
Rozdzia 5. Funkcje i operatory........................................................................ 155
5.1. Operatory ............................................................................................................. 156
5.1.1. Nawiasy................................................................................................... 156
5.1.2. Operatory porwnania ............................................................................. 156
5.1.3. Operatory logiczne .................................................................................. 161
5.1.4. Operatory rozrniania wielkoci liter..................................................... 163
5.2. Funkcje kontroli przepywu ................................................................................. 163
5.3. Funkcje acuchowe............................................................................................. 166
5.3.1. Funkcje porwnywania acuchw.......................................................... 176
5.4. Funkcje liczbowe ................................................................................................. 178
5.4.1. Operatory arytmetyczne........................................................................... 178
5.4.2. Funkcje matematyczne ............................................................................ 180
5.5. Funkcje daty i godziny......................................................................................... 186
5.6. Funkcje obsugi wyszukiwania penotekstowego................................................. 202
5.6.1. Boolowskie wyszukiwania penotekstowe............................................... 205
5.6.2. Wyszukiwania penotekstowe z rozwijaniem zapytania .......................... 207
5.6.3. Ograniczenia dla wyszukiwania penotekstowego................................... 208
5.6.4. Modyfikowanie wyszukiwania penotekstowego MySQL ...................... 209
5.6.5. Lista rzeczy do zrobienia dla wyszukiwania penotekstowego................ 211
5.7. Funkcje konwersji typw..................................................................................... 211
5.8. Inne funkcje ......................................................................................................... 214
5.8.1. Funkcje bitowe ........................................................................................ 214
5.8.2. Funkcje szyfrujce................................................................................... 215
5.8.3. Funkcje informacyjne .............................................................................. 219
5.8.4. Funkcje rne .......................................................................................... 223
5.9. Funkcje i modyfikatory do zastosowania z klauzulami GROUP BY................... 226
5.9.1. Funkcje GROUP BY (agregujce)........................................................... 226
5.9.2. Modyfikatory GROUP BY...................................................................... 229
5.9.3. GROUP BY z ukrytymi polami............................................................... 232
6 Spis treci
Rozdzia 6. Skadnia instrukcji SQL .................................................................. 235
6.1. Instrukcje operujce na danych............................................................................ 235
6.1.1. Skadnia instrukcji DELETE................................................................... 235
6.1.2. Skadnia instrukcji DO ............................................................................ 238
6.1.3. Skadnia instrukcji HANDLER............................................................... 238
6.1.4. Skadnia instrukcji INSERT .................................................................... 240
6.1.5. Skadnia instrukcji LOAD DATA INFILE.............................................. 246
6.1.6. Skadnia instrukcji REPLACE................................................................. 255
6.1.7. Skadnia instrukcji SELECT.................................................................... 256
6.1.8. Skadnia podzapyta................................................................................ 265
6.1.9. Skadnia instrukcji TRUNCATE............................................................. 276
6.1.10. Skadnia instrukcji UPDATE................................................................... 276
6.2. Instrukcje definiowania danych ........................................................................... 278
6.2.1. Skadnia instrukcji ALTER DATABASE ............................................... 278
6.2.2. Skadnia instrukcji ALTER TABLE........................................................ 279
6.2.3. Skadnia instrukcji CREATE DATABASE............................................. 285
6.2.4. Skadnia instrukcji CREATE INDEX ..................................................... 285
6.2.5. Skadnia instrukcji CREATE TABLE..................................................... 287
6.2.6. Skadnia instrukcji DROP DATABASE.................................................. 301
6.2.7. Skadnia instrukcji DROP INDEX.......................................................... 302
6.2.8. Skadnia instrukcji DROP TABLE.......................................................... 302
6.2.9. Skadnia instrukcji RENAME TABLE.................................................... 303
6.3. Instrukcje programu MySQL............................................................................... 304
6.3.1. Skadnia instrukcji DESCRIBE
(odczytywanie informacji na temat kolumn) ........................................... 304
6.3.2. Skadnia instrukcji USE........................................................................... 304
6.4. Instrukcje obsugi transakcji i blokowania........................................................... 305
6.4.1. Skadnia instrukcji START TRANSACTION, COMMIT
oraz ROLLBACK.................................................................................... 305
6.4.2. Instrukcje niemoliwe do wycofania ....................................................... 306
6.4.3. Instrukcje wykonujce niejawne zatwierdzenie......................................... 306
6.4.4. Skadnia instrukcji SAVEPOINT i ROLLBACK TO SAVEPOINT....... 307
6.4.5. Skadnia instrukcji LOCK TABLES oraz UNLOCK TABLES .............. 307
6.4.6. Skadnia instrukcji SET TRANSACTION.............................................. 310
6.5. Administracja baz danych .................................................................................. 311
6.5.1. Instrukcje zarzdzajce kontami uytkownikw ....................................... 311
6.5.2. Instrukcje do konserwacji tabel ............................................................... 319
6.5.3. Skadnia instrukcji SET i SHOW ............................................................ 326
6.5.4. Inne instrukcje administracyjne ............................................................... 347
6.6. Instrukcje replikacji.............................................................................................. 352
6.6.1. Instrukcje SQL sterujce serwerem gwnym ......................................... 352
6.6.2. Instrukcje SQL sterujce serwerami podrzdnymi .................................. 354
Rozdzia 7. Rozszerzenia przestrzenne w MySQL............................................... 365
7.1. Wstp ................................................................................................................... 365
7.2. Model geometryczny OpenGIS............................................................................ 366
7.2.1. Hierarchia klas geometrycznych.............................................................. 366
7.2.2. Klasa Geometry ....................................................................................... 368
7.2.3. Klasa Point .............................................................................................. 369
7.2.4. Klasa Curve ............................................................................................. 369
7.2.5. Klasa LineString...................................................................................... 370
7.2.6. Klasa Surface........................................................................................... 370
7.2.7. Klasa Polygon.......................................................................................... 370
7.2.8. Klasa GeometryCollection....................................................................... 371
Spis treci 7
7.2.9. Klasa MultiPoint...................................................................................... 371
7.2.10. Klasa MultiCurve .................................................................................... 372
7.2.11. Klasa MultiLineString............................................................................. 372
7.2.12. Klasa MultiSurface .................................................................................. 372
7.2.13. Klasa MultiPolygon................................................................................. 373
7.3. Obsugiwane formaty danych przestrzennych...................................................... 373
7.3.1. Format tekstowy WKT............................................................................ 374
7.3.2. Format binarny WKB.............................................................................. 374
7.4. Tworzenie bazy danych z rozszerzeniami przestrzennymi................................... 375
7.4.1. Typy danych przestrzennych w MySQL ................................................. 375
7.4.2. Tworzenie wartoci przestrzennych......................................................... 376
7.4.3. Tworzenie kolumn przestrzennych.......................................................... 379
7.4.4. Wypenianie kolumn przestrzennych....................................................... 379
7.4.5. Pobieranie danych przestrzennych........................................................... 381
7.5. Analiza informacji przestrzennych....................................................................... 381
7.5.1. Funkcje konwersji formatw geometrycznych ........................................ 382
7.5.2. Funkcje klasy Geometry.......................................................................... 382
7.5.3. Funkcje tworzce nowe geometrie na podstawie istniejcych................. 388
7.5.4. Funkcje testujce relacje przestrzenne
midzy obiektami geometrycznymi ......................................................... 389
7.5.5. Relacje midzy minimalnymi prostoktami otaczajcymi
dla poszczeglnych geometrii.................................................................. 390
7.5.6. Funkcje sprawdzajce relacje przestrzenne pomidzy geometriami ........ 391
7.6. Optymalizacja analizy przestrzennej.................................................................... 392
7.6.1. Tworzenie indeksw przestrzennych....................................................... 392
7.6.2. Wykorzystanie indeksu przestrzennego................................................... 393
7.7. Zgodno MySQL ze standardem........................................................................ 395
7.7.1. Niezaimplementowane funkcje GIS ........................................................ 395
Rozdzia 8. Procedury i funkcje skadowane ..................................................... 397
8.1. Skadnia procedur skadowanych......................................................................... 398
8.1.1. Utrzymanie procedur skadowanych........................................................ 398
8.1.2. SHOW PROCEDURE STATUS oraz SHOW FUNCTION STATUS.... 401
8.1.3. Instrukcja CALL...................................................................................... 402
8.1.4. Instrukcja zoona BEGIN ... END.......................................................... 402
8.1.5. Instrukcja DECLARE.............................................................................. 402
8.1.6. Zmienne w procedurach skadowanych................................................... 402
8.1.7. Warunki i podprogramy obsugi .............................................................. 403
8.1.8. Kursory.................................................................................................... 405
8.1.9. Konstrukcje sterowania przepywem sterowania..................................... 406
Rozdzia 9. Obsuga bdw w MySQL .............................................................. 409
9.1. Zwracane bdy.................................................................................................... 409
9.2. Komunikaty bdw............................................................................................. 419
Dodatek A Rozwizywanie problemw z zapytaniami ........................................435
A.1. Zagadnienia zwizane z zapytaniami ................................................................... 435
A.1.1. Wielko liter przy wyszukiwaniu........................................................... 435
A.1.2. Problemy z kolumnami typu DATE ........................................................ 436
A.1.3. Problemy z wartociami NULL............................................................... 437
A.1.4. Problemy z synonimami kolumn ............................................................. 438
A.1.5. Bd wycofania dla tabel nietransakcyjnych............................................ 439
A.1.6. Usuwanie wierszy ze zwizanych tabel ................................................... 439
A.1.7. Rozwizywanie problemw z brakujcymi wierszami ............................ 440
A.1.8. Problemy z porwnaniami zmiennoprzecinkowymi................................ 441
8 Spis treci
A.2. Problemy zwizane z optymalizatorem................................................................ 443
A.3. Problemy z definicj tabel.................................................................................... 444
A.3.1. Problemy z instrukcj ALTER TABLE................................................... 444
A.3.2. Jak zmieni porzdek kolumn w tabeli .................................................... 445
A.3.3. Problemy z tabelami tymczasowymi ....................................................... 445
Dodatek B Wyraenia regularne w MySQL........................................................ 447
Skorowidz...................................................................................... 451
Rozdzia 4.
Typy kolumn
W MySQL dostpnych jest wiele typw danych, ktre mona pogrupowa w kilku pod-
stawowych kategoriach, takich jak typy liczbowe, typy zwizane z dat i czasem oraz
typy acuchowe. Na pocztku tego rozdziau przedstawiony zostanie przegld wspo-
mnianych przed chwil typw kolumn, po czym nastpi bardziej szczegowy opis ich
waciwoci z podziaem na poszczeglne kategorie i wreszcie zamieszczone zostanie
podsumowanie informacji dotyczcych wymaga co do rozmiaru pamici potrzebnej
do przechowania danej kolumny. Sam przegld jest z zamierzenia krtki. Dodatkowe
informacje o poszczeglnych typach kolumn, na przykad dopuszczalny format, w kt-
rym mona deklarowa wartoci, zostay uwzgldnione w szczegowych omwieniach.
Od wersji 4.1 MySQL rozpoznaje rozszerzenia do obsugi danych przestrzennych.
Informacje o typach przestrzennych znajduj si w rozdziale 7. tego podrcznika.
W czci opisu typw kolumn zastosowane zostay nastpujce reguy:
/
Wskazuje maksymalny rozmiar wywietlania liczby lub acucha.
Maksymalnym dopuszczalnym rozmiarem wywietlania jest 255.
&
Dotyczy typw zmiennoprzecinkowych i staoprzecinkowych. Okrela liczb
cyfr po kropce dziesitnej. Maksymalna dopuszczalna warto wynosi 30,
ale nie powinna przekracza /.
Nawiasy kwadratowe ( ) identyfikuj opcjonalne fragmenty deklaracji typu.
126 Rozdzia 4. Typy kolumn
4.1. Przegld typw dla kolumny
4.1.1. Omwienie typw liczbowych
Poniej znajduje si przegld liczbowych typw dla kolumn. Bardziej szczegowe
informacje mona znale w podrozdziale 4.2. Wymogi dotyczce rozmiaru pamici
potrzebnej do przechowywania kolumn znajduj si w podrozdziale 4.5.
Jeli dla kolumny liczbowej zostanie okrelony atrybut /lRO|1||, MySQL automatycznie
doda do kolumny atrybut UN1S1ONlD.
Naley uwaa podczas odejmowania dwch wartoci liczbowych, z ktrych jedna ma
typ UN1S1ONlD. Uzyskany wynik bdzie rwnie tego typu! patrz podrozdzia 5.7.
T1NY1NT/) UNS1ONlD /lRO|1||
Bardzo maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od `8
do `/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do bb.
B1T, BOO|, BOO|lAN
To s synonimy T1NY1NT`). Synonim BOO|lAN zosta dodany w MySQL 4.1.0.
Warto zerowa to inaczej fasz. Wartoci niezerowe traktowane s jako prawda.
W przyszoci wprowadzona zostanie pena, zgodna ze standardem SQL
obsuga typu boolowskiego.
SMA||1NT/) UNS1ONlD /lRO|1||
Maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od o/68
do o/6/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do 6bbob.
MlD1UM1NT/) UNS1ONlD /lRO|1||
rednia liczba cakowita. Dla liczb ze znakiem zakres wynosi od 8o88608
do 8o8860/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0
do `6///`b.
1NT/) UNS1ONlD /lRO|1||
Standardowa liczba cakowita. Dla liczb ze znakiem zakres wynosi
od `4/48o648 do `4/48o64/. W przypadku liczb bez znaku zakres
obejmuje wartoci od 0 do 49496/9b.
1NTlOlR/) UNS1ONlD /lRO|1||
Jest to synonim dla typu 1NT.
B1O1NT/) UNS1ONlD /lRO|1||
Dua liczba cakowita. Dla liczb ze znakiem zakres wynosi
od 9oo/0o68b4//b808 do 9oo/0o68b4//b80/. W przypadku liczb
bez znaku zakres obejmuje wartoci od 0 do `8446/440/o/09bb`6`b.
4.1. Przegld typw dla kolumny 127
Oto kilka spraw, o ktrych naley wiedzie odnonie kolumn typu B1O1NT:
Wszystkie obliczenia wykonywane s przy uyciu wartoci typu B1O1NT
lub DOUB|l ze znakiem. Oznacza to, e duych liczb cakowitych bez
znaku, wikszych ni 9oo/0o68b4//b80/ (63 bity), mona uywa tylko
z funkcjami bitowymi! Niezastosowanie si do tej zasady moe doprowadzi
do uzyskania w wyniku liczby, ktrej kilka ostatnich cyfr jest bdnych
z powodu bdw w zaokrglaniu podczas konwersji wartoci B1O1NT
na DOUB|l.
MySQL 4.0 potrafi obsugiwa B1O1NT w nastpujcych przypadkach:
Podczas wykorzystywania liczb cakowitych do przechowywania
duych wartoci bez znaku w kolumnie typu B1O1NT.
W M1NPC\YCAMQN) lub MAXPC\YCAMQN), gdzie PC\YCAMQN odnosi si
do kolumny B1O1NT.
Podczas korzystania z operatorw (midzy innymi , , *), gdy oba
argumenty s liczbami cakowitymi.
Zawsze istnieje moliwo zapisania w kolumnie B1O1NT dokadnej wartoci
liczby cakowitej. Wystarczy zapisa j przy uyciu acucha. W takim
przypadku zostanie dokonana konwersja acucha na liczb; konwersja
nie bdzie wymaga poredniego etapu przeksztacajcego liczb na jej
odpowiednik o podwjnej precyzji.
Podczas korzystania z operatorw , i * stosowana jest arytmetyka
B1O1NT, jeli oba argumenty maj warto liczby cakowitej! To oznacza,
e pomnoenie dwch duych liczb cakowitych (lub wynikw funkcji,
ktra zwraca liczby cakowite) moe spowodowa nieoczekiwane
rezultaty, jeli wynik przekroczy liczb 9oo/0o68b4//b80/.
||OATR) UNS1ONlD /lRO|1||
Liczba zmiennoprzecinkowa. Parametr R oznacza precyzj i moe przyjmowa
warto od 0 do 14 dla liczb zmiennoprzecinkowych o dokadnoci do jednego
znaku i od 25 do 53 dla liczb zmiennoprzecinkowych o dokadnoci do dwch
znakw. To przypomina opisane poniej typy ||OAT i DOUB|l. Typ ||OATR)
ma ten sam zakres, jaki posiadaj odpowiadajce mu typy ||OAT i DOUB|l,
ale w jego przypadku niezdefiniowany jest maksymalny rozmiar wywietlania
i liczba miejsc po przecinku.
Od wersji 3.23 MySQL jest to prawdziwa warto zmiennoprzecinkowa.
W wersjach wczeniejszych liczba typu ||OATR) bya zawsze liczb o dwch
miejscach po przecinku.
Ta skadnia zostaa dodana w celu zachowania zgodnoci ze standardem ODBC.
Stosowanie typu ||OAT moe spowodowa wystpienie pewnych
nieoczekiwanych problemw, poniewa wszystkie obliczenia w MySQL
s wykonywane z podwjn precyzj patrz punkt A.1.7).
||OAT/, &) UNS1ONlD /lRO|1||
128 Rozdzia 4. Typy kolumn
Maa liczba zmiennoprzecinkowa (o dokadnoci do jednego znaku). Liczba
ta moe przyj wartoci: od o408o466lo8 do ``/b494ob`lo8, 0,
i od ``/b494ob`lo8 do o408o466lo8. Jeli podany jest atrybut UN1S1ONlD,
niedozwolone s wartoci ujemne. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ ||OAT bez argumentw
lub typ ||OATR) (gdzie Rjest liczb z zakresu od 0 do 24) oznacza liczb
zmiennoprzecinkow o pojedynczej precyzji.
DOUB|l/, &) UNS1ONlD /lRO|1||
Standardowa liczba zmiennoprzecinkowa (o dokadnoci do dwch
znakw). Liczba ta moe przyj wartoci: od `/9/69o`o486o`b/lo08
do b0/o8b8b0/0`4lo08, 0, i od b0/o8b8b0/0`4lo08
do `/9/69o`o486o`b/lo08. Jeli podany jest atrybut UN1S1ONlD, wartoci
ujemne s niedozwolone. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ DOUB|l
bez argumentw lub ||OATR) (gdzie R jest liczb z zakresu od 25 do 53)
oznacza liczb zmiennoprzecinkow o podwjnej precyzji.
DOUB|l PRlC1S1ON/, &) UNS1ONlD /lRO|1||
RlA|/, &) UNS1ONlD /lRO|1||
S to synonimy DOUB|l. Wyjtek: Jeli dla parametru s;_cce serwera
wczono opcj RlA|_AS_||OAT, synonimem ||OAT jest RlA|, a nie DOUB|l.
DlC1MA|/, &) UNS1ONlD /lRO|1||
Niezapakowana liczba staoprzecinkowa. Zachowanie kolumny tego typu
przypomina kolumn typu CHAR. Niezapakowana oznacza, e liczba jest
przechowywana w postaci acucha przy uyciu jednego znaku na kad cyfr
wartoci. Parametr / definiuje maksymaln liczb cyfr, a & liczb miejsc
po przecinku. W parametrze / nie s brane pod uwag: kropka dziesitna
(odpowiadajca w naszej notacji przecinkowi) i (dla liczb ujemnych) znak ,
cho jest dla nich zarezerwowane miejsce. Wartoci nie maj miejsc
po przecinku lub czci uamkowych, jeli & jest rwne 0. Maksymalny zakres
wartoci typu DlC1MA| jest taki sam, jak dla typu DOUB|l, ale rzeczywisty zakres
danej kolumny DlC1MA| moe by ograniczony przez wybr argumentw / i &.
Jeli podany jest atrybut UN1S1ONlD, wartoci ujemne s niedozwolone.
W przypadku braku argumentu &, domyln wartoci jest 0. Jeli pominity
jest parametr /, domyln wartoci jest 10.
W wersjach poprzedzajcych MySQL 3.23 argument / musi by wystarczajco
duy, by zawiera obszar potrzebny dla znaku i kropki dziesitnej.
DlC/,&) UNS1ONlD /lRO|1||
NUMlR1C/,&) UNS1ONlD /lRO|1||
|1XlD/, &) UNS1ONlD /lRO|1||
S to synonimy typu DlC1MA|.
W MySQL 4.1.0 dodano synonim |1XlD w celu osignicia kompatybilnoci
z innymi serwerami.
4.1. Przegld typw dla kolumny 129
4.1.2. Przegld typw zwizanych z dat i czasem
Poniej znajduje si podsumowanie typw kolumn przeznaczonych dla czasu i daty.
Dodatkowe informacje na ten temat mona znale w podrozdziale 4.3. Wymogi do-
tyczce pamici potrzebnej do przechowywania danych w kolumnach zostay podane
w podrozdziale 4.5.
DATl
Data. Obsugiwany zakres obejmuje daty od ``0000`0`` do `9999`o``.
W MySQL wartoci DATl wywietlane s w formacie `RRRRMMDD`, ale mona
przypisywa wartoci do kolumn DATl przy uyciu acuchw lub liczb.
DATlT1Ml
Kombinacja daty i czasu. Obsugiwany zakres obejmuje wartoci
od ``0000`0` 000000` do `9999`o` ob9b9`. W MySQL wartoci
DATlT1Ml wywietlane s w formacie `RRRRMMDD OOMMSS`, ale mona
przypisywa wartoci do kolumn DATlT1Ml przy uyciu acuchw lub liczb.
T1MlSTAMP/)
Znacznik czasu. Obsugiwany zakres rozpoczyna si od daty ``9/00`0``
i siga roku 0o/.
Kolumna typu T1MlSTAMP przydaje si do rejestracji daty i godziny operacji
wstawiania lub aktualizacji. Pierwszej kolumnie T1MlSTAMP w tabeli
automatycznie przypisywana jest data i czas ostatniej operacji, jeli tylko tych
wartoci nie wprowadzi rcznie uytkownik. Dowolnej kolumnie T1MlSTAMP
mona rwnie przypisa biec dat i godzin, wpisujc do niej warto NU||.
Od MySQL 4.1 wartoci T1MlSTAMP s zwracane w postaci acuchw
w formacie `RRRRMMDD OOMMSS`. Aby uzyska warto w postaci liczby,
naley doda do kolumn tego typu 0. Inne szerokoci wywietlania
znacznika czasu nie s obsugiwane.
W wersjach poprzedzajcych MySQL 4.1 wartoci T1MlSTAMP s wywietlane
w formacie RRRRMMDDOOMMSS, RRMMDDOOMMSS, RRRRMMDD lub RRMMDD w zalenoci
od tego, czy parametr / jest rwny 14 (albo go brak), 12, 8 lub 6. Mona jednak
przypisywa wartoci do kolumn T1MlSTAMP przy uyciu acuchw lub liczb.
Argument / wpywa tylko na sposb wywietlania kolumny T1MlSTAMP, a nie
na jej przechowywanie. Wartoci kolumny s zawsze zapisywane w czterech
bajtach. W MySQL od wersji 4.0.12 pojawia si opcja ne., dziki ktrej
mona zmieni dziaanie serwera, upodabniajc je do MySQL 4.1.
Naley odnotowa, e kolumny T1MlSTAMP/), gdzie /jest rwne 8 lub 14,
s traktowane jako liczby, natomiast reszta kolumn T1MlSTAMP/) jest
traktowana jako acuchy. Jest to rodzaj gwarancji, e uytkownik bdzie
mg wiarygodnie usuwa i przywraca tabele tego typu.
T1Ml
Godzina. Obsugiwany zakres obejmuje wartoci od `8o8b9b9`
do ` 8o8b9b9`. W MySQL wartoci T1Ml wywietlane s w formacie
` OOMMSS`, ale mona przypisa wartoci do kolumn T1Ml przy uyciu
zarwno acuchw, jak i liczb.
130 Rozdzia 4. Typy kolumn
YlAR|4)
Rok w formacie dwu- lub czterocyfrowym. Domylnym formatem jest rok
zapisany za pomoc czterech cyfr. W tym formacie dostpne wartoci nale
do przedziau od `90` do `bb oraz 0. W formacie dwucyfrowym wartoci
dopuszczalne to liczby z zakresu od /0 do 69, ktre reprezentuj daty od roku
1970 do 2069. W MySQL wartoci YlAR wywietlane s w formacie RRRR,
ale mona przypisa wartoci do kolumn YlAR przy uyciu tak acuchw,
jak i liczb. Typ YlAR jest niedostpny dla wersji wczeniejszych ni MySQL 3.22.
4.1.3. Przegld typw acuchowych
Poniej znajduje si przegld typw acuchowych. Dodatkowe informacje mona
znale w podrozdziale 4.4. Wymogi dotyczce pamici potrzebnej do przechowywa-
nia danych w kolumnach zostay podane w podrozdziale 4.5.
W niektrych przypadkach MySQL moe zmieni kolumn typu acuchowego na typ,
ktry bdzie si rni od zadeklarowanego w instrukcji CRlATl TAB|l lub A|TlR TAB|l.
Wicej informacji na ten temat znajduje si w podpunkcie 6.2.5.2.
Od wersji 4.1 w MySQL pojawia si zmiana, ktra wpywa na wiele typw kolumn typu
acuchowego. Definicja kolumn typu znakowego moe zawiera atrybut CHARACTlR
SlT, ktry okrela zestaw znakw i opcjonalnie porzdek sortowania. Dotyczy to typw
CHAR, VARCHAR, rnych typw TlXT oraz lNUM i SlT, na przykad:
CRF/TF T/B|F !
FNUMYCTVQ
YCTVQ|
1 lub 2 bajty w zalenoci od liczby wartoci wyliczenia
(maksymalnie 65 535)
SFTYCTVQ
YCTVQ|
1, 2, 3, 4 lub 8 bajtw w zalenoci od liczby elementw zestawu
(maksymalnie 64)
Typy VARCHAR, B|OB i TlXT maj zmienn dugo. Dla kadego ilo pamici potrzeb-
nej do przechowania wartoci bdzie zalee od faktycznej dugoci wartoci kolumny
(reprezentowanej w ostatniej tabeli przez .), a nie od maksymalnego moliwego roz-
miaru danego typu. Kolumna VARCHAR`0) na przykad moe przechowywa acuch
o maksymalnej dugoci 10 znakw. Faktyczna ilo wymaganej pamici to dugo
acucha (.) plus 1 bajt do zapisania dugoci acucha. Dla acucha `.|cc` parametr
. jest rwny 4, a wymagany rozmiar pamici to 5 bajtw.
Typy B|OB i TlXT wymagaj 1, 2, 3 lub 4 bajtw do zapisu dugoci wartoci kolumny
w zalenoci od maksymalnej moliwej dugoci tego typu (patrz punkt 4.4.2).
Rozmiar obiektu lNUM jest ustalany na podstawie liczby rnych wartoci wyliczenia.
Przy wyliczeniach do 255 moliwych wartoci uywany jest jeden bajt, a przy wyli-
czeniach do 65 535 wartoci uywane s 2 bajty (patrz punkt 4.4.3).
Rozmiar obiektu SlT jest okrelany przez liczb rnych elementw zestawu. Jeli ze-
staw ma rozmiar 0, obiekt zajmuje 0/).8 bajtw, ktr to warto zaokrgla si do
1, 2, 3, 4 lub 8 bajtw. Obiekt SlT moe mie do 64 elementw (patrz punkt 4.4.4).
4.6. Wybieranie odpowiedniego typu
dla kolumny
Aby jak najbardziej wydajnie korzysta z pamici, naley we wszystkich przypadkach
stara si stosowa typ, ktry bdzie jak najbardziej dokadny. Jeli na przykad w kolum-
nie liczb cakowitych bd przechowywane wartoci z zakresu od ` do 99999, najlep-
szym wyborem bdzie typ MlD1UM1NT UNS1ONlD. Ze wszystkich typw, ktre reprezentuj
wszystkie wymagane wartoci, zajmuje najmniej pamici.
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych 153
Powszechnym problemem jest dokadne przedstawianie wartoci walutowych. W MySQL
naley do tego uywa typu DlC1MA|, za pomoc ktrego wartoci zapisywane s w for-
mie acucha. Dziki temu nie traci si na dokadnoci (mimo to obliczenia z wartociami
DlC1MA| mog by wci wykonywane przy uyciu operacji dziaajcych na liczbach
z podwjn precyzj). Jeli dokadno nie jest zbyt wana, by moe wystarczajco
dobrym typem bdzie DOUB|l.
Aby uzyska wiksz dokadno, mona zawsze przeksztaci warto na typ stao-
przecinkowy, przechowywany w B1O1NT. Pozwoli to wykonywa wszystkie obliczenia
na liczbach cakowitych i tylko w razie potrzeby przeksztaca wynik z powrotem na
wartoci zmiennoprzecinkowe.
4.7. Wykorzystywanie typw kolumn
z innych mechanizmw baz danych
Aby uatwi uytkownikowi zastosowanie kodu pochodzcego od innych producentw,
moliwe jest odwzorowanie typw kolumn w sposb przedstawiony w poniszej tabeli.
Odwzorowania te upraszczaj operacj importu do MySQL definicji tabel z innych
mechanizmw baz danych:
Typ innych producentw Typ MySQL
BTN/RY/| C'/R/| BTN/RY
C'/R V/RYTN/| V/RC'/R/|
F|J/T4 F|J/T
F|J/T8 OJUB|F
TNT1 TTNYTNT
TNT SM/||TNT
TNT: MFOTUMTNT
TNT4 TNT
TNT8 BTTNT
|JN V/RBTN/RY MFOTUMB|JB
|JN V/RC'/R MFOTUMTFXT
|JN MFOTUMTFXT oc M,SJ| 410|
MTOO|FTNT MFOTUMTNT
V/RBTN/RY/| C'/R/| BTN/RY
Odwzorowanie typw kolumn jest wykonywane podczas tworzenia tabeli, po czym
oryginalne deklaracje typu zostaj usunite. Jeli uytkownik utworzy tabel z typami
stosowanymi przez innych producentw, po czym wyda polecenie DlSCR1Bl PC\YCA
VCDGNK, zostanie przedstawiona struktura tabeli z odpowiadajcymi im typami MySQL.
4 Spis treci
1.8.5. Rozbienoci midzy MySQL a standardem SQL ........................................ 60
1.8.6. Jak MySQL radzi sobie z ograniczeniami ................................................. 67
1.8.7. Znane bdy i projektowe braki w MySQL................................................ 69
Rozdzia 2. Struktura jzyka .............................................................................. 77
2.1. Literay................................................................................................................... 77
2.1.1. acuchy ................................................................................................... 77
2.1.2. Liczby........................................................................................................ 80
2.1.3. Wartoci szesnastkowe .............................................................................. 80
2.1.4. Wartoci logiczne ...................................................................................... 81
2.1.5. Wartoci NULL......................................................................................... 81
2.2. Nazwy baz danych, tabel, indeksw, kolumn i aliasw......................................... 81
2.2.1. Kwalifikatory identyfikatorw .................................................................. 83
2.2.2. Znaczenie wielkoci liter w nazwach identyfikatorw.............................. 83
2.3. Zmienne definiowane przez uytkownika.............................................................. 85
2.4. Zmienne systemowe............................................................................................... 87
2.4.1. Strukturalne zmienne systemowe .............................................................. 89
2.5. Skadnia komentarza .............................................................................................. 91
2.6. Traktowanie sw zastrzeonych w MySQL.......................................................... 92
Rozdzia 3. Obsuga zestaww znakw............................................................... 95
3.1. Oglne informacje o zestawach znakw i sortowaniu ........................................... 95
3.2. Zestawy znakw i porzdki sortowania w MySQL................................................ 96
3.3. Okrelanie domylnego zestawu znakw i sortowania........................................... 98
3.3.1. Zestaw znakw i sortowanie dla serwera................................................... 98
3.3.2. Zestaw znakw i sortowanie dla bazy danych........................................... 99
3.3.3. Zestaw znakw i sortowanie dla tabeli .................................................... 100
3.3.4. Zestaw znakw i sortowanie dla kolumny............................................... 100
3.3.5. Przykady przypisywania zestawu znakw i sortowania ......................... 101
3.3.6. Zestawy znakw i sortowanie dla poczenia .......................................... 102
3.3.7. Zestaw znakw i sortowanie dla acucha znakw.................................. 104
3.3.8. Wykorzystywanie COLLATE w instrukcjach SQL.................................... 105
3.3.9. Priorytet klauzuli COLLATE .................................................................. 106
3.3.10. Operator BINARY................................................................................... 106
3.3.11. Niektre przypadki specjalne, w ktrych trudno okreli sortowanie...... 106
3.3.12. Sortowania musz by odpowiednie dla danego zestawu znakw........... 107
3.3.13. Przykad wpywu porzdku sortowania ................................................... 108
3.4. Operacje, na ktre ma wpyw obsuga zestaww znakw.................................... 109
3.4.1. acuchy wyjciowe ............................................................................... 109
3.4.2. CONVERT()............................................................................................ 110
3.4.3. CAST() .................................................................................................... 110
3.4.4. Instrukcje SHOW .................................................................................... 111
3.5. Obsuga Unicode.................................................................................................. 112
3.6. UTF8 dla metadanych.......................................................................................... 113
3.7. Kompatybilno z innymi systemami zarzdzania baz danych .......................... 115
3.8. Nowy format pliku konfiguracji zestawu znakw................................................ 115
3.9. Narodowe zestawy znakw.................................................................................. 115
3.10. Aktualizacja zestaww znakw z MySQL 4.0..................................................... 116
3.10.1. Zestawy znakw w wersji 4.0 i odpowiadajce im w wersji 4.1 pary
skadajce si z zestawu znakw i sortowania......................................... 117
3.10.2. Przeksztacanie kolumn znakowych wersji 4.0 na format 4.1 ................. 118
3.11. Zestawy znakw i sortowania obsugiwane przez MySQL.................................. 118
3.11.1. Zestawy znakw standardu Unicode ....................................................... 119
3.11.2. Zestawy znakw zachodnioeuropejskich................................................. 120
3.11.3. Zestawy znakw dla Europy Centralnej .................................................. 121
Spis treci 5
3.11.4. Zestawy znakw poudniowoeuropejskich i rodkowowschodnich......... 122
3.11.5. Zestawy znakw regionu batyckiego...................................................... 123
3.11.6. Zestawy znakw dla cyrylicy................................................................... 123
3.11.7. Azjatyckie zestawy znakw..................................................................... 124
Rozdzia 4. Typy kolumn.................................................................................. 125
4.1. Przegld typw dla kolumny................................................................................ 126
4.1.1. Omwienie typw liczbowych ................................................................ 126
4.1.2. Przegld typw zwizanych z dat i czasem............................................ 129
4.1.3. Przegld typw acuchowych ................................................................ 130
4.2. Typy liczbowe...................................................................................................... 132
4.3. Typy zwizane z dat i czasem............................................................................ 135
4.3.1. Typy DATETIME, DATE i TIMESTAMP............................................. 137
4.3.2. Typ TIME................................................................................................ 142
4.3.3. Typ YEAR............................................................................................... 143
4.3.4. Problem roku 2000 a typy zwizane z dat.............................................. 144
4.4. Typy acuchowe ................................................................................................. 144
4.4.1. Typy CHAR i VARCHAR...................................................................... 144
4.4.2. Typy BLOB i TEXT................................................................................ 146
4.4.3. Typ Enum................................................................................................ 147
4.4.4. Typ SET .................................................................................................. 149
4.5. Rozmiar pamici potrzebnej dla typw kolumn................................................... 151
4.6. Wybieranie odpowiedniego typu dla kolumny..................................................... 152
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych ............... 153
Rozdzia 5. Funkcje i operatory........................................................................ 155
5.1. Operatory ............................................................................................................. 156
5.1.1. Nawiasy................................................................................................... 156
5.1.2. Operatory porwnania ............................................................................. 156
5.1.3. Operatory logiczne .................................................................................. 161
5.1.4. Operatory rozrniania wielkoci liter..................................................... 163
5.2. Funkcje kontroli przepywu ................................................................................. 163
5.3. Funkcje acuchowe............................................................................................. 166
5.3.1. Funkcje porwnywania acuchw.......................................................... 176
5.4. Funkcje liczbowe ................................................................................................. 178
5.4.1. Operatory arytmetyczne........................................................................... 178
5.4.2. Funkcje matematyczne ............................................................................ 180
5.5. Funkcje daty i godziny......................................................................................... 186
5.6. Funkcje obsugi wyszukiwania penotekstowego................................................. 202
5.6.1. Boolowskie wyszukiwania penotekstowe............................................... 205
5.6.2. Wyszukiwania penotekstowe z rozwijaniem zapytania .......................... 207
5.6.3. Ograniczenia dla wyszukiwania penotekstowego................................... 208
5.6.4. Modyfikowanie wyszukiwania penotekstowego MySQL ...................... 209
5.6.5. Lista rzeczy do zrobienia dla wyszukiwania penotekstowego................ 211
5.7. Funkcje konwersji typw..................................................................................... 211
5.8. Inne funkcje ......................................................................................................... 214
5.8.1. Funkcje bitowe ........................................................................................ 214
5.8.2. Funkcje szyfrujce................................................................................... 215
5.8.3. Funkcje informacyjne .............................................................................. 219
5.8.4. Funkcje rne .......................................................................................... 223
5.9. Funkcje i modyfikatory do zastosowania z klauzulami GROUP BY................... 226
5.9.1. Funkcje GROUP BY (agregujce)........................................................... 226
5.9.2. Modyfikatory GROUP BY...................................................................... 229
5.9.3. GROUP BY z ukrytymi polami............................................................... 232
6 Spis treci
Rozdzia 6. Skadnia instrukcji SQL .................................................................. 235
6.1. Instrukcje operujce na danych............................................................................ 235
6.1.1. Skadnia instrukcji DELETE................................................................... 235
6.1.2. Skadnia instrukcji DO ............................................................................ 238
6.1.3. Skadnia instrukcji HANDLER............................................................... 238
6.1.4. Skadnia instrukcji INSERT .................................................................... 240
6.1.5. Skadnia instrukcji LOAD DATA INFILE.............................................. 246
6.1.6. Skadnia instrukcji REPLACE................................................................. 255
6.1.7. Skadnia instrukcji SELECT.................................................................... 256
6.1.8. Skadnia podzapyta................................................................................ 265
6.1.9. Skadnia instrukcji TRUNCATE............................................................. 276
6.1.10. Skadnia instrukcji UPDATE................................................................... 276
6.2. Instrukcje definiowania danych ........................................................................... 278
6.2.1. Skadnia instrukcji ALTER DATABASE ............................................... 278
6.2.2. Skadnia instrukcji ALTER TABLE........................................................ 279
6.2.3. Skadnia instrukcji CREATE DATABASE............................................. 285
6.2.4. Skadnia instrukcji CREATE INDEX ..................................................... 285
6.2.5. Skadnia instrukcji CREATE TABLE..................................................... 287
6.2.6. Skadnia instrukcji DROP DATABASE.................................................. 301
6.2.7. Skadnia instrukcji DROP INDEX.......................................................... 302
6.2.8. Skadnia instrukcji DROP TABLE.......................................................... 302
6.2.9. Skadnia instrukcji RENAME TABLE.................................................... 303
6.3. Instrukcje programu MySQL............................................................................... 304
6.3.1. Skadnia instrukcji DESCRIBE
(odczytywanie informacji na temat kolumn) ........................................... 304
6.3.2. Skadnia instrukcji USE........................................................................... 304
6.4. Instrukcje obsugi transakcji i blokowania........................................................... 305
6.4.1. Skadnia instrukcji START TRANSACTION, COMMIT
oraz ROLLBACK.................................................................................... 305
6.4.2. Instrukcje niemoliwe do wycofania ....................................................... 306
6.4.3. Instrukcje wykonujce niejawne zatwierdzenie......................................... 306
6.4.4. Skadnia instrukcji SAVEPOINT i ROLLBACK TO SAVEPOINT....... 307
6.4.5. Skadnia instrukcji LOCK TABLES oraz UNLOCK TABLES .............. 307
6.4.6. Skadnia instrukcji SET TRANSACTION.............................................. 310
6.5. Administracja baz danych .................................................................................. 311
6.5.1. Instrukcje zarzdzajce kontami uytkownikw ....................................... 311
6.5.2. Instrukcje do konserwacji tabel ............................................................... 319
6.5.3. Skadnia instrukcji SET i SHOW ............................................................ 326
6.5.4. Inne instrukcje administracyjne ............................................................... 347
6.6. Instrukcje replikacji.............................................................................................. 352
6.6.1. Instrukcje SQL sterujce serwerem gwnym ......................................... 352
6.6.2. Instrukcje SQL sterujce serwerami podrzdnymi .................................. 354
Rozdzia 7. Rozszerzenia przestrzenne w MySQL............................................... 365
7.1. Wstp ................................................................................................................... 365
7.2. Model geometryczny OpenGIS............................................................................ 366
7.2.1. Hierarchia klas geometrycznych.............................................................. 366
7.2.2. Klasa Geometry ....................................................................................... 368
7.2.3. Klasa Point .............................................................................................. 369
7.2.4. Klasa Curve ............................................................................................. 369
7.2.5. Klasa LineString...................................................................................... 370
7.2.6. Klasa Surface........................................................................................... 370
7.2.7. Klasa Polygon.......................................................................................... 370
7.2.8. Klasa GeometryCollection....................................................................... 371
Spis treci 7
7.2.9. Klasa MultiPoint...................................................................................... 371
7.2.10. Klasa MultiCurve .................................................................................... 372
7.2.11. Klasa MultiLineString............................................................................. 372
7.2.12. Klasa MultiSurface .................................................................................. 372
7.2.13. Klasa MultiPolygon................................................................................. 373
7.3. Obsugiwane formaty danych przestrzennych...................................................... 373
7.3.1. Format tekstowy WKT............................................................................ 374
7.3.2. Format binarny WKB.............................................................................. 374
7.4. Tworzenie bazy danych z rozszerzeniami przestrzennymi................................... 375
7.4.1. Typy danych przestrzennych w MySQL ................................................. 375
7.4.2. Tworzenie wartoci przestrzennych......................................................... 376
7.4.3. Tworzenie kolumn przestrzennych.......................................................... 379
7.4.4. Wypenianie kolumn przestrzennych....................................................... 379
7.4.5. Pobieranie danych przestrzennych........................................................... 381
7.5. Analiza informacji przestrzennych....................................................................... 381
7.5.1. Funkcje konwersji formatw geometrycznych ........................................ 382
7.5.2. Funkcje klasy Geometry.......................................................................... 382
7.5.3. Funkcje tworzce nowe geometrie na podstawie istniejcych................. 388
7.5.4. Funkcje testujce relacje przestrzenne
midzy obiektami geometrycznymi ......................................................... 389
7.5.5. Relacje midzy minimalnymi prostoktami otaczajcymi
dla poszczeglnych geometrii.................................................................. 390
7.5.6. Funkcje sprawdzajce relacje przestrzenne pomidzy geometriami ........ 391
7.6. Optymalizacja analizy przestrzennej.................................................................... 392
7.6.1. Tworzenie indeksw przestrzennych....................................................... 392
7.6.2. Wykorzystanie indeksu przestrzennego................................................... 393
7.7. Zgodno MySQL ze standardem........................................................................ 395
7.7.1. Niezaimplementowane funkcje GIS ........................................................ 395
Rozdzia 8. Procedury i funkcje skadowane ..................................................... 397
8.1. Skadnia procedur skadowanych......................................................................... 398
8.1.1. Utrzymanie procedur skadowanych........................................................ 398
8.1.2. SHOW PROCEDURE STATUS oraz SHOW FUNCTION STATUS.... 401
8.1.3. Instrukcja CALL...................................................................................... 402
8.1.4. Instrukcja zoona BEGIN ... END.......................................................... 402
8.1.5. Instrukcja DECLARE.............................................................................. 402
8.1.6. Zmienne w procedurach skadowanych................................................... 402
8.1.7. Warunki i podprogramy obsugi .............................................................. 403
8.1.8. Kursory.................................................................................................... 405
8.1.9. Konstrukcje sterowania przepywem sterowania..................................... 406
Rozdzia 9. Obsuga bdw w MySQL .............................................................. 409
9.1. Zwracane bdy.................................................................................................... 409
9.2. Komunikaty bdw............................................................................................. 419
Dodatek A Rozwizywanie problemw z zapytaniami ........................................435
A.1. Zagadnienia zwizane z zapytaniami ................................................................... 435
A.1.1. Wielko liter przy wyszukiwaniu........................................................... 435
A.1.2. Problemy z kolumnami typu DATE ........................................................ 436
A.1.3. Problemy z wartociami NULL............................................................... 437
A.1.4. Problemy z synonimami kolumn ............................................................. 438
A.1.5. Bd wycofania dla tabel nietransakcyjnych............................................ 439
A.1.6. Usuwanie wierszy ze zwizanych tabel ................................................... 439
A.1.7. Rozwizywanie problemw z brakujcymi wierszami ............................ 440
A.1.8. Problemy z porwnaniami zmiennoprzecinkowymi................................ 441
8 Spis treci
A.2. Problemy zwizane z optymalizatorem................................................................ 443
A.3. Problemy z definicj tabel.................................................................................... 444
A.3.1. Problemy z instrukcj ALTER TABLE................................................... 444
A.3.2. Jak zmieni porzdek kolumn w tabeli .................................................... 445
A.3.3. Problemy z tabelami tymczasowymi ....................................................... 445
Dodatek B Wyraenia regularne w MySQL........................................................ 447
Skorowidz...................................................................................... 451
Rozdzia 4.
Typy kolumn
W MySQL dostpnych jest wiele typw danych, ktre mona pogrupowa w kilku pod-
stawowych kategoriach, takich jak typy liczbowe, typy zwizane z dat i czasem oraz
typy acuchowe. Na pocztku tego rozdziau przedstawiony zostanie przegld wspo-
mnianych przed chwil typw kolumn, po czym nastpi bardziej szczegowy opis ich
waciwoci z podziaem na poszczeglne kategorie i wreszcie zamieszczone zostanie
podsumowanie informacji dotyczcych wymaga co do rozmiaru pamici potrzebnej
do przechowania danej kolumny. Sam przegld jest z zamierzenia krtki. Dodatkowe
informacje o poszczeglnych typach kolumn, na przykad dopuszczalny format, w kt-
rym mona deklarowa wartoci, zostay uwzgldnione w szczegowych omwieniach.
Od wersji 4.1 MySQL rozpoznaje rozszerzenia do obsugi danych przestrzennych.
Informacje o typach przestrzennych znajduj si w rozdziale 7. tego podrcznika.
W czci opisu typw kolumn zastosowane zostay nastpujce reguy:
/
Wskazuje maksymalny rozmiar wywietlania liczby lub acucha.
Maksymalnym dopuszczalnym rozmiarem wywietlania jest 255.
&
Dotyczy typw zmiennoprzecinkowych i staoprzecinkowych. Okrela liczb
cyfr po kropce dziesitnej. Maksymalna dopuszczalna warto wynosi 30,
ale nie powinna przekracza /.
Nawiasy kwadratowe ( ) identyfikuj opcjonalne fragmenty deklaracji typu.
126 Rozdzia 4. Typy kolumn
4.1. Przegld typw dla kolumny
4.1.1. Omwienie typw liczbowych
Poniej znajduje si przegld liczbowych typw dla kolumn. Bardziej szczegowe
informacje mona znale w podrozdziale 4.2. Wymogi dotyczce rozmiaru pamici
potrzebnej do przechowywania kolumn znajduj si w podrozdziale 4.5.
Jeli dla kolumny liczbowej zostanie okrelony atrybut /lRO|1||, MySQL automatycznie
doda do kolumny atrybut UN1S1ONlD.
Naley uwaa podczas odejmowania dwch wartoci liczbowych, z ktrych jedna ma
typ UN1S1ONlD. Uzyskany wynik bdzie rwnie tego typu! patrz podrozdzia 5.7.
T1NY1NT/) UNS1ONlD /lRO|1||
Bardzo maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od `8
do `/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do bb.
B1T, BOO|, BOO|lAN
To s synonimy T1NY1NT`). Synonim BOO|lAN zosta dodany w MySQL 4.1.0.
Warto zerowa to inaczej fasz. Wartoci niezerowe traktowane s jako prawda.
W przyszoci wprowadzona zostanie pena, zgodna ze standardem SQL
obsuga typu boolowskiego.
SMA||1NT/) UNS1ONlD /lRO|1||
Maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od o/68
do o/6/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do 6bbob.
MlD1UM1NT/) UNS1ONlD /lRO|1||
rednia liczba cakowita. Dla liczb ze znakiem zakres wynosi od 8o88608
do 8o8860/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0
do `6///`b.
1NT/) UNS1ONlD /lRO|1||
Standardowa liczba cakowita. Dla liczb ze znakiem zakres wynosi
od `4/48o648 do `4/48o64/. W przypadku liczb bez znaku zakres
obejmuje wartoci od 0 do 49496/9b.
1NTlOlR/) UNS1ONlD /lRO|1||
Jest to synonim dla typu 1NT.
B1O1NT/) UNS1ONlD /lRO|1||
Dua liczba cakowita. Dla liczb ze znakiem zakres wynosi
od 9oo/0o68b4//b808 do 9oo/0o68b4//b80/. W przypadku liczb
bez znaku zakres obejmuje wartoci od 0 do `8446/440/o/09bb`6`b.
4.1. Przegld typw dla kolumny 127
Oto kilka spraw, o ktrych naley wiedzie odnonie kolumn typu B1O1NT:
Wszystkie obliczenia wykonywane s przy uyciu wartoci typu B1O1NT
lub DOUB|l ze znakiem. Oznacza to, e duych liczb cakowitych bez
znaku, wikszych ni 9oo/0o68b4//b80/ (63 bity), mona uywa tylko
z funkcjami bitowymi! Niezastosowanie si do tej zasady moe doprowadzi
do uzyskania w wyniku liczby, ktrej kilka ostatnich cyfr jest bdnych
z powodu bdw w zaokrglaniu podczas konwersji wartoci B1O1NT
na DOUB|l.
MySQL 4.0 potrafi obsugiwa B1O1NT w nastpujcych przypadkach:
Podczas wykorzystywania liczb cakowitych do przechowywania
duych wartoci bez znaku w kolumnie typu B1O1NT.
W M1NPC\YCAMQN) lub MAXPC\YCAMQN), gdzie PC\YCAMQN odnosi si
do kolumny B1O1NT.
Podczas korzystania z operatorw (midzy innymi , , *), gdy oba
argumenty s liczbami cakowitymi.
Zawsze istnieje moliwo zapisania w kolumnie B1O1NT dokadnej wartoci
liczby cakowitej. Wystarczy zapisa j przy uyciu acucha. W takim
przypadku zostanie dokonana konwersja acucha na liczb; konwersja
nie bdzie wymaga poredniego etapu przeksztacajcego liczb na jej
odpowiednik o podwjnej precyzji.
Podczas korzystania z operatorw , i * stosowana jest arytmetyka
B1O1NT, jeli oba argumenty maj warto liczby cakowitej! To oznacza,
e pomnoenie dwch duych liczb cakowitych (lub wynikw funkcji,
ktra zwraca liczby cakowite) moe spowodowa nieoczekiwane
rezultaty, jeli wynik przekroczy liczb 9oo/0o68b4//b80/.
||OATR) UNS1ONlD /lRO|1||
Liczba zmiennoprzecinkowa. Parametr R oznacza precyzj i moe przyjmowa
warto od 0 do 14 dla liczb zmiennoprzecinkowych o dokadnoci do jednego
znaku i od 25 do 53 dla liczb zmiennoprzecinkowych o dokadnoci do dwch
znakw. To przypomina opisane poniej typy ||OAT i DOUB|l. Typ ||OATR)
ma ten sam zakres, jaki posiadaj odpowiadajce mu typy ||OAT i DOUB|l,
ale w jego przypadku niezdefiniowany jest maksymalny rozmiar wywietlania
i liczba miejsc po przecinku.
Od wersji 3.23 MySQL jest to prawdziwa warto zmiennoprzecinkowa.
W wersjach wczeniejszych liczba typu ||OATR) bya zawsze liczb o dwch
miejscach po przecinku.
Ta skadnia zostaa dodana w celu zachowania zgodnoci ze standardem ODBC.
Stosowanie typu ||OAT moe spowodowa wystpienie pewnych
nieoczekiwanych problemw, poniewa wszystkie obliczenia w MySQL
s wykonywane z podwjn precyzj patrz punkt A.1.7).
||OAT/, &) UNS1ONlD /lRO|1||
128 Rozdzia 4. Typy kolumn
Maa liczba zmiennoprzecinkowa (o dokadnoci do jednego znaku). Liczba
ta moe przyj wartoci: od o408o466lo8 do ``/b494ob`lo8, 0,
i od ``/b494ob`lo8 do o408o466lo8. Jeli podany jest atrybut UN1S1ONlD,
niedozwolone s wartoci ujemne. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ ||OAT bez argumentw
lub typ ||OATR) (gdzie Rjest liczb z zakresu od 0 do 24) oznacza liczb
zmiennoprzecinkow o pojedynczej precyzji.
DOUB|l/, &) UNS1ONlD /lRO|1||
Standardowa liczba zmiennoprzecinkowa (o dokadnoci do dwch
znakw). Liczba ta moe przyj wartoci: od `/9/69o`o486o`b/lo08
do b0/o8b8b0/0`4lo08, 0, i od b0/o8b8b0/0`4lo08
do `/9/69o`o486o`b/lo08. Jeli podany jest atrybut UN1S1ONlD, wartoci
ujemne s niedozwolone. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ DOUB|l
bez argumentw lub ||OATR) (gdzie R jest liczb z zakresu od 25 do 53)
oznacza liczb zmiennoprzecinkow o podwjnej precyzji.
DOUB|l PRlC1S1ON/, &) UNS1ONlD /lRO|1||
RlA|/, &) UNS1ONlD /lRO|1||
S to synonimy DOUB|l. Wyjtek: Jeli dla parametru s;_cce serwera
wczono opcj RlA|_AS_||OAT, synonimem ||OAT jest RlA|, a nie DOUB|l.
DlC1MA|/, &) UNS1ONlD /lRO|1||
Niezapakowana liczba staoprzecinkowa. Zachowanie kolumny tego typu
przypomina kolumn typu CHAR. Niezapakowana oznacza, e liczba jest
przechowywana w postaci acucha przy uyciu jednego znaku na kad cyfr
wartoci. Parametr / definiuje maksymaln liczb cyfr, a & liczb miejsc
po przecinku. W parametrze / nie s brane pod uwag: kropka dziesitna
(odpowiadajca w naszej notacji przecinkowi) i (dla liczb ujemnych) znak ,
cho jest dla nich zarezerwowane miejsce. Wartoci nie maj miejsc
po przecinku lub czci uamkowych, jeli & jest rwne 0. Maksymalny zakres
wartoci typu DlC1MA| jest taki sam, jak dla typu DOUB|l, ale rzeczywisty zakres
danej kolumny DlC1MA| moe by ograniczony przez wybr argumentw / i &.
Jeli podany jest atrybut UN1S1ONlD, wartoci ujemne s niedozwolone.
W przypadku braku argumentu &, domyln wartoci jest 0. Jeli pominity
jest parametr /, domyln wartoci jest 10.
W wersjach poprzedzajcych MySQL 3.23 argument / musi by wystarczajco
duy, by zawiera obszar potrzebny dla znaku i kropki dziesitnej.
DlC/,&) UNS1ONlD /lRO|1||
NUMlR1C/,&) UNS1ONlD /lRO|1||
|1XlD/, &) UNS1ONlD /lRO|1||
S to synonimy typu DlC1MA|.
W MySQL 4.1.0 dodano synonim |1XlD w celu osignicia kompatybilnoci
z innymi serwerami.
4.1. Przegld typw dla kolumny 129
4.1.2. Przegld typw zwizanych z dat i czasem
Poniej znajduje si podsumowanie typw kolumn przeznaczonych dla czasu i daty.
Dodatkowe informacje na ten temat mona znale w podrozdziale 4.3. Wymogi do-
tyczce pamici potrzebnej do przechowywania danych w kolumnach zostay podane
w podrozdziale 4.5.
DATl
Data. Obsugiwany zakres obejmuje daty od ``0000`0`` do `9999`o``.
W MySQL wartoci DATl wywietlane s w formacie `RRRRMMDD`, ale mona
przypisywa wartoci do kolumn DATl przy uyciu acuchw lub liczb.
DATlT1Ml
Kombinacja daty i czasu. Obsugiwany zakres obejmuje wartoci
od ``0000`0` 000000` do `9999`o` ob9b9`. W MySQL wartoci
DATlT1Ml wywietlane s w formacie `RRRRMMDD OOMMSS`, ale mona
przypisywa wartoci do kolumn DATlT1Ml przy uyciu acuchw lub liczb.
T1MlSTAMP/)
Znacznik czasu. Obsugiwany zakres rozpoczyna si od daty ``9/00`0``
i siga roku 0o/.
Kolumna typu T1MlSTAMP przydaje si do rejestracji daty i godziny operacji
wstawiania lub aktualizacji. Pierwszej kolumnie T1MlSTAMP w tabeli
automatycznie przypisywana jest data i czas ostatniej operacji, jeli tylko tych
wartoci nie wprowadzi rcznie uytkownik. Dowolnej kolumnie T1MlSTAMP
mona rwnie przypisa biec dat i godzin, wpisujc do niej warto NU||.
Od MySQL 4.1 wartoci T1MlSTAMP s zwracane w postaci acuchw
w formacie `RRRRMMDD OOMMSS`. Aby uzyska warto w postaci liczby,
naley doda do kolumn tego typu 0. Inne szerokoci wywietlania
znacznika czasu nie s obsugiwane.
W wersjach poprzedzajcych MySQL 4.1 wartoci T1MlSTAMP s wywietlane
w formacie RRRRMMDDOOMMSS, RRMMDDOOMMSS, RRRRMMDD lub RRMMDD w zalenoci
od tego, czy parametr / jest rwny 14 (albo go brak), 12, 8 lub 6. Mona jednak
przypisywa wartoci do kolumn T1MlSTAMP przy uyciu acuchw lub liczb.
Argument / wpywa tylko na sposb wywietlania kolumny T1MlSTAMP, a nie
na jej przechowywanie. Wartoci kolumny s zawsze zapisywane w czterech
bajtach. W MySQL od wersji 4.0.12 pojawia si opcja ne., dziki ktrej
mona zmieni dziaanie serwera, upodabniajc je do MySQL 4.1.
Naley odnotowa, e kolumny T1MlSTAMP/), gdzie /jest rwne 8 lub 14,
s traktowane jako liczby, natomiast reszta kolumn T1MlSTAMP/) jest
traktowana jako acuchy. Jest to rodzaj gwarancji, e uytkownik bdzie
mg wiarygodnie usuwa i przywraca tabele tego typu.
T1Ml
Godzina. Obsugiwany zakres obejmuje wartoci od `8o8b9b9`
do ` 8o8b9b9`. W MySQL wartoci T1Ml wywietlane s w formacie
` OOMMSS`, ale mona przypisa wartoci do kolumn T1Ml przy uyciu
zarwno acuchw, jak i liczb.
130 Rozdzia 4. Typy kolumn
YlAR|4)
Rok w formacie dwu- lub czterocyfrowym. Domylnym formatem jest rok
zapisany za pomoc czterech cyfr. W tym formacie dostpne wartoci nale
do przedziau od `90` do `bb oraz 0. W formacie dwucyfrowym wartoci
dopuszczalne to liczby z zakresu od /0 do 69, ktre reprezentuj daty od roku
1970 do 2069. W MySQL wartoci YlAR wywietlane s w formacie RRRR,
ale mona przypisa wartoci do kolumn YlAR przy uyciu tak acuchw,
jak i liczb. Typ YlAR jest niedostpny dla wersji wczeniejszych ni MySQL 3.22.
4.1.3. Przegld typw acuchowych
Poniej znajduje si przegld typw acuchowych. Dodatkowe informacje mona
znale w podrozdziale 4.4. Wymogi dotyczce pamici potrzebnej do przechowywa-
nia danych w kolumnach zostay podane w podrozdziale 4.5.
W niektrych przypadkach MySQL moe zmieni kolumn typu acuchowego na typ,
ktry bdzie si rni od zadeklarowanego w instrukcji CRlATl TAB|l lub A|TlR TAB|l.
Wicej informacji na ten temat znajduje si w podpunkcie 6.2.5.2.
Od wersji 4.1 w MySQL pojawia si zmiana, ktra wpywa na wiele typw kolumn typu
acuchowego. Definicja kolumn typu znakowego moe zawiera atrybut CHARACTlR
SlT, ktry okrela zestaw znakw i opcjonalnie porzdek sortowania. Dotyczy to typw
CHAR, VARCHAR, rnych typw TlXT oraz lNUM i SlT, na przykad:
CRF/TF T/B|F !
FNUMYCTVQ
YCTVQ|
1 lub 2 bajty w zalenoci od liczby wartoci wyliczenia
(maksymalnie 65 535)
SFTYCTVQ
YCTVQ|
1, 2, 3, 4 lub 8 bajtw w zalenoci od liczby elementw zestawu
(maksymalnie 64)
Typy VARCHAR, B|OB i TlXT maj zmienn dugo. Dla kadego ilo pamici potrzeb-
nej do przechowania wartoci bdzie zalee od faktycznej dugoci wartoci kolumny
(reprezentowanej w ostatniej tabeli przez .), a nie od maksymalnego moliwego roz-
miaru danego typu. Kolumna VARCHAR`0) na przykad moe przechowywa acuch
o maksymalnej dugoci 10 znakw. Faktyczna ilo wymaganej pamici to dugo
acucha (.) plus 1 bajt do zapisania dugoci acucha. Dla acucha `.|cc` parametr
. jest rwny 4, a wymagany rozmiar pamici to 5 bajtw.
Typy B|OB i TlXT wymagaj 1, 2, 3 lub 4 bajtw do zapisu dugoci wartoci kolumny
w zalenoci od maksymalnej moliwej dugoci tego typu (patrz punkt 4.4.2).
Rozmiar obiektu lNUM jest ustalany na podstawie liczby rnych wartoci wyliczenia.
Przy wyliczeniach do 255 moliwych wartoci uywany jest jeden bajt, a przy wyli-
czeniach do 65 535 wartoci uywane s 2 bajty (patrz punkt 4.4.3).
Rozmiar obiektu SlT jest okrelany przez liczb rnych elementw zestawu. Jeli ze-
staw ma rozmiar 0, obiekt zajmuje 0/).8 bajtw, ktr to warto zaokrgla si do
1, 2, 3, 4 lub 8 bajtw. Obiekt SlT moe mie do 64 elementw (patrz punkt 4.4.4).
4.6. Wybieranie odpowiedniego typu
dla kolumny
Aby jak najbardziej wydajnie korzysta z pamici, naley we wszystkich przypadkach
stara si stosowa typ, ktry bdzie jak najbardziej dokadny. Jeli na przykad w kolum-
nie liczb cakowitych bd przechowywane wartoci z zakresu od ` do 99999, najlep-
szym wyborem bdzie typ MlD1UM1NT UNS1ONlD. Ze wszystkich typw, ktre reprezentuj
wszystkie wymagane wartoci, zajmuje najmniej pamici.
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych 153
Powszechnym problemem jest dokadne przedstawianie wartoci walutowych. W MySQL
naley do tego uywa typu DlC1MA|, za pomoc ktrego wartoci zapisywane s w for-
mie acucha. Dziki temu nie traci si na dokadnoci (mimo to obliczenia z wartociami
DlC1MA| mog by wci wykonywane przy uyciu operacji dziaajcych na liczbach
z podwjn precyzj). Jeli dokadno nie jest zbyt wana, by moe wystarczajco
dobrym typem bdzie DOUB|l.
Aby uzyska wiksz dokadno, mona zawsze przeksztaci warto na typ stao-
przecinkowy, przechowywany w B1O1NT. Pozwoli to wykonywa wszystkie obliczenia
na liczbach cakowitych i tylko w razie potrzeby przeksztaca wynik z powrotem na
wartoci zmiennoprzecinkowe.
4.7. Wykorzystywanie typw kolumn
z innych mechanizmw baz danych
Aby uatwi uytkownikowi zastosowanie kodu pochodzcego od innych producentw,
moliwe jest odwzorowanie typw kolumn w sposb przedstawiony w poniszej tabeli.
Odwzorowania te upraszczaj operacj importu do MySQL definicji tabel z innych
mechanizmw baz danych:
Typ innych producentw Typ MySQL
BTN/RY/| C'/R/| BTN/RY
C'/R V/RYTN/| V/RC'/R/|
F|J/T4 F|J/T
F|J/T8 OJUB|F
TNT1 TTNYTNT
TNT SM/||TNT
TNT: MFOTUMTNT
TNT4 TNT
TNT8 BTTNT
|JN V/RBTN/RY MFOTUMB|JB
|JN V/RC'/R MFOTUMTFXT
|JN MFOTUMTFXT oc M,SJ| 410|
MTOO|FTNT MFOTUMTNT
V/RBTN/RY/| C'/R/| BTN/RY
Odwzorowanie typw kolumn jest wykonywane podczas tworzenia tabeli, po czym
oryginalne deklaracje typu zostaj usunite. Jeli uytkownik utworzy tabel z typami
stosowanymi przez innych producentw, po czym wyda polecenie DlSCR1Bl PC\YCA
VCDGNK, zostanie przedstawiona struktura tabeli z odpowiadajcymi im typami MySQL.
4 Spis treci
1.8.5. Rozbienoci midzy MySQL a standardem SQL ........................................ 60
1.8.6. Jak MySQL radzi sobie z ograniczeniami ................................................. 67
1.8.7. Znane bdy i projektowe braki w MySQL................................................ 69
Rozdzia 2. Struktura jzyka .............................................................................. 77
2.1. Literay................................................................................................................... 77
2.1.1. acuchy ................................................................................................... 77
2.1.2. Liczby........................................................................................................ 80
2.1.3. Wartoci szesnastkowe .............................................................................. 80
2.1.4. Wartoci logiczne ...................................................................................... 81
2.1.5. Wartoci NULL......................................................................................... 81
2.2. Nazwy baz danych, tabel, indeksw, kolumn i aliasw......................................... 81
2.2.1. Kwalifikatory identyfikatorw .................................................................. 83
2.2.2. Znaczenie wielkoci liter w nazwach identyfikatorw.............................. 83
2.3. Zmienne definiowane przez uytkownika.............................................................. 85
2.4. Zmienne systemowe............................................................................................... 87
2.4.1. Strukturalne zmienne systemowe .............................................................. 89
2.5. Skadnia komentarza .............................................................................................. 91
2.6. Traktowanie sw zastrzeonych w MySQL.......................................................... 92
Rozdzia 3. Obsuga zestaww znakw............................................................... 95
3.1. Oglne informacje o zestawach znakw i sortowaniu ........................................... 95
3.2. Zestawy znakw i porzdki sortowania w MySQL................................................ 96
3.3. Okrelanie domylnego zestawu znakw i sortowania........................................... 98
3.3.1. Zestaw znakw i sortowanie dla serwera................................................... 98
3.3.2. Zestaw znakw i sortowanie dla bazy danych........................................... 99
3.3.3. Zestaw znakw i sortowanie dla tabeli .................................................... 100
3.3.4. Zestaw znakw i sortowanie dla kolumny............................................... 100
3.3.5. Przykady przypisywania zestawu znakw i sortowania ......................... 101
3.3.6. Zestawy znakw i sortowanie dla poczenia .......................................... 102
3.3.7. Zestaw znakw i sortowanie dla acucha znakw.................................. 104
3.3.8. Wykorzystywanie COLLATE w instrukcjach SQL.................................... 105
3.3.9. Priorytet klauzuli COLLATE .................................................................. 106
3.3.10. Operator BINARY................................................................................... 106
3.3.11. Niektre przypadki specjalne, w ktrych trudno okreli sortowanie...... 106
3.3.12. Sortowania musz by odpowiednie dla danego zestawu znakw........... 107
3.3.13. Przykad wpywu porzdku sortowania ................................................... 108
3.4. Operacje, na ktre ma wpyw obsuga zestaww znakw.................................... 109
3.4.1. acuchy wyjciowe ............................................................................... 109
3.4.2. CONVERT()............................................................................................ 110
3.4.3. CAST() .................................................................................................... 110
3.4.4. Instrukcje SHOW .................................................................................... 111
3.5. Obsuga Unicode.................................................................................................. 112
3.6. UTF8 dla metadanych.......................................................................................... 113
3.7. Kompatybilno z innymi systemami zarzdzania baz danych .......................... 115
3.8. Nowy format pliku konfiguracji zestawu znakw................................................ 115
3.9. Narodowe zestawy znakw.................................................................................. 115
3.10. Aktualizacja zestaww znakw z MySQL 4.0..................................................... 116
3.10.1. Zestawy znakw w wersji 4.0 i odpowiadajce im w wersji 4.1 pary
skadajce si z zestawu znakw i sortowania......................................... 117
3.10.2. Przeksztacanie kolumn znakowych wersji 4.0 na format 4.1 ................. 118
3.11. Zestawy znakw i sortowania obsugiwane przez MySQL.................................. 118
3.11.1. Zestawy znakw standardu Unicode ....................................................... 119
3.11.2. Zestawy znakw zachodnioeuropejskich................................................. 120
3.11.3. Zestawy znakw dla Europy Centralnej .................................................. 121
Spis treci 5
3.11.4. Zestawy znakw poudniowoeuropejskich i rodkowowschodnich......... 122
3.11.5. Zestawy znakw regionu batyckiego...................................................... 123
3.11.6. Zestawy znakw dla cyrylicy................................................................... 123
3.11.7. Azjatyckie zestawy znakw..................................................................... 124
Rozdzia 4. Typy kolumn.................................................................................. 125
4.1. Przegld typw dla kolumny................................................................................ 126
4.1.1. Omwienie typw liczbowych ................................................................ 126
4.1.2. Przegld typw zwizanych z dat i czasem............................................ 129
4.1.3. Przegld typw acuchowych ................................................................ 130
4.2. Typy liczbowe...................................................................................................... 132
4.3. Typy zwizane z dat i czasem............................................................................ 135
4.3.1. Typy DATETIME, DATE i TIMESTAMP............................................. 137
4.3.2. Typ TIME................................................................................................ 142
4.3.3. Typ YEAR............................................................................................... 143
4.3.4. Problem roku 2000 a typy zwizane z dat.............................................. 144
4.4. Typy acuchowe ................................................................................................. 144
4.4.1. Typy CHAR i VARCHAR...................................................................... 144
4.4.2. Typy BLOB i TEXT................................................................................ 146
4.4.3. Typ Enum................................................................................................ 147
4.4.4. Typ SET .................................................................................................. 149
4.5. Rozmiar pamici potrzebnej dla typw kolumn................................................... 151
4.6. Wybieranie odpowiedniego typu dla kolumny..................................................... 152
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych ............... 153
Rozdzia 5. Funkcje i operatory........................................................................ 155
5.1. Operatory ............................................................................................................. 156
5.1.1. Nawiasy................................................................................................... 156
5.1.2. Operatory porwnania ............................................................................. 156
5.1.3. Operatory logiczne .................................................................................. 161
5.1.4. Operatory rozrniania wielkoci liter..................................................... 163
5.2. Funkcje kontroli przepywu ................................................................................. 163
5.3. Funkcje acuchowe............................................................................................. 166
5.3.1. Funkcje porwnywania acuchw.......................................................... 176
5.4. Funkcje liczbowe ................................................................................................. 178
5.4.1. Operatory arytmetyczne........................................................................... 178
5.4.2. Funkcje matematyczne ............................................................................ 180
5.5. Funkcje daty i godziny......................................................................................... 186
5.6. Funkcje obsugi wyszukiwania penotekstowego................................................. 202
5.6.1. Boolowskie wyszukiwania penotekstowe............................................... 205
5.6.2. Wyszukiwania penotekstowe z rozwijaniem zapytania .......................... 207
5.6.3. Ograniczenia dla wyszukiwania penotekstowego................................... 208
5.6.4. Modyfikowanie wyszukiwania penotekstowego MySQL ...................... 209
5.6.5. Lista rzeczy do zrobienia dla wyszukiwania penotekstowego................ 211
5.7. Funkcje konwersji typw..................................................................................... 211
5.8. Inne funkcje ......................................................................................................... 214
5.8.1. Funkcje bitowe ........................................................................................ 214
5.8.2. Funkcje szyfrujce................................................................................... 215
5.8.3. Funkcje informacyjne .............................................................................. 219
5.8.4. Funkcje rne .......................................................................................... 223
5.9. Funkcje i modyfikatory do zastosowania z klauzulami GROUP BY................... 226
5.9.1. Funkcje GROUP BY (agregujce)........................................................... 226
5.9.2. Modyfikatory GROUP BY...................................................................... 229
5.9.3. GROUP BY z ukrytymi polami............................................................... 232
6 Spis treci
Rozdzia 6. Skadnia instrukcji SQL .................................................................. 235
6.1. Instrukcje operujce na danych............................................................................ 235
6.1.1. Skadnia instrukcji DELETE................................................................... 235
6.1.2. Skadnia instrukcji DO ............................................................................ 238
6.1.3. Skadnia instrukcji HANDLER............................................................... 238
6.1.4. Skadnia instrukcji INSERT .................................................................... 240
6.1.5. Skadnia instrukcji LOAD DATA INFILE.............................................. 246
6.1.6. Skadnia instrukcji REPLACE................................................................. 255
6.1.7. Skadnia instrukcji SELECT.................................................................... 256
6.1.8. Skadnia podzapyta................................................................................ 265
6.1.9. Skadnia instrukcji TRUNCATE............................................................. 276
6.1.10. Skadnia instrukcji UPDATE................................................................... 276
6.2. Instrukcje definiowania danych ........................................................................... 278
6.2.1. Skadnia instrukcji ALTER DATABASE ............................................... 278
6.2.2. Skadnia instrukcji ALTER TABLE........................................................ 279
6.2.3. Skadnia instrukcji CREATE DATABASE............................................. 285
6.2.4. Skadnia instrukcji CREATE INDEX ..................................................... 285
6.2.5. Skadnia instrukcji CREATE TABLE..................................................... 287
6.2.6. Skadnia instrukcji DROP DATABASE.................................................. 301
6.2.7. Skadnia instrukcji DROP INDEX.......................................................... 302
6.2.8. Skadnia instrukcji DROP TABLE.......................................................... 302
6.2.9. Skadnia instrukcji RENAME TABLE.................................................... 303
6.3. Instrukcje programu MySQL............................................................................... 304
6.3.1. Skadnia instrukcji DESCRIBE
(odczytywanie informacji na temat kolumn) ........................................... 304
6.3.2. Skadnia instrukcji USE........................................................................... 304
6.4. Instrukcje obsugi transakcji i blokowania........................................................... 305
6.4.1. Skadnia instrukcji START TRANSACTION, COMMIT
oraz ROLLBACK.................................................................................... 305
6.4.2. Instrukcje niemoliwe do wycofania ....................................................... 306
6.4.3. Instrukcje wykonujce niejawne zatwierdzenie......................................... 306
6.4.4. Skadnia instrukcji SAVEPOINT i ROLLBACK TO SAVEPOINT....... 307
6.4.5. Skadnia instrukcji LOCK TABLES oraz UNLOCK TABLES .............. 307
6.4.6. Skadnia instrukcji SET TRANSACTION.............................................. 310
6.5. Administracja baz danych .................................................................................. 311
6.5.1. Instrukcje zarzdzajce kontami uytkownikw ....................................... 311
6.5.2. Instrukcje do konserwacji tabel ............................................................... 319
6.5.3. Skadnia instrukcji SET i SHOW ............................................................ 326
6.5.4. Inne instrukcje administracyjne ............................................................... 347
6.6. Instrukcje replikacji.............................................................................................. 352
6.6.1. Instrukcje SQL sterujce serwerem gwnym ......................................... 352
6.6.2. Instrukcje SQL sterujce serwerami podrzdnymi .................................. 354
Rozdzia 7. Rozszerzenia przestrzenne w MySQL............................................... 365
7.1. Wstp ................................................................................................................... 365
7.2. Model geometryczny OpenGIS............................................................................ 366
7.2.1. Hierarchia klas geometrycznych.............................................................. 366
7.2.2. Klasa Geometry ....................................................................................... 368
7.2.3. Klasa Point .............................................................................................. 369
7.2.4. Klasa Curve ............................................................................................. 369
7.2.5. Klasa LineString...................................................................................... 370
7.2.6. Klasa Surface........................................................................................... 370
7.2.7. Klasa Polygon.......................................................................................... 370
7.2.8. Klasa GeometryCollection....................................................................... 371
Spis treci 7
7.2.9. Klasa MultiPoint...................................................................................... 371
7.2.10. Klasa MultiCurve .................................................................................... 372
7.2.11. Klasa MultiLineString............................................................................. 372
7.2.12. Klasa MultiSurface .................................................................................. 372
7.2.13. Klasa MultiPolygon................................................................................. 373
7.3. Obsugiwane formaty danych przestrzennych...................................................... 373
7.3.1. Format tekstowy WKT............................................................................ 374
7.3.2. Format binarny WKB.............................................................................. 374
7.4. Tworzenie bazy danych z rozszerzeniami przestrzennymi................................... 375
7.4.1. Typy danych przestrzennych w MySQL ................................................. 375
7.4.2. Tworzenie wartoci przestrzennych......................................................... 376
7.4.3. Tworzenie kolumn przestrzennych.......................................................... 379
7.4.4. Wypenianie kolumn przestrzennych....................................................... 379
7.4.5. Pobieranie danych przestrzennych........................................................... 381
7.5. Analiza informacji przestrzennych....................................................................... 381
7.5.1. Funkcje konwersji formatw geometrycznych ........................................ 382
7.5.2. Funkcje klasy Geometry.......................................................................... 382
7.5.3. Funkcje tworzce nowe geometrie na podstawie istniejcych................. 388
7.5.4. Funkcje testujce relacje przestrzenne
midzy obiektami geometrycznymi ......................................................... 389
7.5.5. Relacje midzy minimalnymi prostoktami otaczajcymi
dla poszczeglnych geometrii.................................................................. 390
7.5.6. Funkcje sprawdzajce relacje przestrzenne pomidzy geometriami ........ 391
7.6. Optymalizacja analizy przestrzennej.................................................................... 392
7.6.1. Tworzenie indeksw przestrzennych....................................................... 392
7.6.2. Wykorzystanie indeksu przestrzennego................................................... 393
7.7. Zgodno MySQL ze standardem........................................................................ 395
7.7.1. Niezaimplementowane funkcje GIS ........................................................ 395
Rozdzia 8. Procedury i funkcje skadowane ..................................................... 397
8.1. Skadnia procedur skadowanych......................................................................... 398
8.1.1. Utrzymanie procedur skadowanych........................................................ 398
8.1.2. SHOW PROCEDURE STATUS oraz SHOW FUNCTION STATUS.... 401
8.1.3. Instrukcja CALL...................................................................................... 402
8.1.4. Instrukcja zoona BEGIN ... END.......................................................... 402
8.1.5. Instrukcja DECLARE.............................................................................. 402
8.1.6. Zmienne w procedurach skadowanych................................................... 402
8.1.7. Warunki i podprogramy obsugi .............................................................. 403
8.1.8. Kursory.................................................................................................... 405
8.1.9. Konstrukcje sterowania przepywem sterowania..................................... 406
Rozdzia 9. Obsuga bdw w MySQL .............................................................. 409
9.1. Zwracane bdy.................................................................................................... 409
9.2. Komunikaty bdw............................................................................................. 419
Dodatek A Rozwizywanie problemw z zapytaniami ........................................435
A.1. Zagadnienia zwizane z zapytaniami ................................................................... 435
A.1.1. Wielko liter przy wyszukiwaniu........................................................... 435
A.1.2. Problemy z kolumnami typu DATE ........................................................ 436
A.1.3. Problemy z wartociami NULL............................................................... 437
A.1.4. Problemy z synonimami kolumn ............................................................. 438
A.1.5. Bd wycofania dla tabel nietransakcyjnych............................................ 439
A.1.6. Usuwanie wierszy ze zwizanych tabel ................................................... 439
A.1.7. Rozwizywanie problemw z brakujcymi wierszami ............................ 440
A.1.8. Problemy z porwnaniami zmiennoprzecinkowymi................................ 441
8 Spis treci
A.2. Problemy zwizane z optymalizatorem................................................................ 443
A.3. Problemy z definicj tabel.................................................................................... 444
A.3.1. Problemy z instrukcj ALTER TABLE................................................... 444
A.3.2. Jak zmieni porzdek kolumn w tabeli .................................................... 445
A.3.3. Problemy z tabelami tymczasowymi ....................................................... 445
Dodatek B Wyraenia regularne w MySQL........................................................ 447
Skorowidz...................................................................................... 451
Rozdzia 4.
Typy kolumn
W MySQL dostpnych jest wiele typw danych, ktre mona pogrupowa w kilku pod-
stawowych kategoriach, takich jak typy liczbowe, typy zwizane z dat i czasem oraz
typy acuchowe. Na pocztku tego rozdziau przedstawiony zostanie przegld wspo-
mnianych przed chwil typw kolumn, po czym nastpi bardziej szczegowy opis ich
waciwoci z podziaem na poszczeglne kategorie i wreszcie zamieszczone zostanie
podsumowanie informacji dotyczcych wymaga co do rozmiaru pamici potrzebnej
do przechowania danej kolumny. Sam przegld jest z zamierzenia krtki. Dodatkowe
informacje o poszczeglnych typach kolumn, na przykad dopuszczalny format, w kt-
rym mona deklarowa wartoci, zostay uwzgldnione w szczegowych omwieniach.
Od wersji 4.1 MySQL rozpoznaje rozszerzenia do obsugi danych przestrzennych.
Informacje o typach przestrzennych znajduj si w rozdziale 7. tego podrcznika.
W czci opisu typw kolumn zastosowane zostay nastpujce reguy:
/
Wskazuje maksymalny rozmiar wywietlania liczby lub acucha.
Maksymalnym dopuszczalnym rozmiarem wywietlania jest 255.
&
Dotyczy typw zmiennoprzecinkowych i staoprzecinkowych. Okrela liczb
cyfr po kropce dziesitnej. Maksymalna dopuszczalna warto wynosi 30,
ale nie powinna przekracza /.
Nawiasy kwadratowe ( ) identyfikuj opcjonalne fragmenty deklaracji typu.
126 Rozdzia 4. Typy kolumn
4.1. Przegld typw dla kolumny
4.1.1. Omwienie typw liczbowych
Poniej znajduje si przegld liczbowych typw dla kolumn. Bardziej szczegowe
informacje mona znale w podrozdziale 4.2. Wymogi dotyczce rozmiaru pamici
potrzebnej do przechowywania kolumn znajduj si w podrozdziale 4.5.
Jeli dla kolumny liczbowej zostanie okrelony atrybut /lRO|1||, MySQL automatycznie
doda do kolumny atrybut UN1S1ONlD.
Naley uwaa podczas odejmowania dwch wartoci liczbowych, z ktrych jedna ma
typ UN1S1ONlD. Uzyskany wynik bdzie rwnie tego typu! patrz podrozdzia 5.7.
T1NY1NT/) UNS1ONlD /lRO|1||
Bardzo maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od `8
do `/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do bb.
B1T, BOO|, BOO|lAN
To s synonimy T1NY1NT`). Synonim BOO|lAN zosta dodany w MySQL 4.1.0.
Warto zerowa to inaczej fasz. Wartoci niezerowe traktowane s jako prawda.
W przyszoci wprowadzona zostanie pena, zgodna ze standardem SQL
obsuga typu boolowskiego.
SMA||1NT/) UNS1ONlD /lRO|1||
Maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od o/68
do o/6/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do 6bbob.
MlD1UM1NT/) UNS1ONlD /lRO|1||
rednia liczba cakowita. Dla liczb ze znakiem zakres wynosi od 8o88608
do 8o8860/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0
do `6///`b.
1NT/) UNS1ONlD /lRO|1||
Standardowa liczba cakowita. Dla liczb ze znakiem zakres wynosi
od `4/48o648 do `4/48o64/. W przypadku liczb bez znaku zakres
obejmuje wartoci od 0 do 49496/9b.
1NTlOlR/) UNS1ONlD /lRO|1||
Jest to synonim dla typu 1NT.
B1O1NT/) UNS1ONlD /lRO|1||
Dua liczba cakowita. Dla liczb ze znakiem zakres wynosi
od 9oo/0o68b4//b808 do 9oo/0o68b4//b80/. W przypadku liczb
bez znaku zakres obejmuje wartoci od 0 do `8446/440/o/09bb`6`b.
4.1. Przegld typw dla kolumny 127
Oto kilka spraw, o ktrych naley wiedzie odnonie kolumn typu B1O1NT:
Wszystkie obliczenia wykonywane s przy uyciu wartoci typu B1O1NT
lub DOUB|l ze znakiem. Oznacza to, e duych liczb cakowitych bez
znaku, wikszych ni 9oo/0o68b4//b80/ (63 bity), mona uywa tylko
z funkcjami bitowymi! Niezastosowanie si do tej zasady moe doprowadzi
do uzyskania w wyniku liczby, ktrej kilka ostatnich cyfr jest bdnych
z powodu bdw w zaokrglaniu podczas konwersji wartoci B1O1NT
na DOUB|l.
MySQL 4.0 potrafi obsugiwa B1O1NT w nastpujcych przypadkach:
Podczas wykorzystywania liczb cakowitych do przechowywania
duych wartoci bez znaku w kolumnie typu B1O1NT.
W M1NPC\YCAMQN) lub MAXPC\YCAMQN), gdzie PC\YCAMQN odnosi si
do kolumny B1O1NT.
Podczas korzystania z operatorw (midzy innymi , , *), gdy oba
argumenty s liczbami cakowitymi.
Zawsze istnieje moliwo zapisania w kolumnie B1O1NT dokadnej wartoci
liczby cakowitej. Wystarczy zapisa j przy uyciu acucha. W takim
przypadku zostanie dokonana konwersja acucha na liczb; konwersja
nie bdzie wymaga poredniego etapu przeksztacajcego liczb na jej
odpowiednik o podwjnej precyzji.
Podczas korzystania z operatorw , i * stosowana jest arytmetyka
B1O1NT, jeli oba argumenty maj warto liczby cakowitej! To oznacza,
e pomnoenie dwch duych liczb cakowitych (lub wynikw funkcji,
ktra zwraca liczby cakowite) moe spowodowa nieoczekiwane
rezultaty, jeli wynik przekroczy liczb 9oo/0o68b4//b80/.
||OATR) UNS1ONlD /lRO|1||
Liczba zmiennoprzecinkowa. Parametr R oznacza precyzj i moe przyjmowa
warto od 0 do 14 dla liczb zmiennoprzecinkowych o dokadnoci do jednego
znaku i od 25 do 53 dla liczb zmiennoprzecinkowych o dokadnoci do dwch
znakw. To przypomina opisane poniej typy ||OAT i DOUB|l. Typ ||OATR)
ma ten sam zakres, jaki posiadaj odpowiadajce mu typy ||OAT i DOUB|l,
ale w jego przypadku niezdefiniowany jest maksymalny rozmiar wywietlania
i liczba miejsc po przecinku.
Od wersji 3.23 MySQL jest to prawdziwa warto zmiennoprzecinkowa.
W wersjach wczeniejszych liczba typu ||OATR) bya zawsze liczb o dwch
miejscach po przecinku.
Ta skadnia zostaa dodana w celu zachowania zgodnoci ze standardem ODBC.
Stosowanie typu ||OAT moe spowodowa wystpienie pewnych
nieoczekiwanych problemw, poniewa wszystkie obliczenia w MySQL
s wykonywane z podwjn precyzj patrz punkt A.1.7).
||OAT/, &) UNS1ONlD /lRO|1||
128 Rozdzia 4. Typy kolumn
Maa liczba zmiennoprzecinkowa (o dokadnoci do jednego znaku). Liczba
ta moe przyj wartoci: od o408o466lo8 do ``/b494ob`lo8, 0,
i od ``/b494ob`lo8 do o408o466lo8. Jeli podany jest atrybut UN1S1ONlD,
niedozwolone s wartoci ujemne. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ ||OAT bez argumentw
lub typ ||OATR) (gdzie Rjest liczb z zakresu od 0 do 24) oznacza liczb
zmiennoprzecinkow o pojedynczej precyzji.
DOUB|l/, &) UNS1ONlD /lRO|1||
Standardowa liczba zmiennoprzecinkowa (o dokadnoci do dwch
znakw). Liczba ta moe przyj wartoci: od `/9/69o`o486o`b/lo08
do b0/o8b8b0/0`4lo08, 0, i od b0/o8b8b0/0`4lo08
do `/9/69o`o486o`b/lo08. Jeli podany jest atrybut UN1S1ONlD, wartoci
ujemne s niedozwolone. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ DOUB|l
bez argumentw lub ||OATR) (gdzie R jest liczb z zakresu od 25 do 53)
oznacza liczb zmiennoprzecinkow o podwjnej precyzji.
DOUB|l PRlC1S1ON/, &) UNS1ONlD /lRO|1||
RlA|/, &) UNS1ONlD /lRO|1||
S to synonimy DOUB|l. Wyjtek: Jeli dla parametru s;_cce serwera
wczono opcj RlA|_AS_||OAT, synonimem ||OAT jest RlA|, a nie DOUB|l.
DlC1MA|/, &) UNS1ONlD /lRO|1||
Niezapakowana liczba staoprzecinkowa. Zachowanie kolumny tego typu
przypomina kolumn typu CHAR. Niezapakowana oznacza, e liczba jest
przechowywana w postaci acucha przy uyciu jednego znaku na kad cyfr
wartoci. Parametr / definiuje maksymaln liczb cyfr, a & liczb miejsc
po przecinku. W parametrze / nie s brane pod uwag: kropka dziesitna
(odpowiadajca w naszej notacji przecinkowi) i (dla liczb ujemnych) znak ,
cho jest dla nich zarezerwowane miejsce. Wartoci nie maj miejsc
po przecinku lub czci uamkowych, jeli & jest rwne 0. Maksymalny zakres
wartoci typu DlC1MA| jest taki sam, jak dla typu DOUB|l, ale rzeczywisty zakres
danej kolumny DlC1MA| moe by ograniczony przez wybr argumentw / i &.
Jeli podany jest atrybut UN1S1ONlD, wartoci ujemne s niedozwolone.
W przypadku braku argumentu &, domyln wartoci jest 0. Jeli pominity
jest parametr /, domyln wartoci jest 10.
W wersjach poprzedzajcych MySQL 3.23 argument / musi by wystarczajco
duy, by zawiera obszar potrzebny dla znaku i kropki dziesitnej.
DlC/,&) UNS1ONlD /lRO|1||
NUMlR1C/,&) UNS1ONlD /lRO|1||
|1XlD/, &) UNS1ONlD /lRO|1||
S to synonimy typu DlC1MA|.
W MySQL 4.1.0 dodano synonim |1XlD w celu osignicia kompatybilnoci
z innymi serwerami.
4.1. Przegld typw dla kolumny 129
4.1.2. Przegld typw zwizanych z dat i czasem
Poniej znajduje si podsumowanie typw kolumn przeznaczonych dla czasu i daty.
Dodatkowe informacje na ten temat mona znale w podrozdziale 4.3. Wymogi do-
tyczce pamici potrzebnej do przechowywania danych w kolumnach zostay podane
w podrozdziale 4.5.
DATl
Data. Obsugiwany zakres obejmuje daty od ``0000`0`` do `9999`o``.
W MySQL wartoci DATl wywietlane s w formacie `RRRRMMDD`, ale mona
przypisywa wartoci do kolumn DATl przy uyciu acuchw lub liczb.
DATlT1Ml
Kombinacja daty i czasu. Obsugiwany zakres obejmuje wartoci
od ``0000`0` 000000` do `9999`o` ob9b9`. W MySQL wartoci
DATlT1Ml wywietlane s w formacie `RRRRMMDD OOMMSS`, ale mona
przypisywa wartoci do kolumn DATlT1Ml przy uyciu acuchw lub liczb.
T1MlSTAMP/)
Znacznik czasu. Obsugiwany zakres rozpoczyna si od daty ``9/00`0``
i siga roku 0o/.
Kolumna typu T1MlSTAMP przydaje si do rejestracji daty i godziny operacji
wstawiania lub aktualizacji. Pierwszej kolumnie T1MlSTAMP w tabeli
automatycznie przypisywana jest data i czas ostatniej operacji, jeli tylko tych
wartoci nie wprowadzi rcznie uytkownik. Dowolnej kolumnie T1MlSTAMP
mona rwnie przypisa biec dat i godzin, wpisujc do niej warto NU||.
Od MySQL 4.1 wartoci T1MlSTAMP s zwracane w postaci acuchw
w formacie `RRRRMMDD OOMMSS`. Aby uzyska warto w postaci liczby,
naley doda do kolumn tego typu 0. Inne szerokoci wywietlania
znacznika czasu nie s obsugiwane.
W wersjach poprzedzajcych MySQL 4.1 wartoci T1MlSTAMP s wywietlane
w formacie RRRRMMDDOOMMSS, RRMMDDOOMMSS, RRRRMMDD lub RRMMDD w zalenoci
od tego, czy parametr / jest rwny 14 (albo go brak), 12, 8 lub 6. Mona jednak
przypisywa wartoci do kolumn T1MlSTAMP przy uyciu acuchw lub liczb.
Argument / wpywa tylko na sposb wywietlania kolumny T1MlSTAMP, a nie
na jej przechowywanie. Wartoci kolumny s zawsze zapisywane w czterech
bajtach. W MySQL od wersji 4.0.12 pojawia si opcja ne., dziki ktrej
mona zmieni dziaanie serwera, upodabniajc je do MySQL 4.1.
Naley odnotowa, e kolumny T1MlSTAMP/), gdzie /jest rwne 8 lub 14,
s traktowane jako liczby, natomiast reszta kolumn T1MlSTAMP/) jest
traktowana jako acuchy. Jest to rodzaj gwarancji, e uytkownik bdzie
mg wiarygodnie usuwa i przywraca tabele tego typu.
T1Ml
Godzina. Obsugiwany zakres obejmuje wartoci od `8o8b9b9`
do ` 8o8b9b9`. W MySQL wartoci T1Ml wywietlane s w formacie
` OOMMSS`, ale mona przypisa wartoci do kolumn T1Ml przy uyciu
zarwno acuchw, jak i liczb.
130 Rozdzia 4. Typy kolumn
YlAR|4)
Rok w formacie dwu- lub czterocyfrowym. Domylnym formatem jest rok
zapisany za pomoc czterech cyfr. W tym formacie dostpne wartoci nale
do przedziau od `90` do `bb oraz 0. W formacie dwucyfrowym wartoci
dopuszczalne to liczby z zakresu od /0 do 69, ktre reprezentuj daty od roku
1970 do 2069. W MySQL wartoci YlAR wywietlane s w formacie RRRR,
ale mona przypisa wartoci do kolumn YlAR przy uyciu tak acuchw,
jak i liczb. Typ YlAR jest niedostpny dla wersji wczeniejszych ni MySQL 3.22.
4.1.3. Przegld typw acuchowych
Poniej znajduje si przegld typw acuchowych. Dodatkowe informacje mona
znale w podrozdziale 4.4. Wymogi dotyczce pamici potrzebnej do przechowywa-
nia danych w kolumnach zostay podane w podrozdziale 4.5.
W niektrych przypadkach MySQL moe zmieni kolumn typu acuchowego na typ,
ktry bdzie si rni od zadeklarowanego w instrukcji CRlATl TAB|l lub A|TlR TAB|l.
Wicej informacji na ten temat znajduje si w podpunkcie 6.2.5.2.
Od wersji 4.1 w MySQL pojawia si zmiana, ktra wpywa na wiele typw kolumn typu
acuchowego. Definicja kolumn typu znakowego moe zawiera atrybut CHARACTlR
SlT, ktry okrela zestaw znakw i opcjonalnie porzdek sortowania. Dotyczy to typw
CHAR, VARCHAR, rnych typw TlXT oraz lNUM i SlT, na przykad:
CRF/TF T/B|F !
FNUMYCTVQ
YCTVQ|
1 lub 2 bajty w zalenoci od liczby wartoci wyliczenia
(maksymalnie 65 535)
SFTYCTVQ
YCTVQ|
1, 2, 3, 4 lub 8 bajtw w zalenoci od liczby elementw zestawu
(maksymalnie 64)
Typy VARCHAR, B|OB i TlXT maj zmienn dugo. Dla kadego ilo pamici potrzeb-
nej do przechowania wartoci bdzie zalee od faktycznej dugoci wartoci kolumny
(reprezentowanej w ostatniej tabeli przez .), a nie od maksymalnego moliwego roz-
miaru danego typu. Kolumna VARCHAR`0) na przykad moe przechowywa acuch
o maksymalnej dugoci 10 znakw. Faktyczna ilo wymaganej pamici to dugo
acucha (.) plus 1 bajt do zapisania dugoci acucha. Dla acucha `.|cc` parametr
. jest rwny 4, a wymagany rozmiar pamici to 5 bajtw.
Typy B|OB i TlXT wymagaj 1, 2, 3 lub 4 bajtw do zapisu dugoci wartoci kolumny
w zalenoci od maksymalnej moliwej dugoci tego typu (patrz punkt 4.4.2).
Rozmiar obiektu lNUM jest ustalany na podstawie liczby rnych wartoci wyliczenia.
Przy wyliczeniach do 255 moliwych wartoci uywany jest jeden bajt, a przy wyli-
czeniach do 65 535 wartoci uywane s 2 bajty (patrz punkt 4.4.3).
Rozmiar obiektu SlT jest okrelany przez liczb rnych elementw zestawu. Jeli ze-
staw ma rozmiar 0, obiekt zajmuje 0/).8 bajtw, ktr to warto zaokrgla si do
1, 2, 3, 4 lub 8 bajtw. Obiekt SlT moe mie do 64 elementw (patrz punkt 4.4.4).
4.6. Wybieranie odpowiedniego typu
dla kolumny
Aby jak najbardziej wydajnie korzysta z pamici, naley we wszystkich przypadkach
stara si stosowa typ, ktry bdzie jak najbardziej dokadny. Jeli na przykad w kolum-
nie liczb cakowitych bd przechowywane wartoci z zakresu od ` do 99999, najlep-
szym wyborem bdzie typ MlD1UM1NT UNS1ONlD. Ze wszystkich typw, ktre reprezentuj
wszystkie wymagane wartoci, zajmuje najmniej pamici.
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych 153
Powszechnym problemem jest dokadne przedstawianie wartoci walutowych. W MySQL
naley do tego uywa typu DlC1MA|, za pomoc ktrego wartoci zapisywane s w for-
mie acucha. Dziki temu nie traci si na dokadnoci (mimo to obliczenia z wartociami
DlC1MA| mog by wci wykonywane przy uyciu operacji dziaajcych na liczbach
z podwjn precyzj). Jeli dokadno nie jest zbyt wana, by moe wystarczajco
dobrym typem bdzie DOUB|l.
Aby uzyska wiksz dokadno, mona zawsze przeksztaci warto na typ stao-
przecinkowy, przechowywany w B1O1NT. Pozwoli to wykonywa wszystkie obliczenia
na liczbach cakowitych i tylko w razie potrzeby przeksztaca wynik z powrotem na
wartoci zmiennoprzecinkowe.
4.7. Wykorzystywanie typw kolumn
z innych mechanizmw baz danych
Aby uatwi uytkownikowi zastosowanie kodu pochodzcego od innych producentw,
moliwe jest odwzorowanie typw kolumn w sposb przedstawiony w poniszej tabeli.
Odwzorowania te upraszczaj operacj importu do MySQL definicji tabel z innych
mechanizmw baz danych:
Typ innych producentw Typ MySQL
BTN/RY/| C'/R/| BTN/RY
C'/R V/RYTN/| V/RC'/R/|
F|J/T4 F|J/T
F|J/T8 OJUB|F
TNT1 TTNYTNT
TNT SM/||TNT
TNT: MFOTUMTNT
TNT4 TNT
TNT8 BTTNT
|JN V/RBTN/RY MFOTUMB|JB
|JN V/RC'/R MFOTUMTFXT
|JN MFOTUMTFXT oc M,SJ| 410|
MTOO|FTNT MFOTUMTNT
V/RBTN/RY/| C'/R/| BTN/RY
Odwzorowanie typw kolumn jest wykonywane podczas tworzenia tabeli, po czym
oryginalne deklaracje typu zostaj usunite. Jeli uytkownik utworzy tabel z typami
stosowanymi przez innych producentw, po czym wyda polecenie DlSCR1Bl PC\YCA
VCDGNK, zostanie przedstawiona struktura tabeli z odpowiadajcymi im typami MySQL.
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
PRZYKADOWY ROZDZIA PRZYKADOWY ROZDZIA
IDZ DO IDZ DO
ZAMW DRUKOWANY KATALOG ZAMW DRUKOWANY KATALOG
KATALOG KSIEK KATALOG KSIEK
TWJ KOSZYK TWJ KOSZYK
CENNIK I INFORMACJE CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK ZAMW CENNIK
CZYTELNIA CZYTELNIA
FRAGMENTY KSIEK ONLINE FRAGMENTY KSIEK ONLINE
SPIS TRECI SPIS TRECI
DODAJ DO KOSZYKA DODAJ DO KOSZYKA
KATALOG ONLINE KATALOG ONLINE
MySQL. Opis jzyka
Autor: Paul Dubois
Tumaczenie: Pawe Gonera, Anna Zawadzka
ISBN: 83-7361-688-8
Tytu oryginau: MySQL Language Reference
Format: B5, stron: 472
MySQL to najpopularniejsza na wiecie baza danych dostpna na licencji open
source. Dziki swojej wydajnoci, szybkoci dziaania, stabilnoci i rozbudowanym
mechanizmom zabezpiecze jest wykorzystywana niemal do wszystkich zada, do
jakich moe by potrzebna baza danych. Stanowi zaplecze dla wielu aplikacji
korporacyjnych, witryn WWW i sklepw internetowych. Bogactwo funkcji i moliwoci
to ogromna zaleta rodowiska MySQL, jednake zapamitanie skadni, parametrw
i sposobw stosowania wszystkich polece i rozszerze jest praktycznie niemoliwe.
Kady, kto chce biegle posugiwa si t baz, powinien mie pod rk materiay
opisujce stosowany w niej jzyk SQL.
Ksika MySQL. Opis jzyka to najlepsze rdo takich informacji. Stworzona,
zredagowana i sprawdzona przez pracownikw dziaw pomocy i produkcji firmy
MySQL AB publikacja zawiera wszystko, co moe by potrzebne uytkownikowi bazy
danych MySQL. Przedstawia zarwno zagadnienia podstawowe, takie jak: struktura
jzyka, typy danych i zasady konstruowania zapyta, jak i tematy zaawansowane:
transakcje, replikacj oraz administrowanie baz. Szczegowo opisane s rwnie
wszystkie zagadnienia zwizane z zaimplementowanym w niej jzykiem SQL.
Podstawowe informacje o MySQL
Jzyk SQL instrukcje, typy danych, funkcje i operatory
Zapytania
Definiowanie danych
Obsuga transakcji
Zarzdzanie kontami uytkownikw
Konserwacja tabel
Replikacja baz danych
Rozszerzenia MySQL dla systemw GIS
Procedury skadowane
Obsuga bdw
Spis treci
Rozdzia 1. Informacje oglne.............................................................................. 9
1.1. Na temat tego podrcznika....................................................................................... 9
1.1.1. Zasady przyjte w tym podrczniku .......................................................... 10
1.2. Omwienie systemu zarzdzania baz danych MySQL......................................... 12
1.2.1. Historia MySQL........................................................................................ 13
1.2.2. Gwne cechy MySQL.............................................................................. 14
1.2.3. Stabilno MySQL .................................................................................... 17
1.2.4. Jak due mog by tabele MySQL ............................................................ 18
1.2.5. Zgodno z rokiem 2000 ........................................................................... 19
1.3. Omwienie MySQL AB ........................................................................................ 21
1.3.1. Model biznesowy i usugi MySQL AB...................................................... 22
1.3.2. Informacje o kontakcie .............................................................................. 25
1.4. Obsuga techniczna oraz wydawanie licencji MySQL........................................... 26
1.4.1. Obsuga techniczna oferowana przez MySQL AB........................................ 26
1.4.2. Prawa autorskie i licencje .......................................................................... 27
1.4.3. Licencje MySQL ....................................................................................... 28
1.4.4. Logo i znaki towarowe MySQL ................................................................ 30
1.5. Plany rozwoju MySQL .......................................................................................... 32
1.5.1. MySQL 4.0 w skrcie................................................................................ 33
1.5.2. MySQL 4.1 w skrcie................................................................................ 35
1.5.3. MySQL 5.0: nastpna wersja rozwojowa .................................................. 37
1.6. MySQL i przyszo (TODO) ................................................................................ 37
1.6.1. Nowe mechanizmy planowane dla wersji 4.1............................................ 38
1.6.2. Nowe funkcje planowane dla wersji 5.0.................................................... 38
1.6.3. Nowe funkcje planowane dla 5.1............................................................... 39
1.6.4. Nowe funkcje planowane w bliskiej przyszoci ......................................... 40
1.6.5. Nowe funkcje planowane w niezbyt odlegej przyszoci.......................... 43
1.6.6. Nowe funkcje, ktrych wdroenia nie planujemy.......................................... 44
1.7. rda informacji o MySQL .................................................................................. 45
1.7.1. Listy dyskusyjne powicone MySQL ...................................................... 45
1.7.2. Wspomaganie rodowiska MySQL na IRC (Internet Relay Chat)............. 54
1.8. Zgodno MySQL ze standardami ......................................................................... 55
1.8.1. Standardy speniane przez MySQL............................................................ 56
1.8.2. Wybieranie trybw MySQL ...................................................................... 56
1.8.3. Uruchamianie MySQL w trybie ANSI ...................................................... 56
1.8.4. Rozszerzenia MySQL do standardu SQL.................................................. 57
4 Spis treci
1.8.5. Rozbienoci midzy MySQL a standardem SQL ........................................ 60
1.8.6. Jak MySQL radzi sobie z ograniczeniami ................................................. 67
1.8.7. Znane bdy i projektowe braki w MySQL................................................ 69
Rozdzia 2. Struktura jzyka .............................................................................. 77
2.1. Literay................................................................................................................... 77
2.1.1. acuchy ................................................................................................... 77
2.1.2. Liczby........................................................................................................ 80
2.1.3. Wartoci szesnastkowe .............................................................................. 80
2.1.4. Wartoci logiczne ...................................................................................... 81
2.1.5. Wartoci NULL......................................................................................... 81
2.2. Nazwy baz danych, tabel, indeksw, kolumn i aliasw......................................... 81
2.2.1. Kwalifikatory identyfikatorw .................................................................. 83
2.2.2. Znaczenie wielkoci liter w nazwach identyfikatorw.............................. 83
2.3. Zmienne definiowane przez uytkownika.............................................................. 85
2.4. Zmienne systemowe............................................................................................... 87
2.4.1. Strukturalne zmienne systemowe .............................................................. 89
2.5. Skadnia komentarza .............................................................................................. 91
2.6. Traktowanie sw zastrzeonych w MySQL.......................................................... 92
Rozdzia 3. Obsuga zestaww znakw............................................................... 95
3.1. Oglne informacje o zestawach znakw i sortowaniu ........................................... 95
3.2. Zestawy znakw i porzdki sortowania w MySQL................................................ 96
3.3. Okrelanie domylnego zestawu znakw i sortowania........................................... 98
3.3.1. Zestaw znakw i sortowanie dla serwera................................................... 98
3.3.2. Zestaw znakw i sortowanie dla bazy danych........................................... 99
3.3.3. Zestaw znakw i sortowanie dla tabeli .................................................... 100
3.3.4. Zestaw znakw i sortowanie dla kolumny............................................... 100
3.3.5. Przykady przypisywania zestawu znakw i sortowania ......................... 101
3.3.6. Zestawy znakw i sortowanie dla poczenia .......................................... 102
3.3.7. Zestaw znakw i sortowanie dla acucha znakw.................................. 104
3.3.8. Wykorzystywanie COLLATE w instrukcjach SQL.................................... 105
3.3.9. Priorytet klauzuli COLLATE .................................................................. 106
3.3.10. Operator BINARY................................................................................... 106
3.3.11. Niektre przypadki specjalne, w ktrych trudno okreli sortowanie...... 106
3.3.12. Sortowania musz by odpowiednie dla danego zestawu znakw........... 107
3.3.13. Przykad wpywu porzdku sortowania ................................................... 108
3.4. Operacje, na ktre ma wpyw obsuga zestaww znakw.................................... 109
3.4.1. acuchy wyjciowe ............................................................................... 109
3.4.2. CONVERT()............................................................................................ 110
3.4.3. CAST() .................................................................................................... 110
3.4.4. Instrukcje SHOW .................................................................................... 111
3.5. Obsuga Unicode.................................................................................................. 112
3.6. UTF8 dla metadanych.......................................................................................... 113
3.7. Kompatybilno z innymi systemami zarzdzania baz danych .......................... 115
3.8. Nowy format pliku konfiguracji zestawu znakw................................................ 115
3.9. Narodowe zestawy znakw.................................................................................. 115
3.10. Aktualizacja zestaww znakw z MySQL 4.0..................................................... 116
3.10.1. Zestawy znakw w wersji 4.0 i odpowiadajce im w wersji 4.1 pary
skadajce si z zestawu znakw i sortowania......................................... 117
3.10.2. Przeksztacanie kolumn znakowych wersji 4.0 na format 4.1 ................. 118
3.11. Zestawy znakw i sortowania obsugiwane przez MySQL.................................. 118
3.11.1. Zestawy znakw standardu Unicode ....................................................... 119
3.11.2. Zestawy znakw zachodnioeuropejskich................................................. 120
3.11.3. Zestawy znakw dla Europy Centralnej .................................................. 121
Spis treci 5
3.11.4. Zestawy znakw poudniowoeuropejskich i rodkowowschodnich......... 122
3.11.5. Zestawy znakw regionu batyckiego...................................................... 123
3.11.6. Zestawy znakw dla cyrylicy................................................................... 123
3.11.7. Azjatyckie zestawy znakw..................................................................... 124
Rozdzia 4. Typy kolumn.................................................................................. 125
4.1. Przegld typw dla kolumny................................................................................ 126
4.1.1. Omwienie typw liczbowych ................................................................ 126
4.1.2. Przegld typw zwizanych z dat i czasem............................................ 129
4.1.3. Przegld typw acuchowych ................................................................ 130
4.2. Typy liczbowe...................................................................................................... 132
4.3. Typy zwizane z dat i czasem............................................................................ 135
4.3.1. Typy DATETIME, DATE i TIMESTAMP............................................. 137
4.3.2. Typ TIME................................................................................................ 142
4.3.3. Typ YEAR............................................................................................... 143
4.3.4. Problem roku 2000 a typy zwizane z dat.............................................. 144
4.4. Typy acuchowe ................................................................................................. 144
4.4.1. Typy CHAR i VARCHAR...................................................................... 144
4.4.2. Typy BLOB i TEXT................................................................................ 146
4.4.3. Typ Enum................................................................................................ 147
4.4.4. Typ SET .................................................................................................. 149
4.5. Rozmiar pamici potrzebnej dla typw kolumn................................................... 151
4.6. Wybieranie odpowiedniego typu dla kolumny..................................................... 152
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych ............... 153
Rozdzia 5. Funkcje i operatory........................................................................ 155
5.1. Operatory ............................................................................................................. 156
5.1.1. Nawiasy................................................................................................... 156
5.1.2. Operatory porwnania ............................................................................. 156
5.1.3. Operatory logiczne .................................................................................. 161
5.1.4. Operatory rozrniania wielkoci liter..................................................... 163
5.2. Funkcje kontroli przepywu ................................................................................. 163
5.3. Funkcje acuchowe............................................................................................. 166
5.3.1. Funkcje porwnywania acuchw.......................................................... 176
5.4. Funkcje liczbowe ................................................................................................. 178
5.4.1. Operatory arytmetyczne........................................................................... 178
5.4.2. Funkcje matematyczne ............................................................................ 180
5.5. Funkcje daty i godziny......................................................................................... 186
5.6. Funkcje obsugi wyszukiwania penotekstowego................................................. 202
5.6.1. Boolowskie wyszukiwania penotekstowe............................................... 205
5.6.2. Wyszukiwania penotekstowe z rozwijaniem zapytania .......................... 207
5.6.3. Ograniczenia dla wyszukiwania penotekstowego................................... 208
5.6.4. Modyfikowanie wyszukiwania penotekstowego MySQL ...................... 209
5.6.5. Lista rzeczy do zrobienia dla wyszukiwania penotekstowego................ 211
5.7. Funkcje konwersji typw..................................................................................... 211
5.8. Inne funkcje ......................................................................................................... 214
5.8.1. Funkcje bitowe ........................................................................................ 214
5.8.2. Funkcje szyfrujce................................................................................... 215
5.8.3. Funkcje informacyjne .............................................................................. 219
5.8.4. Funkcje rne .......................................................................................... 223
5.9. Funkcje i modyfikatory do zastosowania z klauzulami GROUP BY................... 226
5.9.1. Funkcje GROUP BY (agregujce)........................................................... 226
5.9.2. Modyfikatory GROUP BY...................................................................... 229
5.9.3. GROUP BY z ukrytymi polami............................................................... 232
6 Spis treci
Rozdzia 6. Skadnia instrukcji SQL .................................................................. 235
6.1. Instrukcje operujce na danych............................................................................ 235
6.1.1. Skadnia instrukcji DELETE................................................................... 235
6.1.2. Skadnia instrukcji DO ............................................................................ 238
6.1.3. Skadnia instrukcji HANDLER............................................................... 238
6.1.4. Skadnia instrukcji INSERT .................................................................... 240
6.1.5. Skadnia instrukcji LOAD DATA INFILE.............................................. 246
6.1.6. Skadnia instrukcji REPLACE................................................................. 255
6.1.7. Skadnia instrukcji SELECT.................................................................... 256
6.1.8. Skadnia podzapyta................................................................................ 265
6.1.9. Skadnia instrukcji TRUNCATE............................................................. 276
6.1.10. Skadnia instrukcji UPDATE................................................................... 276
6.2. Instrukcje definiowania danych ........................................................................... 278
6.2.1. Skadnia instrukcji ALTER DATABASE ............................................... 278
6.2.2. Skadnia instrukcji ALTER TABLE........................................................ 279
6.2.3. Skadnia instrukcji CREATE DATABASE............................................. 285
6.2.4. Skadnia instrukcji CREATE INDEX ..................................................... 285
6.2.5. Skadnia instrukcji CREATE TABLE..................................................... 287
6.2.6. Skadnia instrukcji DROP DATABASE.................................................. 301
6.2.7. Skadnia instrukcji DROP INDEX.......................................................... 302
6.2.8. Skadnia instrukcji DROP TABLE.......................................................... 302
6.2.9. Skadnia instrukcji RENAME TABLE.................................................... 303
6.3. Instrukcje programu MySQL............................................................................... 304
6.3.1. Skadnia instrukcji DESCRIBE
(odczytywanie informacji na temat kolumn) ........................................... 304
6.3.2. Skadnia instrukcji USE........................................................................... 304
6.4. Instrukcje obsugi transakcji i blokowania........................................................... 305
6.4.1. Skadnia instrukcji START TRANSACTION, COMMIT
oraz ROLLBACK.................................................................................... 305
6.4.2. Instrukcje niemoliwe do wycofania ....................................................... 306
6.4.3. Instrukcje wykonujce niejawne zatwierdzenie......................................... 306
6.4.4. Skadnia instrukcji SAVEPOINT i ROLLBACK TO SAVEPOINT....... 307
6.4.5. Skadnia instrukcji LOCK TABLES oraz UNLOCK TABLES .............. 307
6.4.6. Skadnia instrukcji SET TRANSACTION.............................................. 310
6.5. Administracja baz danych .................................................................................. 311
6.5.1. Instrukcje zarzdzajce kontami uytkownikw ....................................... 311
6.5.2. Instrukcje do konserwacji tabel ............................................................... 319
6.5.3. Skadnia instrukcji SET i SHOW ............................................................ 326
6.5.4. Inne instrukcje administracyjne ............................................................... 347
6.6. Instrukcje replikacji.............................................................................................. 352
6.6.1. Instrukcje SQL sterujce serwerem gwnym ......................................... 352
6.6.2. Instrukcje SQL sterujce serwerami podrzdnymi .................................. 354
Rozdzia 7. Rozszerzenia przestrzenne w MySQL............................................... 365
7.1. Wstp ................................................................................................................... 365
7.2. Model geometryczny OpenGIS............................................................................ 366
7.2.1. Hierarchia klas geometrycznych.............................................................. 366
7.2.2. Klasa Geometry ....................................................................................... 368
7.2.3. Klasa Point .............................................................................................. 369
7.2.4. Klasa Curve ............................................................................................. 369
7.2.5. Klasa LineString...................................................................................... 370
7.2.6. Klasa Surface........................................................................................... 370
7.2.7. Klasa Polygon.......................................................................................... 370
7.2.8. Klasa GeometryCollection....................................................................... 371
Spis treci 7
7.2.9. Klasa MultiPoint...................................................................................... 371
7.2.10. Klasa MultiCurve .................................................................................... 372
7.2.11. Klasa MultiLineString............................................................................. 372
7.2.12. Klasa MultiSurface .................................................................................. 372
7.2.13. Klasa MultiPolygon................................................................................. 373
7.3. Obsugiwane formaty danych przestrzennych...................................................... 373
7.3.1. Format tekstowy WKT............................................................................ 374
7.3.2. Format binarny WKB.............................................................................. 374
7.4. Tworzenie bazy danych z rozszerzeniami przestrzennymi................................... 375
7.4.1. Typy danych przestrzennych w MySQL ................................................. 375
7.4.2. Tworzenie wartoci przestrzennych......................................................... 376
7.4.3. Tworzenie kolumn przestrzennych.......................................................... 379
7.4.4. Wypenianie kolumn przestrzennych....................................................... 379
7.4.5. Pobieranie danych przestrzennych........................................................... 381
7.5. Analiza informacji przestrzennych....................................................................... 381
7.5.1. Funkcje konwersji formatw geometrycznych ........................................ 382
7.5.2. Funkcje klasy Geometry.......................................................................... 382
7.5.3. Funkcje tworzce nowe geometrie na podstawie istniejcych................. 388
7.5.4. Funkcje testujce relacje przestrzenne
midzy obiektami geometrycznymi ......................................................... 389
7.5.5. Relacje midzy minimalnymi prostoktami otaczajcymi
dla poszczeglnych geometrii.................................................................. 390
7.5.6. Funkcje sprawdzajce relacje przestrzenne pomidzy geometriami ........ 391
7.6. Optymalizacja analizy przestrzennej.................................................................... 392
7.6.1. Tworzenie indeksw przestrzennych....................................................... 392
7.6.2. Wykorzystanie indeksu przestrzennego................................................... 393
7.7. Zgodno MySQL ze standardem........................................................................ 395
7.7.1. Niezaimplementowane funkcje GIS ........................................................ 395
Rozdzia 8. Procedury i funkcje skadowane ..................................................... 397
8.1. Skadnia procedur skadowanych......................................................................... 398
8.1.1. Utrzymanie procedur skadowanych........................................................ 398
8.1.2. SHOW PROCEDURE STATUS oraz SHOW FUNCTION STATUS.... 401
8.1.3. Instrukcja CALL...................................................................................... 402
8.1.4. Instrukcja zoona BEGIN ... END.......................................................... 402
8.1.5. Instrukcja DECLARE.............................................................................. 402
8.1.6. Zmienne w procedurach skadowanych................................................... 402
8.1.7. Warunki i podprogramy obsugi .............................................................. 403
8.1.8. Kursory.................................................................................................... 405
8.1.9. Konstrukcje sterowania przepywem sterowania..................................... 406
Rozdzia 9. Obsuga bdw w MySQL .............................................................. 409
9.1. Zwracane bdy.................................................................................................... 409
9.2. Komunikaty bdw............................................................................................. 419
Dodatek A Rozwizywanie problemw z zapytaniami ........................................435
A.1. Zagadnienia zwizane z zapytaniami ................................................................... 435
A.1.1. Wielko liter przy wyszukiwaniu........................................................... 435
A.1.2. Problemy z kolumnami typu DATE ........................................................ 436
A.1.3. Problemy z wartociami NULL............................................................... 437
A.1.4. Problemy z synonimami kolumn ............................................................. 438
A.1.5. Bd wycofania dla tabel nietransakcyjnych............................................ 439
A.1.6. Usuwanie wierszy ze zwizanych tabel ................................................... 439
A.1.7. Rozwizywanie problemw z brakujcymi wierszami ............................ 440
A.1.8. Problemy z porwnaniami zmiennoprzecinkowymi................................ 441
8 Spis treci
A.2. Problemy zwizane z optymalizatorem................................................................ 443
A.3. Problemy z definicj tabel.................................................................................... 444
A.3.1. Problemy z instrukcj ALTER TABLE................................................... 444
A.3.2. Jak zmieni porzdek kolumn w tabeli .................................................... 445
A.3.3. Problemy z tabelami tymczasowymi ....................................................... 445
Dodatek B Wyraenia regularne w MySQL........................................................ 447
Skorowidz...................................................................................... 451
Rozdzia 4.
Typy kolumn
W MySQL dostpnych jest wiele typw danych, ktre mona pogrupowa w kilku pod-
stawowych kategoriach, takich jak typy liczbowe, typy zwizane z dat i czasem oraz
typy acuchowe. Na pocztku tego rozdziau przedstawiony zostanie przegld wspo-
mnianych przed chwil typw kolumn, po czym nastpi bardziej szczegowy opis ich
waciwoci z podziaem na poszczeglne kategorie i wreszcie zamieszczone zostanie
podsumowanie informacji dotyczcych wymaga co do rozmiaru pamici potrzebnej
do przechowania danej kolumny. Sam przegld jest z zamierzenia krtki. Dodatkowe
informacje o poszczeglnych typach kolumn, na przykad dopuszczalny format, w kt-
rym mona deklarowa wartoci, zostay uwzgldnione w szczegowych omwieniach.
Od wersji 4.1 MySQL rozpoznaje rozszerzenia do obsugi danych przestrzennych.
Informacje o typach przestrzennych znajduj si w rozdziale 7. tego podrcznika.
W czci opisu typw kolumn zastosowane zostay nastpujce reguy:
/
Wskazuje maksymalny rozmiar wywietlania liczby lub acucha.
Maksymalnym dopuszczalnym rozmiarem wywietlania jest 255.
&
Dotyczy typw zmiennoprzecinkowych i staoprzecinkowych. Okrela liczb
cyfr po kropce dziesitnej. Maksymalna dopuszczalna warto wynosi 30,
ale nie powinna przekracza /.
Nawiasy kwadratowe ( ) identyfikuj opcjonalne fragmenty deklaracji typu.
126 Rozdzia 4. Typy kolumn
4.1. Przegld typw dla kolumny
4.1.1. Omwienie typw liczbowych
Poniej znajduje si przegld liczbowych typw dla kolumn. Bardziej szczegowe
informacje mona znale w podrozdziale 4.2. Wymogi dotyczce rozmiaru pamici
potrzebnej do przechowywania kolumn znajduj si w podrozdziale 4.5.
Jeli dla kolumny liczbowej zostanie okrelony atrybut /lRO|1||, MySQL automatycznie
doda do kolumny atrybut UN1S1ONlD.
Naley uwaa podczas odejmowania dwch wartoci liczbowych, z ktrych jedna ma
typ UN1S1ONlD. Uzyskany wynik bdzie rwnie tego typu! patrz podrozdzia 5.7.
T1NY1NT/) UNS1ONlD /lRO|1||
Bardzo maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od `8
do `/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do bb.
B1T, BOO|, BOO|lAN
To s synonimy T1NY1NT`). Synonim BOO|lAN zosta dodany w MySQL 4.1.0.
Warto zerowa to inaczej fasz. Wartoci niezerowe traktowane s jako prawda.
W przyszoci wprowadzona zostanie pena, zgodna ze standardem SQL
obsuga typu boolowskiego.
SMA||1NT/) UNS1ONlD /lRO|1||
Maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od o/68
do o/6/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do 6bbob.
MlD1UM1NT/) UNS1ONlD /lRO|1||
rednia liczba cakowita. Dla liczb ze znakiem zakres wynosi od 8o88608
do 8o8860/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0
do `6///`b.
1NT/) UNS1ONlD /lRO|1||
Standardowa liczba cakowita. Dla liczb ze znakiem zakres wynosi
od `4/48o648 do `4/48o64/. W przypadku liczb bez znaku zakres
obejmuje wartoci od 0 do 49496/9b.
1NTlOlR/) UNS1ONlD /lRO|1||
Jest to synonim dla typu 1NT.
B1O1NT/) UNS1ONlD /lRO|1||
Dua liczba cakowita. Dla liczb ze znakiem zakres wynosi
od 9oo/0o68b4//b808 do 9oo/0o68b4//b80/. W przypadku liczb
bez znaku zakres obejmuje wartoci od 0 do `8446/440/o/09bb`6`b.
4.1. Przegld typw dla kolumny 127
Oto kilka spraw, o ktrych naley wiedzie odnonie kolumn typu B1O1NT:
Wszystkie obliczenia wykonywane s przy uyciu wartoci typu B1O1NT
lub DOUB|l ze znakiem. Oznacza to, e duych liczb cakowitych bez
znaku, wikszych ni 9oo/0o68b4//b80/ (63 bity), mona uywa tylko
z funkcjami bitowymi! Niezastosowanie si do tej zasady moe doprowadzi
do uzyskania w wyniku liczby, ktrej kilka ostatnich cyfr jest bdnych
z powodu bdw w zaokrglaniu podczas konwersji wartoci B1O1NT
na DOUB|l.
MySQL 4.0 potrafi obsugiwa B1O1NT w nastpujcych przypadkach:
Podczas wykorzystywania liczb cakowitych do przechowywania
duych wartoci bez znaku w kolumnie typu B1O1NT.
W M1NPC\YCAMQN) lub MAXPC\YCAMQN), gdzie PC\YCAMQN odnosi si
do kolumny B1O1NT.
Podczas korzystania z operatorw (midzy innymi , , *), gdy oba
argumenty s liczbami cakowitymi.
Zawsze istnieje moliwo zapisania w kolumnie B1O1NT dokadnej wartoci
liczby cakowitej. Wystarczy zapisa j przy uyciu acucha. W takim
przypadku zostanie dokonana konwersja acucha na liczb; konwersja
nie bdzie wymaga poredniego etapu przeksztacajcego liczb na jej
odpowiednik o podwjnej precyzji.
Podczas korzystania z operatorw , i * stosowana jest arytmetyka
B1O1NT, jeli oba argumenty maj warto liczby cakowitej! To oznacza,
e pomnoenie dwch duych liczb cakowitych (lub wynikw funkcji,
ktra zwraca liczby cakowite) moe spowodowa nieoczekiwane
rezultaty, jeli wynik przekroczy liczb 9oo/0o68b4//b80/.
||OATR) UNS1ONlD /lRO|1||
Liczba zmiennoprzecinkowa. Parametr R oznacza precyzj i moe przyjmowa
warto od 0 do 14 dla liczb zmiennoprzecinkowych o dokadnoci do jednego
znaku i od 25 do 53 dla liczb zmiennoprzecinkowych o dokadnoci do dwch
znakw. To przypomina opisane poniej typy ||OAT i DOUB|l. Typ ||OATR)
ma ten sam zakres, jaki posiadaj odpowiadajce mu typy ||OAT i DOUB|l,
ale w jego przypadku niezdefiniowany jest maksymalny rozmiar wywietlania
i liczba miejsc po przecinku.
Od wersji 3.23 MySQL jest to prawdziwa warto zmiennoprzecinkowa.
W wersjach wczeniejszych liczba typu ||OATR) bya zawsze liczb o dwch
miejscach po przecinku.
Ta skadnia zostaa dodana w celu zachowania zgodnoci ze standardem ODBC.
Stosowanie typu ||OAT moe spowodowa wystpienie pewnych
nieoczekiwanych problemw, poniewa wszystkie obliczenia w MySQL
s wykonywane z podwjn precyzj patrz punkt A.1.7).
||OAT/, &) UNS1ONlD /lRO|1||
128 Rozdzia 4. Typy kolumn
Maa liczba zmiennoprzecinkowa (o dokadnoci do jednego znaku). Liczba
ta moe przyj wartoci: od o408o466lo8 do ``/b494ob`lo8, 0,
i od ``/b494ob`lo8 do o408o466lo8. Jeli podany jest atrybut UN1S1ONlD,
niedozwolone s wartoci ujemne. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ ||OAT bez argumentw
lub typ ||OATR) (gdzie Rjest liczb z zakresu od 0 do 24) oznacza liczb
zmiennoprzecinkow o pojedynczej precyzji.
DOUB|l/, &) UNS1ONlD /lRO|1||
Standardowa liczba zmiennoprzecinkowa (o dokadnoci do dwch
znakw). Liczba ta moe przyj wartoci: od `/9/69o`o486o`b/lo08
do b0/o8b8b0/0`4lo08, 0, i od b0/o8b8b0/0`4lo08
do `/9/69o`o486o`b/lo08. Jeli podany jest atrybut UN1S1ONlD, wartoci
ujemne s niedozwolone. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ DOUB|l
bez argumentw lub ||OATR) (gdzie R jest liczb z zakresu od 25 do 53)
oznacza liczb zmiennoprzecinkow o podwjnej precyzji.
DOUB|l PRlC1S1ON/, &) UNS1ONlD /lRO|1||
RlA|/, &) UNS1ONlD /lRO|1||
S to synonimy DOUB|l. Wyjtek: Jeli dla parametru s;_cce serwera
wczono opcj RlA|_AS_||OAT, synonimem ||OAT jest RlA|, a nie DOUB|l.
DlC1MA|/, &) UNS1ONlD /lRO|1||
Niezapakowana liczba staoprzecinkowa. Zachowanie kolumny tego typu
przypomina kolumn typu CHAR. Niezapakowana oznacza, e liczba jest
przechowywana w postaci acucha przy uyciu jednego znaku na kad cyfr
wartoci. Parametr / definiuje maksymaln liczb cyfr, a & liczb miejsc
po przecinku. W parametrze / nie s brane pod uwag: kropka dziesitna
(odpowiadajca w naszej notacji przecinkowi) i (dla liczb ujemnych) znak ,
cho jest dla nich zarezerwowane miejsce. Wartoci nie maj miejsc
po przecinku lub czci uamkowych, jeli & jest rwne 0. Maksymalny zakres
wartoci typu DlC1MA| jest taki sam, jak dla typu DOUB|l, ale rzeczywisty zakres
danej kolumny DlC1MA| moe by ograniczony przez wybr argumentw / i &.
Jeli podany jest atrybut UN1S1ONlD, wartoci ujemne s niedozwolone.
W przypadku braku argumentu &, domyln wartoci jest 0. Jeli pominity
jest parametr /, domyln wartoci jest 10.
W wersjach poprzedzajcych MySQL 3.23 argument / musi by wystarczajco
duy, by zawiera obszar potrzebny dla znaku i kropki dziesitnej.
DlC/,&) UNS1ONlD /lRO|1||
NUMlR1C/,&) UNS1ONlD /lRO|1||
|1XlD/, &) UNS1ONlD /lRO|1||
S to synonimy typu DlC1MA|.
W MySQL 4.1.0 dodano synonim |1XlD w celu osignicia kompatybilnoci
z innymi serwerami.
4.1. Przegld typw dla kolumny 129
4.1.2. Przegld typw zwizanych z dat i czasem
Poniej znajduje si podsumowanie typw kolumn przeznaczonych dla czasu i daty.
Dodatkowe informacje na ten temat mona znale w podrozdziale 4.3. Wymogi do-
tyczce pamici potrzebnej do przechowywania danych w kolumnach zostay podane
w podrozdziale 4.5.
DATl
Data. Obsugiwany zakres obejmuje daty od ``0000`0`` do `9999`o``.
W MySQL wartoci DATl wywietlane s w formacie `RRRRMMDD`, ale mona
przypisywa wartoci do kolumn DATl przy uyciu acuchw lub liczb.
DATlT1Ml
Kombinacja daty i czasu. Obsugiwany zakres obejmuje wartoci
od ``0000`0` 000000` do `9999`o` ob9b9`. W MySQL wartoci
DATlT1Ml wywietlane s w formacie `RRRRMMDD OOMMSS`, ale mona
przypisywa wartoci do kolumn DATlT1Ml przy uyciu acuchw lub liczb.
T1MlSTAMP/)
Znacznik czasu. Obsugiwany zakres rozpoczyna si od daty ``9/00`0``
i siga roku 0o/.
Kolumna typu T1MlSTAMP przydaje si do rejestracji daty i godziny operacji
wstawiania lub aktualizacji. Pierwszej kolumnie T1MlSTAMP w tabeli
automatycznie przypisywana jest data i czas ostatniej operacji, jeli tylko tych
wartoci nie wprowadzi rcznie uytkownik. Dowolnej kolumnie T1MlSTAMP
mona rwnie przypisa biec dat i godzin, wpisujc do niej warto NU||.
Od MySQL 4.1 wartoci T1MlSTAMP s zwracane w postaci acuchw
w formacie `RRRRMMDD OOMMSS`. Aby uzyska warto w postaci liczby,
naley doda do kolumn tego typu 0. Inne szerokoci wywietlania
znacznika czasu nie s obsugiwane.
W wersjach poprzedzajcych MySQL 4.1 wartoci T1MlSTAMP s wywietlane
w formacie RRRRMMDDOOMMSS, RRMMDDOOMMSS, RRRRMMDD lub RRMMDD w zalenoci
od tego, czy parametr / jest rwny 14 (albo go brak), 12, 8 lub 6. Mona jednak
przypisywa wartoci do kolumn T1MlSTAMP przy uyciu acuchw lub liczb.
Argument / wpywa tylko na sposb wywietlania kolumny T1MlSTAMP, a nie
na jej przechowywanie. Wartoci kolumny s zawsze zapisywane w czterech
bajtach. W MySQL od wersji 4.0.12 pojawia si opcja ne., dziki ktrej
mona zmieni dziaanie serwera, upodabniajc je do MySQL 4.1.
Naley odnotowa, e kolumny T1MlSTAMP/), gdzie /jest rwne 8 lub 14,
s traktowane jako liczby, natomiast reszta kolumn T1MlSTAMP/) jest
traktowana jako acuchy. Jest to rodzaj gwarancji, e uytkownik bdzie
mg wiarygodnie usuwa i przywraca tabele tego typu.
T1Ml
Godzina. Obsugiwany zakres obejmuje wartoci od `8o8b9b9`
do ` 8o8b9b9`. W MySQL wartoci T1Ml wywietlane s w formacie
` OOMMSS`, ale mona przypisa wartoci do kolumn T1Ml przy uyciu
zarwno acuchw, jak i liczb.
130 Rozdzia 4. Typy kolumn
YlAR|4)
Rok w formacie dwu- lub czterocyfrowym. Domylnym formatem jest rok
zapisany za pomoc czterech cyfr. W tym formacie dostpne wartoci nale
do przedziau od `90` do `bb oraz 0. W formacie dwucyfrowym wartoci
dopuszczalne to liczby z zakresu od /0 do 69, ktre reprezentuj daty od roku
1970 do 2069. W MySQL wartoci YlAR wywietlane s w formacie RRRR,
ale mona przypisa wartoci do kolumn YlAR przy uyciu tak acuchw,
jak i liczb. Typ YlAR jest niedostpny dla wersji wczeniejszych ni MySQL 3.22.
4.1.3. Przegld typw acuchowych
Poniej znajduje si przegld typw acuchowych. Dodatkowe informacje mona
znale w podrozdziale 4.4. Wymogi dotyczce pamici potrzebnej do przechowywa-
nia danych w kolumnach zostay podane w podrozdziale 4.5.
W niektrych przypadkach MySQL moe zmieni kolumn typu acuchowego na typ,
ktry bdzie si rni od zadeklarowanego w instrukcji CRlATl TAB|l lub A|TlR TAB|l.
Wicej informacji na ten temat znajduje si w podpunkcie 6.2.5.2.
Od wersji 4.1 w MySQL pojawia si zmiana, ktra wpywa na wiele typw kolumn typu
acuchowego. Definicja kolumn typu znakowego moe zawiera atrybut CHARACTlR
SlT, ktry okrela zestaw znakw i opcjonalnie porzdek sortowania. Dotyczy to typw
CHAR, VARCHAR, rnych typw TlXT oraz lNUM i SlT, na przykad:
CRF/TF T/B|F !
FNUMYCTVQ
YCTVQ|
1 lub 2 bajty w zalenoci od liczby wartoci wyliczenia
(maksymalnie 65 535)
SFTYCTVQ
YCTVQ|
1, 2, 3, 4 lub 8 bajtw w zalenoci od liczby elementw zestawu
(maksymalnie 64)
Typy VARCHAR, B|OB i TlXT maj zmienn dugo. Dla kadego ilo pamici potrzeb-
nej do przechowania wartoci bdzie zalee od faktycznej dugoci wartoci kolumny
(reprezentowanej w ostatniej tabeli przez .), a nie od maksymalnego moliwego roz-
miaru danego typu. Kolumna VARCHAR`0) na przykad moe przechowywa acuch
o maksymalnej dugoci 10 znakw. Faktyczna ilo wymaganej pamici to dugo
acucha (.) plus 1 bajt do zapisania dugoci acucha. Dla acucha `.|cc` parametr
. jest rwny 4, a wymagany rozmiar pamici to 5 bajtw.
Typy B|OB i TlXT wymagaj 1, 2, 3 lub 4 bajtw do zapisu dugoci wartoci kolumny
w zalenoci od maksymalnej moliwej dugoci tego typu (patrz punkt 4.4.2).
Rozmiar obiektu lNUM jest ustalany na podstawie liczby rnych wartoci wyliczenia.
Przy wyliczeniach do 255 moliwych wartoci uywany jest jeden bajt, a przy wyli-
czeniach do 65 535 wartoci uywane s 2 bajty (patrz punkt 4.4.3).
Rozmiar obiektu SlT jest okrelany przez liczb rnych elementw zestawu. Jeli ze-
staw ma rozmiar 0, obiekt zajmuje 0/).8 bajtw, ktr to warto zaokrgla si do
1, 2, 3, 4 lub 8 bajtw. Obiekt SlT moe mie do 64 elementw (patrz punkt 4.4.4).
4.6. Wybieranie odpowiedniego typu
dla kolumny
Aby jak najbardziej wydajnie korzysta z pamici, naley we wszystkich przypadkach
stara si stosowa typ, ktry bdzie jak najbardziej dokadny. Jeli na przykad w kolum-
nie liczb cakowitych bd przechowywane wartoci z zakresu od ` do 99999, najlep-
szym wyborem bdzie typ MlD1UM1NT UNS1ONlD. Ze wszystkich typw, ktre reprezentuj
wszystkie wymagane wartoci, zajmuje najmniej pamici.
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych 153
Powszechnym problemem jest dokadne przedstawianie wartoci walutowych. W MySQL
naley do tego uywa typu DlC1MA|, za pomoc ktrego wartoci zapisywane s w for-
mie acucha. Dziki temu nie traci si na dokadnoci (mimo to obliczenia z wartociami
DlC1MA| mog by wci wykonywane przy uyciu operacji dziaajcych na liczbach
z podwjn precyzj). Jeli dokadno nie jest zbyt wana, by moe wystarczajco
dobrym typem bdzie DOUB|l.
Aby uzyska wiksz dokadno, mona zawsze przeksztaci warto na typ stao-
przecinkowy, przechowywany w B1O1NT. Pozwoli to wykonywa wszystkie obliczenia
na liczbach cakowitych i tylko w razie potrzeby przeksztaca wynik z powrotem na
wartoci zmiennoprzecinkowe.
4.7. Wykorzystywanie typw kolumn
z innych mechanizmw baz danych
Aby uatwi uytkownikowi zastosowanie kodu pochodzcego od innych producentw,
moliwe jest odwzorowanie typw kolumn w sposb przedstawiony w poniszej tabeli.
Odwzorowania te upraszczaj operacj importu do MySQL definicji tabel z innych
mechanizmw baz danych:
Typ innych producentw Typ MySQL
BTN/RY/| C'/R/| BTN/RY
C'/R V/RYTN/| V/RC'/R/|
F|J/T4 F|J/T
F|J/T8 OJUB|F
TNT1 TTNYTNT
TNT SM/||TNT
TNT: MFOTUMTNT
TNT4 TNT
TNT8 BTTNT
|JN V/RBTN/RY MFOTUMB|JB
|JN V/RC'/R MFOTUMTFXT
|JN MFOTUMTFXT oc M,SJ| 410|
MTOO|FTNT MFOTUMTNT
V/RBTN/RY/| C'/R/| BTN/RY
Odwzorowanie typw kolumn jest wykonywane podczas tworzenia tabeli, po czym
oryginalne deklaracje typu zostaj usunite. Jeli uytkownik utworzy tabel z typami
stosowanymi przez innych producentw, po czym wyda polecenie DlSCR1Bl PC\YCA
VCDGNK, zostanie przedstawiona struktura tabeli z odpowiadajcymi im typami MySQL.
4 Spis treci
1.8.5. Rozbienoci midzy MySQL a standardem SQL ........................................ 60
1.8.6. Jak MySQL radzi sobie z ograniczeniami ................................................. 67
1.8.7. Znane bdy i projektowe braki w MySQL................................................ 69
Rozdzia 2. Struktura jzyka .............................................................................. 77
2.1. Literay................................................................................................................... 77
2.1.1. acuchy ................................................................................................... 77
2.1.2. Liczby........................................................................................................ 80
2.1.3. Wartoci szesnastkowe .............................................................................. 80
2.1.4. Wartoci logiczne ...................................................................................... 81
2.1.5. Wartoci NULL......................................................................................... 81
2.2. Nazwy baz danych, tabel, indeksw, kolumn i aliasw......................................... 81
2.2.1. Kwalifikatory identyfikatorw .................................................................. 83
2.2.2. Znaczenie wielkoci liter w nazwach identyfikatorw.............................. 83
2.3. Zmienne definiowane przez uytkownika.............................................................. 85
2.4. Zmienne systemowe............................................................................................... 87
2.4.1. Strukturalne zmienne systemowe .............................................................. 89
2.5. Skadnia komentarza .............................................................................................. 91
2.6. Traktowanie sw zastrzeonych w MySQL.......................................................... 92
Rozdzia 3. Obsuga zestaww znakw............................................................... 95
3.1. Oglne informacje o zestawach znakw i sortowaniu ........................................... 95
3.2. Zestawy znakw i porzdki sortowania w MySQL................................................ 96
3.3. Okrelanie domylnego zestawu znakw i sortowania........................................... 98
3.3.1. Zestaw znakw i sortowanie dla serwera................................................... 98
3.3.2. Zestaw znakw i sortowanie dla bazy danych........................................... 99
3.3.3. Zestaw znakw i sortowanie dla tabeli .................................................... 100
3.3.4. Zestaw znakw i sortowanie dla kolumny............................................... 100
3.3.5. Przykady przypisywania zestawu znakw i sortowania ......................... 101
3.3.6. Zestawy znakw i sortowanie dla poczenia .......................................... 102
3.3.7. Zestaw znakw i sortowanie dla acucha znakw.................................. 104
3.3.8. Wykorzystywanie COLLATE w instrukcjach SQL.................................... 105
3.3.9. Priorytet klauzuli COLLATE .................................................................. 106
3.3.10. Operator BINARY................................................................................... 106
3.3.11. Niektre przypadki specjalne, w ktrych trudno okreli sortowanie...... 106
3.3.12. Sortowania musz by odpowiednie dla danego zestawu znakw........... 107
3.3.13. Przykad wpywu porzdku sortowania ................................................... 108
3.4. Operacje, na ktre ma wpyw obsuga zestaww znakw.................................... 109
3.4.1. acuchy wyjciowe ............................................................................... 109
3.4.2. CONVERT()............................................................................................ 110
3.4.3. CAST() .................................................................................................... 110
3.4.4. Instrukcje SHOW .................................................................................... 111
3.5. Obsuga Unicode.................................................................................................. 112
3.6. UTF8 dla metadanych.......................................................................................... 113
3.7. Kompatybilno z innymi systemami zarzdzania baz danych .......................... 115
3.8. Nowy format pliku konfiguracji zestawu znakw................................................ 115
3.9. Narodowe zestawy znakw.................................................................................. 115
3.10. Aktualizacja zestaww znakw z MySQL 4.0..................................................... 116
3.10.1. Zestawy znakw w wersji 4.0 i odpowiadajce im w wersji 4.1 pary
skadajce si z zestawu znakw i sortowania......................................... 117
3.10.2. Przeksztacanie kolumn znakowych wersji 4.0 na format 4.1 ................. 118
3.11. Zestawy znakw i sortowania obsugiwane przez MySQL.................................. 118
3.11.1. Zestawy znakw standardu Unicode ....................................................... 119
3.11.2. Zestawy znakw zachodnioeuropejskich................................................. 120
3.11.3. Zestawy znakw dla Europy Centralnej .................................................. 121
Spis treci 5
3.11.4. Zestawy znakw poudniowoeuropejskich i rodkowowschodnich......... 122
3.11.5. Zestawy znakw regionu batyckiego...................................................... 123
3.11.6. Zestawy znakw dla cyrylicy................................................................... 123
3.11.7. Azjatyckie zestawy znakw..................................................................... 124
Rozdzia 4. Typy kolumn.................................................................................. 125
4.1. Przegld typw dla kolumny................................................................................ 126
4.1.1. Omwienie typw liczbowych ................................................................ 126
4.1.2. Przegld typw zwizanych z dat i czasem............................................ 129
4.1.3. Przegld typw acuchowych ................................................................ 130
4.2. Typy liczbowe...................................................................................................... 132
4.3. Typy zwizane z dat i czasem............................................................................ 135
4.3.1. Typy DATETIME, DATE i TIMESTAMP............................................. 137
4.3.2. Typ TIME................................................................................................ 142
4.3.3. Typ YEAR............................................................................................... 143
4.3.4. Problem roku 2000 a typy zwizane z dat.............................................. 144
4.4. Typy acuchowe ................................................................................................. 144
4.4.1. Typy CHAR i VARCHAR...................................................................... 144
4.4.2. Typy BLOB i TEXT................................................................................ 146
4.4.3. Typ Enum................................................................................................ 147
4.4.4. Typ SET .................................................................................................. 149
4.5. Rozmiar pamici potrzebnej dla typw kolumn................................................... 151
4.6. Wybieranie odpowiedniego typu dla kolumny..................................................... 152
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych ............... 153
Rozdzia 5. Funkcje i operatory........................................................................ 155
5.1. Operatory ............................................................................................................. 156
5.1.1. Nawiasy................................................................................................... 156
5.1.2. Operatory porwnania ............................................................................. 156
5.1.3. Operatory logiczne .................................................................................. 161
5.1.4. Operatory rozrniania wielkoci liter..................................................... 163
5.2. Funkcje kontroli przepywu ................................................................................. 163
5.3. Funkcje acuchowe............................................................................................. 166
5.3.1. Funkcje porwnywania acuchw.......................................................... 176
5.4. Funkcje liczbowe ................................................................................................. 178
5.4.1. Operatory arytmetyczne........................................................................... 178
5.4.2. Funkcje matematyczne ............................................................................ 180
5.5. Funkcje daty i godziny......................................................................................... 186
5.6. Funkcje obsugi wyszukiwania penotekstowego................................................. 202
5.6.1. Boolowskie wyszukiwania penotekstowe............................................... 205
5.6.2. Wyszukiwania penotekstowe z rozwijaniem zapytania .......................... 207
5.6.3. Ograniczenia dla wyszukiwania penotekstowego................................... 208
5.6.4. Modyfikowanie wyszukiwania penotekstowego MySQL ...................... 209
5.6.5. Lista rzeczy do zrobienia dla wyszukiwania penotekstowego................ 211
5.7. Funkcje konwersji typw..................................................................................... 211
5.8. Inne funkcje ......................................................................................................... 214
5.8.1. Funkcje bitowe ........................................................................................ 214
5.8.2. Funkcje szyfrujce................................................................................... 215
5.8.3. Funkcje informacyjne .............................................................................. 219
5.8.4. Funkcje rne .......................................................................................... 223
5.9. Funkcje i modyfikatory do zastosowania z klauzulami GROUP BY................... 226
5.9.1. Funkcje GROUP BY (agregujce)........................................................... 226
5.9.2. Modyfikatory GROUP BY...................................................................... 229
5.9.3. GROUP BY z ukrytymi polami............................................................... 232
6 Spis treci
Rozdzia 6. Skadnia instrukcji SQL .................................................................. 235
6.1. Instrukcje operujce na danych............................................................................ 235
6.1.1. Skadnia instrukcji DELETE................................................................... 235
6.1.2. Skadnia instrukcji DO ............................................................................ 238
6.1.3. Skadnia instrukcji HANDLER............................................................... 238
6.1.4. Skadnia instrukcji INSERT .................................................................... 240
6.1.5. Skadnia instrukcji LOAD DATA INFILE.............................................. 246
6.1.6. Skadnia instrukcji REPLACE................................................................. 255
6.1.7. Skadnia instrukcji SELECT.................................................................... 256
6.1.8. Skadnia podzapyta................................................................................ 265
6.1.9. Skadnia instrukcji TRUNCATE............................................................. 276
6.1.10. Skadnia instrukcji UPDATE................................................................... 276
6.2. Instrukcje definiowania danych ........................................................................... 278
6.2.1. Skadnia instrukcji ALTER DATABASE ............................................... 278
6.2.2. Skadnia instrukcji ALTER TABLE........................................................ 279
6.2.3. Skadnia instrukcji CREATE DATABASE............................................. 285
6.2.4. Skadnia instrukcji CREATE INDEX ..................................................... 285
6.2.5. Skadnia instrukcji CREATE TABLE..................................................... 287
6.2.6. Skadnia instrukcji DROP DATABASE.................................................. 301
6.2.7. Skadnia instrukcji DROP INDEX.......................................................... 302
6.2.8. Skadnia instrukcji DROP TABLE.......................................................... 302
6.2.9. Skadnia instrukcji RENAME TABLE.................................................... 303
6.3. Instrukcje programu MySQL............................................................................... 304
6.3.1. Skadnia instrukcji DESCRIBE
(odczytywanie informacji na temat kolumn) ........................................... 304
6.3.2. Skadnia instrukcji USE........................................................................... 304
6.4. Instrukcje obsugi transakcji i blokowania........................................................... 305
6.4.1. Skadnia instrukcji START TRANSACTION, COMMIT
oraz ROLLBACK.................................................................................... 305
6.4.2. Instrukcje niemoliwe do wycofania ....................................................... 306
6.4.3. Instrukcje wykonujce niejawne zatwierdzenie......................................... 306
6.4.4. Skadnia instrukcji SAVEPOINT i ROLLBACK TO SAVEPOINT....... 307
6.4.5. Skadnia instrukcji LOCK TABLES oraz UNLOCK TABLES .............. 307
6.4.6. Skadnia instrukcji SET TRANSACTION.............................................. 310
6.5. Administracja baz danych .................................................................................. 311
6.5.1. Instrukcje zarzdzajce kontami uytkownikw ....................................... 311
6.5.2. Instrukcje do konserwacji tabel ............................................................... 319
6.5.3. Skadnia instrukcji SET i SHOW ............................................................ 326
6.5.4. Inne instrukcje administracyjne ............................................................... 347
6.6. Instrukcje replikacji.............................................................................................. 352
6.6.1. Instrukcje SQL sterujce serwerem gwnym ......................................... 352
6.6.2. Instrukcje SQL sterujce serwerami podrzdnymi .................................. 354
Rozdzia 7. Rozszerzenia przestrzenne w MySQL............................................... 365
7.1. Wstp ................................................................................................................... 365
7.2. Model geometryczny OpenGIS............................................................................ 366
7.2.1. Hierarchia klas geometrycznych.............................................................. 366
7.2.2. Klasa Geometry ....................................................................................... 368
7.2.3. Klasa Point .............................................................................................. 369
7.2.4. Klasa Curve ............................................................................................. 369
7.2.5. Klasa LineString...................................................................................... 370
7.2.6. Klasa Surface........................................................................................... 370
7.2.7. Klasa Polygon.......................................................................................... 370
7.2.8. Klasa GeometryCollection....................................................................... 371
Spis treci 7
7.2.9. Klasa MultiPoint...................................................................................... 371
7.2.10. Klasa MultiCurve .................................................................................... 372
7.2.11. Klasa MultiLineString............................................................................. 372
7.2.12. Klasa MultiSurface .................................................................................. 372
7.2.13. Klasa MultiPolygon................................................................................. 373
7.3. Obsugiwane formaty danych przestrzennych...................................................... 373
7.3.1. Format tekstowy WKT............................................................................ 374
7.3.2. Format binarny WKB.............................................................................. 374
7.4. Tworzenie bazy danych z rozszerzeniami przestrzennymi................................... 375
7.4.1. Typy danych przestrzennych w MySQL ................................................. 375
7.4.2. Tworzenie wartoci przestrzennych......................................................... 376
7.4.3. Tworzenie kolumn przestrzennych.......................................................... 379
7.4.4. Wypenianie kolumn przestrzennych....................................................... 379
7.4.5. Pobieranie danych przestrzennych........................................................... 381
7.5. Analiza informacji przestrzennych....................................................................... 381
7.5.1. Funkcje konwersji formatw geometrycznych ........................................ 382
7.5.2. Funkcje klasy Geometry.......................................................................... 382
7.5.3. Funkcje tworzce nowe geometrie na podstawie istniejcych................. 388
7.5.4. Funkcje testujce relacje przestrzenne
midzy obiektami geometrycznymi ......................................................... 389
7.5.5. Relacje midzy minimalnymi prostoktami otaczajcymi
dla poszczeglnych geometrii.................................................................. 390
7.5.6. Funkcje sprawdzajce relacje przestrzenne pomidzy geometriami ........ 391
7.6. Optymalizacja analizy przestrzennej.................................................................... 392
7.6.1. Tworzenie indeksw przestrzennych....................................................... 392
7.6.2. Wykorzystanie indeksu przestrzennego................................................... 393
7.7. Zgodno MySQL ze standardem........................................................................ 395
7.7.1. Niezaimplementowane funkcje GIS ........................................................ 395
Rozdzia 8. Procedury i funkcje skadowane ..................................................... 397
8.1. Skadnia procedur skadowanych......................................................................... 398
8.1.1. Utrzymanie procedur skadowanych........................................................ 398
8.1.2. SHOW PROCEDURE STATUS oraz SHOW FUNCTION STATUS.... 401
8.1.3. Instrukcja CALL...................................................................................... 402
8.1.4. Instrukcja zoona BEGIN ... END.......................................................... 402
8.1.5. Instrukcja DECLARE.............................................................................. 402
8.1.6. Zmienne w procedurach skadowanych................................................... 402
8.1.7. Warunki i podprogramy obsugi .............................................................. 403
8.1.8. Kursory.................................................................................................... 405
8.1.9. Konstrukcje sterowania przepywem sterowania..................................... 406
Rozdzia 9. Obsuga bdw w MySQL .............................................................. 409
9.1. Zwracane bdy.................................................................................................... 409
9.2. Komunikaty bdw............................................................................................. 419
Dodatek A Rozwizywanie problemw z zapytaniami ........................................435
A.1. Zagadnienia zwizane z zapytaniami ................................................................... 435
A.1.1. Wielko liter przy wyszukiwaniu........................................................... 435
A.1.2. Problemy z kolumnami typu DATE ........................................................ 436
A.1.3. Problemy z wartociami NULL............................................................... 437
A.1.4. Problemy z synonimami kolumn ............................................................. 438
A.1.5. Bd wycofania dla tabel nietransakcyjnych............................................ 439
A.1.6. Usuwanie wierszy ze zwizanych tabel ................................................... 439
A.1.7. Rozwizywanie problemw z brakujcymi wierszami ............................ 440
A.1.8. Problemy z porwnaniami zmiennoprzecinkowymi................................ 441
8 Spis treci
A.2. Problemy zwizane z optymalizatorem................................................................ 443
A.3. Problemy z definicj tabel.................................................................................... 444
A.3.1. Problemy z instrukcj ALTER TABLE................................................... 444
A.3.2. Jak zmieni porzdek kolumn w tabeli .................................................... 445
A.3.3. Problemy z tabelami tymczasowymi ....................................................... 445
Dodatek B Wyraenia regularne w MySQL........................................................ 447
Skorowidz...................................................................................... 451
Rozdzia 4.
Typy kolumn
W MySQL dostpnych jest wiele typw danych, ktre mona pogrupowa w kilku pod-
stawowych kategoriach, takich jak typy liczbowe, typy zwizane z dat i czasem oraz
typy acuchowe. Na pocztku tego rozdziau przedstawiony zostanie przegld wspo-
mnianych przed chwil typw kolumn, po czym nastpi bardziej szczegowy opis ich
waciwoci z podziaem na poszczeglne kategorie i wreszcie zamieszczone zostanie
podsumowanie informacji dotyczcych wymaga co do rozmiaru pamici potrzebnej
do przechowania danej kolumny. Sam przegld jest z zamierzenia krtki. Dodatkowe
informacje o poszczeglnych typach kolumn, na przykad dopuszczalny format, w kt-
rym mona deklarowa wartoci, zostay uwzgldnione w szczegowych omwieniach.
Od wersji 4.1 MySQL rozpoznaje rozszerzenia do obsugi danych przestrzennych.
Informacje o typach przestrzennych znajduj si w rozdziale 7. tego podrcznika.
W czci opisu typw kolumn zastosowane zostay nastpujce reguy:
/
Wskazuje maksymalny rozmiar wywietlania liczby lub acucha.
Maksymalnym dopuszczalnym rozmiarem wywietlania jest 255.
&
Dotyczy typw zmiennoprzecinkowych i staoprzecinkowych. Okrela liczb
cyfr po kropce dziesitnej. Maksymalna dopuszczalna warto wynosi 30,
ale nie powinna przekracza /.
Nawiasy kwadratowe ( ) identyfikuj opcjonalne fragmenty deklaracji typu.
126 Rozdzia 4. Typy kolumn
4.1. Przegld typw dla kolumny
4.1.1. Omwienie typw liczbowych
Poniej znajduje si przegld liczbowych typw dla kolumn. Bardziej szczegowe
informacje mona znale w podrozdziale 4.2. Wymogi dotyczce rozmiaru pamici
potrzebnej do przechowywania kolumn znajduj si w podrozdziale 4.5.
Jeli dla kolumny liczbowej zostanie okrelony atrybut /lRO|1||, MySQL automatycznie
doda do kolumny atrybut UN1S1ONlD.
Naley uwaa podczas odejmowania dwch wartoci liczbowych, z ktrych jedna ma
typ UN1S1ONlD. Uzyskany wynik bdzie rwnie tego typu! patrz podrozdzia 5.7.
T1NY1NT/) UNS1ONlD /lRO|1||
Bardzo maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od `8
do `/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do bb.
B1T, BOO|, BOO|lAN
To s synonimy T1NY1NT`). Synonim BOO|lAN zosta dodany w MySQL 4.1.0.
Warto zerowa to inaczej fasz. Wartoci niezerowe traktowane s jako prawda.
W przyszoci wprowadzona zostanie pena, zgodna ze standardem SQL
obsuga typu boolowskiego.
SMA||1NT/) UNS1ONlD /lRO|1||
Maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od o/68
do o/6/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do 6bbob.
MlD1UM1NT/) UNS1ONlD /lRO|1||
rednia liczba cakowita. Dla liczb ze znakiem zakres wynosi od 8o88608
do 8o8860/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0
do `6///`b.
1NT/) UNS1ONlD /lRO|1||
Standardowa liczba cakowita. Dla liczb ze znakiem zakres wynosi
od `4/48o648 do `4/48o64/. W przypadku liczb bez znaku zakres
obejmuje wartoci od 0 do 49496/9b.
1NTlOlR/) UNS1ONlD /lRO|1||
Jest to synonim dla typu 1NT.
B1O1NT/) UNS1ONlD /lRO|1||
Dua liczba cakowita. Dla liczb ze znakiem zakres wynosi
od 9oo/0o68b4//b808 do 9oo/0o68b4//b80/. W przypadku liczb
bez znaku zakres obejmuje wartoci od 0 do `8446/440/o/09bb`6`b.
4.1. Przegld typw dla kolumny 127
Oto kilka spraw, o ktrych naley wiedzie odnonie kolumn typu B1O1NT:
Wszystkie obliczenia wykonywane s przy uyciu wartoci typu B1O1NT
lub DOUB|l ze znakiem. Oznacza to, e duych liczb cakowitych bez
znaku, wikszych ni 9oo/0o68b4//b80/ (63 bity), mona uywa tylko
z funkcjami bitowymi! Niezastosowanie si do tej zasady moe doprowadzi
do uzyskania w wyniku liczby, ktrej kilka ostatnich cyfr jest bdnych
z powodu bdw w zaokrglaniu podczas konwersji wartoci B1O1NT
na DOUB|l.
MySQL 4.0 potrafi obsugiwa B1O1NT w nastpujcych przypadkach:
Podczas wykorzystywania liczb cakowitych do przechowywania
duych wartoci bez znaku w kolumnie typu B1O1NT.
W M1NPC\YCAMQN) lub MAXPC\YCAMQN), gdzie PC\YCAMQN odnosi si
do kolumny B1O1NT.
Podczas korzystania z operatorw (midzy innymi , , *), gdy oba
argumenty s liczbami cakowitymi.
Zawsze istnieje moliwo zapisania w kolumnie B1O1NT dokadnej wartoci
liczby cakowitej. Wystarczy zapisa j przy uyciu acucha. W takim
przypadku zostanie dokonana konwersja acucha na liczb; konwersja
nie bdzie wymaga poredniego etapu przeksztacajcego liczb na jej
odpowiednik o podwjnej precyzji.
Podczas korzystania z operatorw , i * stosowana jest arytmetyka
B1O1NT, jeli oba argumenty maj warto liczby cakowitej! To oznacza,
e pomnoenie dwch duych liczb cakowitych (lub wynikw funkcji,
ktra zwraca liczby cakowite) moe spowodowa nieoczekiwane
rezultaty, jeli wynik przekroczy liczb 9oo/0o68b4//b80/.
||OATR) UNS1ONlD /lRO|1||
Liczba zmiennoprzecinkowa. Parametr R oznacza precyzj i moe przyjmowa
warto od 0 do 14 dla liczb zmiennoprzecinkowych o dokadnoci do jednego
znaku i od 25 do 53 dla liczb zmiennoprzecinkowych o dokadnoci do dwch
znakw. To przypomina opisane poniej typy ||OAT i DOUB|l. Typ ||OATR)
ma ten sam zakres, jaki posiadaj odpowiadajce mu typy ||OAT i DOUB|l,
ale w jego przypadku niezdefiniowany jest maksymalny rozmiar wywietlania
i liczba miejsc po przecinku.
Od wersji 3.23 MySQL jest to prawdziwa warto zmiennoprzecinkowa.
W wersjach wczeniejszych liczba typu ||OATR) bya zawsze liczb o dwch
miejscach po przecinku.
Ta skadnia zostaa dodana w celu zachowania zgodnoci ze standardem ODBC.
Stosowanie typu ||OAT moe spowodowa wystpienie pewnych
nieoczekiwanych problemw, poniewa wszystkie obliczenia w MySQL
s wykonywane z podwjn precyzj patrz punkt A.1.7).
||OAT/, &) UNS1ONlD /lRO|1||
128 Rozdzia 4. Typy kolumn
Maa liczba zmiennoprzecinkowa (o dokadnoci do jednego znaku). Liczba
ta moe przyj wartoci: od o408o466lo8 do ``/b494ob`lo8, 0,
i od ``/b494ob`lo8 do o408o466lo8. Jeli podany jest atrybut UN1S1ONlD,
niedozwolone s wartoci ujemne. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ ||OAT bez argumentw
lub typ ||OATR) (gdzie Rjest liczb z zakresu od 0 do 24) oznacza liczb
zmiennoprzecinkow o pojedynczej precyzji.
DOUB|l/, &) UNS1ONlD /lRO|1||
Standardowa liczba zmiennoprzecinkowa (o dokadnoci do dwch
znakw). Liczba ta moe przyj wartoci: od `/9/69o`o486o`b/lo08
do b0/o8b8b0/0`4lo08, 0, i od b0/o8b8b0/0`4lo08
do `/9/69o`o486o`b/lo08. Jeli podany jest atrybut UN1S1ONlD, wartoci
ujemne s niedozwolone. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ DOUB|l
bez argumentw lub ||OATR) (gdzie R jest liczb z zakresu od 25 do 53)
oznacza liczb zmiennoprzecinkow o podwjnej precyzji.
DOUB|l PRlC1S1ON/, &) UNS1ONlD /lRO|1||
RlA|/, &) UNS1ONlD /lRO|1||
S to synonimy DOUB|l. Wyjtek: Jeli dla parametru s;_cce serwera
wczono opcj RlA|_AS_||OAT, synonimem ||OAT jest RlA|, a nie DOUB|l.
DlC1MA|/, &) UNS1ONlD /lRO|1||
Niezapakowana liczba staoprzecinkowa. Zachowanie kolumny tego typu
przypomina kolumn typu CHAR. Niezapakowana oznacza, e liczba jest
przechowywana w postaci acucha przy uyciu jednego znaku na kad cyfr
wartoci. Parametr / definiuje maksymaln liczb cyfr, a & liczb miejsc
po przecinku. W parametrze / nie s brane pod uwag: kropka dziesitna
(odpowiadajca w naszej notacji przecinkowi) i (dla liczb ujemnych) znak ,
cho jest dla nich zarezerwowane miejsce. Wartoci nie maj miejsc
po przecinku lub czci uamkowych, jeli & jest rwne 0. Maksymalny zakres
wartoci typu DlC1MA| jest taki sam, jak dla typu DOUB|l, ale rzeczywisty zakres
danej kolumny DlC1MA| moe by ograniczony przez wybr argumentw / i &.
Jeli podany jest atrybut UN1S1ONlD, wartoci ujemne s niedozwolone.
W przypadku braku argumentu &, domyln wartoci jest 0. Jeli pominity
jest parametr /, domyln wartoci jest 10.
W wersjach poprzedzajcych MySQL 3.23 argument / musi by wystarczajco
duy, by zawiera obszar potrzebny dla znaku i kropki dziesitnej.
DlC/,&) UNS1ONlD /lRO|1||
NUMlR1C/,&) UNS1ONlD /lRO|1||
|1XlD/, &) UNS1ONlD /lRO|1||
S to synonimy typu DlC1MA|.
W MySQL 4.1.0 dodano synonim |1XlD w celu osignicia kompatybilnoci
z innymi serwerami.
4.1. Przegld typw dla kolumny 129
4.1.2. Przegld typw zwizanych z dat i czasem
Poniej znajduje si podsumowanie typw kolumn przeznaczonych dla czasu i daty.
Dodatkowe informacje na ten temat mona znale w podrozdziale 4.3. Wymogi do-
tyczce pamici potrzebnej do przechowywania danych w kolumnach zostay podane
w podrozdziale 4.5.
DATl
Data. Obsugiwany zakres obejmuje daty od ``0000`0`` do `9999`o``.
W MySQL wartoci DATl wywietlane s w formacie `RRRRMMDD`, ale mona
przypisywa wartoci do kolumn DATl przy uyciu acuchw lub liczb.
DATlT1Ml
Kombinacja daty i czasu. Obsugiwany zakres obejmuje wartoci
od ``0000`0` 000000` do `9999`o` ob9b9`. W MySQL wartoci
DATlT1Ml wywietlane s w formacie `RRRRMMDD OOMMSS`, ale mona
przypisywa wartoci do kolumn DATlT1Ml przy uyciu acuchw lub liczb.
T1MlSTAMP/)
Znacznik czasu. Obsugiwany zakres rozpoczyna si od daty ``9/00`0``
i siga roku 0o/.
Kolumna typu T1MlSTAMP przydaje si do rejestracji daty i godziny operacji
wstawiania lub aktualizacji. Pierwszej kolumnie T1MlSTAMP w tabeli
automatycznie przypisywana jest data i czas ostatniej operacji, jeli tylko tych
wartoci nie wprowadzi rcznie uytkownik. Dowolnej kolumnie T1MlSTAMP
mona rwnie przypisa biec dat i godzin, wpisujc do niej warto NU||.
Od MySQL 4.1 wartoci T1MlSTAMP s zwracane w postaci acuchw
w formacie `RRRRMMDD OOMMSS`. Aby uzyska warto w postaci liczby,
naley doda do kolumn tego typu 0. Inne szerokoci wywietlania
znacznika czasu nie s obsugiwane.
W wersjach poprzedzajcych MySQL 4.1 wartoci T1MlSTAMP s wywietlane
w formacie RRRRMMDDOOMMSS, RRMMDDOOMMSS, RRRRMMDD lub RRMMDD w zalenoci
od tego, czy parametr / jest rwny 14 (albo go brak), 12, 8 lub 6. Mona jednak
przypisywa wartoci do kolumn T1MlSTAMP przy uyciu acuchw lub liczb.
Argument / wpywa tylko na sposb wywietlania kolumny T1MlSTAMP, a nie
na jej przechowywanie. Wartoci kolumny s zawsze zapisywane w czterech
bajtach. W MySQL od wersji 4.0.12 pojawia si opcja ne., dziki ktrej
mona zmieni dziaanie serwera, upodabniajc je do MySQL 4.1.
Naley odnotowa, e kolumny T1MlSTAMP/), gdzie /jest rwne 8 lub 14,
s traktowane jako liczby, natomiast reszta kolumn T1MlSTAMP/) jest
traktowana jako acuchy. Jest to rodzaj gwarancji, e uytkownik bdzie
mg wiarygodnie usuwa i przywraca tabele tego typu.
T1Ml
Godzina. Obsugiwany zakres obejmuje wartoci od `8o8b9b9`
do ` 8o8b9b9`. W MySQL wartoci T1Ml wywietlane s w formacie
` OOMMSS`, ale mona przypisa wartoci do kolumn T1Ml przy uyciu
zarwno acuchw, jak i liczb.
130 Rozdzia 4. Typy kolumn
YlAR|4)
Rok w formacie dwu- lub czterocyfrowym. Domylnym formatem jest rok
zapisany za pomoc czterech cyfr. W tym formacie dostpne wartoci nale
do przedziau od `90` do `bb oraz 0. W formacie dwucyfrowym wartoci
dopuszczalne to liczby z zakresu od /0 do 69, ktre reprezentuj daty od roku
1970 do 2069. W MySQL wartoci YlAR wywietlane s w formacie RRRR,
ale mona przypisa wartoci do kolumn YlAR przy uyciu tak acuchw,
jak i liczb. Typ YlAR jest niedostpny dla wersji wczeniejszych ni MySQL 3.22.
4.1.3. Przegld typw acuchowych
Poniej znajduje si przegld typw acuchowych. Dodatkowe informacje mona
znale w podrozdziale 4.4. Wymogi dotyczce pamici potrzebnej do przechowywa-
nia danych w kolumnach zostay podane w podrozdziale 4.5.
W niektrych przypadkach MySQL moe zmieni kolumn typu acuchowego na typ,
ktry bdzie si rni od zadeklarowanego w instrukcji CRlATl TAB|l lub A|TlR TAB|l.
Wicej informacji na ten temat znajduje si w podpunkcie 6.2.5.2.
Od wersji 4.1 w MySQL pojawia si zmiana, ktra wpywa na wiele typw kolumn typu
acuchowego. Definicja kolumn typu znakowego moe zawiera atrybut CHARACTlR
SlT, ktry okrela zestaw znakw i opcjonalnie porzdek sortowania. Dotyczy to typw
CHAR, VARCHAR, rnych typw TlXT oraz lNUM i SlT, na przykad:
CRF/TF T/B|F !
FNUMYCTVQ
YCTVQ|
1 lub 2 bajty w zalenoci od liczby wartoci wyliczenia
(maksymalnie 65 535)
SFTYCTVQ
YCTVQ|
1, 2, 3, 4 lub 8 bajtw w zalenoci od liczby elementw zestawu
(maksymalnie 64)
Typy VARCHAR, B|OB i TlXT maj zmienn dugo. Dla kadego ilo pamici potrzeb-
nej do przechowania wartoci bdzie zalee od faktycznej dugoci wartoci kolumny
(reprezentowanej w ostatniej tabeli przez .), a nie od maksymalnego moliwego roz-
miaru danego typu. Kolumna VARCHAR`0) na przykad moe przechowywa acuch
o maksymalnej dugoci 10 znakw. Faktyczna ilo wymaganej pamici to dugo
acucha (.) plus 1 bajt do zapisania dugoci acucha. Dla acucha `.|cc` parametr
. jest rwny 4, a wymagany rozmiar pamici to 5 bajtw.
Typy B|OB i TlXT wymagaj 1, 2, 3 lub 4 bajtw do zapisu dugoci wartoci kolumny
w zalenoci od maksymalnej moliwej dugoci tego typu (patrz punkt 4.4.2).
Rozmiar obiektu lNUM jest ustalany na podstawie liczby rnych wartoci wyliczenia.
Przy wyliczeniach do 255 moliwych wartoci uywany jest jeden bajt, a przy wyli-
czeniach do 65 535 wartoci uywane s 2 bajty (patrz punkt 4.4.3).
Rozmiar obiektu SlT jest okrelany przez liczb rnych elementw zestawu. Jeli ze-
staw ma rozmiar 0, obiekt zajmuje 0/).8 bajtw, ktr to warto zaokrgla si do
1, 2, 3, 4 lub 8 bajtw. Obiekt SlT moe mie do 64 elementw (patrz punkt 4.4.4).
4.6. Wybieranie odpowiedniego typu
dla kolumny
Aby jak najbardziej wydajnie korzysta z pamici, naley we wszystkich przypadkach
stara si stosowa typ, ktry bdzie jak najbardziej dokadny. Jeli na przykad w kolum-
nie liczb cakowitych bd przechowywane wartoci z zakresu od ` do 99999, najlep-
szym wyborem bdzie typ MlD1UM1NT UNS1ONlD. Ze wszystkich typw, ktre reprezentuj
wszystkie wymagane wartoci, zajmuje najmniej pamici.
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych 153
Powszechnym problemem jest dokadne przedstawianie wartoci walutowych. W MySQL
naley do tego uywa typu DlC1MA|, za pomoc ktrego wartoci zapisywane s w for-
mie acucha. Dziki temu nie traci si na dokadnoci (mimo to obliczenia z wartociami
DlC1MA| mog by wci wykonywane przy uyciu operacji dziaajcych na liczbach
z podwjn precyzj). Jeli dokadno nie jest zbyt wana, by moe wystarczajco
dobrym typem bdzie DOUB|l.
Aby uzyska wiksz dokadno, mona zawsze przeksztaci warto na typ stao-
przecinkowy, przechowywany w B1O1NT. Pozwoli to wykonywa wszystkie obliczenia
na liczbach cakowitych i tylko w razie potrzeby przeksztaca wynik z powrotem na
wartoci zmiennoprzecinkowe.
4.7. Wykorzystywanie typw kolumn
z innych mechanizmw baz danych
Aby uatwi uytkownikowi zastosowanie kodu pochodzcego od innych producentw,
moliwe jest odwzorowanie typw kolumn w sposb przedstawiony w poniszej tabeli.
Odwzorowania te upraszczaj operacj importu do MySQL definicji tabel z innych
mechanizmw baz danych:
Typ innych producentw Typ MySQL
BTN/RY/| C'/R/| BTN/RY
C'/R V/RYTN/| V/RC'/R/|
F|J/T4 F|J/T
F|J/T8 OJUB|F
TNT1 TTNYTNT
TNT SM/||TNT
TNT: MFOTUMTNT
TNT4 TNT
TNT8 BTTNT
|JN V/RBTN/RY MFOTUMB|JB
|JN V/RC'/R MFOTUMTFXT
|JN MFOTUMTFXT oc M,SJ| 410|
MTOO|FTNT MFOTUMTNT
V/RBTN/RY/| C'/R/| BTN/RY
Odwzorowanie typw kolumn jest wykonywane podczas tworzenia tabeli, po czym
oryginalne deklaracje typu zostaj usunite. Jeli uytkownik utworzy tabel z typami
stosowanymi przez innych producentw, po czym wyda polecenie DlSCR1Bl PC\YCA
VCDGNK, zostanie przedstawiona struktura tabeli z odpowiadajcymi im typami MySQL.
4 Spis treci
1.8.5. Rozbienoci midzy MySQL a standardem SQL ........................................ 60
1.8.6. Jak MySQL radzi sobie z ograniczeniami ................................................. 67
1.8.7. Znane bdy i projektowe braki w MySQL................................................ 69
Rozdzia 2. Struktura jzyka .............................................................................. 77
2.1. Literay................................................................................................................... 77
2.1.1. acuchy ................................................................................................... 77
2.1.2. Liczby........................................................................................................ 80
2.1.3. Wartoci szesnastkowe .............................................................................. 80
2.1.4. Wartoci logiczne ...................................................................................... 81
2.1.5. Wartoci NULL......................................................................................... 81
2.2. Nazwy baz danych, tabel, indeksw, kolumn i aliasw......................................... 81
2.2.1. Kwalifikatory identyfikatorw .................................................................. 83
2.2.2. Znaczenie wielkoci liter w nazwach identyfikatorw.............................. 83
2.3. Zmienne definiowane przez uytkownika.............................................................. 85
2.4. Zmienne systemowe............................................................................................... 87
2.4.1. Strukturalne zmienne systemowe .............................................................. 89
2.5. Skadnia komentarza .............................................................................................. 91
2.6. Traktowanie sw zastrzeonych w MySQL.......................................................... 92
Rozdzia 3. Obsuga zestaww znakw............................................................... 95
3.1. Oglne informacje o zestawach znakw i sortowaniu ........................................... 95
3.2. Zestawy znakw i porzdki sortowania w MySQL................................................ 96
3.3. Okrelanie domylnego zestawu znakw i sortowania........................................... 98
3.3.1. Zestaw znakw i sortowanie dla serwera................................................... 98
3.3.2. Zestaw znakw i sortowanie dla bazy danych........................................... 99
3.3.3. Zestaw znakw i sortowanie dla tabeli .................................................... 100
3.3.4. Zestaw znakw i sortowanie dla kolumny............................................... 100
3.3.5. Przykady przypisywania zestawu znakw i sortowania ......................... 101
3.3.6. Zestawy znakw i sortowanie dla poczenia .......................................... 102
3.3.7. Zestaw znakw i sortowanie dla acucha znakw.................................. 104
3.3.8. Wykorzystywanie COLLATE w instrukcjach SQL.................................... 105
3.3.9. Priorytet klauzuli COLLATE .................................................................. 106
3.3.10. Operator BINARY................................................................................... 106
3.3.11. Niektre przypadki specjalne, w ktrych trudno okreli sortowanie...... 106
3.3.12. Sortowania musz by odpowiednie dla danego zestawu znakw........... 107
3.3.13. Przykad wpywu porzdku sortowania ................................................... 108
3.4. Operacje, na ktre ma wpyw obsuga zestaww znakw.................................... 109
3.4.1. acuchy wyjciowe ............................................................................... 109
3.4.2. CONVERT()............................................................................................ 110
3.4.3. CAST() .................................................................................................... 110
3.4.4. Instrukcje SHOW .................................................................................... 111
3.5. Obsuga Unicode.................................................................................................. 112
3.6. UTF8 dla metadanych.......................................................................................... 113
3.7. Kompatybilno z innymi systemami zarzdzania baz danych .......................... 115
3.8. Nowy format pliku konfiguracji zestawu znakw................................................ 115
3.9. Narodowe zestawy znakw.................................................................................. 115
3.10. Aktualizacja zestaww znakw z MySQL 4.0..................................................... 116
3.10.1. Zestawy znakw w wersji 4.0 i odpowiadajce im w wersji 4.1 pary
skadajce si z zestawu znakw i sortowania......................................... 117
3.10.2. Przeksztacanie kolumn znakowych wersji 4.0 na format 4.1 ................. 118
3.11. Zestawy znakw i sortowania obsugiwane przez MySQL.................................. 118
3.11.1. Zestawy znakw standardu Unicode ....................................................... 119
3.11.2. Zestawy znakw zachodnioeuropejskich................................................. 120
3.11.3. Zestawy znakw dla Europy Centralnej .................................................. 121
Spis treci 5
3.11.4. Zestawy znakw poudniowoeuropejskich i rodkowowschodnich......... 122
3.11.5. Zestawy znakw regionu batyckiego...................................................... 123
3.11.6. Zestawy znakw dla cyrylicy................................................................... 123
3.11.7. Azjatyckie zestawy znakw..................................................................... 124
Rozdzia 4. Typy kolumn.................................................................................. 125
4.1. Przegld typw dla kolumny................................................................................ 126
4.1.1. Omwienie typw liczbowych ................................................................ 126
4.1.2. Przegld typw zwizanych z dat i czasem............................................ 129
4.1.3. Przegld typw acuchowych ................................................................ 130
4.2. Typy liczbowe...................................................................................................... 132
4.3. Typy zwizane z dat i czasem............................................................................ 135
4.3.1. Typy DATETIME, DATE i TIMESTAMP............................................. 137
4.3.2. Typ TIME................................................................................................ 142
4.3.3. Typ YEAR............................................................................................... 143
4.3.4. Problem roku 2000 a typy zwizane z dat.............................................. 144
4.4. Typy acuchowe ................................................................................................. 144
4.4.1. Typy CHAR i VARCHAR...................................................................... 144
4.4.2. Typy BLOB i TEXT................................................................................ 146
4.4.3. Typ Enum................................................................................................ 147
4.4.4. Typ SET .................................................................................................. 149
4.5. Rozmiar pamici potrzebnej dla typw kolumn................................................... 151
4.6. Wybieranie odpowiedniego typu dla kolumny..................................................... 152
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych ............... 153
Rozdzia 5. Funkcje i operatory........................................................................ 155
5.1. Operatory ............................................................................................................. 156
5.1.1. Nawiasy................................................................................................... 156
5.1.2. Operatory porwnania ............................................................................. 156
5.1.3. Operatory logiczne .................................................................................. 161
5.1.4. Operatory rozrniania wielkoci liter..................................................... 163
5.2. Funkcje kontroli przepywu ................................................................................. 163
5.3. Funkcje acuchowe............................................................................................. 166
5.3.1. Funkcje porwnywania acuchw.......................................................... 176
5.4. Funkcje liczbowe ................................................................................................. 178
5.4.1. Operatory arytmetyczne........................................................................... 178
5.4.2. Funkcje matematyczne ............................................................................ 180
5.5. Funkcje daty i godziny......................................................................................... 186
5.6. Funkcje obsugi wyszukiwania penotekstowego................................................. 202
5.6.1. Boolowskie wyszukiwania penotekstowe............................................... 205
5.6.2. Wyszukiwania penotekstowe z rozwijaniem zapytania .......................... 207
5.6.3. Ograniczenia dla wyszukiwania penotekstowego................................... 208
5.6.4. Modyfikowanie wyszukiwania penotekstowego MySQL ...................... 209
5.6.5. Lista rzeczy do zrobienia dla wyszukiwania penotekstowego................ 211
5.7. Funkcje konwersji typw..................................................................................... 211
5.8. Inne funkcje ......................................................................................................... 214
5.8.1. Funkcje bitowe ........................................................................................ 214
5.8.2. Funkcje szyfrujce................................................................................... 215
5.8.3. Funkcje informacyjne .............................................................................. 219
5.8.4. Funkcje rne .......................................................................................... 223
5.9. Funkcje i modyfikatory do zastosowania z klauzulami GROUP BY................... 226
5.9.1. Funkcje GROUP BY (agregujce)........................................................... 226
5.9.2. Modyfikatory GROUP BY...................................................................... 229
5.9.3. GROUP BY z ukrytymi polami............................................................... 232
6 Spis treci
Rozdzia 6. Skadnia instrukcji SQL .................................................................. 235
6.1. Instrukcje operujce na danych............................................................................ 235
6.1.1. Skadnia instrukcji DELETE................................................................... 235
6.1.2. Skadnia instrukcji DO ............................................................................ 238
6.1.3. Skadnia instrukcji HANDLER............................................................... 238
6.1.4. Skadnia instrukcji INSERT .................................................................... 240
6.1.5. Skadnia instrukcji LOAD DATA INFILE.............................................. 246
6.1.6. Skadnia instrukcji REPLACE................................................................. 255
6.1.7. Skadnia instrukcji SELECT.................................................................... 256
6.1.8. Skadnia podzapyta................................................................................ 265
6.1.9. Skadnia instrukcji TRUNCATE............................................................. 276
6.1.10. Skadnia instrukcji UPDATE................................................................... 276
6.2. Instrukcje definiowania danych ........................................................................... 278
6.2.1. Skadnia instrukcji ALTER DATABASE ............................................... 278
6.2.2. Skadnia instrukcji ALTER TABLE........................................................ 279
6.2.3. Skadnia instrukcji CREATE DATABASE............................................. 285
6.2.4. Skadnia instrukcji CREATE INDEX ..................................................... 285
6.2.5. Skadnia instrukcji CREATE TABLE..................................................... 287
6.2.6. Skadnia instrukcji DROP DATABASE.................................................. 301
6.2.7. Skadnia instrukcji DROP INDEX.......................................................... 302
6.2.8. Skadnia instrukcji DROP TABLE.......................................................... 302
6.2.9. Skadnia instrukcji RENAME TABLE.................................................... 303
6.3. Instrukcje programu MySQL............................................................................... 304
6.3.1. Skadnia instrukcji DESCRIBE
(odczytywanie informacji na temat kolumn) ........................................... 304
6.3.2. Skadnia instrukcji USE........................................................................... 304
6.4. Instrukcje obsugi transakcji i blokowania........................................................... 305
6.4.1. Skadnia instrukcji START TRANSACTION, COMMIT
oraz ROLLBACK.................................................................................... 305
6.4.2. Instrukcje niemoliwe do wycofania ....................................................... 306
6.4.3. Instrukcje wykonujce niejawne zatwierdzenie......................................... 306
6.4.4. Skadnia instrukcji SAVEPOINT i ROLLBACK TO SAVEPOINT....... 307
6.4.5. Skadnia instrukcji LOCK TABLES oraz UNLOCK TABLES .............. 307
6.4.6. Skadnia instrukcji SET TRANSACTION.............................................. 310
6.5. Administracja baz danych .................................................................................. 311
6.5.1. Instrukcje zarzdzajce kontami uytkownikw ....................................... 311
6.5.2. Instrukcje do konserwacji tabel ............................................................... 319
6.5.3. Skadnia instrukcji SET i SHOW ............................................................ 326
6.5.4. Inne instrukcje administracyjne ............................................................... 347
6.6. Instrukcje replikacji.............................................................................................. 352
6.6.1. Instrukcje SQL sterujce serwerem gwnym ......................................... 352
6.6.2. Instrukcje SQL sterujce serwerami podrzdnymi .................................. 354
Rozdzia 7. Rozszerzenia przestrzenne w MySQL............................................... 365
7.1. Wstp ................................................................................................................... 365
7.2. Model geometryczny OpenGIS............................................................................ 366
7.2.1. Hierarchia klas geometrycznych.............................................................. 366
7.2.2. Klasa Geometry ....................................................................................... 368
7.2.3. Klasa Point .............................................................................................. 369
7.2.4. Klasa Curve ............................................................................................. 369
7.2.5. Klasa LineString...................................................................................... 370
7.2.6. Klasa Surface........................................................................................... 370
7.2.7. Klasa Polygon.......................................................................................... 370
7.2.8. Klasa GeometryCollection....................................................................... 371
Spis treci 7
7.2.9. Klasa MultiPoint...................................................................................... 371
7.2.10. Klasa MultiCurve .................................................................................... 372
7.2.11. Klasa MultiLineString............................................................................. 372
7.2.12. Klasa MultiSurface .................................................................................. 372
7.2.13. Klasa MultiPolygon................................................................................. 373
7.3. Obsugiwane formaty danych przestrzennych...................................................... 373
7.3.1. Format tekstowy WKT............................................................................ 374
7.3.2. Format binarny WKB.............................................................................. 374
7.4. Tworzenie bazy danych z rozszerzeniami przestrzennymi................................... 375
7.4.1. Typy danych przestrzennych w MySQL ................................................. 375
7.4.2. Tworzenie wartoci przestrzennych......................................................... 376
7.4.3. Tworzenie kolumn przestrzennych.......................................................... 379
7.4.4. Wypenianie kolumn przestrzennych....................................................... 379
7.4.5. Pobieranie danych przestrzennych........................................................... 381
7.5. Analiza informacji przestrzennych....................................................................... 381
7.5.1. Funkcje konwersji formatw geometrycznych ........................................ 382
7.5.2. Funkcje klasy Geometry.......................................................................... 382
7.5.3. Funkcje tworzce nowe geometrie na podstawie istniejcych................. 388
7.5.4. Funkcje testujce relacje przestrzenne
midzy obiektami geometrycznymi ......................................................... 389
7.5.5. Relacje midzy minimalnymi prostoktami otaczajcymi
dla poszczeglnych geometrii.................................................................. 390
7.5.6. Funkcje sprawdzajce relacje przestrzenne pomidzy geometriami ........ 391
7.6. Optymalizacja analizy przestrzennej.................................................................... 392
7.6.1. Tworzenie indeksw przestrzennych....................................................... 392
7.6.2. Wykorzystanie indeksu przestrzennego................................................... 393
7.7. Zgodno MySQL ze standardem........................................................................ 395
7.7.1. Niezaimplementowane funkcje GIS ........................................................ 395
Rozdzia 8. Procedury i funkcje skadowane ..................................................... 397
8.1. Skadnia procedur skadowanych......................................................................... 398
8.1.1. Utrzymanie procedur skadowanych........................................................ 398
8.1.2. SHOW PROCEDURE STATUS oraz SHOW FUNCTION STATUS.... 401
8.1.3. Instrukcja CALL...................................................................................... 402
8.1.4. Instrukcja zoona BEGIN ... END.......................................................... 402
8.1.5. Instrukcja DECLARE.............................................................................. 402
8.1.6. Zmienne w procedurach skadowanych................................................... 402
8.1.7. Warunki i podprogramy obsugi .............................................................. 403
8.1.8. Kursory.................................................................................................... 405
8.1.9. Konstrukcje sterowania przepywem sterowania..................................... 406
Rozdzia 9. Obsuga bdw w MySQL .............................................................. 409
9.1. Zwracane bdy.................................................................................................... 409
9.2. Komunikaty bdw............................................................................................. 419
Dodatek A Rozwizywanie problemw z zapytaniami ........................................435
A.1. Zagadnienia zwizane z zapytaniami ................................................................... 435
A.1.1. Wielko liter przy wyszukiwaniu........................................................... 435
A.1.2. Problemy z kolumnami typu DATE ........................................................ 436
A.1.3. Problemy z wartociami NULL............................................................... 437
A.1.4. Problemy z synonimami kolumn ............................................................. 438
A.1.5. Bd wycofania dla tabel nietransakcyjnych............................................ 439
A.1.6. Usuwanie wierszy ze zwizanych tabel ................................................... 439
A.1.7. Rozwizywanie problemw z brakujcymi wierszami ............................ 440
A.1.8. Problemy z porwnaniami zmiennoprzecinkowymi................................ 441
8 Spis treci
A.2. Problemy zwizane z optymalizatorem................................................................ 443
A.3. Problemy z definicj tabel.................................................................................... 444
A.3.1. Problemy z instrukcj ALTER TABLE................................................... 444
A.3.2. Jak zmieni porzdek kolumn w tabeli .................................................... 445
A.3.3. Problemy z tabelami tymczasowymi ....................................................... 445
Dodatek B Wyraenia regularne w MySQL........................................................ 447
Skorowidz...................................................................................... 451
Rozdzia 4.
Typy kolumn
W MySQL dostpnych jest wiele typw danych, ktre mona pogrupowa w kilku pod-
stawowych kategoriach, takich jak typy liczbowe, typy zwizane z dat i czasem oraz
typy acuchowe. Na pocztku tego rozdziau przedstawiony zostanie przegld wspo-
mnianych przed chwil typw kolumn, po czym nastpi bardziej szczegowy opis ich
waciwoci z podziaem na poszczeglne kategorie i wreszcie zamieszczone zostanie
podsumowanie informacji dotyczcych wymaga co do rozmiaru pamici potrzebnej
do przechowania danej kolumny. Sam przegld jest z zamierzenia krtki. Dodatkowe
informacje o poszczeglnych typach kolumn, na przykad dopuszczalny format, w kt-
rym mona deklarowa wartoci, zostay uwzgldnione w szczegowych omwieniach.
Od wersji 4.1 MySQL rozpoznaje rozszerzenia do obsugi danych przestrzennych.
Informacje o typach przestrzennych znajduj si w rozdziale 7. tego podrcznika.
W czci opisu typw kolumn zastosowane zostay nastpujce reguy:
/
Wskazuje maksymalny rozmiar wywietlania liczby lub acucha.
Maksymalnym dopuszczalnym rozmiarem wywietlania jest 255.
&
Dotyczy typw zmiennoprzecinkowych i staoprzecinkowych. Okrela liczb
cyfr po kropce dziesitnej. Maksymalna dopuszczalna warto wynosi 30,
ale nie powinna przekracza /.
Nawiasy kwadratowe ( ) identyfikuj opcjonalne fragmenty deklaracji typu.
126 Rozdzia 4. Typy kolumn
4.1. Przegld typw dla kolumny
4.1.1. Omwienie typw liczbowych
Poniej znajduje si przegld liczbowych typw dla kolumn. Bardziej szczegowe
informacje mona znale w podrozdziale 4.2. Wymogi dotyczce rozmiaru pamici
potrzebnej do przechowywania kolumn znajduj si w podrozdziale 4.5.
Jeli dla kolumny liczbowej zostanie okrelony atrybut /lRO|1||, MySQL automatycznie
doda do kolumny atrybut UN1S1ONlD.
Naley uwaa podczas odejmowania dwch wartoci liczbowych, z ktrych jedna ma
typ UN1S1ONlD. Uzyskany wynik bdzie rwnie tego typu! patrz podrozdzia 5.7.
T1NY1NT/) UNS1ONlD /lRO|1||
Bardzo maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od `8
do `/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do bb.
B1T, BOO|, BOO|lAN
To s synonimy T1NY1NT`). Synonim BOO|lAN zosta dodany w MySQL 4.1.0.
Warto zerowa to inaczej fasz. Wartoci niezerowe traktowane s jako prawda.
W przyszoci wprowadzona zostanie pena, zgodna ze standardem SQL
obsuga typu boolowskiego.
SMA||1NT/) UNS1ONlD /lRO|1||
Maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od o/68
do o/6/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do 6bbob.
MlD1UM1NT/) UNS1ONlD /lRO|1||
rednia liczba cakowita. Dla liczb ze znakiem zakres wynosi od 8o88608
do 8o8860/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0
do `6///`b.
1NT/) UNS1ONlD /lRO|1||
Standardowa liczba cakowita. Dla liczb ze znakiem zakres wynosi
od `4/48o648 do `4/48o64/. W przypadku liczb bez znaku zakres
obejmuje wartoci od 0 do 49496/9b.
1NTlOlR/) UNS1ONlD /lRO|1||
Jest to synonim dla typu 1NT.
B1O1NT/) UNS1ONlD /lRO|1||
Dua liczba cakowita. Dla liczb ze znakiem zakres wynosi
od 9oo/0o68b4//b808 do 9oo/0o68b4//b80/. W przypadku liczb
bez znaku zakres obejmuje wartoci od 0 do `8446/440/o/09bb`6`b.
4.1. Przegld typw dla kolumny 127
Oto kilka spraw, o ktrych naley wiedzie odnonie kolumn typu B1O1NT:
Wszystkie obliczenia wykonywane s przy uyciu wartoci typu B1O1NT
lub DOUB|l ze znakiem. Oznacza to, e duych liczb cakowitych bez
znaku, wikszych ni 9oo/0o68b4//b80/ (63 bity), mona uywa tylko
z funkcjami bitowymi! Niezastosowanie si do tej zasady moe doprowadzi
do uzyskania w wyniku liczby, ktrej kilka ostatnich cyfr jest bdnych
z powodu bdw w zaokrglaniu podczas konwersji wartoci B1O1NT
na DOUB|l.
MySQL 4.0 potrafi obsugiwa B1O1NT w nastpujcych przypadkach:
Podczas wykorzystywania liczb cakowitych do przechowywania
duych wartoci bez znaku w kolumnie typu B1O1NT.
W M1NPC\YCAMQN) lub MAXPC\YCAMQN), gdzie PC\YCAMQN odnosi si
do kolumny B1O1NT.
Podczas korzystania z operatorw (midzy innymi , , *), gdy oba
argumenty s liczbami cakowitymi.
Zawsze istnieje moliwo zapisania w kolumnie B1O1NT dokadnej wartoci
liczby cakowitej. Wystarczy zapisa j przy uyciu acucha. W takim
przypadku zostanie dokonana konwersja acucha na liczb; konwersja
nie bdzie wymaga poredniego etapu przeksztacajcego liczb na jej
odpowiednik o podwjnej precyzji.
Podczas korzystania z operatorw , i * stosowana jest arytmetyka
B1O1NT, jeli oba argumenty maj warto liczby cakowitej! To oznacza,
e pomnoenie dwch duych liczb cakowitych (lub wynikw funkcji,
ktra zwraca liczby cakowite) moe spowodowa nieoczekiwane
rezultaty, jeli wynik przekroczy liczb 9oo/0o68b4//b80/.
||OATR) UNS1ONlD /lRO|1||
Liczba zmiennoprzecinkowa. Parametr R oznacza precyzj i moe przyjmowa
warto od 0 do 14 dla liczb zmiennoprzecinkowych o dokadnoci do jednego
znaku i od 25 do 53 dla liczb zmiennoprzecinkowych o dokadnoci do dwch
znakw. To przypomina opisane poniej typy ||OAT i DOUB|l. Typ ||OATR)
ma ten sam zakres, jaki posiadaj odpowiadajce mu typy ||OAT i DOUB|l,
ale w jego przypadku niezdefiniowany jest maksymalny rozmiar wywietlania
i liczba miejsc po przecinku.
Od wersji 3.23 MySQL jest to prawdziwa warto zmiennoprzecinkowa.
W wersjach wczeniejszych liczba typu ||OATR) bya zawsze liczb o dwch
miejscach po przecinku.
Ta skadnia zostaa dodana w celu zachowania zgodnoci ze standardem ODBC.
Stosowanie typu ||OAT moe spowodowa wystpienie pewnych
nieoczekiwanych problemw, poniewa wszystkie obliczenia w MySQL
s wykonywane z podwjn precyzj patrz punkt A.1.7).
||OAT/, &) UNS1ONlD /lRO|1||
128 Rozdzia 4. Typy kolumn
Maa liczba zmiennoprzecinkowa (o dokadnoci do jednego znaku). Liczba
ta moe przyj wartoci: od o408o466lo8 do ``/b494ob`lo8, 0,
i od ``/b494ob`lo8 do o408o466lo8. Jeli podany jest atrybut UN1S1ONlD,
niedozwolone s wartoci ujemne. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ ||OAT bez argumentw
lub typ ||OATR) (gdzie Rjest liczb z zakresu od 0 do 24) oznacza liczb
zmiennoprzecinkow o pojedynczej precyzji.
DOUB|l/, &) UNS1ONlD /lRO|1||
Standardowa liczba zmiennoprzecinkowa (o dokadnoci do dwch
znakw). Liczba ta moe przyj wartoci: od `/9/69o`o486o`b/lo08
do b0/o8b8b0/0`4lo08, 0, i od b0/o8b8b0/0`4lo08
do `/9/69o`o486o`b/lo08. Jeli podany jest atrybut UN1S1ONlD, wartoci
ujemne s niedozwolone. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ DOUB|l
bez argumentw lub ||OATR) (gdzie R jest liczb z zakresu od 25 do 53)
oznacza liczb zmiennoprzecinkow o podwjnej precyzji.
DOUB|l PRlC1S1ON/, &) UNS1ONlD /lRO|1||
RlA|/, &) UNS1ONlD /lRO|1||
S to synonimy DOUB|l. Wyjtek: Jeli dla parametru s;_cce serwera
wczono opcj RlA|_AS_||OAT, synonimem ||OAT jest RlA|, a nie DOUB|l.
DlC1MA|/, &) UNS1ONlD /lRO|1||
Niezapakowana liczba staoprzecinkowa. Zachowanie kolumny tego typu
przypomina kolumn typu CHAR. Niezapakowana oznacza, e liczba jest
przechowywana w postaci acucha przy uyciu jednego znaku na kad cyfr
wartoci. Parametr / definiuje maksymaln liczb cyfr, a & liczb miejsc
po przecinku. W parametrze / nie s brane pod uwag: kropka dziesitna
(odpowiadajca w naszej notacji przecinkowi) i (dla liczb ujemnych) znak ,
cho jest dla nich zarezerwowane miejsce. Wartoci nie maj miejsc
po przecinku lub czci uamkowych, jeli & jest rwne 0. Maksymalny zakres
wartoci typu DlC1MA| jest taki sam, jak dla typu DOUB|l, ale rzeczywisty zakres
danej kolumny DlC1MA| moe by ograniczony przez wybr argumentw / i &.
Jeli podany jest atrybut UN1S1ONlD, wartoci ujemne s niedozwolone.
W przypadku braku argumentu &, domyln wartoci jest 0. Jeli pominity
jest parametr /, domyln wartoci jest 10.
W wersjach poprzedzajcych MySQL 3.23 argument / musi by wystarczajco
duy, by zawiera obszar potrzebny dla znaku i kropki dziesitnej.
DlC/,&) UNS1ONlD /lRO|1||
NUMlR1C/,&) UNS1ONlD /lRO|1||
|1XlD/, &) UNS1ONlD /lRO|1||
S to synonimy typu DlC1MA|.
W MySQL 4.1.0 dodano synonim |1XlD w celu osignicia kompatybilnoci
z innymi serwerami.
4.1. Przegld typw dla kolumny 129
4.1.2. Przegld typw zwizanych z dat i czasem
Poniej znajduje si podsumowanie typw kolumn przeznaczonych dla czasu i daty.
Dodatkowe informacje na ten temat mona znale w podrozdziale 4.3. Wymogi do-
tyczce pamici potrzebnej do przechowywania danych w kolumnach zostay podane
w podrozdziale 4.5.
DATl
Data. Obsugiwany zakres obejmuje daty od ``0000`0`` do `9999`o``.
W MySQL wartoci DATl wywietlane s w formacie `RRRRMMDD`, ale mona
przypisywa wartoci do kolumn DATl przy uyciu acuchw lub liczb.
DATlT1Ml
Kombinacja daty i czasu. Obsugiwany zakres obejmuje wartoci
od ``0000`0` 000000` do `9999`o` ob9b9`. W MySQL wartoci
DATlT1Ml wywietlane s w formacie `RRRRMMDD OOMMSS`, ale mona
przypisywa wartoci do kolumn DATlT1Ml przy uyciu acuchw lub liczb.
T1MlSTAMP/)
Znacznik czasu. Obsugiwany zakres rozpoczyna si od daty ``9/00`0``
i siga roku 0o/.
Kolumna typu T1MlSTAMP przydaje si do rejestracji daty i godziny operacji
wstawiania lub aktualizacji. Pierwszej kolumnie T1MlSTAMP w tabeli
automatycznie przypisywana jest data i czas ostatniej operacji, jeli tylko tych
wartoci nie wprowadzi rcznie uytkownik. Dowolnej kolumnie T1MlSTAMP
mona rwnie przypisa biec dat i godzin, wpisujc do niej warto NU||.
Od MySQL 4.1 wartoci T1MlSTAMP s zwracane w postaci acuchw
w formacie `RRRRMMDD OOMMSS`. Aby uzyska warto w postaci liczby,
naley doda do kolumn tego typu 0. Inne szerokoci wywietlania
znacznika czasu nie s obsugiwane.
W wersjach poprzedzajcych MySQL 4.1 wartoci T1MlSTAMP s wywietlane
w formacie RRRRMMDDOOMMSS, RRMMDDOOMMSS, RRRRMMDD lub RRMMDD w zalenoci
od tego, czy parametr / jest rwny 14 (albo go brak), 12, 8 lub 6. Mona jednak
przypisywa wartoci do kolumn T1MlSTAMP przy uyciu acuchw lub liczb.
Argument / wpywa tylko na sposb wywietlania kolumny T1MlSTAMP, a nie
na jej przechowywanie. Wartoci kolumny s zawsze zapisywane w czterech
bajtach. W MySQL od wersji 4.0.12 pojawia si opcja ne., dziki ktrej
mona zmieni dziaanie serwera, upodabniajc je do MySQL 4.1.
Naley odnotowa, e kolumny T1MlSTAMP/), gdzie /jest rwne 8 lub 14,
s traktowane jako liczby, natomiast reszta kolumn T1MlSTAMP/) jest
traktowana jako acuchy. Jest to rodzaj gwarancji, e uytkownik bdzie
mg wiarygodnie usuwa i przywraca tabele tego typu.
T1Ml
Godzina. Obsugiwany zakres obejmuje wartoci od `8o8b9b9`
do ` 8o8b9b9`. W MySQL wartoci T1Ml wywietlane s w formacie
` OOMMSS`, ale mona przypisa wartoci do kolumn T1Ml przy uyciu
zarwno acuchw, jak i liczb.
130 Rozdzia 4. Typy kolumn
YlAR|4)
Rok w formacie dwu- lub czterocyfrowym. Domylnym formatem jest rok
zapisany za pomoc czterech cyfr. W tym formacie dostpne wartoci nale
do przedziau od `90` do `bb oraz 0. W formacie dwucyfrowym wartoci
dopuszczalne to liczby z zakresu od /0 do 69, ktre reprezentuj daty od roku
1970 do 2069. W MySQL wartoci YlAR wywietlane s w formacie RRRR,
ale mona przypisa wartoci do kolumn YlAR przy uyciu tak acuchw,
jak i liczb. Typ YlAR jest niedostpny dla wersji wczeniejszych ni MySQL 3.22.
4.1.3. Przegld typw acuchowych
Poniej znajduje si przegld typw acuchowych. Dodatkowe informacje mona
znale w podrozdziale 4.4. Wymogi dotyczce pamici potrzebnej do przechowywa-
nia danych w kolumnach zostay podane w podrozdziale 4.5.
W niektrych przypadkach MySQL moe zmieni kolumn typu acuchowego na typ,
ktry bdzie si rni od zadeklarowanego w instrukcji CRlATl TAB|l lub A|TlR TAB|l.
Wicej informacji na ten temat znajduje si w podpunkcie 6.2.5.2.
Od wersji 4.1 w MySQL pojawia si zmiana, ktra wpywa na wiele typw kolumn typu
acuchowego. Definicja kolumn typu znakowego moe zawiera atrybut CHARACTlR
SlT, ktry okrela zestaw znakw i opcjonalnie porzdek sortowania. Dotyczy to typw
CHAR, VARCHAR, rnych typw TlXT oraz lNUM i SlT, na przykad:
CRF/TF T/B|F !
FNUMYCTVQ
YCTVQ|
1 lub 2 bajty w zalenoci od liczby wartoci wyliczenia
(maksymalnie 65 535)
SFTYCTVQ
YCTVQ|
1, 2, 3, 4 lub 8 bajtw w zalenoci od liczby elementw zestawu
(maksymalnie 64)
Typy VARCHAR, B|OB i TlXT maj zmienn dugo. Dla kadego ilo pamici potrzeb-
nej do przechowania wartoci bdzie zalee od faktycznej dugoci wartoci kolumny
(reprezentowanej w ostatniej tabeli przez .), a nie od maksymalnego moliwego roz-
miaru danego typu. Kolumna VARCHAR`0) na przykad moe przechowywa acuch
o maksymalnej dugoci 10 znakw. Faktyczna ilo wymaganej pamici to dugo
acucha (.) plus 1 bajt do zapisania dugoci acucha. Dla acucha `.|cc` parametr
. jest rwny 4, a wymagany rozmiar pamici to 5 bajtw.
Typy B|OB i TlXT wymagaj 1, 2, 3 lub 4 bajtw do zapisu dugoci wartoci kolumny
w zalenoci od maksymalnej moliwej dugoci tego typu (patrz punkt 4.4.2).
Rozmiar obiektu lNUM jest ustalany na podstawie liczby rnych wartoci wyliczenia.
Przy wyliczeniach do 255 moliwych wartoci uywany jest jeden bajt, a przy wyli-
czeniach do 65 535 wartoci uywane s 2 bajty (patrz punkt 4.4.3).
Rozmiar obiektu SlT jest okrelany przez liczb rnych elementw zestawu. Jeli ze-
staw ma rozmiar 0, obiekt zajmuje 0/).8 bajtw, ktr to warto zaokrgla si do
1, 2, 3, 4 lub 8 bajtw. Obiekt SlT moe mie do 64 elementw (patrz punkt 4.4.4).
4.6. Wybieranie odpowiedniego typu
dla kolumny
Aby jak najbardziej wydajnie korzysta z pamici, naley we wszystkich przypadkach
stara si stosowa typ, ktry bdzie jak najbardziej dokadny. Jeli na przykad w kolum-
nie liczb cakowitych bd przechowywane wartoci z zakresu od ` do 99999, najlep-
szym wyborem bdzie typ MlD1UM1NT UNS1ONlD. Ze wszystkich typw, ktre reprezentuj
wszystkie wymagane wartoci, zajmuje najmniej pamici.
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych 153
Powszechnym problemem jest dokadne przedstawianie wartoci walutowych. W MySQL
naley do tego uywa typu DlC1MA|, za pomoc ktrego wartoci zapisywane s w for-
mie acucha. Dziki temu nie traci si na dokadnoci (mimo to obliczenia z wartociami
DlC1MA| mog by wci wykonywane przy uyciu operacji dziaajcych na liczbach
z podwjn precyzj). Jeli dokadno nie jest zbyt wana, by moe wystarczajco
dobrym typem bdzie DOUB|l.
Aby uzyska wiksz dokadno, mona zawsze przeksztaci warto na typ stao-
przecinkowy, przechowywany w B1O1NT. Pozwoli to wykonywa wszystkie obliczenia
na liczbach cakowitych i tylko w razie potrzeby przeksztaca wynik z powrotem na
wartoci zmiennoprzecinkowe.
4.7. Wykorzystywanie typw kolumn
z innych mechanizmw baz danych
Aby uatwi uytkownikowi zastosowanie kodu pochodzcego od innych producentw,
moliwe jest odwzorowanie typw kolumn w sposb przedstawiony w poniszej tabeli.
Odwzorowania te upraszczaj operacj importu do MySQL definicji tabel z innych
mechanizmw baz danych:
Typ innych producentw Typ MySQL
BTN/RY/| C'/R/| BTN/RY
C'/R V/RYTN/| V/RC'/R/|
F|J/T4 F|J/T
F|J/T8 OJUB|F
TNT1 TTNYTNT
TNT SM/||TNT
TNT: MFOTUMTNT
TNT4 TNT
TNT8 BTTNT
|JN V/RBTN/RY MFOTUMB|JB
|JN V/RC'/R MFOTUMTFXT
|JN MFOTUMTFXT oc M,SJ| 410|
MTOO|FTNT MFOTUMTNT
V/RBTN/RY/| C'/R/| BTN/RY
Odwzorowanie typw kolumn jest wykonywane podczas tworzenia tabeli, po czym
oryginalne deklaracje typu zostaj usunite. Jeli uytkownik utworzy tabel z typami
stosowanymi przez innych producentw, po czym wyda polecenie DlSCR1Bl PC\YCA
VCDGNK, zostanie przedstawiona struktura tabeli z odpowiadajcymi im typami MySQL.
4 Spis treci
1.8.5. Rozbienoci midzy MySQL a standardem SQL ........................................ 60
1.8.6. Jak MySQL radzi sobie z ograniczeniami ................................................. 67
1.8.7. Znane bdy i projektowe braki w MySQL................................................ 69
Rozdzia 2. Struktura jzyka .............................................................................. 77
2.1. Literay................................................................................................................... 77
2.1.1. acuchy ................................................................................................... 77
2.1.2. Liczby........................................................................................................ 80
2.1.3. Wartoci szesnastkowe .............................................................................. 80
2.1.4. Wartoci logiczne ...................................................................................... 81
2.1.5. Wartoci NULL......................................................................................... 81
2.2. Nazwy baz danych, tabel, indeksw, kolumn i aliasw......................................... 81
2.2.1. Kwalifikatory identyfikatorw .................................................................. 83
2.2.2. Znaczenie wielkoci liter w nazwach identyfikatorw.............................. 83
2.3. Zmienne definiowane przez uytkownika.............................................................. 85
2.4. Zmienne systemowe............................................................................................... 87
2.4.1. Strukturalne zmienne systemowe .............................................................. 89
2.5. Skadnia komentarza .............................................................................................. 91
2.6. Traktowanie sw zastrzeonych w MySQL.......................................................... 92
Rozdzia 3. Obsuga zestaww znakw............................................................... 95
3.1. Oglne informacje o zestawach znakw i sortowaniu ........................................... 95
3.2. Zestawy znakw i porzdki sortowania w MySQL................................................ 96
3.3. Okrelanie domylnego zestawu znakw i sortowania........................................... 98
3.3.1. Zestaw znakw i sortowanie dla serwera................................................... 98
3.3.2. Zestaw znakw i sortowanie dla bazy danych........................................... 99
3.3.3. Zestaw znakw i sortowanie dla tabeli .................................................... 100
3.3.4. Zestaw znakw i sortowanie dla kolumny............................................... 100
3.3.5. Przykady przypisywania zestawu znakw i sortowania ......................... 101
3.3.6. Zestawy znakw i sortowanie dla poczenia .......................................... 102
3.3.7. Zestaw znakw i sortowanie dla acucha znakw.................................. 104
3.3.8. Wykorzystywanie COLLATE w instrukcjach SQL.................................... 105
3.3.9. Priorytet klauzuli COLLATE .................................................................. 106
3.3.10. Operator BINARY................................................................................... 106
3.3.11. Niektre przypadki specjalne, w ktrych trudno okreli sortowanie...... 106
3.3.12. Sortowania musz by odpowiednie dla danego zestawu znakw........... 107
3.3.13. Przykad wpywu porzdku sortowania ................................................... 108
3.4. Operacje, na ktre ma wpyw obsuga zestaww znakw.................................... 109
3.4.1. acuchy wyjciowe ............................................................................... 109
3.4.2. CONVERT()............................................................................................ 110
3.4.3. CAST() .................................................................................................... 110
3.4.4. Instrukcje SHOW .................................................................................... 111
3.5. Obsuga Unicode.................................................................................................. 112
3.6. UTF8 dla metadanych.......................................................................................... 113
3.7. Kompatybilno z innymi systemami zarzdzania baz danych .......................... 115
3.8. Nowy format pliku konfiguracji zestawu znakw................................................ 115
3.9. Narodowe zestawy znakw.................................................................................. 115
3.10. Aktualizacja zestaww znakw z MySQL 4.0..................................................... 116
3.10.1. Zestawy znakw w wersji 4.0 i odpowiadajce im w wersji 4.1 pary
skadajce si z zestawu znakw i sortowania......................................... 117
3.10.2. Przeksztacanie kolumn znakowych wersji 4.0 na format 4.1 ................. 118
3.11. Zestawy znakw i sortowania obsugiwane przez MySQL.................................. 118
3.11.1. Zestawy znakw standardu Unicode ....................................................... 119
3.11.2. Zestawy znakw zachodnioeuropejskich................................................. 120
3.11.3. Zestawy znakw dla Europy Centralnej .................................................. 121
Spis treci 5
3.11.4. Zestawy znakw poudniowoeuropejskich i rodkowowschodnich......... 122
3.11.5. Zestawy znakw regionu batyckiego...................................................... 123
3.11.6. Zestawy znakw dla cyrylicy................................................................... 123
3.11.7. Azjatyckie zestawy znakw..................................................................... 124
Rozdzia 4. Typy kolumn.................................................................................. 125
4.1. Przegld typw dla kolumny................................................................................ 126
4.1.1. Omwienie typw liczbowych ................................................................ 126
4.1.2. Przegld typw zwizanych z dat i czasem............................................ 129
4.1.3. Przegld typw acuchowych ................................................................ 130
4.2. Typy liczbowe...................................................................................................... 132
4.3. Typy zwizane z dat i czasem............................................................................ 135
4.3.1. Typy DATETIME, DATE i TIMESTAMP............................................. 137
4.3.2. Typ TIME................................................................................................ 142
4.3.3. Typ YEAR............................................................................................... 143
4.3.4. Problem roku 2000 a typy zwizane z dat.............................................. 144
4.4. Typy acuchowe ................................................................................................. 144
4.4.1. Typy CHAR i VARCHAR...................................................................... 144
4.4.2. Typy BLOB i TEXT................................................................................ 146
4.4.3. Typ Enum................................................................................................ 147
4.4.4. Typ SET .................................................................................................. 149
4.5. Rozmiar pamici potrzebnej dla typw kolumn................................................... 151
4.6. Wybieranie odpowiedniego typu dla kolumny..................................................... 152
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych ............... 153
Rozdzia 5. Funkcje i operatory........................................................................ 155
5.1. Operatory ............................................................................................................. 156
5.1.1. Nawiasy................................................................................................... 156
5.1.2. Operatory porwnania ............................................................................. 156
5.1.3. Operatory logiczne .................................................................................. 161
5.1.4. Operatory rozrniania wielkoci liter..................................................... 163
5.2. Funkcje kontroli przepywu ................................................................................. 163
5.3. Funkcje acuchowe............................................................................................. 166
5.3.1. Funkcje porwnywania acuchw.......................................................... 176
5.4. Funkcje liczbowe ................................................................................................. 178
5.4.1. Operatory arytmetyczne........................................................................... 178
5.4.2. Funkcje matematyczne ............................................................................ 180
5.5. Funkcje daty i godziny......................................................................................... 186
5.6. Funkcje obsugi wyszukiwania penotekstowego................................................. 202
5.6.1. Boolowskie wyszukiwania penotekstowe............................................... 205
5.6.2. Wyszukiwania penotekstowe z rozwijaniem zapytania .......................... 207
5.6.3. Ograniczenia dla wyszukiwania penotekstowego................................... 208
5.6.4. Modyfikowanie wyszukiwania penotekstowego MySQL ...................... 209
5.6.5. Lista rzeczy do zrobienia dla wyszukiwania penotekstowego................ 211
5.7. Funkcje konwersji typw..................................................................................... 211
5.8. Inne funkcje ......................................................................................................... 214
5.8.1. Funkcje bitowe ........................................................................................ 214
5.8.2. Funkcje szyfrujce................................................................................... 215
5.8.3. Funkcje informacyjne .............................................................................. 219
5.8.4. Funkcje rne .......................................................................................... 223
5.9. Funkcje i modyfikatory do zastosowania z klauzulami GROUP BY................... 226
5.9.1. Funkcje GROUP BY (agregujce)........................................................... 226
5.9.2. Modyfikatory GROUP BY...................................................................... 229
5.9.3. GROUP BY z ukrytymi polami............................................................... 232
6 Spis treci
Rozdzia 6. Skadnia instrukcji SQL .................................................................. 235
6.1. Instrukcje operujce na danych............................................................................ 235
6.1.1. Skadnia instrukcji DELETE................................................................... 235
6.1.2. Skadnia instrukcji DO ............................................................................ 238
6.1.3. Skadnia instrukcji HANDLER............................................................... 238
6.1.4. Skadnia instrukcji INSERT .................................................................... 240
6.1.5. Skadnia instrukcji LOAD DATA INFILE.............................................. 246
6.1.6. Skadnia instrukcji REPLACE................................................................. 255
6.1.7. Skadnia instrukcji SELECT.................................................................... 256
6.1.8. Skadnia podzapyta................................................................................ 265
6.1.9. Skadnia instrukcji TRUNCATE............................................................. 276
6.1.10. Skadnia instrukcji UPDATE................................................................... 276
6.2. Instrukcje definiowania danych ........................................................................... 278
6.2.1. Skadnia instrukcji ALTER DATABASE ............................................... 278
6.2.2. Skadnia instrukcji ALTER TABLE........................................................ 279
6.2.3. Skadnia instrukcji CREATE DATABASE............................................. 285
6.2.4. Skadnia instrukcji CREATE INDEX ..................................................... 285
6.2.5. Skadnia instrukcji CREATE TABLE..................................................... 287
6.2.6. Skadnia instrukcji DROP DATABASE.................................................. 301
6.2.7. Skadnia instrukcji DROP INDEX.......................................................... 302
6.2.8. Skadnia instrukcji DROP TABLE.......................................................... 302
6.2.9. Skadnia instrukcji RENAME TABLE.................................................... 303
6.3. Instrukcje programu MySQL............................................................................... 304
6.3.1. Skadnia instrukcji DESCRIBE
(odczytywanie informacji na temat kolumn) ........................................... 304
6.3.2. Skadnia instrukcji USE........................................................................... 304
6.4. Instrukcje obsugi transakcji i blokowania........................................................... 305
6.4.1. Skadnia instrukcji START TRANSACTION, COMMIT
oraz ROLLBACK.................................................................................... 305
6.4.2. Instrukcje niemoliwe do wycofania ....................................................... 306
6.4.3. Instrukcje wykonujce niejawne zatwierdzenie......................................... 306
6.4.4. Skadnia instrukcji SAVEPOINT i ROLLBACK TO SAVEPOINT....... 307
6.4.5. Skadnia instrukcji LOCK TABLES oraz UNLOCK TABLES .............. 307
6.4.6. Skadnia instrukcji SET TRANSACTION.............................................. 310
6.5. Administracja baz danych .................................................................................. 311
6.5.1. Instrukcje zarzdzajce kontami uytkownikw ....................................... 311
6.5.2. Instrukcje do konserwacji tabel ............................................................... 319
6.5.3. Skadnia instrukcji SET i SHOW ............................................................ 326
6.5.4. Inne instrukcje administracyjne ............................................................... 347
6.6. Instrukcje replikacji.............................................................................................. 352
6.6.1. Instrukcje SQL sterujce serwerem gwnym ......................................... 352
6.6.2. Instrukcje SQL sterujce serwerami podrzdnymi .................................. 354
Rozdzia 7. Rozszerzenia przestrzenne w MySQL............................................... 365
7.1. Wstp ................................................................................................................... 365
7.2. Model geometryczny OpenGIS............................................................................ 366
7.2.1. Hierarchia klas geometrycznych.............................................................. 366
7.2.2. Klasa Geometry ....................................................................................... 368
7.2.3. Klasa Point .............................................................................................. 369
7.2.4. Klasa Curve ............................................................................................. 369
7.2.5. Klasa LineString...................................................................................... 370
7.2.6. Klasa Surface........................................................................................... 370
7.2.7. Klasa Polygon.......................................................................................... 370
7.2.8. Klasa GeometryCollection....................................................................... 371
Spis treci 7
7.2.9. Klasa MultiPoint...................................................................................... 371
7.2.10. Klasa MultiCurve .................................................................................... 372
7.2.11. Klasa MultiLineString............................................................................. 372
7.2.12. Klasa MultiSurface .................................................................................. 372
7.2.13. Klasa MultiPolygon................................................................................. 373
7.3. Obsugiwane formaty danych przestrzennych...................................................... 373
7.3.1. Format tekstowy WKT............................................................................ 374
7.3.2. Format binarny WKB.............................................................................. 374
7.4. Tworzenie bazy danych z rozszerzeniami przestrzennymi................................... 375
7.4.1. Typy danych przestrzennych w MySQL ................................................. 375
7.4.2. Tworzenie wartoci przestrzennych......................................................... 376
7.4.3. Tworzenie kolumn przestrzennych.......................................................... 379
7.4.4. Wypenianie kolumn przestrzennych....................................................... 379
7.4.5. Pobieranie danych przestrzennych........................................................... 381
7.5. Analiza informacji przestrzennych....................................................................... 381
7.5.1. Funkcje konwersji formatw geometrycznych ........................................ 382
7.5.2. Funkcje klasy Geometry.......................................................................... 382
7.5.3. Funkcje tworzce nowe geometrie na podstawie istniejcych................. 388
7.5.4. Funkcje testujce relacje przestrzenne
midzy obiektami geometrycznymi ......................................................... 389
7.5.5. Relacje midzy minimalnymi prostoktami otaczajcymi
dla poszczeglnych geometrii.................................................................. 390
7.5.6. Funkcje sprawdzajce relacje przestrzenne pomidzy geometriami ........ 391
7.6. Optymalizacja analizy przestrzennej.................................................................... 392
7.6.1. Tworzenie indeksw przestrzennych....................................................... 392
7.6.2. Wykorzystanie indeksu przestrzennego................................................... 393
7.7. Zgodno MySQL ze standardem........................................................................ 395
7.7.1. Niezaimplementowane funkcje GIS ........................................................ 395
Rozdzia 8. Procedury i funkcje skadowane ..................................................... 397
8.1. Skadnia procedur skadowanych......................................................................... 398
8.1.1. Utrzymanie procedur skadowanych........................................................ 398
8.1.2. SHOW PROCEDURE STATUS oraz SHOW FUNCTION STATUS.... 401
8.1.3. Instrukcja CALL...................................................................................... 402
8.1.4. Instrukcja zoona BEGIN ... END.......................................................... 402
8.1.5. Instrukcja DECLARE.............................................................................. 402
8.1.6. Zmienne w procedurach skadowanych................................................... 402
8.1.7. Warunki i podprogramy obsugi .............................................................. 403
8.1.8. Kursory.................................................................................................... 405
8.1.9. Konstrukcje sterowania przepywem sterowania..................................... 406
Rozdzia 9. Obsuga bdw w MySQL .............................................................. 409
9.1. Zwracane bdy.................................................................................................... 409
9.2. Komunikaty bdw............................................................................................. 419
Dodatek A Rozwizywanie problemw z zapytaniami ........................................435
A.1. Zagadnienia zwizane z zapytaniami ................................................................... 435
A.1.1. Wielko liter przy wyszukiwaniu........................................................... 435
A.1.2. Problemy z kolumnami typu DATE ........................................................ 436
A.1.3. Problemy z wartociami NULL............................................................... 437
A.1.4. Problemy z synonimami kolumn ............................................................. 438
A.1.5. Bd wycofania dla tabel nietransakcyjnych............................................ 439
A.1.6. Usuwanie wierszy ze zwizanych tabel ................................................... 439
A.1.7. Rozwizywanie problemw z brakujcymi wierszami ............................ 440
A.1.8. Problemy z porwnaniami zmiennoprzecinkowymi................................ 441
8 Spis treci
A.2. Problemy zwizane z optymalizatorem................................................................ 443
A.3. Problemy z definicj tabel.................................................................................... 444
A.3.1. Problemy z instrukcj ALTER TABLE................................................... 444
A.3.2. Jak zmieni porzdek kolumn w tabeli .................................................... 445
A.3.3. Problemy z tabelami tymczasowymi ....................................................... 445
Dodatek B Wyraenia regularne w MySQL........................................................ 447
Skorowidz...................................................................................... 451
Rozdzia 4.
Typy kolumn
W MySQL dostpnych jest wiele typw danych, ktre mona pogrupowa w kilku pod-
stawowych kategoriach, takich jak typy liczbowe, typy zwizane z dat i czasem oraz
typy acuchowe. Na pocztku tego rozdziau przedstawiony zostanie przegld wspo-
mnianych przed chwil typw kolumn, po czym nastpi bardziej szczegowy opis ich
waciwoci z podziaem na poszczeglne kategorie i wreszcie zamieszczone zostanie
podsumowanie informacji dotyczcych wymaga co do rozmiaru pamici potrzebnej
do przechowania danej kolumny. Sam przegld jest z zamierzenia krtki. Dodatkowe
informacje o poszczeglnych typach kolumn, na przykad dopuszczalny format, w kt-
rym mona deklarowa wartoci, zostay uwzgldnione w szczegowych omwieniach.
Od wersji 4.1 MySQL rozpoznaje rozszerzenia do obsugi danych przestrzennych.
Informacje o typach przestrzennych znajduj si w rozdziale 7. tego podrcznika.
W czci opisu typw kolumn zastosowane zostay nastpujce reguy:
/
Wskazuje maksymalny rozmiar wywietlania liczby lub acucha.
Maksymalnym dopuszczalnym rozmiarem wywietlania jest 255.
&
Dotyczy typw zmiennoprzecinkowych i staoprzecinkowych. Okrela liczb
cyfr po kropce dziesitnej. Maksymalna dopuszczalna warto wynosi 30,
ale nie powinna przekracza /.
Nawiasy kwadratowe ( ) identyfikuj opcjonalne fragmenty deklaracji typu.
126 Rozdzia 4. Typy kolumn
4.1. Przegld typw dla kolumny
4.1.1. Omwienie typw liczbowych
Poniej znajduje si przegld liczbowych typw dla kolumn. Bardziej szczegowe
informacje mona znale w podrozdziale 4.2. Wymogi dotyczce rozmiaru pamici
potrzebnej do przechowywania kolumn znajduj si w podrozdziale 4.5.
Jeli dla kolumny liczbowej zostanie okrelony atrybut /lRO|1||, MySQL automatycznie
doda do kolumny atrybut UN1S1ONlD.
Naley uwaa podczas odejmowania dwch wartoci liczbowych, z ktrych jedna ma
typ UN1S1ONlD. Uzyskany wynik bdzie rwnie tego typu! patrz podrozdzia 5.7.
T1NY1NT/) UNS1ONlD /lRO|1||
Bardzo maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od `8
do `/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do bb.
B1T, BOO|, BOO|lAN
To s synonimy T1NY1NT`). Synonim BOO|lAN zosta dodany w MySQL 4.1.0.
Warto zerowa to inaczej fasz. Wartoci niezerowe traktowane s jako prawda.
W przyszoci wprowadzona zostanie pena, zgodna ze standardem SQL
obsuga typu boolowskiego.
SMA||1NT/) UNS1ONlD /lRO|1||
Maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od o/68
do o/6/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do 6bbob.
MlD1UM1NT/) UNS1ONlD /lRO|1||
rednia liczba cakowita. Dla liczb ze znakiem zakres wynosi od 8o88608
do 8o8860/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0
do `6///`b.
1NT/) UNS1ONlD /lRO|1||
Standardowa liczba cakowita. Dla liczb ze znakiem zakres wynosi
od `4/48o648 do `4/48o64/. W przypadku liczb bez znaku zakres
obejmuje wartoci od 0 do 49496/9b.
1NTlOlR/) UNS1ONlD /lRO|1||
Jest to synonim dla typu 1NT.
B1O1NT/) UNS1ONlD /lRO|1||
Dua liczba cakowita. Dla liczb ze znakiem zakres wynosi
od 9oo/0o68b4//b808 do 9oo/0o68b4//b80/. W przypadku liczb
bez znaku zakres obejmuje wartoci od 0 do `8446/440/o/09bb`6`b.
4.1. Przegld typw dla kolumny 127
Oto kilka spraw, o ktrych naley wiedzie odnonie kolumn typu B1O1NT:
Wszystkie obliczenia wykonywane s przy uyciu wartoci typu B1O1NT
lub DOUB|l ze znakiem. Oznacza to, e duych liczb cakowitych bez
znaku, wikszych ni 9oo/0o68b4//b80/ (63 bity), mona uywa tylko
z funkcjami bitowymi! Niezastosowanie si do tej zasady moe doprowadzi
do uzyskania w wyniku liczby, ktrej kilka ostatnich cyfr jest bdnych
z powodu bdw w zaokrglaniu podczas konwersji wartoci B1O1NT
na DOUB|l.
MySQL 4.0 potrafi obsugiwa B1O1NT w nastpujcych przypadkach:
Podczas wykorzystywania liczb cakowitych do przechowywania
duych wartoci bez znaku w kolumnie typu B1O1NT.
W M1NPC\YCAMQN) lub MAXPC\YCAMQN), gdzie PC\YCAMQN odnosi si
do kolumny B1O1NT.
Podczas korzystania z operatorw (midzy innymi , , *), gdy oba
argumenty s liczbami cakowitymi.
Zawsze istnieje moliwo zapisania w kolumnie B1O1NT dokadnej wartoci
liczby cakowitej. Wystarczy zapisa j przy uyciu acucha. W takim
przypadku zostanie dokonana konwersja acucha na liczb; konwersja
nie bdzie wymaga poredniego etapu przeksztacajcego liczb na jej
odpowiednik o podwjnej precyzji.
Podczas korzystania z operatorw , i * stosowana jest arytmetyka
B1O1NT, jeli oba argumenty maj warto liczby cakowitej! To oznacza,
e pomnoenie dwch duych liczb cakowitych (lub wynikw funkcji,
ktra zwraca liczby cakowite) moe spowodowa nieoczekiwane
rezultaty, jeli wynik przekroczy liczb 9oo/0o68b4//b80/.
||OATR) UNS1ONlD /lRO|1||
Liczba zmiennoprzecinkowa. Parametr R oznacza precyzj i moe przyjmowa
warto od 0 do 14 dla liczb zmiennoprzecinkowych o dokadnoci do jednego
znaku i od 25 do 53 dla liczb zmiennoprzecinkowych o dokadnoci do dwch
znakw. To przypomina opisane poniej typy ||OAT i DOUB|l. Typ ||OATR)
ma ten sam zakres, jaki posiadaj odpowiadajce mu typy ||OAT i DOUB|l,
ale w jego przypadku niezdefiniowany jest maksymalny rozmiar wywietlania
i liczba miejsc po przecinku.
Od wersji 3.23 MySQL jest to prawdziwa warto zmiennoprzecinkowa.
W wersjach wczeniejszych liczba typu ||OATR) bya zawsze liczb o dwch
miejscach po przecinku.
Ta skadnia zostaa dodana w celu zachowania zgodnoci ze standardem ODBC.
Stosowanie typu ||OAT moe spowodowa wystpienie pewnych
nieoczekiwanych problemw, poniewa wszystkie obliczenia w MySQL
s wykonywane z podwjn precyzj patrz punkt A.1.7).
||OAT/, &) UNS1ONlD /lRO|1||
128 Rozdzia 4. Typy kolumn
Maa liczba zmiennoprzecinkowa (o dokadnoci do jednego znaku). Liczba
ta moe przyj wartoci: od o408o466lo8 do ``/b494ob`lo8, 0,
i od ``/b494ob`lo8 do o408o466lo8. Jeli podany jest atrybut UN1S1ONlD,
niedozwolone s wartoci ujemne. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ ||OAT bez argumentw
lub typ ||OATR) (gdzie Rjest liczb z zakresu od 0 do 24) oznacza liczb
zmiennoprzecinkow o pojedynczej precyzji.
DOUB|l/, &) UNS1ONlD /lRO|1||
Standardowa liczba zmiennoprzecinkowa (o dokadnoci do dwch
znakw). Liczba ta moe przyj wartoci: od `/9/69o`o486o`b/lo08
do b0/o8b8b0/0`4lo08, 0, i od b0/o8b8b0/0`4lo08
do `/9/69o`o486o`b/lo08. Jeli podany jest atrybut UN1S1ONlD, wartoci
ujemne s niedozwolone. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ DOUB|l
bez argumentw lub ||OATR) (gdzie R jest liczb z zakresu od 25 do 53)
oznacza liczb zmiennoprzecinkow o podwjnej precyzji.
DOUB|l PRlC1S1ON/, &) UNS1ONlD /lRO|1||
RlA|/, &) UNS1ONlD /lRO|1||
S to synonimy DOUB|l. Wyjtek: Jeli dla parametru s;_cce serwera
wczono opcj RlA|_AS_||OAT, synonimem ||OAT jest RlA|, a nie DOUB|l.
DlC1MA|/, &) UNS1ONlD /lRO|1||
Niezapakowana liczba staoprzecinkowa. Zachowanie kolumny tego typu
przypomina kolumn typu CHAR. Niezapakowana oznacza, e liczba jest
przechowywana w postaci acucha przy uyciu jednego znaku na kad cyfr
wartoci. Parametr / definiuje maksymaln liczb cyfr, a & liczb miejsc
po przecinku. W parametrze / nie s brane pod uwag: kropka dziesitna
(odpowiadajca w naszej notacji przecinkowi) i (dla liczb ujemnych) znak ,
cho jest dla nich zarezerwowane miejsce. Wartoci nie maj miejsc
po przecinku lub czci uamkowych, jeli & jest rwne 0. Maksymalny zakres
wartoci typu DlC1MA| jest taki sam, jak dla typu DOUB|l, ale rzeczywisty zakres
danej kolumny DlC1MA| moe by ograniczony przez wybr argumentw / i &.
Jeli podany jest atrybut UN1S1ONlD, wartoci ujemne s niedozwolone.
W przypadku braku argumentu &, domyln wartoci jest 0. Jeli pominity
jest parametr /, domyln wartoci jest 10.
W wersjach poprzedzajcych MySQL 3.23 argument / musi by wystarczajco
duy, by zawiera obszar potrzebny dla znaku i kropki dziesitnej.
DlC/,&) UNS1ONlD /lRO|1||
NUMlR1C/,&) UNS1ONlD /lRO|1||
|1XlD/, &) UNS1ONlD /lRO|1||
S to synonimy typu DlC1MA|.
W MySQL 4.1.0 dodano synonim |1XlD w celu osignicia kompatybilnoci
z innymi serwerami.
4.1. Przegld typw dla kolumny 129
4.1.2. Przegld typw zwizanych z dat i czasem
Poniej znajduje si podsumowanie typw kolumn przeznaczonych dla czasu i daty.
Dodatkowe informacje na ten temat mona znale w podrozdziale 4.3. Wymogi do-
tyczce pamici potrzebnej do przechowywania danych w kolumnach zostay podane
w podrozdziale 4.5.
DATl
Data. Obsugiwany zakres obejmuje daty od ``0000`0`` do `9999`o``.
W MySQL wartoci DATl wywietlane s w formacie `RRRRMMDD`, ale mona
przypisywa wartoci do kolumn DATl przy uyciu acuchw lub liczb.
DATlT1Ml
Kombinacja daty i czasu. Obsugiwany zakres obejmuje wartoci
od ``0000`0` 000000` do `9999`o` ob9b9`. W MySQL wartoci
DATlT1Ml wywietlane s w formacie `RRRRMMDD OOMMSS`, ale mona
przypisywa wartoci do kolumn DATlT1Ml przy uyciu acuchw lub liczb.
T1MlSTAMP/)
Znacznik czasu. Obsugiwany zakres rozpoczyna si od daty ``9/00`0``
i siga roku 0o/.
Kolumna typu T1MlSTAMP przydaje si do rejestracji daty i godziny operacji
wstawiania lub aktualizacji. Pierwszej kolumnie T1MlSTAMP w tabeli
automatycznie przypisywana jest data i czas ostatniej operacji, jeli tylko tych
wartoci nie wprowadzi rcznie uytkownik. Dowolnej kolumnie T1MlSTAMP
mona rwnie przypisa biec dat i godzin, wpisujc do niej warto NU||.
Od MySQL 4.1 wartoci T1MlSTAMP s zwracane w postaci acuchw
w formacie `RRRRMMDD OOMMSS`. Aby uzyska warto w postaci liczby,
naley doda do kolumn tego typu 0. Inne szerokoci wywietlania
znacznika czasu nie s obsugiwane.
W wersjach poprzedzajcych MySQL 4.1 wartoci T1MlSTAMP s wywietlane
w formacie RRRRMMDDOOMMSS, RRMMDDOOMMSS, RRRRMMDD lub RRMMDD w zalenoci
od tego, czy parametr / jest rwny 14 (albo go brak), 12, 8 lub 6. Mona jednak
przypisywa wartoci do kolumn T1MlSTAMP przy uyciu acuchw lub liczb.
Argument / wpywa tylko na sposb wywietlania kolumny T1MlSTAMP, a nie
na jej przechowywanie. Wartoci kolumny s zawsze zapisywane w czterech
bajtach. W MySQL od wersji 4.0.12 pojawia si opcja ne., dziki ktrej
mona zmieni dziaanie serwera, upodabniajc je do MySQL 4.1.
Naley odnotowa, e kolumny T1MlSTAMP/), gdzie /jest rwne 8 lub 14,
s traktowane jako liczby, natomiast reszta kolumn T1MlSTAMP/) jest
traktowana jako acuchy. Jest to rodzaj gwarancji, e uytkownik bdzie
mg wiarygodnie usuwa i przywraca tabele tego typu.
T1Ml
Godzina. Obsugiwany zakres obejmuje wartoci od `8o8b9b9`
do ` 8o8b9b9`. W MySQL wartoci T1Ml wywietlane s w formacie
` OOMMSS`, ale mona przypisa wartoci do kolumn T1Ml przy uyciu
zarwno acuchw, jak i liczb.
130 Rozdzia 4. Typy kolumn
YlAR|4)
Rok w formacie dwu- lub czterocyfrowym. Domylnym formatem jest rok
zapisany za pomoc czterech cyfr. W tym formacie dostpne wartoci nale
do przedziau od `90` do `bb oraz 0. W formacie dwucyfrowym wartoci
dopuszczalne to liczby z zakresu od /0 do 69, ktre reprezentuj daty od roku
1970 do 2069. W MySQL wartoci YlAR wywietlane s w formacie RRRR,
ale mona przypisa wartoci do kolumn YlAR przy uyciu tak acuchw,
jak i liczb. Typ YlAR jest niedostpny dla wersji wczeniejszych ni MySQL 3.22.
4.1.3. Przegld typw acuchowych
Poniej znajduje si przegld typw acuchowych. Dodatkowe informacje mona
znale w podrozdziale 4.4. Wymogi dotyczce pamici potrzebnej do przechowywa-
nia danych w kolumnach zostay podane w podrozdziale 4.5.
W niektrych przypadkach MySQL moe zmieni kolumn typu acuchowego na typ,
ktry bdzie si rni od zadeklarowanego w instrukcji CRlATl TAB|l lub A|TlR TAB|l.
Wicej informacji na ten temat znajduje si w podpunkcie 6.2.5.2.
Od wersji 4.1 w MySQL pojawia si zmiana, ktra wpywa na wiele typw kolumn typu
acuchowego. Definicja kolumn typu znakowego moe zawiera atrybut CHARACTlR
SlT, ktry okrela zestaw znakw i opcjonalnie porzdek sortowania. Dotyczy to typw
CHAR, VARCHAR, rnych typw TlXT oraz lNUM i SlT, na przykad:
CRF/TF T/B|F !
FNUMYCTVQ
YCTVQ|
1 lub 2 bajty w zalenoci od liczby wartoci wyliczenia
(maksymalnie 65 535)
SFTYCTVQ
YCTVQ|
1, 2, 3, 4 lub 8 bajtw w zalenoci od liczby elementw zestawu
(maksymalnie 64)
Typy VARCHAR, B|OB i TlXT maj zmienn dugo. Dla kadego ilo pamici potrzeb-
nej do przechowania wartoci bdzie zalee od faktycznej dugoci wartoci kolumny
(reprezentowanej w ostatniej tabeli przez .), a nie od maksymalnego moliwego roz-
miaru danego typu. Kolumna VARCHAR`0) na przykad moe przechowywa acuch
o maksymalnej dugoci 10 znakw. Faktyczna ilo wymaganej pamici to dugo
acucha (.) plus 1 bajt do zapisania dugoci acucha. Dla acucha `.|cc` parametr
. jest rwny 4, a wymagany rozmiar pamici to 5 bajtw.
Typy B|OB i TlXT wymagaj 1, 2, 3 lub 4 bajtw do zapisu dugoci wartoci kolumny
w zalenoci od maksymalnej moliwej dugoci tego typu (patrz punkt 4.4.2).
Rozmiar obiektu lNUM jest ustalany na podstawie liczby rnych wartoci wyliczenia.
Przy wyliczeniach do 255 moliwych wartoci uywany jest jeden bajt, a przy wyli-
czeniach do 65 535 wartoci uywane s 2 bajty (patrz punkt 4.4.3).
Rozmiar obiektu SlT jest okrelany przez liczb rnych elementw zestawu. Jeli ze-
staw ma rozmiar 0, obiekt zajmuje 0/).8 bajtw, ktr to warto zaokrgla si do
1, 2, 3, 4 lub 8 bajtw. Obiekt SlT moe mie do 64 elementw (patrz punkt 4.4.4).
4.6. Wybieranie odpowiedniego typu
dla kolumny
Aby jak najbardziej wydajnie korzysta z pamici, naley we wszystkich przypadkach
stara si stosowa typ, ktry bdzie jak najbardziej dokadny. Jeli na przykad w kolum-
nie liczb cakowitych bd przechowywane wartoci z zakresu od ` do 99999, najlep-
szym wyborem bdzie typ MlD1UM1NT UNS1ONlD. Ze wszystkich typw, ktre reprezentuj
wszystkie wymagane wartoci, zajmuje najmniej pamici.
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych 153
Powszechnym problemem jest dokadne przedstawianie wartoci walutowych. W MySQL
naley do tego uywa typu DlC1MA|, za pomoc ktrego wartoci zapisywane s w for-
mie acucha. Dziki temu nie traci si na dokadnoci (mimo to obliczenia z wartociami
DlC1MA| mog by wci wykonywane przy uyciu operacji dziaajcych na liczbach
z podwjn precyzj). Jeli dokadno nie jest zbyt wana, by moe wystarczajco
dobrym typem bdzie DOUB|l.
Aby uzyska wiksz dokadno, mona zawsze przeksztaci warto na typ stao-
przecinkowy, przechowywany w B1O1NT. Pozwoli to wykonywa wszystkie obliczenia
na liczbach cakowitych i tylko w razie potrzeby przeksztaca wynik z powrotem na
wartoci zmiennoprzecinkowe.
4.7. Wykorzystywanie typw kolumn
z innych mechanizmw baz danych
Aby uatwi uytkownikowi zastosowanie kodu pochodzcego od innych producentw,
moliwe jest odwzorowanie typw kolumn w sposb przedstawiony w poniszej tabeli.
Odwzorowania te upraszczaj operacj importu do MySQL definicji tabel z innych
mechanizmw baz danych:
Typ innych producentw Typ MySQL
BTN/RY/| C'/R/| BTN/RY
C'/R V/RYTN/| V/RC'/R/|
F|J/T4 F|J/T
F|J/T8 OJUB|F
TNT1 TTNYTNT
TNT SM/||TNT
TNT: MFOTUMTNT
TNT4 TNT
TNT8 BTTNT
|JN V/RBTN/RY MFOTUMB|JB
|JN V/RC'/R MFOTUMTFXT
|JN MFOTUMTFXT oc M,SJ| 410|
MTOO|FTNT MFOTUMTNT
V/RBTN/RY/| C'/R/| BTN/RY
Odwzorowanie typw kolumn jest wykonywane podczas tworzenia tabeli, po czym
oryginalne deklaracje typu zostaj usunite. Jeli uytkownik utworzy tabel z typami
stosowanymi przez innych producentw, po czym wyda polecenie DlSCR1Bl PC\YCA
VCDGNK, zostanie przedstawiona struktura tabeli z odpowiadajcymi im typami MySQL.
4 Spis treci
1.8.5. Rozbienoci midzy MySQL a standardem SQL ........................................ 60
1.8.6. Jak MySQL radzi sobie z ograniczeniami ................................................. 67
1.8.7. Znane bdy i projektowe braki w MySQL................................................ 69
Rozdzia 2. Struktura jzyka .............................................................................. 77
2.1. Literay................................................................................................................... 77
2.1.1. acuchy ................................................................................................... 77
2.1.2. Liczby........................................................................................................ 80
2.1.3. Wartoci szesnastkowe .............................................................................. 80
2.1.4. Wartoci logiczne ...................................................................................... 81
2.1.5. Wartoci NULL......................................................................................... 81
2.2. Nazwy baz danych, tabel, indeksw, kolumn i aliasw......................................... 81
2.2.1. Kwalifikatory identyfikatorw .................................................................. 83
2.2.2. Znaczenie wielkoci liter w nazwach identyfikatorw.............................. 83
2.3. Zmienne definiowane przez uytkownika.............................................................. 85
2.4. Zmienne systemowe............................................................................................... 87
2.4.1. Strukturalne zmienne systemowe .............................................................. 89
2.5. Skadnia komentarza .............................................................................................. 91
2.6. Traktowanie sw zastrzeonych w MySQL.......................................................... 92
Rozdzia 3. Obsuga zestaww znakw............................................................... 95
3.1. Oglne informacje o zestawach znakw i sortowaniu ........................................... 95
3.2. Zestawy znakw i porzdki sortowania w MySQL................................................ 96
3.3. Okrelanie domylnego zestawu znakw i sortowania........................................... 98
3.3.1. Zestaw znakw i sortowanie dla serwera................................................... 98
3.3.2. Zestaw znakw i sortowanie dla bazy danych........................................... 99
3.3.3. Zestaw znakw i sortowanie dla tabeli .................................................... 100
3.3.4. Zestaw znakw i sortowanie dla kolumny............................................... 100
3.3.5. Przykady przypisywania zestawu znakw i sortowania ......................... 101
3.3.6. Zestawy znakw i sortowanie dla poczenia .......................................... 102
3.3.7. Zestaw znakw i sortowanie dla acucha znakw.................................. 104
3.3.8. Wykorzystywanie COLLATE w instrukcjach SQL.................................... 105
3.3.9. Priorytet klauzuli COLLATE .................................................................. 106
3.3.10. Operator BINARY................................................................................... 106
3.3.11. Niektre przypadki specjalne, w ktrych trudno okreli sortowanie...... 106
3.3.12. Sortowania musz by odpowiednie dla danego zestawu znakw........... 107
3.3.13. Przykad wpywu porzdku sortowania ................................................... 108
3.4. Operacje, na ktre ma wpyw obsuga zestaww znakw.................................... 109
3.4.1. acuchy wyjciowe ............................................................................... 109
3.4.2. CONVERT()............................................................................................ 110
3.4.3. CAST() .................................................................................................... 110
3.4.4. Instrukcje SHOW .................................................................................... 111
3.5. Obsuga Unicode.................................................................................................. 112
3.6. UTF8 dla metadanych.......................................................................................... 113
3.7. Kompatybilno z innymi systemami zarzdzania baz danych .......................... 115
3.8. Nowy format pliku konfiguracji zestawu znakw................................................ 115
3.9. Narodowe zestawy znakw.................................................................................. 115
3.10. Aktualizacja zestaww znakw z MySQL 4.0..................................................... 116
3.10.1. Zestawy znakw w wersji 4.0 i odpowiadajce im w wersji 4.1 pary
skadajce si z zestawu znakw i sortowania......................................... 117
3.10.2. Przeksztacanie kolumn znakowych wersji 4.0 na format 4.1 ................. 118
3.11. Zestawy znakw i sortowania obsugiwane przez MySQL.................................. 118
3.11.1. Zestawy znakw standardu Unicode ....................................................... 119
3.11.2. Zestawy znakw zachodnioeuropejskich................................................. 120
3.11.3. Zestawy znakw dla Europy Centralnej .................................................. 121
Spis treci 5
3.11.4. Zestawy znakw poudniowoeuropejskich i rodkowowschodnich......... 122
3.11.5. Zestawy znakw regionu batyckiego...................................................... 123
3.11.6. Zestawy znakw dla cyrylicy................................................................... 123
3.11.7. Azjatyckie zestawy znakw..................................................................... 124
Rozdzia 4. Typy kolumn.................................................................................. 125
4.1. Przegld typw dla kolumny................................................................................ 126
4.1.1. Omwienie typw liczbowych ................................................................ 126
4.1.2. Przegld typw zwizanych z dat i czasem............................................ 129
4.1.3. Przegld typw acuchowych ................................................................ 130
4.2. Typy liczbowe...................................................................................................... 132
4.3. Typy zwizane z dat i czasem............................................................................ 135
4.3.1. Typy DATETIME, DATE i TIMESTAMP............................................. 137
4.3.2. Typ TIME................................................................................................ 142
4.3.3. Typ YEAR............................................................................................... 143
4.3.4. Problem roku 2000 a typy zwizane z dat.............................................. 144
4.4. Typy acuchowe ................................................................................................. 144
4.4.1. Typy CHAR i VARCHAR...................................................................... 144
4.4.2. Typy BLOB i TEXT................................................................................ 146
4.4.3. Typ Enum................................................................................................ 147
4.4.4. Typ SET .................................................................................................. 149
4.5. Rozmiar pamici potrzebnej dla typw kolumn................................................... 151
4.6. Wybieranie odpowiedniego typu dla kolumny..................................................... 152
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych ............... 153
Rozdzia 5. Funkcje i operatory........................................................................ 155
5.1. Operatory ............................................................................................................. 156
5.1.1. Nawiasy................................................................................................... 156
5.1.2. Operatory porwnania ............................................................................. 156
5.1.3. Operatory logiczne .................................................................................. 161
5.1.4. Operatory rozrniania wielkoci liter..................................................... 163
5.2. Funkcje kontroli przepywu ................................................................................. 163
5.3. Funkcje acuchowe............................................................................................. 166
5.3.1. Funkcje porwnywania acuchw.......................................................... 176
5.4. Funkcje liczbowe ................................................................................................. 178
5.4.1. Operatory arytmetyczne........................................................................... 178
5.4.2. Funkcje matematyczne ............................................................................ 180
5.5. Funkcje daty i godziny......................................................................................... 186
5.6. Funkcje obsugi wyszukiwania penotekstowego................................................. 202
5.6.1. Boolowskie wyszukiwania penotekstowe............................................... 205
5.6.2. Wyszukiwania penotekstowe z rozwijaniem zapytania .......................... 207
5.6.3. Ograniczenia dla wyszukiwania penotekstowego................................... 208
5.6.4. Modyfikowanie wyszukiwania penotekstowego MySQL ...................... 209
5.6.5. Lista rzeczy do zrobienia dla wyszukiwania penotekstowego................ 211
5.7. Funkcje konwersji typw..................................................................................... 211
5.8. Inne funkcje ......................................................................................................... 214
5.8.1. Funkcje bitowe ........................................................................................ 214
5.8.2. Funkcje szyfrujce................................................................................... 215
5.8.3. Funkcje informacyjne .............................................................................. 219
5.8.4. Funkcje rne .......................................................................................... 223
5.9. Funkcje i modyfikatory do zastosowania z klauzulami GROUP BY................... 226
5.9.1. Funkcje GROUP BY (agregujce)........................................................... 226
5.9.2. Modyfikatory GROUP BY...................................................................... 229
5.9.3. GROUP BY z ukrytymi polami............................................................... 232
6 Spis treci
Rozdzia 6. Skadnia instrukcji SQL .................................................................. 235
6.1. Instrukcje operujce na danych............................................................................ 235
6.1.1. Skadnia instrukcji DELETE................................................................... 235
6.1.2. Skadnia instrukcji DO ............................................................................ 238
6.1.3. Skadnia instrukcji HANDLER............................................................... 238
6.1.4. Skadnia instrukcji INSERT .................................................................... 240
6.1.5. Skadnia instrukcji LOAD DATA INFILE.............................................. 246
6.1.6. Skadnia instrukcji REPLACE................................................................. 255
6.1.7. Skadnia instrukcji SELECT.................................................................... 256
6.1.8. Skadnia podzapyta................................................................................ 265
6.1.9. Skadnia instrukcji TRUNCATE............................................................. 276
6.1.10. Skadnia instrukcji UPDATE................................................................... 276
6.2. Instrukcje definiowania danych ........................................................................... 278
6.2.1. Skadnia instrukcji ALTER DATABASE ............................................... 278
6.2.2. Skadnia instrukcji ALTER TABLE........................................................ 279
6.2.3. Skadnia instrukcji CREATE DATABASE............................................. 285
6.2.4. Skadnia instrukcji CREATE INDEX ..................................................... 285
6.2.5. Skadnia instrukcji CREATE TABLE..................................................... 287
6.2.6. Skadnia instrukcji DROP DATABASE.................................................. 301
6.2.7. Skadnia instrukcji DROP INDEX.......................................................... 302
6.2.8. Skadnia instrukcji DROP TABLE.......................................................... 302
6.2.9. Skadnia instrukcji RENAME TABLE.................................................... 303
6.3. Instrukcje programu MySQL............................................................................... 304
6.3.1. Skadnia instrukcji DESCRIBE
(odczytywanie informacji na temat kolumn) ........................................... 304
6.3.2. Skadnia instrukcji USE........................................................................... 304
6.4. Instrukcje obsugi transakcji i blokowania........................................................... 305
6.4.1. Skadnia instrukcji START TRANSACTION, COMMIT
oraz ROLLBACK.................................................................................... 305
6.4.2. Instrukcje niemoliwe do wycofania ....................................................... 306
6.4.3. Instrukcje wykonujce niejawne zatwierdzenie......................................... 306
6.4.4. Skadnia instrukcji SAVEPOINT i ROLLBACK TO SAVEPOINT....... 307
6.4.5. Skadnia instrukcji LOCK TABLES oraz UNLOCK TABLES .............. 307
6.4.6. Skadnia instrukcji SET TRANSACTION.............................................. 310
6.5. Administracja baz danych .................................................................................. 311
6.5.1. Instrukcje zarzdzajce kontami uytkownikw ....................................... 311
6.5.2. Instrukcje do konserwacji tabel ............................................................... 319
6.5.3. Skadnia instrukcji SET i SHOW ............................................................ 326
6.5.4. Inne instrukcje administracyjne ............................................................... 347
6.6. Instrukcje replikacji.............................................................................................. 352
6.6.1. Instrukcje SQL sterujce serwerem gwnym ......................................... 352
6.6.2. Instrukcje SQL sterujce serwerami podrzdnymi .................................. 354
Rozdzia 7. Rozszerzenia przestrzenne w MySQL............................................... 365
7.1. Wstp ................................................................................................................... 365
7.2. Model geometryczny OpenGIS............................................................................ 366
7.2.1. Hierarchia klas geometrycznych.............................................................. 366
7.2.2. Klasa Geometry ....................................................................................... 368
7.2.3. Klasa Point .............................................................................................. 369
7.2.4. Klasa Curve ............................................................................................. 369
7.2.5. Klasa LineString...................................................................................... 370
7.2.6. Klasa Surface........................................................................................... 370
7.2.7. Klasa Polygon.......................................................................................... 370
7.2.8. Klasa GeometryCollection....................................................................... 371
Spis treci 7
7.2.9. Klasa MultiPoint...................................................................................... 371
7.2.10. Klasa MultiCurve .................................................................................... 372
7.2.11. Klasa MultiLineString............................................................................. 372
7.2.12. Klasa MultiSurface .................................................................................. 372
7.2.13. Klasa MultiPolygon................................................................................. 373
7.3. Obsugiwane formaty danych przestrzennych...................................................... 373
7.3.1. Format tekstowy WKT............................................................................ 374
7.3.2. Format binarny WKB.............................................................................. 374
7.4. Tworzenie bazy danych z rozszerzeniami przestrzennymi................................... 375
7.4.1. Typy danych przestrzennych w MySQL ................................................. 375
7.4.2. Tworzenie wartoci przestrzennych......................................................... 376
7.4.3. Tworzenie kolumn przestrzennych.......................................................... 379
7.4.4. Wypenianie kolumn przestrzennych....................................................... 379
7.4.5. Pobieranie danych przestrzennych........................................................... 381
7.5. Analiza informacji przestrzennych....................................................................... 381
7.5.1. Funkcje konwersji formatw geometrycznych ........................................ 382
7.5.2. Funkcje klasy Geometry.......................................................................... 382
7.5.3. Funkcje tworzce nowe geometrie na podstawie istniejcych................. 388
7.5.4. Funkcje testujce relacje przestrzenne
midzy obiektami geometrycznymi ......................................................... 389
7.5.5. Relacje midzy minimalnymi prostoktami otaczajcymi
dla poszczeglnych geometrii.................................................................. 390
7.5.6. Funkcje sprawdzajce relacje przestrzenne pomidzy geometriami ........ 391
7.6. Optymalizacja analizy przestrzennej.................................................................... 392
7.6.1. Tworzenie indeksw przestrzennych....................................................... 392
7.6.2. Wykorzystanie indeksu przestrzennego................................................... 393
7.7. Zgodno MySQL ze standardem........................................................................ 395
7.7.1. Niezaimplementowane funkcje GIS ........................................................ 395
Rozdzia 8. Procedury i funkcje skadowane ..................................................... 397
8.1. Skadnia procedur skadowanych......................................................................... 398
8.1.1. Utrzymanie procedur skadowanych........................................................ 398
8.1.2. SHOW PROCEDURE STATUS oraz SHOW FUNCTION STATUS.... 401
8.1.3. Instrukcja CALL...................................................................................... 402
8.1.4. Instrukcja zoona BEGIN ... END.......................................................... 402
8.1.5. Instrukcja DECLARE.............................................................................. 402
8.1.6. Zmienne w procedurach skadowanych................................................... 402
8.1.7. Warunki i podprogramy obsugi .............................................................. 403
8.1.8. Kursory.................................................................................................... 405
8.1.9. Konstrukcje sterowania przepywem sterowania..................................... 406
Rozdzia 9. Obsuga bdw w MySQL .............................................................. 409
9.1. Zwracane bdy.................................................................................................... 409
9.2. Komunikaty bdw............................................................................................. 419
Dodatek A Rozwizywanie problemw z zapytaniami ........................................435
A.1. Zagadnienia zwizane z zapytaniami ................................................................... 435
A.1.1. Wielko liter przy wyszukiwaniu........................................................... 435
A.1.2. Problemy z kolumnami typu DATE ........................................................ 436
A.1.3. Problemy z wartociami NULL............................................................... 437
A.1.4. Problemy z synonimami kolumn ............................................................. 438
A.1.5. Bd wycofania dla tabel nietransakcyjnych............................................ 439
A.1.6. Usuwanie wierszy ze zwizanych tabel ................................................... 439
A.1.7. Rozwizywanie problemw z brakujcymi wierszami ............................ 440
A.1.8. Problemy z porwnaniami zmiennoprzecinkowymi................................ 441
8 Spis treci
A.2. Problemy zwizane z optymalizatorem................................................................ 443
A.3. Problemy z definicj tabel.................................................................................... 444
A.3.1. Problemy z instrukcj ALTER TABLE................................................... 444
A.3.2. Jak zmieni porzdek kolumn w tabeli .................................................... 445
A.3.3. Problemy z tabelami tymczasowymi ....................................................... 445
Dodatek B Wyraenia regularne w MySQL........................................................ 447
Skorowidz...................................................................................... 451
Rozdzia 4.
Typy kolumn
W MySQL dostpnych jest wiele typw danych, ktre mona pogrupowa w kilku pod-
stawowych kategoriach, takich jak typy liczbowe, typy zwizane z dat i czasem oraz
typy acuchowe. Na pocztku tego rozdziau przedstawiony zostanie przegld wspo-
mnianych przed chwil typw kolumn, po czym nastpi bardziej szczegowy opis ich
waciwoci z podziaem na poszczeglne kategorie i wreszcie zamieszczone zostanie
podsumowanie informacji dotyczcych wymaga co do rozmiaru pamici potrzebnej
do przechowania danej kolumny. Sam przegld jest z zamierzenia krtki. Dodatkowe
informacje o poszczeglnych typach kolumn, na przykad dopuszczalny format, w kt-
rym mona deklarowa wartoci, zostay uwzgldnione w szczegowych omwieniach.
Od wersji 4.1 MySQL rozpoznaje rozszerzenia do obsugi danych przestrzennych.
Informacje o typach przestrzennych znajduj si w rozdziale 7. tego podrcznika.
W czci opisu typw kolumn zastosowane zostay nastpujce reguy:
/
Wskazuje maksymalny rozmiar wywietlania liczby lub acucha.
Maksymalnym dopuszczalnym rozmiarem wywietlania jest 255.
&
Dotyczy typw zmiennoprzecinkowych i staoprzecinkowych. Okrela liczb
cyfr po kropce dziesitnej. Maksymalna dopuszczalna warto wynosi 30,
ale nie powinna przekracza /.
Nawiasy kwadratowe ( ) identyfikuj opcjonalne fragmenty deklaracji typu.
126 Rozdzia 4. Typy kolumn
4.1. Przegld typw dla kolumny
4.1.1. Omwienie typw liczbowych
Poniej znajduje si przegld liczbowych typw dla kolumn. Bardziej szczegowe
informacje mona znale w podrozdziale 4.2. Wymogi dotyczce rozmiaru pamici
potrzebnej do przechowywania kolumn znajduj si w podrozdziale 4.5.
Jeli dla kolumny liczbowej zostanie okrelony atrybut /lRO|1||, MySQL automatycznie
doda do kolumny atrybut UN1S1ONlD.
Naley uwaa podczas odejmowania dwch wartoci liczbowych, z ktrych jedna ma
typ UN1S1ONlD. Uzyskany wynik bdzie rwnie tego typu! patrz podrozdzia 5.7.
T1NY1NT/) UNS1ONlD /lRO|1||
Bardzo maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od `8
do `/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do bb.
B1T, BOO|, BOO|lAN
To s synonimy T1NY1NT`). Synonim BOO|lAN zosta dodany w MySQL 4.1.0.
Warto zerowa to inaczej fasz. Wartoci niezerowe traktowane s jako prawda.
W przyszoci wprowadzona zostanie pena, zgodna ze standardem SQL
obsuga typu boolowskiego.
SMA||1NT/) UNS1ONlD /lRO|1||
Maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od o/68
do o/6/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do 6bbob.
MlD1UM1NT/) UNS1ONlD /lRO|1||
rednia liczba cakowita. Dla liczb ze znakiem zakres wynosi od 8o88608
do 8o8860/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0
do `6///`b.
1NT/) UNS1ONlD /lRO|1||
Standardowa liczba cakowita. Dla liczb ze znakiem zakres wynosi
od `4/48o648 do `4/48o64/. W przypadku liczb bez znaku zakres
obejmuje wartoci od 0 do 49496/9b.
1NTlOlR/) UNS1ONlD /lRO|1||
Jest to synonim dla typu 1NT.
B1O1NT/) UNS1ONlD /lRO|1||
Dua liczba cakowita. Dla liczb ze znakiem zakres wynosi
od 9oo/0o68b4//b808 do 9oo/0o68b4//b80/. W przypadku liczb
bez znaku zakres obejmuje wartoci od 0 do `8446/440/o/09bb`6`b.
4.1. Przegld typw dla kolumny 127
Oto kilka spraw, o ktrych naley wiedzie odnonie kolumn typu B1O1NT:
Wszystkie obliczenia wykonywane s przy uyciu wartoci typu B1O1NT
lub DOUB|l ze znakiem. Oznacza to, e duych liczb cakowitych bez
znaku, wikszych ni 9oo/0o68b4//b80/ (63 bity), mona uywa tylko
z funkcjami bitowymi! Niezastosowanie si do tej zasady moe doprowadzi
do uzyskania w wyniku liczby, ktrej kilka ostatnich cyfr jest bdnych
z powodu bdw w zaokrglaniu podczas konwersji wartoci B1O1NT
na DOUB|l.
MySQL 4.0 potrafi obsugiwa B1O1NT w nastpujcych przypadkach:
Podczas wykorzystywania liczb cakowitych do przechowywania
duych wartoci bez znaku w kolumnie typu B1O1NT.
W M1NPC\YCAMQN) lub MAXPC\YCAMQN), gdzie PC\YCAMQN odnosi si
do kolumny B1O1NT.
Podczas korzystania z operatorw (midzy innymi , , *), gdy oba
argumenty s liczbami cakowitymi.
Zawsze istnieje moliwo zapisania w kolumnie B1O1NT dokadnej wartoci
liczby cakowitej. Wystarczy zapisa j przy uyciu acucha. W takim
przypadku zostanie dokonana konwersja acucha na liczb; konwersja
nie bdzie wymaga poredniego etapu przeksztacajcego liczb na jej
odpowiednik o podwjnej precyzji.
Podczas korzystania z operatorw , i * stosowana jest arytmetyka
B1O1NT, jeli oba argumenty maj warto liczby cakowitej! To oznacza,
e pomnoenie dwch duych liczb cakowitych (lub wynikw funkcji,
ktra zwraca liczby cakowite) moe spowodowa nieoczekiwane
rezultaty, jeli wynik przekroczy liczb 9oo/0o68b4//b80/.
||OATR) UNS1ONlD /lRO|1||
Liczba zmiennoprzecinkowa. Parametr R oznacza precyzj i moe przyjmowa
warto od 0 do 14 dla liczb zmiennoprzecinkowych o dokadnoci do jednego
znaku i od 25 do 53 dla liczb zmiennoprzecinkowych o dokadnoci do dwch
znakw. To przypomina opisane poniej typy ||OAT i DOUB|l. Typ ||OATR)
ma ten sam zakres, jaki posiadaj odpowiadajce mu typy ||OAT i DOUB|l,
ale w jego przypadku niezdefiniowany jest maksymalny rozmiar wywietlania
i liczba miejsc po przecinku.
Od wersji 3.23 MySQL jest to prawdziwa warto zmiennoprzecinkowa.
W wersjach wczeniejszych liczba typu ||OATR) bya zawsze liczb o dwch
miejscach po przecinku.
Ta skadnia zostaa dodana w celu zachowania zgodnoci ze standardem ODBC.
Stosowanie typu ||OAT moe spowodowa wystpienie pewnych
nieoczekiwanych problemw, poniewa wszystkie obliczenia w MySQL
s wykonywane z podwjn precyzj patrz punkt A.1.7).
||OAT/, &) UNS1ONlD /lRO|1||
128 Rozdzia 4. Typy kolumn
Maa liczba zmiennoprzecinkowa (o dokadnoci do jednego znaku). Liczba
ta moe przyj wartoci: od o408o466lo8 do ``/b494ob`lo8, 0,
i od ``/b494ob`lo8 do o408o466lo8. Jeli podany jest atrybut UN1S1ONlD,
niedozwolone s wartoci ujemne. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ ||OAT bez argumentw
lub typ ||OATR) (gdzie Rjest liczb z zakresu od 0 do 24) oznacza liczb
zmiennoprzecinkow o pojedynczej precyzji.
DOUB|l/, &) UNS1ONlD /lRO|1||
Standardowa liczba zmiennoprzecinkowa (o dokadnoci do dwch
znakw). Liczba ta moe przyj wartoci: od `/9/69o`o486o`b/lo08
do b0/o8b8b0/0`4lo08, 0, i od b0/o8b8b0/0`4lo08
do `/9/69o`o486o`b/lo08. Jeli podany jest atrybut UN1S1ONlD, wartoci
ujemne s niedozwolone. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ DOUB|l
bez argumentw lub ||OATR) (gdzie R jest liczb z zakresu od 25 do 53)
oznacza liczb zmiennoprzecinkow o podwjnej precyzji.
DOUB|l PRlC1S1ON/, &) UNS1ONlD /lRO|1||
RlA|/, &) UNS1ONlD /lRO|1||
S to synonimy DOUB|l. Wyjtek: Jeli dla parametru s;_cce serwera
wczono opcj RlA|_AS_||OAT, synonimem ||OAT jest RlA|, a nie DOUB|l.
DlC1MA|/, &) UNS1ONlD /lRO|1||
Niezapakowana liczba staoprzecinkowa. Zachowanie kolumny tego typu
przypomina kolumn typu CHAR. Niezapakowana oznacza, e liczba jest
przechowywana w postaci acucha przy uyciu jednego znaku na kad cyfr
wartoci. Parametr / definiuje maksymaln liczb cyfr, a & liczb miejsc
po przecinku. W parametrze / nie s brane pod uwag: kropka dziesitna
(odpowiadajca w naszej notacji przecinkowi) i (dla liczb ujemnych) znak ,
cho jest dla nich zarezerwowane miejsce. Wartoci nie maj miejsc
po przecinku lub czci uamkowych, jeli & jest rwne 0. Maksymalny zakres
wartoci typu DlC1MA| jest taki sam, jak dla typu DOUB|l, ale rzeczywisty zakres
danej kolumny DlC1MA| moe by ograniczony przez wybr argumentw / i &.
Jeli podany jest atrybut UN1S1ONlD, wartoci ujemne s niedozwolone.
W przypadku braku argumentu &, domyln wartoci jest 0. Jeli pominity
jest parametr /, domyln wartoci jest 10.
W wersjach poprzedzajcych MySQL 3.23 argument / musi by wystarczajco
duy, by zawiera obszar potrzebny dla znaku i kropki dziesitnej.
DlC/,&) UNS1ONlD /lRO|1||
NUMlR1C/,&) UNS1ONlD /lRO|1||
|1XlD/, &) UNS1ONlD /lRO|1||
S to synonimy typu DlC1MA|.
W MySQL 4.1.0 dodano synonim |1XlD w celu osignicia kompatybilnoci
z innymi serwerami.
4.1. Przegld typw dla kolumny 129
4.1.2. Przegld typw zwizanych z dat i czasem
Poniej znajduje si podsumowanie typw kolumn przeznaczonych dla czasu i daty.
Dodatkowe informacje na ten temat mona znale w podrozdziale 4.3. Wymogi do-
tyczce pamici potrzebnej do przechowywania danych w kolumnach zostay podane
w podrozdziale 4.5.
DATl
Data. Obsugiwany zakres obejmuje daty od ``0000`0`` do `9999`o``.
W MySQL wartoci DATl wywietlane s w formacie `RRRRMMDD`, ale mona
przypisywa wartoci do kolumn DATl przy uyciu acuchw lub liczb.
DATlT1Ml
Kombinacja daty i czasu. Obsugiwany zakres obejmuje wartoci
od ``0000`0` 000000` do `9999`o` ob9b9`. W MySQL wartoci
DATlT1Ml wywietlane s w formacie `RRRRMMDD OOMMSS`, ale mona
przypisywa wartoci do kolumn DATlT1Ml przy uyciu acuchw lub liczb.
T1MlSTAMP/)
Znacznik czasu. Obsugiwany zakres rozpoczyna si od daty ``9/00`0``
i siga roku 0o/.
Kolumna typu T1MlSTAMP przydaje si do rejestracji daty i godziny operacji
wstawiania lub aktualizacji. Pierwszej kolumnie T1MlSTAMP w tabeli
automatycznie przypisywana jest data i czas ostatniej operacji, jeli tylko tych
wartoci nie wprowadzi rcznie uytkownik. Dowolnej kolumnie T1MlSTAMP
mona rwnie przypisa biec dat i godzin, wpisujc do niej warto NU||.
Od MySQL 4.1 wartoci T1MlSTAMP s zwracane w postaci acuchw
w formacie `RRRRMMDD OOMMSS`. Aby uzyska warto w postaci liczby,
naley doda do kolumn tego typu 0. Inne szerokoci wywietlania
znacznika czasu nie s obsugiwane.
W wersjach poprzedzajcych MySQL 4.1 wartoci T1MlSTAMP s wywietlane
w formacie RRRRMMDDOOMMSS, RRMMDDOOMMSS, RRRRMMDD lub RRMMDD w zalenoci
od tego, czy parametr / jest rwny 14 (albo go brak), 12, 8 lub 6. Mona jednak
przypisywa wartoci do kolumn T1MlSTAMP przy uyciu acuchw lub liczb.
Argument / wpywa tylko na sposb wywietlania kolumny T1MlSTAMP, a nie
na jej przechowywanie. Wartoci kolumny s zawsze zapisywane w czterech
bajtach. W MySQL od wersji 4.0.12 pojawia si opcja ne., dziki ktrej
mona zmieni dziaanie serwera, upodabniajc je do MySQL 4.1.
Naley odnotowa, e kolumny T1MlSTAMP/), gdzie /jest rwne 8 lub 14,
s traktowane jako liczby, natomiast reszta kolumn T1MlSTAMP/) jest
traktowana jako acuchy. Jest to rodzaj gwarancji, e uytkownik bdzie
mg wiarygodnie usuwa i przywraca tabele tego typu.
T1Ml
Godzina. Obsugiwany zakres obejmuje wartoci od `8o8b9b9`
do ` 8o8b9b9`. W MySQL wartoci T1Ml wywietlane s w formacie
` OOMMSS`, ale mona przypisa wartoci do kolumn T1Ml przy uyciu
zarwno acuchw, jak i liczb.
130 Rozdzia 4. Typy kolumn
YlAR|4)
Rok w formacie dwu- lub czterocyfrowym. Domylnym formatem jest rok
zapisany za pomoc czterech cyfr. W tym formacie dostpne wartoci nale
do przedziau od `90` do `bb oraz 0. W formacie dwucyfrowym wartoci
dopuszczalne to liczby z zakresu od /0 do 69, ktre reprezentuj daty od roku
1970 do 2069. W MySQL wartoci YlAR wywietlane s w formacie RRRR,
ale mona przypisa wartoci do kolumn YlAR przy uyciu tak acuchw,
jak i liczb. Typ YlAR jest niedostpny dla wersji wczeniejszych ni MySQL 3.22.
4.1.3. Przegld typw acuchowych
Poniej znajduje si przegld typw acuchowych. Dodatkowe informacje mona
znale w podrozdziale 4.4. Wymogi dotyczce pamici potrzebnej do przechowywa-
nia danych w kolumnach zostay podane w podrozdziale 4.5.
W niektrych przypadkach MySQL moe zmieni kolumn typu acuchowego na typ,
ktry bdzie si rni od zadeklarowanego w instrukcji CRlATl TAB|l lub A|TlR TAB|l.
Wicej informacji na ten temat znajduje si w podpunkcie 6.2.5.2.
Od wersji 4.1 w MySQL pojawia si zmiana, ktra wpywa na wiele typw kolumn typu
acuchowego. Definicja kolumn typu znakowego moe zawiera atrybut CHARACTlR
SlT, ktry okrela zestaw znakw i opcjonalnie porzdek sortowania. Dotyczy to typw
CHAR, VARCHAR, rnych typw TlXT oraz lNUM i SlT, na przykad:
CRF/TF T/B|F !
FNUMYCTVQ
YCTVQ|
1 lub 2 bajty w zalenoci od liczby wartoci wyliczenia
(maksymalnie 65 535)
SFTYCTVQ
YCTVQ|
1, 2, 3, 4 lub 8 bajtw w zalenoci od liczby elementw zestawu
(maksymalnie 64)
Typy VARCHAR, B|OB i TlXT maj zmienn dugo. Dla kadego ilo pamici potrzeb-
nej do przechowania wartoci bdzie zalee od faktycznej dugoci wartoci kolumny
(reprezentowanej w ostatniej tabeli przez .), a nie od maksymalnego moliwego roz-
miaru danego typu. Kolumna VARCHAR`0) na przykad moe przechowywa acuch
o maksymalnej dugoci 10 znakw. Faktyczna ilo wymaganej pamici to dugo
acucha (.) plus 1 bajt do zapisania dugoci acucha. Dla acucha `.|cc` parametr
. jest rwny 4, a wymagany rozmiar pamici to 5 bajtw.
Typy B|OB i TlXT wymagaj 1, 2, 3 lub 4 bajtw do zapisu dugoci wartoci kolumny
w zalenoci od maksymalnej moliwej dugoci tego typu (patrz punkt 4.4.2).
Rozmiar obiektu lNUM jest ustalany na podstawie liczby rnych wartoci wyliczenia.
Przy wyliczeniach do 255 moliwych wartoci uywany jest jeden bajt, a przy wyli-
czeniach do 65 535 wartoci uywane s 2 bajty (patrz punkt 4.4.3).
Rozmiar obiektu SlT jest okrelany przez liczb rnych elementw zestawu. Jeli ze-
staw ma rozmiar 0, obiekt zajmuje 0/).8 bajtw, ktr to warto zaokrgla si do
1, 2, 3, 4 lub 8 bajtw. Obiekt SlT moe mie do 64 elementw (patrz punkt 4.4.4).
4.6. Wybieranie odpowiedniego typu
dla kolumny
Aby jak najbardziej wydajnie korzysta z pamici, naley we wszystkich przypadkach
stara si stosowa typ, ktry bdzie jak najbardziej dokadny. Jeli na przykad w kolum-
nie liczb cakowitych bd przechowywane wartoci z zakresu od ` do 99999, najlep-
szym wyborem bdzie typ MlD1UM1NT UNS1ONlD. Ze wszystkich typw, ktre reprezentuj
wszystkie wymagane wartoci, zajmuje najmniej pamici.
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych 153
Powszechnym problemem jest dokadne przedstawianie wartoci walutowych. W MySQL
naley do tego uywa typu DlC1MA|, za pomoc ktrego wartoci zapisywane s w for-
mie acucha. Dziki temu nie traci si na dokadnoci (mimo to obliczenia z wartociami
DlC1MA| mog by wci wykonywane przy uyciu operacji dziaajcych na liczbach
z podwjn precyzj). Jeli dokadno nie jest zbyt wana, by moe wystarczajco
dobrym typem bdzie DOUB|l.
Aby uzyska wiksz dokadno, mona zawsze przeksztaci warto na typ stao-
przecinkowy, przechowywany w B1O1NT. Pozwoli to wykonywa wszystkie obliczenia
na liczbach cakowitych i tylko w razie potrzeby przeksztaca wynik z powrotem na
wartoci zmiennoprzecinkowe.
4.7. Wykorzystywanie typw kolumn
z innych mechanizmw baz danych
Aby uatwi uytkownikowi zastosowanie kodu pochodzcego od innych producentw,
moliwe jest odwzorowanie typw kolumn w sposb przedstawiony w poniszej tabeli.
Odwzorowania te upraszczaj operacj importu do MySQL definicji tabel z innych
mechanizmw baz danych:
Typ innych producentw Typ MySQL
BTN/RY/| C'/R/| BTN/RY
C'/R V/RYTN/| V/RC'/R/|
F|J/T4 F|J/T
F|J/T8 OJUB|F
TNT1 TTNYTNT
TNT SM/||TNT
TNT: MFOTUMTNT
TNT4 TNT
TNT8 BTTNT
|JN V/RBTN/RY MFOTUMB|JB
|JN V/RC'/R MFOTUMTFXT
|JN MFOTUMTFXT oc M,SJ| 410|
MTOO|FTNT MFOTUMTNT
V/RBTN/RY/| C'/R/| BTN/RY
Odwzorowanie typw kolumn jest wykonywane podczas tworzenia tabeli, po czym
oryginalne deklaracje typu zostaj usunite. Jeli uytkownik utworzy tabel z typami
stosowanymi przez innych producentw, po czym wyda polecenie DlSCR1Bl PC\YCA
VCDGNK, zostanie przedstawiona struktura tabeli z odpowiadajcymi im typami MySQL.
4 Spis treci
1.8.5. Rozbienoci midzy MySQL a standardem SQL ........................................ 60
1.8.6. Jak MySQL radzi sobie z ograniczeniami ................................................. 67
1.8.7. Znane bdy i projektowe braki w MySQL................................................ 69
Rozdzia 2. Struktura jzyka .............................................................................. 77
2.1. Literay................................................................................................................... 77
2.1.1. acuchy ................................................................................................... 77
2.1.2. Liczby........................................................................................................ 80
2.1.3. Wartoci szesnastkowe .............................................................................. 80
2.1.4. Wartoci logiczne ...................................................................................... 81
2.1.5. Wartoci NULL......................................................................................... 81
2.2. Nazwy baz danych, tabel, indeksw, kolumn i aliasw......................................... 81
2.2.1. Kwalifikatory identyfikatorw .................................................................. 83
2.2.2. Znaczenie wielkoci liter w nazwach identyfikatorw.............................. 83
2.3. Zmienne definiowane przez uytkownika.............................................................. 85
2.4. Zmienne systemowe............................................................................................... 87
2.4.1. Strukturalne zmienne systemowe .............................................................. 89
2.5. Skadnia komentarza .............................................................................................. 91
2.6. Traktowanie sw zastrzeonych w MySQL.......................................................... 92
Rozdzia 3. Obsuga zestaww znakw............................................................... 95
3.1. Oglne informacje o zestawach znakw i sortowaniu ........................................... 95
3.2. Zestawy znakw i porzdki sortowania w MySQL................................................ 96
3.3. Okrelanie domylnego zestawu znakw i sortowania........................................... 98
3.3.1. Zestaw znakw i sortowanie dla serwera................................................... 98
3.3.2. Zestaw znakw i sortowanie dla bazy danych........................................... 99
3.3.3. Zestaw znakw i sortowanie dla tabeli .................................................... 100
3.3.4. Zestaw znakw i sortowanie dla kolumny............................................... 100
3.3.5. Przykady przypisywania zestawu znakw i sortowania ......................... 101
3.3.6. Zestawy znakw i sortowanie dla poczenia .......................................... 102
3.3.7. Zestaw znakw i sortowanie dla acucha znakw.................................. 104
3.3.8. Wykorzystywanie COLLATE w instrukcjach SQL.................................... 105
3.3.9. Priorytet klauzuli COLLATE .................................................................. 106
3.3.10. Operator BINARY................................................................................... 106
3.3.11. Niektre przypadki specjalne, w ktrych trudno okreli sortowanie...... 106
3.3.12. Sortowania musz by odpowiednie dla danego zestawu znakw........... 107
3.3.13. Przykad wpywu porzdku sortowania ................................................... 108
3.4. Operacje, na ktre ma wpyw obsuga zestaww znakw.................................... 109
3.4.1. acuchy wyjciowe ............................................................................... 109
3.4.2. CONVERT()............................................................................................ 110
3.4.3. CAST() .................................................................................................... 110
3.4.4. Instrukcje SHOW .................................................................................... 111
3.5. Obsuga Unicode.................................................................................................. 112
3.6. UTF8 dla metadanych.......................................................................................... 113
3.7. Kompatybilno z innymi systemami zarzdzania baz danych .......................... 115
3.8. Nowy format pliku konfiguracji zestawu znakw................................................ 115
3.9. Narodowe zestawy znakw.................................................................................. 115
3.10. Aktualizacja zestaww znakw z MySQL 4.0..................................................... 116
3.10.1. Zestawy znakw w wersji 4.0 i odpowiadajce im w wersji 4.1 pary
skadajce si z zestawu znakw i sortowania......................................... 117
3.10.2. Przeksztacanie kolumn znakowych wersji 4.0 na format 4.1 ................. 118
3.11. Zestawy znakw i sortowania obsugiwane przez MySQL.................................. 118
3.11.1. Zestawy znakw standardu Unicode ....................................................... 119
3.11.2. Zestawy znakw zachodnioeuropejskich................................................. 120
3.11.3. Zestawy znakw dla Europy Centralnej .................................................. 121
Spis treci 5
3.11.4. Zestawy znakw poudniowoeuropejskich i rodkowowschodnich......... 122
3.11.5. Zestawy znakw regionu batyckiego...................................................... 123
3.11.6. Zestawy znakw dla cyrylicy................................................................... 123
3.11.7. Azjatyckie zestawy znakw..................................................................... 124
Rozdzia 4. Typy kolumn.................................................................................. 125
4.1. Przegld typw dla kolumny................................................................................ 126
4.1.1. Omwienie typw liczbowych ................................................................ 126
4.1.2. Przegld typw zwizanych z dat i czasem............................................ 129
4.1.3. Przegld typw acuchowych ................................................................ 130
4.2. Typy liczbowe...................................................................................................... 132
4.3. Typy zwizane z dat i czasem............................................................................ 135
4.3.1. Typy DATETIME, DATE i TIMESTAMP............................................. 137
4.3.2. Typ TIME................................................................................................ 142
4.3.3. Typ YEAR............................................................................................... 143
4.3.4. Problem roku 2000 a typy zwizane z dat.............................................. 144
4.4. Typy acuchowe ................................................................................................. 144
4.4.1. Typy CHAR i VARCHAR...................................................................... 144
4.4.2. Typy BLOB i TEXT................................................................................ 146
4.4.3. Typ Enum................................................................................................ 147
4.4.4. Typ SET .................................................................................................. 149
4.5. Rozmiar pamici potrzebnej dla typw kolumn................................................... 151
4.6. Wybieranie odpowiedniego typu dla kolumny..................................................... 152
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych ............... 153
Rozdzia 5. Funkcje i operatory........................................................................ 155
5.1. Operatory ............................................................................................................. 156
5.1.1. Nawiasy................................................................................................... 156
5.1.2. Operatory porwnania ............................................................................. 156
5.1.3. Operatory logiczne .................................................................................. 161
5.1.4. Operatory rozrniania wielkoci liter..................................................... 163
5.2. Funkcje kontroli przepywu ................................................................................. 163
5.3. Funkcje acuchowe............................................................................................. 166
5.3.1. Funkcje porwnywania acuchw.......................................................... 176
5.4. Funkcje liczbowe ................................................................................................. 178
5.4.1. Operatory arytmetyczne........................................................................... 178
5.4.2. Funkcje matematyczne ............................................................................ 180
5.5. Funkcje daty i godziny......................................................................................... 186
5.6. Funkcje obsugi wyszukiwania penotekstowego................................................. 202
5.6.1. Boolowskie wyszukiwania penotekstowe............................................... 205
5.6.2. Wyszukiwania penotekstowe z rozwijaniem zapytania .......................... 207
5.6.3. Ograniczenia dla wyszukiwania penotekstowego................................... 208
5.6.4. Modyfikowanie wyszukiwania penotekstowego MySQL ...................... 209
5.6.5. Lista rzeczy do zrobienia dla wyszukiwania penotekstowego................ 211
5.7. Funkcje konwersji typw..................................................................................... 211
5.8. Inne funkcje ......................................................................................................... 214
5.8.1. Funkcje bitowe ........................................................................................ 214
5.8.2. Funkcje szyfrujce................................................................................... 215
5.8.3. Funkcje informacyjne .............................................................................. 219
5.8.4. Funkcje rne .......................................................................................... 223
5.9. Funkcje i modyfikatory do zastosowania z klauzulami GROUP BY................... 226
5.9.1. Funkcje GROUP BY (agregujce)........................................................... 226
5.9.2. Modyfikatory GROUP BY...................................................................... 229
5.9.3. GROUP BY z ukrytymi polami............................................................... 232
6 Spis treci
Rozdzia 6. Skadnia instrukcji SQL .................................................................. 235
6.1. Instrukcje operujce na danych............................................................................ 235
6.1.1. Skadnia instrukcji DELETE................................................................... 235
6.1.2. Skadnia instrukcji DO ............................................................................ 238
6.1.3. Skadnia instrukcji HANDLER............................................................... 238
6.1.4. Skadnia instrukcji INSERT .................................................................... 240
6.1.5. Skadnia instrukcji LOAD DATA INFILE.............................................. 246
6.1.6. Skadnia instrukcji REPLACE................................................................. 255
6.1.7. Skadnia instrukcji SELECT.................................................................... 256
6.1.8. Skadnia podzapyta................................................................................ 265
6.1.9. Skadnia instrukcji TRUNCATE............................................................. 276
6.1.10. Skadnia instrukcji UPDATE................................................................... 276
6.2. Instrukcje definiowania danych ........................................................................... 278
6.2.1. Skadnia instrukcji ALTER DATABASE ............................................... 278
6.2.2. Skadnia instrukcji ALTER TABLE........................................................ 279
6.2.3. Skadnia instrukcji CREATE DATABASE............................................. 285
6.2.4. Skadnia instrukcji CREATE INDEX ..................................................... 285
6.2.5. Skadnia instrukcji CREATE TABLE..................................................... 287
6.2.6. Skadnia instrukcji DROP DATABASE.................................................. 301
6.2.7. Skadnia instrukcji DROP INDEX.......................................................... 302
6.2.8. Skadnia instrukcji DROP TABLE.......................................................... 302
6.2.9. Skadnia instrukcji RENAME TABLE.................................................... 303
6.3. Instrukcje programu MySQL............................................................................... 304
6.3.1. Skadnia instrukcji DESCRIBE
(odczytywanie informacji na temat kolumn) ........................................... 304
6.3.2. Skadnia instrukcji USE........................................................................... 304
6.4. Instrukcje obsugi transakcji i blokowania........................................................... 305
6.4.1. Skadnia instrukcji START TRANSACTION, COMMIT
oraz ROLLBACK.................................................................................... 305
6.4.2. Instrukcje niemoliwe do wycofania ....................................................... 306
6.4.3. Instrukcje wykonujce niejawne zatwierdzenie......................................... 306
6.4.4. Skadnia instrukcji SAVEPOINT i ROLLBACK TO SAVEPOINT....... 307
6.4.5. Skadnia instrukcji LOCK TABLES oraz UNLOCK TABLES .............. 307
6.4.6. Skadnia instrukcji SET TRANSACTION.............................................. 310
6.5. Administracja baz danych .................................................................................. 311
6.5.1. Instrukcje zarzdzajce kontami uytkownikw ....................................... 311
6.5.2. Instrukcje do konserwacji tabel ............................................................... 319
6.5.3. Skadnia instrukcji SET i SHOW ............................................................ 326
6.5.4. Inne instrukcje administracyjne ............................................................... 347
6.6. Instrukcje replikacji.............................................................................................. 352
6.6.1. Instrukcje SQL sterujce serwerem gwnym ......................................... 352
6.6.2. Instrukcje SQL sterujce serwerami podrzdnymi .................................. 354
Rozdzia 7. Rozszerzenia przestrzenne w MySQL............................................... 365
7.1. Wstp ................................................................................................................... 365
7.2. Model geometryczny OpenGIS............................................................................ 366
7.2.1. Hierarchia klas geometrycznych.............................................................. 366
7.2.2. Klasa Geometry ....................................................................................... 368
7.2.3. Klasa Point .............................................................................................. 369
7.2.4. Klasa Curve ............................................................................................. 369
7.2.5. Klasa LineString...................................................................................... 370
7.2.6. Klasa Surface........................................................................................... 370
7.2.7. Klasa Polygon.......................................................................................... 370
7.2.8. Klasa GeometryCollection....................................................................... 371
Spis treci 7
7.2.9. Klasa MultiPoint...................................................................................... 371
7.2.10. Klasa MultiCurve .................................................................................... 372
7.2.11. Klasa MultiLineString............................................................................. 372
7.2.12. Klasa MultiSurface .................................................................................. 372
7.2.13. Klasa MultiPolygon................................................................................. 373
7.3. Obsugiwane formaty danych przestrzennych...................................................... 373
7.3.1. Format tekstowy WKT............................................................................ 374
7.3.2. Format binarny WKB.............................................................................. 374
7.4. Tworzenie bazy danych z rozszerzeniami przestrzennymi................................... 375
7.4.1. Typy danych przestrzennych w MySQL ................................................. 375
7.4.2. Tworzenie wartoci przestrzennych......................................................... 376
7.4.3. Tworzenie kolumn przestrzennych.......................................................... 379
7.4.4. Wypenianie kolumn przestrzennych....................................................... 379
7.4.5. Pobieranie danych przestrzennych........................................................... 381
7.5. Analiza informacji przestrzennych....................................................................... 381
7.5.1. Funkcje konwersji formatw geometrycznych ........................................ 382
7.5.2. Funkcje klasy Geometry.......................................................................... 382
7.5.3. Funkcje tworzce nowe geometrie na podstawie istniejcych................. 388
7.5.4. Funkcje testujce relacje przestrzenne
midzy obiektami geometrycznymi ......................................................... 389
7.5.5. Relacje midzy minimalnymi prostoktami otaczajcymi
dla poszczeglnych geometrii.................................................................. 390
7.5.6. Funkcje sprawdzajce relacje przestrzenne pomidzy geometriami ........ 391
7.6. Optymalizacja analizy przestrzennej.................................................................... 392
7.6.1. Tworzenie indeksw przestrzennych....................................................... 392
7.6.2. Wykorzystanie indeksu przestrzennego................................................... 393
7.7. Zgodno MySQL ze standardem........................................................................ 395
7.7.1. Niezaimplementowane funkcje GIS ........................................................ 395
Rozdzia 8. Procedury i funkcje skadowane ..................................................... 397
8.1. Skadnia procedur skadowanych......................................................................... 398
8.1.1. Utrzymanie procedur skadowanych........................................................ 398
8.1.2. SHOW PROCEDURE STATUS oraz SHOW FUNCTION STATUS.... 401
8.1.3. Instrukcja CALL...................................................................................... 402
8.1.4. Instrukcja zoona BEGIN ... END.......................................................... 402
8.1.5. Instrukcja DECLARE.............................................................................. 402
8.1.6. Zmienne w procedurach skadowanych................................................... 402
8.1.7. Warunki i podprogramy obsugi .............................................................. 403
8.1.8. Kursory.................................................................................................... 405
8.1.9. Konstrukcje sterowania przepywem sterowania..................................... 406
Rozdzia 9. Obsuga bdw w MySQL .............................................................. 409
9.1. Zwracane bdy.................................................................................................... 409
9.2. Komunikaty bdw............................................................................................. 419
Dodatek A Rozwizywanie problemw z zapytaniami ........................................435
A.1. Zagadnienia zwizane z zapytaniami ................................................................... 435
A.1.1. Wielko liter przy wyszukiwaniu........................................................... 435
A.1.2. Problemy z kolumnami typu DATE ........................................................ 436
A.1.3. Problemy z wartociami NULL............................................................... 437
A.1.4. Problemy z synonimami kolumn ............................................................. 438
A.1.5. Bd wycofania dla tabel nietransakcyjnych............................................ 439
A.1.6. Usuwanie wierszy ze zwizanych tabel ................................................... 439
A.1.7. Rozwizywanie problemw z brakujcymi wierszami ............................ 440
A.1.8. Problemy z porwnaniami zmiennoprzecinkowymi................................ 441
8 Spis treci
A.2. Problemy zwizane z optymalizatorem................................................................ 443
A.3. Problemy z definicj tabel.................................................................................... 444
A.3.1. Problemy z instrukcj ALTER TABLE................................................... 444
A.3.2. Jak zmieni porzdek kolumn w tabeli .................................................... 445
A.3.3. Problemy z tabelami tymczasowymi ....................................................... 445
Dodatek B Wyraenia regularne w MySQL........................................................ 447
Skorowidz...................................................................................... 451
Rozdzia 4.
Typy kolumn
W MySQL dostpnych jest wiele typw danych, ktre mona pogrupowa w kilku pod-
stawowych kategoriach, takich jak typy liczbowe, typy zwizane z dat i czasem oraz
typy acuchowe. Na pocztku tego rozdziau przedstawiony zostanie przegld wspo-
mnianych przed chwil typw kolumn, po czym nastpi bardziej szczegowy opis ich
waciwoci z podziaem na poszczeglne kategorie i wreszcie zamieszczone zostanie
podsumowanie informacji dotyczcych wymaga co do rozmiaru pamici potrzebnej
do przechowania danej kolumny. Sam przegld jest z zamierzenia krtki. Dodatkowe
informacje o poszczeglnych typach kolumn, na przykad dopuszczalny format, w kt-
rym mona deklarowa wartoci, zostay uwzgldnione w szczegowych omwieniach.
Od wersji 4.1 MySQL rozpoznaje rozszerzenia do obsugi danych przestrzennych.
Informacje o typach przestrzennych znajduj si w rozdziale 7. tego podrcznika.
W czci opisu typw kolumn zastosowane zostay nastpujce reguy:
/
Wskazuje maksymalny rozmiar wywietlania liczby lub acucha.
Maksymalnym dopuszczalnym rozmiarem wywietlania jest 255.
&
Dotyczy typw zmiennoprzecinkowych i staoprzecinkowych. Okrela liczb
cyfr po kropce dziesitnej. Maksymalna dopuszczalna warto wynosi 30,
ale nie powinna przekracza /.
Nawiasy kwadratowe ( ) identyfikuj opcjonalne fragmenty deklaracji typu.
126 Rozdzia 4. Typy kolumn
4.1. Przegld typw dla kolumny
4.1.1. Omwienie typw liczbowych
Poniej znajduje si przegld liczbowych typw dla kolumn. Bardziej szczegowe
informacje mona znale w podrozdziale 4.2. Wymogi dotyczce rozmiaru pamici
potrzebnej do przechowywania kolumn znajduj si w podrozdziale 4.5.
Jeli dla kolumny liczbowej zostanie okrelony atrybut /lRO|1||, MySQL automatycznie
doda do kolumny atrybut UN1S1ONlD.
Naley uwaa podczas odejmowania dwch wartoci liczbowych, z ktrych jedna ma
typ UN1S1ONlD. Uzyskany wynik bdzie rwnie tego typu! patrz podrozdzia 5.7.
T1NY1NT/) UNS1ONlD /lRO|1||
Bardzo maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od `8
do `/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do bb.
B1T, BOO|, BOO|lAN
To s synonimy T1NY1NT`). Synonim BOO|lAN zosta dodany w MySQL 4.1.0.
Warto zerowa to inaczej fasz. Wartoci niezerowe traktowane s jako prawda.
W przyszoci wprowadzona zostanie pena, zgodna ze standardem SQL
obsuga typu boolowskiego.
SMA||1NT/) UNS1ONlD /lRO|1||
Maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od o/68
do o/6/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do 6bbob.
MlD1UM1NT/) UNS1ONlD /lRO|1||
rednia liczba cakowita. Dla liczb ze znakiem zakres wynosi od 8o88608
do 8o8860/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0
do `6///`b.
1NT/) UNS1ONlD /lRO|1||
Standardowa liczba cakowita. Dla liczb ze znakiem zakres wynosi
od `4/48o648 do `4/48o64/. W przypadku liczb bez znaku zakres
obejmuje wartoci od 0 do 49496/9b.
1NTlOlR/) UNS1ONlD /lRO|1||
Jest to synonim dla typu 1NT.
B1O1NT/) UNS1ONlD /lRO|1||
Dua liczba cakowita. Dla liczb ze znakiem zakres wynosi
od 9oo/0o68b4//b808 do 9oo/0o68b4//b80/. W przypadku liczb
bez znaku zakres obejmuje wartoci od 0 do `8446/440/o/09bb`6`b.
4.1. Przegld typw dla kolumny 127
Oto kilka spraw, o ktrych naley wiedzie odnonie kolumn typu B1O1NT:
Wszystkie obliczenia wykonywane s przy uyciu wartoci typu B1O1NT
lub DOUB|l ze znakiem. Oznacza to, e duych liczb cakowitych bez
znaku, wikszych ni 9oo/0o68b4//b80/ (63 bity), mona uywa tylko
z funkcjami bitowymi! Niezastosowanie si do tej zasady moe doprowadzi
do uzyskania w wyniku liczby, ktrej kilka ostatnich cyfr jest bdnych
z powodu bdw w zaokrglaniu podczas konwersji wartoci B1O1NT
na DOUB|l.
MySQL 4.0 potrafi obsugiwa B1O1NT w nastpujcych przypadkach:
Podczas wykorzystywania liczb cakowitych do przechowywania
duych wartoci bez znaku w kolumnie typu B1O1NT.
W M1NPC\YCAMQN) lub MAXPC\YCAMQN), gdzie PC\YCAMQN odnosi si
do kolumny B1O1NT.
Podczas korzystania z operatorw (midzy innymi , , *), gdy oba
argumenty s liczbami cakowitymi.
Zawsze istnieje moliwo zapisania w kolumnie B1O1NT dokadnej wartoci
liczby cakowitej. Wystarczy zapisa j przy uyciu acucha. W takim
przypadku zostanie dokonana konwersja acucha na liczb; konwersja
nie bdzie wymaga poredniego etapu przeksztacajcego liczb na jej
odpowiednik o podwjnej precyzji.
Podczas korzystania z operatorw , i * stosowana jest arytmetyka
B1O1NT, jeli oba argumenty maj warto liczby cakowitej! To oznacza,
e pomnoenie dwch duych liczb cakowitych (lub wynikw funkcji,
ktra zwraca liczby cakowite) moe spowodowa nieoczekiwane
rezultaty, jeli wynik przekroczy liczb 9oo/0o68b4//b80/.
||OATR) UNS1ONlD /lRO|1||
Liczba zmiennoprzecinkowa. Parametr R oznacza precyzj i moe przyjmowa
warto od 0 do 14 dla liczb zmiennoprzecinkowych o dokadnoci do jednego
znaku i od 25 do 53 dla liczb zmiennoprzecinkowych o dokadnoci do dwch
znakw. To przypomina opisane poniej typy ||OAT i DOUB|l. Typ ||OATR)
ma ten sam zakres, jaki posiadaj odpowiadajce mu typy ||OAT i DOUB|l,
ale w jego przypadku niezdefiniowany jest maksymalny rozmiar wywietlania
i liczba miejsc po przecinku.
Od wersji 3.23 MySQL jest to prawdziwa warto zmiennoprzecinkowa.
W wersjach wczeniejszych liczba typu ||OATR) bya zawsze liczb o dwch
miejscach po przecinku.
Ta skadnia zostaa dodana w celu zachowania zgodnoci ze standardem ODBC.
Stosowanie typu ||OAT moe spowodowa wystpienie pewnych
nieoczekiwanych problemw, poniewa wszystkie obliczenia w MySQL
s wykonywane z podwjn precyzj patrz punkt A.1.7).
||OAT/, &) UNS1ONlD /lRO|1||
128 Rozdzia 4. Typy kolumn
Maa liczba zmiennoprzecinkowa (o dokadnoci do jednego znaku). Liczba
ta moe przyj wartoci: od o408o466lo8 do ``/b494ob`lo8, 0,
i od ``/b494ob`lo8 do o408o466lo8. Jeli podany jest atrybut UN1S1ONlD,
niedozwolone s wartoci ujemne. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ ||OAT bez argumentw
lub typ ||OATR) (gdzie Rjest liczb z zakresu od 0 do 24) oznacza liczb
zmiennoprzecinkow o pojedynczej precyzji.
DOUB|l/, &) UNS1ONlD /lRO|1||
Standardowa liczba zmiennoprzecinkowa (o dokadnoci do dwch
znakw). Liczba ta moe przyj wartoci: od `/9/69o`o486o`b/lo08
do b0/o8b8b0/0`4lo08, 0, i od b0/o8b8b0/0`4lo08
do `/9/69o`o486o`b/lo08. Jeli podany jest atrybut UN1S1ONlD, wartoci
ujemne s niedozwolone. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ DOUB|l
bez argumentw lub ||OATR) (gdzie R jest liczb z zakresu od 25 do 53)
oznacza liczb zmiennoprzecinkow o podwjnej precyzji.
DOUB|l PRlC1S1ON/, &) UNS1ONlD /lRO|1||
RlA|/, &) UNS1ONlD /lRO|1||
S to synonimy DOUB|l. Wyjtek: Jeli dla parametru s;_cce serwera
wczono opcj RlA|_AS_||OAT, synonimem ||OAT jest RlA|, a nie DOUB|l.
DlC1MA|/, &) UNS1ONlD /lRO|1||
Niezapakowana liczba staoprzecinkowa. Zachowanie kolumny tego typu
przypomina kolumn typu CHAR. Niezapakowana oznacza, e liczba jest
przechowywana w postaci acucha przy uyciu jednego znaku na kad cyfr
wartoci. Parametr / definiuje maksymaln liczb cyfr, a & liczb miejsc
po przecinku. W parametrze / nie s brane pod uwag: kropka dziesitna
(odpowiadajca w naszej notacji przecinkowi) i (dla liczb ujemnych) znak ,
cho jest dla nich zarezerwowane miejsce. Wartoci nie maj miejsc
po przecinku lub czci uamkowych, jeli & jest rwne 0. Maksymalny zakres
wartoci typu DlC1MA| jest taki sam, jak dla typu DOUB|l, ale rzeczywisty zakres
danej kolumny DlC1MA| moe by ograniczony przez wybr argumentw / i &.
Jeli podany jest atrybut UN1S1ONlD, wartoci ujemne s niedozwolone.
W przypadku braku argumentu &, domyln wartoci jest 0. Jeli pominity
jest parametr /, domyln wartoci jest 10.
W wersjach poprzedzajcych MySQL 3.23 argument / musi by wystarczajco
duy, by zawiera obszar potrzebny dla znaku i kropki dziesitnej.
DlC/,&) UNS1ONlD /lRO|1||
NUMlR1C/,&) UNS1ONlD /lRO|1||
|1XlD/, &) UNS1ONlD /lRO|1||
S to synonimy typu DlC1MA|.
W MySQL 4.1.0 dodano synonim |1XlD w celu osignicia kompatybilnoci
z innymi serwerami.
4.1. Przegld typw dla kolumny 129
4.1.2. Przegld typw zwizanych z dat i czasem
Poniej znajduje si podsumowanie typw kolumn przeznaczonych dla czasu i daty.
Dodatkowe informacje na ten temat mona znale w podrozdziale 4.3. Wymogi do-
tyczce pamici potrzebnej do przechowywania danych w kolumnach zostay podane
w podrozdziale 4.5.
DATl
Data. Obsugiwany zakres obejmuje daty od ``0000`0`` do `9999`o``.
W MySQL wartoci DATl wywietlane s w formacie `RRRRMMDD`, ale mona
przypisywa wartoci do kolumn DATl przy uyciu acuchw lub liczb.
DATlT1Ml
Kombinacja daty i czasu. Obsugiwany zakres obejmuje wartoci
od ``0000`0` 000000` do `9999`o` ob9b9`. W MySQL wartoci
DATlT1Ml wywietlane s w formacie `RRRRMMDD OOMMSS`, ale mona
przypisywa wartoci do kolumn DATlT1Ml przy uyciu acuchw lub liczb.
T1MlSTAMP/)
Znacznik czasu. Obsugiwany zakres rozpoczyna si od daty ``9/00`0``
i siga roku 0o/.
Kolumna typu T1MlSTAMP przydaje si do rejestracji daty i godziny operacji
wstawiania lub aktualizacji. Pierwszej kolumnie T1MlSTAMP w tabeli
automatycznie przypisywana jest data i czas ostatniej operacji, jeli tylko tych
wartoci nie wprowadzi rcznie uytkownik. Dowolnej kolumnie T1MlSTAMP
mona rwnie przypisa biec dat i godzin, wpisujc do niej warto NU||.
Od MySQL 4.1 wartoci T1MlSTAMP s zwracane w postaci acuchw
w formacie `RRRRMMDD OOMMSS`. Aby uzyska warto w postaci liczby,
naley doda do kolumn tego typu 0. Inne szerokoci wywietlania
znacznika czasu nie s obsugiwane.
W wersjach poprzedzajcych MySQL 4.1 wartoci T1MlSTAMP s wywietlane
w formacie RRRRMMDDOOMMSS, RRMMDDOOMMSS, RRRRMMDD lub RRMMDD w zalenoci
od tego, czy parametr / jest rwny 14 (albo go brak), 12, 8 lub 6. Mona jednak
przypisywa wartoci do kolumn T1MlSTAMP przy uyciu acuchw lub liczb.
Argument / wpywa tylko na sposb wywietlania kolumny T1MlSTAMP, a nie
na jej przechowywanie. Wartoci kolumny s zawsze zapisywane w czterech
bajtach. W MySQL od wersji 4.0.12 pojawia si opcja ne., dziki ktrej
mona zmieni dziaanie serwera, upodabniajc je do MySQL 4.1.
Naley odnotowa, e kolumny T1MlSTAMP/), gdzie /jest rwne 8 lub 14,
s traktowane jako liczby, natomiast reszta kolumn T1MlSTAMP/) jest
traktowana jako acuchy. Jest to rodzaj gwarancji, e uytkownik bdzie
mg wiarygodnie usuwa i przywraca tabele tego typu.
T1Ml
Godzina. Obsugiwany zakres obejmuje wartoci od `8o8b9b9`
do ` 8o8b9b9`. W MySQL wartoci T1Ml wywietlane s w formacie
` OOMMSS`, ale mona przypisa wartoci do kolumn T1Ml przy uyciu
zarwno acuchw, jak i liczb.
130 Rozdzia 4. Typy kolumn
YlAR|4)
Rok w formacie dwu- lub czterocyfrowym. Domylnym formatem jest rok
zapisany za pomoc czterech cyfr. W tym formacie dostpne wartoci nale
do przedziau od `90` do `bb oraz 0. W formacie dwucyfrowym wartoci
dopuszczalne to liczby z zakresu od /0 do 69, ktre reprezentuj daty od roku
1970 do 2069. W MySQL wartoci YlAR wywietlane s w formacie RRRR,
ale mona przypisa wartoci do kolumn YlAR przy uyciu tak acuchw,
jak i liczb. Typ YlAR jest niedostpny dla wersji wczeniejszych ni MySQL 3.22.
4.1.3. Przegld typw acuchowych
Poniej znajduje si przegld typw acuchowych. Dodatkowe informacje mona
znale w podrozdziale 4.4. Wymogi dotyczce pamici potrzebnej do przechowywa-
nia danych w kolumnach zostay podane w podrozdziale 4.5.
W niektrych przypadkach MySQL moe zmieni kolumn typu acuchowego na typ,
ktry bdzie si rni od zadeklarowanego w instrukcji CRlATl TAB|l lub A|TlR TAB|l.
Wicej informacji na ten temat znajduje si w podpunkcie 6.2.5.2.
Od wersji 4.1 w MySQL pojawia si zmiana, ktra wpywa na wiele typw kolumn typu
acuchowego. Definicja kolumn typu znakowego moe zawiera atrybut CHARACTlR
SlT, ktry okrela zestaw znakw i opcjonalnie porzdek sortowania. Dotyczy to typw
CHAR, VARCHAR, rnych typw TlXT oraz lNUM i SlT, na przykad:
CRF/TF T/B|F !
FNUMYCTVQ
YCTVQ|
1 lub 2 bajty w zalenoci od liczby wartoci wyliczenia
(maksymalnie 65 535)
SFTYCTVQ
YCTVQ|
1, 2, 3, 4 lub 8 bajtw w zalenoci od liczby elementw zestawu
(maksymalnie 64)
Typy VARCHAR, B|OB i TlXT maj zmienn dugo. Dla kadego ilo pamici potrzeb-
nej do przechowania wartoci bdzie zalee od faktycznej dugoci wartoci kolumny
(reprezentowanej w ostatniej tabeli przez .), a nie od maksymalnego moliwego roz-
miaru danego typu. Kolumna VARCHAR`0) na przykad moe przechowywa acuch
o maksymalnej dugoci 10 znakw. Faktyczna ilo wymaganej pamici to dugo
acucha (.) plus 1 bajt do zapisania dugoci acucha. Dla acucha `.|cc` parametr
. jest rwny 4, a wymagany rozmiar pamici to 5 bajtw.
Typy B|OB i TlXT wymagaj 1, 2, 3 lub 4 bajtw do zapisu dugoci wartoci kolumny
w zalenoci od maksymalnej moliwej dugoci tego typu (patrz punkt 4.4.2).
Rozmiar obiektu lNUM jest ustalany na podstawie liczby rnych wartoci wyliczenia.
Przy wyliczeniach do 255 moliwych wartoci uywany jest jeden bajt, a przy wyli-
czeniach do 65 535 wartoci uywane s 2 bajty (patrz punkt 4.4.3).
Rozmiar obiektu SlT jest okrelany przez liczb rnych elementw zestawu. Jeli ze-
staw ma rozmiar 0, obiekt zajmuje 0/).8 bajtw, ktr to warto zaokrgla si do
1, 2, 3, 4 lub 8 bajtw. Obiekt SlT moe mie do 64 elementw (patrz punkt 4.4.4).
4.6. Wybieranie odpowiedniego typu
dla kolumny
Aby jak najbardziej wydajnie korzysta z pamici, naley we wszystkich przypadkach
stara si stosowa typ, ktry bdzie jak najbardziej dokadny. Jeli na przykad w kolum-
nie liczb cakowitych bd przechowywane wartoci z zakresu od ` do 99999, najlep-
szym wyborem bdzie typ MlD1UM1NT UNS1ONlD. Ze wszystkich typw, ktre reprezentuj
wszystkie wymagane wartoci, zajmuje najmniej pamici.
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych 153
Powszechnym problemem jest dokadne przedstawianie wartoci walutowych. W MySQL
naley do tego uywa typu DlC1MA|, za pomoc ktrego wartoci zapisywane s w for-
mie acucha. Dziki temu nie traci si na dokadnoci (mimo to obliczenia z wartociami
DlC1MA| mog by wci wykonywane przy uyciu operacji dziaajcych na liczbach
z podwjn precyzj). Jeli dokadno nie jest zbyt wana, by moe wystarczajco
dobrym typem bdzie DOUB|l.
Aby uzyska wiksz dokadno, mona zawsze przeksztaci warto na typ stao-
przecinkowy, przechowywany w B1O1NT. Pozwoli to wykonywa wszystkie obliczenia
na liczbach cakowitych i tylko w razie potrzeby przeksztaca wynik z powrotem na
wartoci zmiennoprzecinkowe.
4.7. Wykorzystywanie typw kolumn
z innych mechanizmw baz danych
Aby uatwi uytkownikowi zastosowanie kodu pochodzcego od innych producentw,
moliwe jest odwzorowanie typw kolumn w sposb przedstawiony w poniszej tabeli.
Odwzorowania te upraszczaj operacj importu do MySQL definicji tabel z innych
mechanizmw baz danych:
Typ innych producentw Typ MySQL
BTN/RY/| C'/R/| BTN/RY
C'/R V/RYTN/| V/RC'/R/|
F|J/T4 F|J/T
F|J/T8 OJUB|F
TNT1 TTNYTNT
TNT SM/||TNT
TNT: MFOTUMTNT
TNT4 TNT
TNT8 BTTNT
|JN V/RBTN/RY MFOTUMB|JB
|JN V/RC'/R MFOTUMTFXT
|JN MFOTUMTFXT oc M,SJ| 410|
MTOO|FTNT MFOTUMTNT
V/RBTN/RY/| C'/R/| BTN/RY
Odwzorowanie typw kolumn jest wykonywane podczas tworzenia tabeli, po czym
oryginalne deklaracje typu zostaj usunite. Jeli uytkownik utworzy tabel z typami
stosowanymi przez innych producentw, po czym wyda polecenie DlSCR1Bl PC\YCA
VCDGNK, zostanie przedstawiona struktura tabeli z odpowiadajcymi im typami MySQL.
4 Spis treci
1.8.5. Rozbienoci midzy MySQL a standardem SQL ........................................ 60
1.8.6. Jak MySQL radzi sobie z ograniczeniami ................................................. 67
1.8.7. Znane bdy i projektowe braki w MySQL................................................ 69
Rozdzia 2. Struktura jzyka .............................................................................. 77
2.1. Literay................................................................................................................... 77
2.1.1. acuchy ................................................................................................... 77
2.1.2. Liczby........................................................................................................ 80
2.1.3. Wartoci szesnastkowe .............................................................................. 80
2.1.4. Wartoci logiczne ...................................................................................... 81
2.1.5. Wartoci NULL......................................................................................... 81
2.2. Nazwy baz danych, tabel, indeksw, kolumn i aliasw......................................... 81
2.2.1. Kwalifikatory identyfikatorw .................................................................. 83
2.2.2. Znaczenie wielkoci liter w nazwach identyfikatorw.............................. 83
2.3. Zmienne definiowane przez uytkownika.............................................................. 85
2.4. Zmienne systemowe............................................................................................... 87
2.4.1. Strukturalne zmienne systemowe .............................................................. 89
2.5. Skadnia komentarza .............................................................................................. 91
2.6. Traktowanie sw zastrzeonych w MySQL.......................................................... 92
Rozdzia 3. Obsuga zestaww znakw............................................................... 95
3.1. Oglne informacje o zestawach znakw i sortowaniu ........................................... 95
3.2. Zestawy znakw i porzdki sortowania w MySQL................................................ 96
3.3. Okrelanie domylnego zestawu znakw i sortowania........................................... 98
3.3.1. Zestaw znakw i sortowanie dla serwera................................................... 98
3.3.2. Zestaw znakw i sortowanie dla bazy danych........................................... 99
3.3.3. Zestaw znakw i sortowanie dla tabeli .................................................... 100
3.3.4. Zestaw znakw i sortowanie dla kolumny............................................... 100
3.3.5. Przykady przypisywania zestawu znakw i sortowania ......................... 101
3.3.6. Zestawy znakw i sortowanie dla poczenia .......................................... 102
3.3.7. Zestaw znakw i sortowanie dla acucha znakw.................................. 104
3.3.8. Wykorzystywanie COLLATE w instrukcjach SQL.................................... 105
3.3.9. Priorytet klauzuli COLLATE .................................................................. 106
3.3.10. Operator BINARY................................................................................... 106
3.3.11. Niektre przypadki specjalne, w ktrych trudno okreli sortowanie...... 106
3.3.12. Sortowania musz by odpowiednie dla danego zestawu znakw........... 107
3.3.13. Przykad wpywu porzdku sortowania ................................................... 108
3.4. Operacje, na ktre ma wpyw obsuga zestaww znakw.................................... 109
3.4.1. acuchy wyjciowe ............................................................................... 109
3.4.2. CONVERT()............................................................................................ 110
3.4.3. CAST() .................................................................................................... 110
3.4.4. Instrukcje SHOW .................................................................................... 111
3.5. Obsuga Unicode.................................................................................................. 112
3.6. UTF8 dla metadanych.......................................................................................... 113
3.7. Kompatybilno z innymi systemami zarzdzania baz danych .......................... 115
3.8. Nowy format pliku konfiguracji zestawu znakw................................................ 115
3.9. Narodowe zestawy znakw.................................................................................. 115
3.10. Aktualizacja zestaww znakw z MySQL 4.0..................................................... 116
3.10.1. Zestawy znakw w wersji 4.0 i odpowiadajce im w wersji 4.1 pary
skadajce si z zestawu znakw i sortowania......................................... 117
3.10.2. Przeksztacanie kolumn znakowych wersji 4.0 na format 4.1 ................. 118
3.11. Zestawy znakw i sortowania obsugiwane przez MySQL.................................. 118
3.11.1. Zestawy znakw standardu Unicode ....................................................... 119
3.11.2. Zestawy znakw zachodnioeuropejskich................................................. 120
3.11.3. Zestawy znakw dla Europy Centralnej .................................................. 121
Spis treci 5
3.11.4. Zestawy znakw poudniowoeuropejskich i rodkowowschodnich......... 122
3.11.5. Zestawy znakw regionu batyckiego...................................................... 123
3.11.6. Zestawy znakw dla cyrylicy................................................................... 123
3.11.7. Azjatyckie zestawy znakw..................................................................... 124
Rozdzia 4. Typy kolumn.................................................................................. 125
4.1. Przegld typw dla kolumny................................................................................ 126
4.1.1. Omwienie typw liczbowych ................................................................ 126
4.1.2. Przegld typw zwizanych z dat i czasem............................................ 129
4.1.3. Przegld typw acuchowych ................................................................ 130
4.2. Typy liczbowe...................................................................................................... 132
4.3. Typy zwizane z dat i czasem............................................................................ 135
4.3.1. Typy DATETIME, DATE i TIMESTAMP............................................. 137
4.3.2. Typ TIME................................................................................................ 142
4.3.3. Typ YEAR............................................................................................... 143
4.3.4. Problem roku 2000 a typy zwizane z dat.............................................. 144
4.4. Typy acuchowe ................................................................................................. 144
4.4.1. Typy CHAR i VARCHAR...................................................................... 144
4.4.2. Typy BLOB i TEXT................................................................................ 146
4.4.3. Typ Enum................................................................................................ 147
4.4.4. Typ SET .................................................................................................. 149
4.5. Rozmiar pamici potrzebnej dla typw kolumn................................................... 151
4.6. Wybieranie odpowiedniego typu dla kolumny..................................................... 152
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych ............... 153
Rozdzia 5. Funkcje i operatory........................................................................ 155
5.1. Operatory ............................................................................................................. 156
5.1.1. Nawiasy................................................................................................... 156
5.1.2. Operatory porwnania ............................................................................. 156
5.1.3. Operatory logiczne .................................................................................. 161
5.1.4. Operatory rozrniania wielkoci liter..................................................... 163
5.2. Funkcje kontroli przepywu ................................................................................. 163
5.3. Funkcje acuchowe............................................................................................. 166
5.3.1. Funkcje porwnywania acuchw.......................................................... 176
5.4. Funkcje liczbowe ................................................................................................. 178
5.4.1. Operatory arytmetyczne........................................................................... 178
5.4.2. Funkcje matematyczne ............................................................................ 180
5.5. Funkcje daty i godziny......................................................................................... 186
5.6. Funkcje obsugi wyszukiwania penotekstowego................................................. 202
5.6.1. Boolowskie wyszukiwania penotekstowe............................................... 205
5.6.2. Wyszukiwania penotekstowe z rozwijaniem zapytania .......................... 207
5.6.3. Ograniczenia dla wyszukiwania penotekstowego................................... 208
5.6.4. Modyfikowanie wyszukiwania penotekstowego MySQL ...................... 209
5.6.5. Lista rzeczy do zrobienia dla wyszukiwania penotekstowego................ 211
5.7. Funkcje konwersji typw..................................................................................... 211
5.8. Inne funkcje ......................................................................................................... 214
5.8.1. Funkcje bitowe ........................................................................................ 214
5.8.2. Funkcje szyfrujce................................................................................... 215
5.8.3. Funkcje informacyjne .............................................................................. 219
5.8.4. Funkcje rne .......................................................................................... 223
5.9. Funkcje i modyfikatory do zastosowania z klauzulami GROUP BY................... 226
5.9.1. Funkcje GROUP BY (agregujce)........................................................... 226
5.9.2. Modyfikatory GROUP BY...................................................................... 229
5.9.3. GROUP BY z ukrytymi polami............................................................... 232
6 Spis treci
Rozdzia 6. Skadnia instrukcji SQL .................................................................. 235
6.1. Instrukcje operujce na danych............................................................................ 235
6.1.1. Skadnia instrukcji DELETE................................................................... 235
6.1.2. Skadnia instrukcji DO ............................................................................ 238
6.1.3. Skadnia instrukcji HANDLER............................................................... 238
6.1.4. Skadnia instrukcji INSERT .................................................................... 240
6.1.5. Skadnia instrukcji LOAD DATA INFILE.............................................. 246
6.1.6. Skadnia instrukcji REPLACE................................................................. 255
6.1.7. Skadnia instrukcji SELECT.................................................................... 256
6.1.8. Skadnia podzapyta................................................................................ 265
6.1.9. Skadnia instrukcji TRUNCATE............................................................. 276
6.1.10. Skadnia instrukcji UPDATE................................................................... 276
6.2. Instrukcje definiowania danych ........................................................................... 278
6.2.1. Skadnia instrukcji ALTER DATABASE ............................................... 278
6.2.2. Skadnia instrukcji ALTER TABLE........................................................ 279
6.2.3. Skadnia instrukcji CREATE DATABASE............................................. 285
6.2.4. Skadnia instrukcji CREATE INDEX ..................................................... 285
6.2.5. Skadnia instrukcji CREATE TABLE..................................................... 287
6.2.6. Skadnia instrukcji DROP DATABASE.................................................. 301
6.2.7. Skadnia instrukcji DROP INDEX.......................................................... 302
6.2.8. Skadnia instrukcji DROP TABLE.......................................................... 302
6.2.9. Skadnia instrukcji RENAME TABLE.................................................... 303
6.3. Instrukcje programu MySQL............................................................................... 304
6.3.1. Skadnia instrukcji DESCRIBE
(odczytywanie informacji na temat kolumn) ........................................... 304
6.3.2. Skadnia instrukcji USE........................................................................... 304
6.4. Instrukcje obsugi transakcji i blokowania........................................................... 305
6.4.1. Skadnia instrukcji START TRANSACTION, COMMIT
oraz ROLLBACK.................................................................................... 305
6.4.2. Instrukcje niemoliwe do wycofania ....................................................... 306
6.4.3. Instrukcje wykonujce niejawne zatwierdzenie......................................... 306
6.4.4. Skadnia instrukcji SAVEPOINT i ROLLBACK TO SAVEPOINT....... 307
6.4.5. Skadnia instrukcji LOCK TABLES oraz UNLOCK TABLES .............. 307
6.4.6. Skadnia instrukcji SET TRANSACTION.............................................. 310
6.5. Administracja baz danych .................................................................................. 311
6.5.1. Instrukcje zarzdzajce kontami uytkownikw ....................................... 311
6.5.2. Instrukcje do konserwacji tabel ............................................................... 319
6.5.3. Skadnia instrukcji SET i SHOW ............................................................ 326
6.5.4. Inne instrukcje administracyjne ............................................................... 347
6.6. Instrukcje replikacji.............................................................................................. 352
6.6.1. Instrukcje SQL sterujce serwerem gwnym ......................................... 352
6.6.2. Instrukcje SQL sterujce serwerami podrzdnymi .................................. 354
Rozdzia 7. Rozszerzenia przestrzenne w MySQL............................................... 365
7.1. Wstp ................................................................................................................... 365
7.2. Model geometryczny OpenGIS............................................................................ 366
7.2.1. Hierarchia klas geometrycznych.............................................................. 366
7.2.2. Klasa Geometry ....................................................................................... 368
7.2.3. Klasa Point .............................................................................................. 369
7.2.4. Klasa Curve ............................................................................................. 369
7.2.5. Klasa LineString...................................................................................... 370
7.2.6. Klasa Surface........................................................................................... 370
7.2.7. Klasa Polygon.......................................................................................... 370
7.2.8. Klasa GeometryCollection....................................................................... 371
Spis treci 7
7.2.9. Klasa MultiPoint...................................................................................... 371
7.2.10. Klasa MultiCurve .................................................................................... 372
7.2.11. Klasa MultiLineString............................................................................. 372
7.2.12. Klasa MultiSurface .................................................................................. 372
7.2.13. Klasa MultiPolygon................................................................................. 373
7.3. Obsugiwane formaty danych przestrzennych...................................................... 373
7.3.1. Format tekstowy WKT............................................................................ 374
7.3.2. Format binarny WKB.............................................................................. 374
7.4. Tworzenie bazy danych z rozszerzeniami przestrzennymi................................... 375
7.4.1. Typy danych przestrzennych w MySQL ................................................. 375
7.4.2. Tworzenie wartoci przestrzennych......................................................... 376
7.4.3. Tworzenie kolumn przestrzennych.......................................................... 379
7.4.4. Wypenianie kolumn przestrzennych....................................................... 379
7.4.5. Pobieranie danych przestrzennych........................................................... 381
7.5. Analiza informacji przestrzennych....................................................................... 381
7.5.1. Funkcje konwersji formatw geometrycznych ........................................ 382
7.5.2. Funkcje klasy Geometry.......................................................................... 382
7.5.3. Funkcje tworzce nowe geometrie na podstawie istniejcych................. 388
7.5.4. Funkcje testujce relacje przestrzenne
midzy obiektami geometrycznymi ......................................................... 389
7.5.5. Relacje midzy minimalnymi prostoktami otaczajcymi
dla poszczeglnych geometrii.................................................................. 390
7.5.6. Funkcje sprawdzajce relacje przestrzenne pomidzy geometriami ........ 391
7.6. Optymalizacja analizy przestrzennej.................................................................... 392
7.6.1. Tworzenie indeksw przestrzennych....................................................... 392
7.6.2. Wykorzystanie indeksu przestrzennego................................................... 393
7.7. Zgodno MySQL ze standardem........................................................................ 395
7.7.1. Niezaimplementowane funkcje GIS ........................................................ 395
Rozdzia 8. Procedury i funkcje skadowane ..................................................... 397
8.1. Skadnia procedur skadowanych......................................................................... 398
8.1.1. Utrzymanie procedur skadowanych........................................................ 398
8.1.2. SHOW PROCEDURE STATUS oraz SHOW FUNCTION STATUS.... 401
8.1.3. Instrukcja CALL...................................................................................... 402
8.1.4. Instrukcja zoona BEGIN ... END.......................................................... 402
8.1.5. Instrukcja DECLARE.............................................................................. 402
8.1.6. Zmienne w procedurach skadowanych................................................... 402
8.1.7. Warunki i podprogramy obsugi .............................................................. 403
8.1.8. Kursory.................................................................................................... 405
8.1.9. Konstrukcje sterowania przepywem sterowania..................................... 406
Rozdzia 9. Obsuga bdw w MySQL .............................................................. 409
9.1. Zwracane bdy.................................................................................................... 409
9.2. Komunikaty bdw............................................................................................. 419
Dodatek A Rozwizywanie problemw z zapytaniami ........................................435
A.1. Zagadnienia zwizane z zapytaniami ................................................................... 435
A.1.1. Wielko liter przy wyszukiwaniu........................................................... 435
A.1.2. Problemy z kolumnami typu DATE ........................................................ 436
A.1.3. Problemy z wartociami NULL............................................................... 437
A.1.4. Problemy z synonimami kolumn ............................................................. 438
A.1.5. Bd wycofania dla tabel nietransakcyjnych............................................ 439
A.1.6. Usuwanie wierszy ze zwizanych tabel ................................................... 439
A.1.7. Rozwizywanie problemw z brakujcymi wierszami ............................ 440
A.1.8. Problemy z porwnaniami zmiennoprzecinkowymi................................ 441
8 Spis treci
A.2. Problemy zwizane z optymalizatorem................................................................ 443
A.3. Problemy z definicj tabel.................................................................................... 444
A.3.1. Problemy z instrukcj ALTER TABLE................................................... 444
A.3.2. Jak zmieni porzdek kolumn w tabeli .................................................... 445
A.3.3. Problemy z tabelami tymczasowymi ....................................................... 445
Dodatek B Wyraenia regularne w MySQL........................................................ 447
Skorowidz...................................................................................... 451
Rozdzia 4.
Typy kolumn
W MySQL dostpnych jest wiele typw danych, ktre mona pogrupowa w kilku pod-
stawowych kategoriach, takich jak typy liczbowe, typy zwizane z dat i czasem oraz
typy acuchowe. Na pocztku tego rozdziau przedstawiony zostanie przegld wspo-
mnianych przed chwil typw kolumn, po czym nastpi bardziej szczegowy opis ich
waciwoci z podziaem na poszczeglne kategorie i wreszcie zamieszczone zostanie
podsumowanie informacji dotyczcych wymaga co do rozmiaru pamici potrzebnej
do przechowania danej kolumny. Sam przegld jest z zamierzenia krtki. Dodatkowe
informacje o poszczeglnych typach kolumn, na przykad dopuszczalny format, w kt-
rym mona deklarowa wartoci, zostay uwzgldnione w szczegowych omwieniach.
Od wersji 4.1 MySQL rozpoznaje rozszerzenia do obsugi danych przestrzennych.
Informacje o typach przestrzennych znajduj si w rozdziale 7. tego podrcznika.
W czci opisu typw kolumn zastosowane zostay nastpujce reguy:
/
Wskazuje maksymalny rozmiar wywietlania liczby lub acucha.
Maksymalnym dopuszczalnym rozmiarem wywietlania jest 255.
&
Dotyczy typw zmiennoprzecinkowych i staoprzecinkowych. Okrela liczb
cyfr po kropce dziesitnej. Maksymalna dopuszczalna warto wynosi 30,
ale nie powinna przekracza /.
Nawiasy kwadratowe ( ) identyfikuj opcjonalne fragmenty deklaracji typu.
126 Rozdzia 4. Typy kolumn
4.1. Przegld typw dla kolumny
4.1.1. Omwienie typw liczbowych
Poniej znajduje si przegld liczbowych typw dla kolumn. Bardziej szczegowe
informacje mona znale w podrozdziale 4.2. Wymogi dotyczce rozmiaru pamici
potrzebnej do przechowywania kolumn znajduj si w podrozdziale 4.5.
Jeli dla kolumny liczbowej zostanie okrelony atrybut /lRO|1||, MySQL automatycznie
doda do kolumny atrybut UN1S1ONlD.
Naley uwaa podczas odejmowania dwch wartoci liczbowych, z ktrych jedna ma
typ UN1S1ONlD. Uzyskany wynik bdzie rwnie tego typu! patrz podrozdzia 5.7.
T1NY1NT/) UNS1ONlD /lRO|1||
Bardzo maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od `8
do `/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do bb.
B1T, BOO|, BOO|lAN
To s synonimy T1NY1NT`). Synonim BOO|lAN zosta dodany w MySQL 4.1.0.
Warto zerowa to inaczej fasz. Wartoci niezerowe traktowane s jako prawda.
W przyszoci wprowadzona zostanie pena, zgodna ze standardem SQL
obsuga typu boolowskiego.
SMA||1NT/) UNS1ONlD /lRO|1||
Maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od o/68
do o/6/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do 6bbob.
MlD1UM1NT/) UNS1ONlD /lRO|1||
rednia liczba cakowita. Dla liczb ze znakiem zakres wynosi od 8o88608
do 8o8860/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0
do `6///`b.
1NT/) UNS1ONlD /lRO|1||
Standardowa liczba cakowita. Dla liczb ze znakiem zakres wynosi
od `4/48o648 do `4/48o64/. W przypadku liczb bez znaku zakres
obejmuje wartoci od 0 do 49496/9b.
1NTlOlR/) UNS1ONlD /lRO|1||
Jest to synonim dla typu 1NT.
B1O1NT/) UNS1ONlD /lRO|1||
Dua liczba cakowita. Dla liczb ze znakiem zakres wynosi
od 9oo/0o68b4//b808 do 9oo/0o68b4//b80/. W przypadku liczb
bez znaku zakres obejmuje wartoci od 0 do `8446/440/o/09bb`6`b.
4.1. Przegld typw dla kolumny 127
Oto kilka spraw, o ktrych naley wiedzie odnonie kolumn typu B1O1NT:
Wszystkie obliczenia wykonywane s przy uyciu wartoci typu B1O1NT
lub DOUB|l ze znakiem. Oznacza to, e duych liczb cakowitych bez
znaku, wikszych ni 9oo/0o68b4//b80/ (63 bity), mona uywa tylko
z funkcjami bitowymi! Niezastosowanie si do tej zasady moe doprowadzi
do uzyskania w wyniku liczby, ktrej kilka ostatnich cyfr jest bdnych
z powodu bdw w zaokrglaniu podczas konwersji wartoci B1O1NT
na DOUB|l.
MySQL 4.0 potrafi obsugiwa B1O1NT w nastpujcych przypadkach:
Podczas wykorzystywania liczb cakowitych do przechowywania
duych wartoci bez znaku w kolumnie typu B1O1NT.
W M1NPC\YCAMQN) lub MAXPC\YCAMQN), gdzie PC\YCAMQN odnosi si
do kolumny B1O1NT.
Podczas korzystania z operatorw (midzy innymi , , *), gdy oba
argumenty s liczbami cakowitymi.
Zawsze istnieje moliwo zapisania w kolumnie B1O1NT dokadnej wartoci
liczby cakowitej. Wystarczy zapisa j przy uyciu acucha. W takim
przypadku zostanie dokonana konwersja acucha na liczb; konwersja
nie bdzie wymaga poredniego etapu przeksztacajcego liczb na jej
odpowiednik o podwjnej precyzji.
Podczas korzystania z operatorw , i * stosowana jest arytmetyka
B1O1NT, jeli oba argumenty maj warto liczby cakowitej! To oznacza,
e pomnoenie dwch duych liczb cakowitych (lub wynikw funkcji,
ktra zwraca liczby cakowite) moe spowodowa nieoczekiwane
rezultaty, jeli wynik przekroczy liczb 9oo/0o68b4//b80/.
||OATR) UNS1ONlD /lRO|1||
Liczba zmiennoprzecinkowa. Parametr R oznacza precyzj i moe przyjmowa
warto od 0 do 14 dla liczb zmiennoprzecinkowych o dokadnoci do jednego
znaku i od 25 do 53 dla liczb zmiennoprzecinkowych o dokadnoci do dwch
znakw. To przypomina opisane poniej typy ||OAT i DOUB|l. Typ ||OATR)
ma ten sam zakres, jaki posiadaj odpowiadajce mu typy ||OAT i DOUB|l,
ale w jego przypadku niezdefiniowany jest maksymalny rozmiar wywietlania
i liczba miejsc po przecinku.
Od wersji 3.23 MySQL jest to prawdziwa warto zmiennoprzecinkowa.
W wersjach wczeniejszych liczba typu ||OATR) bya zawsze liczb o dwch
miejscach po przecinku.
Ta skadnia zostaa dodana w celu zachowania zgodnoci ze standardem ODBC.
Stosowanie typu ||OAT moe spowodowa wystpienie pewnych
nieoczekiwanych problemw, poniewa wszystkie obliczenia w MySQL
s wykonywane z podwjn precyzj patrz punkt A.1.7).
||OAT/, &) UNS1ONlD /lRO|1||
128 Rozdzia 4. Typy kolumn
Maa liczba zmiennoprzecinkowa (o dokadnoci do jednego znaku). Liczba
ta moe przyj wartoci: od o408o466lo8 do ``/b494ob`lo8, 0,
i od ``/b494ob`lo8 do o408o466lo8. Jeli podany jest atrybut UN1S1ONlD,
niedozwolone s wartoci ujemne. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ ||OAT bez argumentw
lub typ ||OATR) (gdzie Rjest liczb z zakresu od 0 do 24) oznacza liczb
zmiennoprzecinkow o pojedynczej precyzji.
DOUB|l/, &) UNS1ONlD /lRO|1||
Standardowa liczba zmiennoprzecinkowa (o dokadnoci do dwch
znakw). Liczba ta moe przyj wartoci: od `/9/69o`o486o`b/lo08
do b0/o8b8b0/0`4lo08, 0, i od b0/o8b8b0/0`4lo08
do `/9/69o`o486o`b/lo08. Jeli podany jest atrybut UN1S1ONlD, wartoci
ujemne s niedozwolone. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ DOUB|l
bez argumentw lub ||OATR) (gdzie R jest liczb z zakresu od 25 do 53)
oznacza liczb zmiennoprzecinkow o podwjnej precyzji.
DOUB|l PRlC1S1ON/, &) UNS1ONlD /lRO|1||
RlA|/, &) UNS1ONlD /lRO|1||
S to synonimy DOUB|l. Wyjtek: Jeli dla parametru s;_cce serwera
wczono opcj RlA|_AS_||OAT, synonimem ||OAT jest RlA|, a nie DOUB|l.
DlC1MA|/, &) UNS1ONlD /lRO|1||
Niezapakowana liczba staoprzecinkowa. Zachowanie kolumny tego typu
przypomina kolumn typu CHAR. Niezapakowana oznacza, e liczba jest
przechowywana w postaci acucha przy uyciu jednego znaku na kad cyfr
wartoci. Parametr / definiuje maksymaln liczb cyfr, a & liczb miejsc
po przecinku. W parametrze / nie s brane pod uwag: kropka dziesitna
(odpowiadajca w naszej notacji przecinkowi) i (dla liczb ujemnych) znak ,
cho jest dla nich zarezerwowane miejsce. Wartoci nie maj miejsc
po przecinku lub czci uamkowych, jeli & jest rwne 0. Maksymalny zakres
wartoci typu DlC1MA| jest taki sam, jak dla typu DOUB|l, ale rzeczywisty zakres
danej kolumny DlC1MA| moe by ograniczony przez wybr argumentw / i &.
Jeli podany jest atrybut UN1S1ONlD, wartoci ujemne s niedozwolone.
W przypadku braku argumentu &, domyln wartoci jest 0. Jeli pominity
jest parametr /, domyln wartoci jest 10.
W wersjach poprzedzajcych MySQL 3.23 argument / musi by wystarczajco
duy, by zawiera obszar potrzebny dla znaku i kropki dziesitnej.
DlC/,&) UNS1ONlD /lRO|1||
NUMlR1C/,&) UNS1ONlD /lRO|1||
|1XlD/, &) UNS1ONlD /lRO|1||
S to synonimy typu DlC1MA|.
W MySQL 4.1.0 dodano synonim |1XlD w celu osignicia kompatybilnoci
z innymi serwerami.
4.1. Przegld typw dla kolumny 129
4.1.2. Przegld typw zwizanych z dat i czasem
Poniej znajduje si podsumowanie typw kolumn przeznaczonych dla czasu i daty.
Dodatkowe informacje na ten temat mona znale w podrozdziale 4.3. Wymogi do-
tyczce pamici potrzebnej do przechowywania danych w kolumnach zostay podane
w podrozdziale 4.5.
DATl
Data. Obsugiwany zakres obejmuje daty od ``0000`0`` do `9999`o``.
W MySQL wartoci DATl wywietlane s w formacie `RRRRMMDD`, ale mona
przypisywa wartoci do kolumn DATl przy uyciu acuchw lub liczb.
DATlT1Ml
Kombinacja daty i czasu. Obsugiwany zakres obejmuje wartoci
od ``0000`0` 000000` do `9999`o` ob9b9`. W MySQL wartoci
DATlT1Ml wywietlane s w formacie `RRRRMMDD OOMMSS`, ale mona
przypisywa wartoci do kolumn DATlT1Ml przy uyciu acuchw lub liczb.
T1MlSTAMP/)
Znacznik czasu. Obsugiwany zakres rozpoczyna si od daty ``9/00`0``
i siga roku 0o/.
Kolumna typu T1MlSTAMP przydaje si do rejestracji daty i godziny operacji
wstawiania lub aktualizacji. Pierwszej kolumnie T1MlSTAMP w tabeli
automatycznie przypisywana jest data i czas ostatniej operacji, jeli tylko tych
wartoci nie wprowadzi rcznie uytkownik. Dowolnej kolumnie T1MlSTAMP
mona rwnie przypisa biec dat i godzin, wpisujc do niej warto NU||.
Od MySQL 4.1 wartoci T1MlSTAMP s zwracane w postaci acuchw
w formacie `RRRRMMDD OOMMSS`. Aby uzyska warto w postaci liczby,
naley doda do kolumn tego typu 0. Inne szerokoci wywietlania
znacznika czasu nie s obsugiwane.
W wersjach poprzedzajcych MySQL 4.1 wartoci T1MlSTAMP s wywietlane
w formacie RRRRMMDDOOMMSS, RRMMDDOOMMSS, RRRRMMDD lub RRMMDD w zalenoci
od tego, czy parametr / jest rwny 14 (albo go brak), 12, 8 lub 6. Mona jednak
przypisywa wartoci do kolumn T1MlSTAMP przy uyciu acuchw lub liczb.
Argument / wpywa tylko na sposb wywietlania kolumny T1MlSTAMP, a nie
na jej przechowywanie. Wartoci kolumny s zawsze zapisywane w czterech
bajtach. W MySQL od wersji 4.0.12 pojawia si opcja ne., dziki ktrej
mona zmieni dziaanie serwera, upodabniajc je do MySQL 4.1.
Naley odnotowa, e kolumny T1MlSTAMP/), gdzie /jest rwne 8 lub 14,
s traktowane jako liczby, natomiast reszta kolumn T1MlSTAMP/) jest
traktowana jako acuchy. Jest to rodzaj gwarancji, e uytkownik bdzie
mg wiarygodnie usuwa i przywraca tabele tego typu.
T1Ml
Godzina. Obsugiwany zakres obejmuje wartoci od `8o8b9b9`
do ` 8o8b9b9`. W MySQL wartoci T1Ml wywietlane s w formacie
` OOMMSS`, ale mona przypisa wartoci do kolumn T1Ml przy uyciu
zarwno acuchw, jak i liczb.
130 Rozdzia 4. Typy kolumn
YlAR|4)
Rok w formacie dwu- lub czterocyfrowym. Domylnym formatem jest rok
zapisany za pomoc czterech cyfr. W tym formacie dostpne wartoci nale
do przedziau od `90` do `bb oraz 0. W formacie dwucyfrowym wartoci
dopuszczalne to liczby z zakresu od /0 do 69, ktre reprezentuj daty od roku
1970 do 2069. W MySQL wartoci YlAR wywietlane s w formacie RRRR,
ale mona przypisa wartoci do kolumn YlAR przy uyciu tak acuchw,
jak i liczb. Typ YlAR jest niedostpny dla wersji wczeniejszych ni MySQL 3.22.
4.1.3. Przegld typw acuchowych
Poniej znajduje si przegld typw acuchowych. Dodatkowe informacje mona
znale w podrozdziale 4.4. Wymogi dotyczce pamici potrzebnej do przechowywa-
nia danych w kolumnach zostay podane w podrozdziale 4.5.
W niektrych przypadkach MySQL moe zmieni kolumn typu acuchowego na typ,
ktry bdzie si rni od zadeklarowanego w instrukcji CRlATl TAB|l lub A|TlR TAB|l.
Wicej informacji na ten temat znajduje si w podpunkcie 6.2.5.2.
Od wersji 4.1 w MySQL pojawia si zmiana, ktra wpywa na wiele typw kolumn typu
acuchowego. Definicja kolumn typu znakowego moe zawiera atrybut CHARACTlR
SlT, ktry okrela zestaw znakw i opcjonalnie porzdek sortowania. Dotyczy to typw
CHAR, VARCHAR, rnych typw TlXT oraz lNUM i SlT, na przykad:
CRF/TF T/B|F !
FNUMYCTVQ
YCTVQ|
1 lub 2 bajty w zalenoci od liczby wartoci wyliczenia
(maksymalnie 65 535)
SFTYCTVQ
YCTVQ|
1, 2, 3, 4 lub 8 bajtw w zalenoci od liczby elementw zestawu
(maksymalnie 64)
Typy VARCHAR, B|OB i TlXT maj zmienn dugo. Dla kadego ilo pamici potrzeb-
nej do przechowania wartoci bdzie zalee od faktycznej dugoci wartoci kolumny
(reprezentowanej w ostatniej tabeli przez .), a nie od maksymalnego moliwego roz-
miaru danego typu. Kolumna VARCHAR`0) na przykad moe przechowywa acuch
o maksymalnej dugoci 10 znakw. Faktyczna ilo wymaganej pamici to dugo
acucha (.) plus 1 bajt do zapisania dugoci acucha. Dla acucha `.|cc` parametr
. jest rwny 4, a wymagany rozmiar pamici to 5 bajtw.
Typy B|OB i TlXT wymagaj 1, 2, 3 lub 4 bajtw do zapisu dugoci wartoci kolumny
w zalenoci od maksymalnej moliwej dugoci tego typu (patrz punkt 4.4.2).
Rozmiar obiektu lNUM jest ustalany na podstawie liczby rnych wartoci wyliczenia.
Przy wyliczeniach do 255 moliwych wartoci uywany jest jeden bajt, a przy wyli-
czeniach do 65 535 wartoci uywane s 2 bajty (patrz punkt 4.4.3).
Rozmiar obiektu SlT jest okrelany przez liczb rnych elementw zestawu. Jeli ze-
staw ma rozmiar 0, obiekt zajmuje 0/).8 bajtw, ktr to warto zaokrgla si do
1, 2, 3, 4 lub 8 bajtw. Obiekt SlT moe mie do 64 elementw (patrz punkt 4.4.4).
4.6. Wybieranie odpowiedniego typu
dla kolumny
Aby jak najbardziej wydajnie korzysta z pamici, naley we wszystkich przypadkach
stara si stosowa typ, ktry bdzie jak najbardziej dokadny. Jeli na przykad w kolum-
nie liczb cakowitych bd przechowywane wartoci z zakresu od ` do 99999, najlep-
szym wyborem bdzie typ MlD1UM1NT UNS1ONlD. Ze wszystkich typw, ktre reprezentuj
wszystkie wymagane wartoci, zajmuje najmniej pamici.
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych 153
Powszechnym problemem jest dokadne przedstawianie wartoci walutowych. W MySQL
naley do tego uywa typu DlC1MA|, za pomoc ktrego wartoci zapisywane s w for-
mie acucha. Dziki temu nie traci si na dokadnoci (mimo to obliczenia z wartociami
DlC1MA| mog by wci wykonywane przy uyciu operacji dziaajcych na liczbach
z podwjn precyzj). Jeli dokadno nie jest zbyt wana, by moe wystarczajco
dobrym typem bdzie DOUB|l.
Aby uzyska wiksz dokadno, mona zawsze przeksztaci warto na typ stao-
przecinkowy, przechowywany w B1O1NT. Pozwoli to wykonywa wszystkie obliczenia
na liczbach cakowitych i tylko w razie potrzeby przeksztaca wynik z powrotem na
wartoci zmiennoprzecinkowe.
4.7. Wykorzystywanie typw kolumn
z innych mechanizmw baz danych
Aby uatwi uytkownikowi zastosowanie kodu pochodzcego od innych producentw,
moliwe jest odwzorowanie typw kolumn w sposb przedstawiony w poniszej tabeli.
Odwzorowania te upraszczaj operacj importu do MySQL definicji tabel z innych
mechanizmw baz danych:
Typ innych producentw Typ MySQL
BTN/RY/| C'/R/| BTN/RY
C'/R V/RYTN/| V/RC'/R/|
F|J/T4 F|J/T
F|J/T8 OJUB|F
TNT1 TTNYTNT
TNT SM/||TNT
TNT: MFOTUMTNT
TNT4 TNT
TNT8 BTTNT
|JN V/RBTN/RY MFOTUMB|JB
|JN V/RC'/R MFOTUMTFXT
|JN MFOTUMTFXT oc M,SJ| 410|
MTOO|FTNT MFOTUMTNT
V/RBTN/RY/| C'/R/| BTN/RY
Odwzorowanie typw kolumn jest wykonywane podczas tworzenia tabeli, po czym
oryginalne deklaracje typu zostaj usunite. Jeli uytkownik utworzy tabel z typami
stosowanymi przez innych producentw, po czym wyda polecenie DlSCR1Bl PC\YCA
VCDGNK, zostanie przedstawiona struktura tabeli z odpowiadajcymi im typami MySQL.
4 Spis treci
1.8.5. Rozbienoci midzy MySQL a standardem SQL ........................................ 60
1.8.6. Jak MySQL radzi sobie z ograniczeniami ................................................. 67
1.8.7. Znane bdy i projektowe braki w MySQL................................................ 69
Rozdzia 2. Struktura jzyka .............................................................................. 77
2.1. Literay................................................................................................................... 77
2.1.1. acuchy ................................................................................................... 77
2.1.2. Liczby........................................................................................................ 80
2.1.3. Wartoci szesnastkowe .............................................................................. 80
2.1.4. Wartoci logiczne ...................................................................................... 81
2.1.5. Wartoci NULL......................................................................................... 81
2.2. Nazwy baz danych, tabel, indeksw, kolumn i aliasw......................................... 81
2.2.1. Kwalifikatory identyfikatorw .................................................................. 83
2.2.2. Znaczenie wielkoci liter w nazwach identyfikatorw.............................. 83
2.3. Zmienne definiowane przez uytkownika.............................................................. 85
2.4. Zmienne systemowe............................................................................................... 87
2.4.1. Strukturalne zmienne systemowe .............................................................. 89
2.5. Skadnia komentarza .............................................................................................. 91
2.6. Traktowanie sw zastrzeonych w MySQL.......................................................... 92
Rozdzia 3. Obsuga zestaww znakw............................................................... 95
3.1. Oglne informacje o zestawach znakw i sortowaniu ........................................... 95
3.2. Zestawy znakw i porzdki sortowania w MySQL................................................ 96
3.3. Okrelanie domylnego zestawu znakw i sortowania........................................... 98
3.3.1. Zestaw znakw i sortowanie dla serwera................................................... 98
3.3.2. Zestaw znakw i sortowanie dla bazy danych........................................... 99
3.3.3. Zestaw znakw i sortowanie dla tabeli .................................................... 100
3.3.4. Zestaw znakw i sortowanie dla kolumny............................................... 100
3.3.5. Przykady przypisywania zestawu znakw i sortowania ......................... 101
3.3.6. Zestawy znakw i sortowanie dla poczenia .......................................... 102
3.3.7. Zestaw znakw i sortowanie dla acucha znakw.................................. 104
3.3.8. Wykorzystywanie COLLATE w instrukcjach SQL.................................... 105
3.3.9. Priorytet klauzuli COLLATE .................................................................. 106
3.3.10. Operator BINARY................................................................................... 106
3.3.11. Niektre przypadki specjalne, w ktrych trudno okreli sortowanie...... 106
3.3.12. Sortowania musz by odpowiednie dla danego zestawu znakw........... 107
3.3.13. Przykad wpywu porzdku sortowania ................................................... 108
3.4. Operacje, na ktre ma wpyw obsuga zestaww znakw.................................... 109
3.4.1. acuchy wyjciowe ............................................................................... 109
3.4.2. CONVERT()............................................................................................ 110
3.4.3. CAST() .................................................................................................... 110
3.4.4. Instrukcje SHOW .................................................................................... 111
3.5. Obsuga Unicode.................................................................................................. 112
3.6. UTF8 dla metadanych.......................................................................................... 113
3.7. Kompatybilno z innymi systemami zarzdzania baz danych .......................... 115
3.8. Nowy format pliku konfiguracji zestawu znakw................................................ 115
3.9. Narodowe zestawy znakw.................................................................................. 115
3.10. Aktualizacja zestaww znakw z MySQL 4.0..................................................... 116
3.10.1. Zestawy znakw w wersji 4.0 i odpowiadajce im w wersji 4.1 pary
skadajce si z zestawu znakw i sortowania......................................... 117
3.10.2. Przeksztacanie kolumn znakowych wersji 4.0 na format 4.1 ................. 118
3.11. Zestawy znakw i sortowania obsugiwane przez MySQL.................................. 118
3.11.1. Zestawy znakw standardu Unicode ....................................................... 119
3.11.2. Zestawy znakw zachodnioeuropejskich................................................. 120
3.11.3. Zestawy znakw dla Europy Centralnej .................................................. 121
Spis treci 5
3.11.4. Zestawy znakw poudniowoeuropejskich i rodkowowschodnich......... 122
3.11.5. Zestawy znakw regionu batyckiego...................................................... 123
3.11.6. Zestawy znakw dla cyrylicy................................................................... 123
3.11.7. Azjatyckie zestawy znakw..................................................................... 124
Rozdzia 4. Typy kolumn.................................................................................. 125
4.1. Przegld typw dla kolumny................................................................................ 126
4.1.1. Omwienie typw liczbowych ................................................................ 126
4.1.2. Przegld typw zwizanych z dat i czasem............................................ 129
4.1.3. Przegld typw acuchowych ................................................................ 130
4.2. Typy liczbowe...................................................................................................... 132
4.3. Typy zwizane z dat i czasem............................................................................ 135
4.3.1. Typy DATETIME, DATE i TIMESTAMP............................................. 137
4.3.2. Typ TIME................................................................................................ 142
4.3.3. Typ YEAR............................................................................................... 143
4.3.4. Problem roku 2000 a typy zwizane z dat.............................................. 144
4.4. Typy acuchowe ................................................................................................. 144
4.4.1. Typy CHAR i VARCHAR...................................................................... 144
4.4.2. Typy BLOB i TEXT................................................................................ 146
4.4.3. Typ Enum................................................................................................ 147
4.4.4. Typ SET .................................................................................................. 149
4.5. Rozmiar pamici potrzebnej dla typw kolumn................................................... 151
4.6. Wybieranie odpowiedniego typu dla kolumny..................................................... 152
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych ............... 153
Rozdzia 5. Funkcje i operatory........................................................................ 155
5.1. Operatory ............................................................................................................. 156
5.1.1. Nawiasy................................................................................................... 156
5.1.2. Operatory porwnania ............................................................................. 156
5.1.3. Operatory logiczne .................................................................................. 161
5.1.4. Operatory rozrniania wielkoci liter..................................................... 163
5.2. Funkcje kontroli przepywu ................................................................................. 163
5.3. Funkcje acuchowe............................................................................................. 166
5.3.1. Funkcje porwnywania acuchw.......................................................... 176
5.4. Funkcje liczbowe ................................................................................................. 178
5.4.1. Operatory arytmetyczne........................................................................... 178
5.4.2. Funkcje matematyczne ............................................................................ 180
5.5. Funkcje daty i godziny......................................................................................... 186
5.6. Funkcje obsugi wyszukiwania penotekstowego................................................. 202
5.6.1. Boolowskie wyszukiwania penotekstowe............................................... 205
5.6.2. Wyszukiwania penotekstowe z rozwijaniem zapytania .......................... 207
5.6.3. Ograniczenia dla wyszukiwania penotekstowego................................... 208
5.6.4. Modyfikowanie wyszukiwania penotekstowego MySQL ...................... 209
5.6.5. Lista rzeczy do zrobienia dla wyszukiwania penotekstowego................ 211
5.7. Funkcje konwersji typw..................................................................................... 211
5.8. Inne funkcje ......................................................................................................... 214
5.8.1. Funkcje bitowe ........................................................................................ 214
5.8.2. Funkcje szyfrujce................................................................................... 215
5.8.3. Funkcje informacyjne .............................................................................. 219
5.8.4. Funkcje rne .......................................................................................... 223
5.9. Funkcje i modyfikatory do zastosowania z klauzulami GROUP BY................... 226
5.9.1. Funkcje GROUP BY (agregujce)........................................................... 226
5.9.2. Modyfikatory GROUP BY...................................................................... 229
5.9.3. GROUP BY z ukrytymi polami............................................................... 232
6 Spis treci
Rozdzia 6. Skadnia instrukcji SQL .................................................................. 235
6.1. Instrukcje operujce na danych............................................................................ 235
6.1.1. Skadnia instrukcji DELETE................................................................... 235
6.1.2. Skadnia instrukcji DO ............................................................................ 238
6.1.3. Skadnia instrukcji HANDLER............................................................... 238
6.1.4. Skadnia instrukcji INSERT .................................................................... 240
6.1.5. Skadnia instrukcji LOAD DATA INFILE.............................................. 246
6.1.6. Skadnia instrukcji REPLACE................................................................. 255
6.1.7. Skadnia instrukcji SELECT.................................................................... 256
6.1.8. Skadnia podzapyta................................................................................ 265
6.1.9. Skadnia instrukcji TRUNCATE............................................................. 276
6.1.10. Skadnia instrukcji UPDATE................................................................... 276
6.2. Instrukcje definiowania danych ........................................................................... 278
6.2.1. Skadnia instrukcji ALTER DATABASE ............................................... 278
6.2.2. Skadnia instrukcji ALTER TABLE........................................................ 279
6.2.3. Skadnia instrukcji CREATE DATABASE............................................. 285
6.2.4. Skadnia instrukcji CREATE INDEX ..................................................... 285
6.2.5. Skadnia instrukcji CREATE TABLE..................................................... 287
6.2.6. Skadnia instrukcji DROP DATABASE.................................................. 301
6.2.7. Skadnia instrukcji DROP INDEX.......................................................... 302
6.2.8. Skadnia instrukcji DROP TABLE.......................................................... 302
6.2.9. Skadnia instrukcji RENAME TABLE.................................................... 303
6.3. Instrukcje programu MySQL............................................................................... 304
6.3.1. Skadnia instrukcji DESCRIBE
(odczytywanie informacji na temat kolumn) ........................................... 304
6.3.2. Skadnia instrukcji USE........................................................................... 304
6.4. Instrukcje obsugi transakcji i blokowania........................................................... 305
6.4.1. Skadnia instrukcji START TRANSACTION, COMMIT
oraz ROLLBACK.................................................................................... 305
6.4.2. Instrukcje niemoliwe do wycofania ....................................................... 306
6.4.3. Instrukcje wykonujce niejawne zatwierdzenie......................................... 306
6.4.4. Skadnia instrukcji SAVEPOINT i ROLLBACK TO SAVEPOINT....... 307
6.4.5. Skadnia instrukcji LOCK TABLES oraz UNLOCK TABLES .............. 307
6.4.6. Skadnia instrukcji SET TRANSACTION.............................................. 310
6.5. Administracja baz danych .................................................................................. 311
6.5.1. Instrukcje zarzdzajce kontami uytkownikw ....................................... 311
6.5.2. Instrukcje do konserwacji tabel ............................................................... 319
6.5.3. Skadnia instrukcji SET i SHOW ............................................................ 326
6.5.4. Inne instrukcje administracyjne ............................................................... 347
6.6. Instrukcje replikacji.............................................................................................. 352
6.6.1. Instrukcje SQL sterujce serwerem gwnym ......................................... 352
6.6.2. Instrukcje SQL sterujce serwerami podrzdnymi .................................. 354
Rozdzia 7. Rozszerzenia przestrzenne w MySQL............................................... 365
7.1. Wstp ................................................................................................................... 365
7.2. Model geometryczny OpenGIS............................................................................ 366
7.2.1. Hierarchia klas geometrycznych.............................................................. 366
7.2.2. Klasa Geometry ....................................................................................... 368
7.2.3. Klasa Point .............................................................................................. 369
7.2.4. Klasa Curve ............................................................................................. 369
7.2.5. Klasa LineString...................................................................................... 370
7.2.6. Klasa Surface........................................................................................... 370
7.2.7. Klasa Polygon.......................................................................................... 370
7.2.8. Klasa GeometryCollection....................................................................... 371
Spis treci 7
7.2.9. Klasa MultiPoint...................................................................................... 371
7.2.10. Klasa MultiCurve .................................................................................... 372
7.2.11. Klasa MultiLineString............................................................................. 372
7.2.12. Klasa MultiSurface .................................................................................. 372
7.2.13. Klasa MultiPolygon................................................................................. 373
7.3. Obsugiwane formaty danych przestrzennych...................................................... 373
7.3.1. Format tekstowy WKT............................................................................ 374
7.3.2. Format binarny WKB.............................................................................. 374
7.4. Tworzenie bazy danych z rozszerzeniami przestrzennymi................................... 375
7.4.1. Typy danych przestrzennych w MySQL ................................................. 375
7.4.2. Tworzenie wartoci przestrzennych......................................................... 376
7.4.3. Tworzenie kolumn przestrzennych.......................................................... 379
7.4.4. Wypenianie kolumn przestrzennych....................................................... 379
7.4.5. Pobieranie danych przestrzennych........................................................... 381
7.5. Analiza informacji przestrzennych....................................................................... 381
7.5.1. Funkcje konwersji formatw geometrycznych ........................................ 382
7.5.2. Funkcje klasy Geometry.......................................................................... 382
7.5.3. Funkcje tworzce nowe geometrie na podstawie istniejcych................. 388
7.5.4. Funkcje testujce relacje przestrzenne
midzy obiektami geometrycznymi ......................................................... 389
7.5.5. Relacje midzy minimalnymi prostoktami otaczajcymi
dla poszczeglnych geometrii.................................................................. 390
7.5.6. Funkcje sprawdzajce relacje przestrzenne pomidzy geometriami ........ 391
7.6. Optymalizacja analizy przestrzennej.................................................................... 392
7.6.1. Tworzenie indeksw przestrzennych....................................................... 392
7.6.2. Wykorzystanie indeksu przestrzennego................................................... 393
7.7. Zgodno MySQL ze standardem........................................................................ 395
7.7.1. Niezaimplementowane funkcje GIS ........................................................ 395
Rozdzia 8. Procedury i funkcje skadowane ..................................................... 397
8.1. Skadnia procedur skadowanych......................................................................... 398
8.1.1. Utrzymanie procedur skadowanych........................................................ 398
8.1.2. SHOW PROCEDURE STATUS oraz SHOW FUNCTION STATUS.... 401
8.1.3. Instrukcja CALL...................................................................................... 402
8.1.4. Instrukcja zoona BEGIN ... END.......................................................... 402
8.1.5. Instrukcja DECLARE.............................................................................. 402
8.1.6. Zmienne w procedurach skadowanych................................................... 402
8.1.7. Warunki i podprogramy obsugi .............................................................. 403
8.1.8. Kursory.................................................................................................... 405
8.1.9. Konstrukcje sterowania przepywem sterowania..................................... 406
Rozdzia 9. Obsuga bdw w MySQL .............................................................. 409
9.1. Zwracane bdy.................................................................................................... 409
9.2. Komunikaty bdw............................................................................................. 419
Dodatek A Rozwizywanie problemw z zapytaniami ........................................435
A.1. Zagadnienia zwizane z zapytaniami ................................................................... 435
A.1.1. Wielko liter przy wyszukiwaniu........................................................... 435
A.1.2. Problemy z kolumnami typu DATE ........................................................ 436
A.1.3. Problemy z wartociami NULL............................................................... 437
A.1.4. Problemy z synonimami kolumn ............................................................. 438
A.1.5. Bd wycofania dla tabel nietransakcyjnych............................................ 439
A.1.6. Usuwanie wierszy ze zwizanych tabel ................................................... 439
A.1.7. Rozwizywanie problemw z brakujcymi wierszami ............................ 440
A.1.8. Problemy z porwnaniami zmiennoprzecinkowymi................................ 441
8 Spis treci
A.2. Problemy zwizane z optymalizatorem................................................................ 443
A.3. Problemy z definicj tabel.................................................................................... 444
A.3.1. Problemy z instrukcj ALTER TABLE................................................... 444
A.3.2. Jak zmieni porzdek kolumn w tabeli .................................................... 445
A.3.3. Problemy z tabelami tymczasowymi ....................................................... 445
Dodatek B Wyraenia regularne w MySQL........................................................ 447
Skorowidz...................................................................................... 451
Rozdzia 4.
Typy kolumn
W MySQL dostpnych jest wiele typw danych, ktre mona pogrupowa w kilku pod-
stawowych kategoriach, takich jak typy liczbowe, typy zwizane z dat i czasem oraz
typy acuchowe. Na pocztku tego rozdziau przedstawiony zostanie przegld wspo-
mnianych przed chwil typw kolumn, po czym nastpi bardziej szczegowy opis ich
waciwoci z podziaem na poszczeglne kategorie i wreszcie zamieszczone zostanie
podsumowanie informacji dotyczcych wymaga co do rozmiaru pamici potrzebnej
do przechowania danej kolumny. Sam przegld jest z zamierzenia krtki. Dodatkowe
informacje o poszczeglnych typach kolumn, na przykad dopuszczalny format, w kt-
rym mona deklarowa wartoci, zostay uwzgldnione w szczegowych omwieniach.
Od wersji 4.1 MySQL rozpoznaje rozszerzenia do obsugi danych przestrzennych.
Informacje o typach przestrzennych znajduj si w rozdziale 7. tego podrcznika.
W czci opisu typw kolumn zastosowane zostay nastpujce reguy:
/
Wskazuje maksymalny rozmiar wywietlania liczby lub acucha.
Maksymalnym dopuszczalnym rozmiarem wywietlania jest 255.
&
Dotyczy typw zmiennoprzecinkowych i staoprzecinkowych. Okrela liczb
cyfr po kropce dziesitnej. Maksymalna dopuszczalna warto wynosi 30,
ale nie powinna przekracza /.
Nawiasy kwadratowe ( ) identyfikuj opcjonalne fragmenty deklaracji typu.
126 Rozdzia 4. Typy kolumn
4.1. Przegld typw dla kolumny
4.1.1. Omwienie typw liczbowych
Poniej znajduje si przegld liczbowych typw dla kolumn. Bardziej szczegowe
informacje mona znale w podrozdziale 4.2. Wymogi dotyczce rozmiaru pamici
potrzebnej do przechowywania kolumn znajduj si w podrozdziale 4.5.
Jeli dla kolumny liczbowej zostanie okrelony atrybut /lRO|1||, MySQL automatycznie
doda do kolumny atrybut UN1S1ONlD.
Naley uwaa podczas odejmowania dwch wartoci liczbowych, z ktrych jedna ma
typ UN1S1ONlD. Uzyskany wynik bdzie rwnie tego typu! patrz podrozdzia 5.7.
T1NY1NT/) UNS1ONlD /lRO|1||
Bardzo maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od `8
do `/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do bb.
B1T, BOO|, BOO|lAN
To s synonimy T1NY1NT`). Synonim BOO|lAN zosta dodany w MySQL 4.1.0.
Warto zerowa to inaczej fasz. Wartoci niezerowe traktowane s jako prawda.
W przyszoci wprowadzona zostanie pena, zgodna ze standardem SQL
obsuga typu boolowskiego.
SMA||1NT/) UNS1ONlD /lRO|1||
Maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od o/68
do o/6/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do 6bbob.
MlD1UM1NT/) UNS1ONlD /lRO|1||
rednia liczba cakowita. Dla liczb ze znakiem zakres wynosi od 8o88608
do 8o8860/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0
do `6///`b.
1NT/) UNS1ONlD /lRO|1||
Standardowa liczba cakowita. Dla liczb ze znakiem zakres wynosi
od `4/48o648 do `4/48o64/. W przypadku liczb bez znaku zakres
obejmuje wartoci od 0 do 49496/9b.
1NTlOlR/) UNS1ONlD /lRO|1||
Jest to synonim dla typu 1NT.
B1O1NT/) UNS1ONlD /lRO|1||
Dua liczba cakowita. Dla liczb ze znakiem zakres wynosi
od 9oo/0o68b4//b808 do 9oo/0o68b4//b80/. W przypadku liczb
bez znaku zakres obejmuje wartoci od 0 do `8446/440/o/09bb`6`b.
4.1. Przegld typw dla kolumny 127
Oto kilka spraw, o ktrych naley wiedzie odnonie kolumn typu B1O1NT:
Wszystkie obliczenia wykonywane s przy uyciu wartoci typu B1O1NT
lub DOUB|l ze znakiem. Oznacza to, e duych liczb cakowitych bez
znaku, wikszych ni 9oo/0o68b4//b80/ (63 bity), mona uywa tylko
z funkcjami bitowymi! Niezastosowanie si do tej zasady moe doprowadzi
do uzyskania w wyniku liczby, ktrej kilka ostatnich cyfr jest bdnych
z powodu bdw w zaokrglaniu podczas konwersji wartoci B1O1NT
na DOUB|l.
MySQL 4.0 potrafi obsugiwa B1O1NT w nastpujcych przypadkach:
Podczas wykorzystywania liczb cakowitych do przechowywania
duych wartoci bez znaku w kolumnie typu B1O1NT.
W M1NPC\YCAMQN) lub MAXPC\YCAMQN), gdzie PC\YCAMQN odnosi si
do kolumny B1O1NT.
Podczas korzystania z operatorw (midzy innymi , , *), gdy oba
argumenty s liczbami cakowitymi.
Zawsze istnieje moliwo zapisania w kolumnie B1O1NT dokadnej wartoci
liczby cakowitej. Wystarczy zapisa j przy uyciu acucha. W takim
przypadku zostanie dokonana konwersja acucha na liczb; konwersja
nie bdzie wymaga poredniego etapu przeksztacajcego liczb na jej
odpowiednik o podwjnej precyzji.
Podczas korzystania z operatorw , i * stosowana jest arytmetyka
B1O1NT, jeli oba argumenty maj warto liczby cakowitej! To oznacza,
e pomnoenie dwch duych liczb cakowitych (lub wynikw funkcji,
ktra zwraca liczby cakowite) moe spowodowa nieoczekiwane
rezultaty, jeli wynik przekroczy liczb 9oo/0o68b4//b80/.
||OATR) UNS1ONlD /lRO|1||
Liczba zmiennoprzecinkowa. Parametr R oznacza precyzj i moe przyjmowa
warto od 0 do 14 dla liczb zmiennoprzecinkowych o dokadnoci do jednego
znaku i od 25 do 53 dla liczb zmiennoprzecinkowych o dokadnoci do dwch
znakw. To przypomina opisane poniej typy ||OAT i DOUB|l. Typ ||OATR)
ma ten sam zakres, jaki posiadaj odpowiadajce mu typy ||OAT i DOUB|l,
ale w jego przypadku niezdefiniowany jest maksymalny rozmiar wywietlania
i liczba miejsc po przecinku.
Od wersji 3.23 MySQL jest to prawdziwa warto zmiennoprzecinkowa.
W wersjach wczeniejszych liczba typu ||OATR) bya zawsze liczb o dwch
miejscach po przecinku.
Ta skadnia zostaa dodana w celu zachowania zgodnoci ze standardem ODBC.
Stosowanie typu ||OAT moe spowodowa wystpienie pewnych
nieoczekiwanych problemw, poniewa wszystkie obliczenia w MySQL
s wykonywane z podwjn precyzj patrz punkt A.1.7).
||OAT/, &) UNS1ONlD /lRO|1||
128 Rozdzia 4. Typy kolumn
Maa liczba zmiennoprzecinkowa (o dokadnoci do jednego znaku). Liczba
ta moe przyj wartoci: od o408o466lo8 do ``/b494ob`lo8, 0,
i od ``/b494ob`lo8 do o408o466lo8. Jeli podany jest atrybut UN1S1ONlD,
niedozwolone s wartoci ujemne. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ ||OAT bez argumentw
lub typ ||OATR) (gdzie Rjest liczb z zakresu od 0 do 24) oznacza liczb
zmiennoprzecinkow o pojedynczej precyzji.
DOUB|l/, &) UNS1ONlD /lRO|1||
Standardowa liczba zmiennoprzecinkowa (o dokadnoci do dwch
znakw). Liczba ta moe przyj wartoci: od `/9/69o`o486o`b/lo08
do b0/o8b8b0/0`4lo08, 0, i od b0/o8b8b0/0`4lo08
do `/9/69o`o486o`b/lo08. Jeli podany jest atrybut UN1S1ONlD, wartoci
ujemne s niedozwolone. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ DOUB|l
bez argumentw lub ||OATR) (gdzie R jest liczb z zakresu od 25 do 53)
oznacza liczb zmiennoprzecinkow o podwjnej precyzji.
DOUB|l PRlC1S1ON/, &) UNS1ONlD /lRO|1||
RlA|/, &) UNS1ONlD /lRO|1||
S to synonimy DOUB|l. Wyjtek: Jeli dla parametru s;_cce serwera
wczono opcj RlA|_AS_||OAT, synonimem ||OAT jest RlA|, a nie DOUB|l.
DlC1MA|/, &) UNS1ONlD /lRO|1||
Niezapakowana liczba staoprzecinkowa. Zachowanie kolumny tego typu
przypomina kolumn typu CHAR. Niezapakowana oznacza, e liczba jest
przechowywana w postaci acucha przy uyciu jednego znaku na kad cyfr
wartoci. Parametr / definiuje maksymaln liczb cyfr, a & liczb miejsc
po przecinku. W parametrze / nie s brane pod uwag: kropka dziesitna
(odpowiadajca w naszej notacji przecinkowi) i (dla liczb ujemnych) znak ,
cho jest dla nich zarezerwowane miejsce. Wartoci nie maj miejsc
po przecinku lub czci uamkowych, jeli & jest rwne 0. Maksymalny zakres
wartoci typu DlC1MA| jest taki sam, jak dla typu DOUB|l, ale rzeczywisty zakres
danej kolumny DlC1MA| moe by ograniczony przez wybr argumentw / i &.
Jeli podany jest atrybut UN1S1ONlD, wartoci ujemne s niedozwolone.
W przypadku braku argumentu &, domyln wartoci jest 0. Jeli pominity
jest parametr /, domyln wartoci jest 10.
W wersjach poprzedzajcych MySQL 3.23 argument / musi by wystarczajco
duy, by zawiera obszar potrzebny dla znaku i kropki dziesitnej.
DlC/,&) UNS1ONlD /lRO|1||
NUMlR1C/,&) UNS1ONlD /lRO|1||
|1XlD/, &) UNS1ONlD /lRO|1||
S to synonimy typu DlC1MA|.
W MySQL 4.1.0 dodano synonim |1XlD w celu osignicia kompatybilnoci
z innymi serwerami.
4.1. Przegld typw dla kolumny 129
4.1.2. Przegld typw zwizanych z dat i czasem
Poniej znajduje si podsumowanie typw kolumn przeznaczonych dla czasu i daty.
Dodatkowe informacje na ten temat mona znale w podrozdziale 4.3. Wymogi do-
tyczce pamici potrzebnej do przechowywania danych w kolumnach zostay podane
w podrozdziale 4.5.
DATl
Data. Obsugiwany zakres obejmuje daty od ``0000`0`` do `9999`o``.
W MySQL wartoci DATl wywietlane s w formacie `RRRRMMDD`, ale mona
przypisywa wartoci do kolumn DATl przy uyciu acuchw lub liczb.
DATlT1Ml
Kombinacja daty i czasu. Obsugiwany zakres obejmuje wartoci
od ``0000`0` 000000` do `9999`o` ob9b9`. W MySQL wartoci
DATlT1Ml wywietlane s w formacie `RRRRMMDD OOMMSS`, ale mona
przypisywa wartoci do kolumn DATlT1Ml przy uyciu acuchw lub liczb.
T1MlSTAMP/)
Znacznik czasu. Obsugiwany zakres rozpoczyna si od daty ``9/00`0``
i siga roku 0o/.
Kolumna typu T1MlSTAMP przydaje si do rejestracji daty i godziny operacji
wstawiania lub aktualizacji. Pierwszej kolumnie T1MlSTAMP w tabeli
automatycznie przypisywana jest data i czas ostatniej operacji, jeli tylko tych
wartoci nie wprowadzi rcznie uytkownik. Dowolnej kolumnie T1MlSTAMP
mona rwnie przypisa biec dat i godzin, wpisujc do niej warto NU||.
Od MySQL 4.1 wartoci T1MlSTAMP s zwracane w postaci acuchw
w formacie `RRRRMMDD OOMMSS`. Aby uzyska warto w postaci liczby,
naley doda do kolumn tego typu 0. Inne szerokoci wywietlania
znacznika czasu nie s obsugiwane.
W wersjach poprzedzajcych MySQL 4.1 wartoci T1MlSTAMP s wywietlane
w formacie RRRRMMDDOOMMSS, RRMMDDOOMMSS, RRRRMMDD lub RRMMDD w zalenoci
od tego, czy parametr / jest rwny 14 (albo go brak), 12, 8 lub 6. Mona jednak
przypisywa wartoci do kolumn T1MlSTAMP przy uyciu acuchw lub liczb.
Argument / wpywa tylko na sposb wywietlania kolumny T1MlSTAMP, a nie
na jej przechowywanie. Wartoci kolumny s zawsze zapisywane w czterech
bajtach. W MySQL od wersji 4.0.12 pojawia si opcja ne., dziki ktrej
mona zmieni dziaanie serwera, upodabniajc je do MySQL 4.1.
Naley odnotowa, e kolumny T1MlSTAMP/), gdzie /jest rwne 8 lub 14,
s traktowane jako liczby, natomiast reszta kolumn T1MlSTAMP/) jest
traktowana jako acuchy. Jest to rodzaj gwarancji, e uytkownik bdzie
mg wiarygodnie usuwa i przywraca tabele tego typu.
T1Ml
Godzina. Obsugiwany zakres obejmuje wartoci od `8o8b9b9`
do ` 8o8b9b9`. W MySQL wartoci T1Ml wywietlane s w formacie
` OOMMSS`, ale mona przypisa wartoci do kolumn T1Ml przy uyciu
zarwno acuchw, jak i liczb.
130 Rozdzia 4. Typy kolumn
YlAR|4)
Rok w formacie dwu- lub czterocyfrowym. Domylnym formatem jest rok
zapisany za pomoc czterech cyfr. W tym formacie dostpne wartoci nale
do przedziau od `90` do `bb oraz 0. W formacie dwucyfrowym wartoci
dopuszczalne to liczby z zakresu od /0 do 69, ktre reprezentuj daty od roku
1970 do 2069. W MySQL wartoci YlAR wywietlane s w formacie RRRR,
ale mona przypisa wartoci do kolumn YlAR przy uyciu tak acuchw,
jak i liczb. Typ YlAR jest niedostpny dla wersji wczeniejszych ni MySQL 3.22.
4.1.3. Przegld typw acuchowych
Poniej znajduje si przegld typw acuchowych. Dodatkowe informacje mona
znale w podrozdziale 4.4. Wymogi dotyczce pamici potrzebnej do przechowywa-
nia danych w kolumnach zostay podane w podrozdziale 4.5.
W niektrych przypadkach MySQL moe zmieni kolumn typu acuchowego na typ,
ktry bdzie si rni od zadeklarowanego w instrukcji CRlATl TAB|l lub A|TlR TAB|l.
Wicej informacji na ten temat znajduje si w podpunkcie 6.2.5.2.
Od wersji 4.1 w MySQL pojawia si zmiana, ktra wpywa na wiele typw kolumn typu
acuchowego. Definicja kolumn typu znakowego moe zawiera atrybut CHARACTlR
SlT, ktry okrela zestaw znakw i opcjonalnie porzdek sortowania. Dotyczy to typw
CHAR, VARCHAR, rnych typw TlXT oraz lNUM i SlT, na przykad:
CRF/TF T/B|F !
FNUMYCTVQ
YCTVQ|
1 lub 2 bajty w zalenoci od liczby wartoci wyliczenia
(maksymalnie 65 535)
SFTYCTVQ
YCTVQ|
1, 2, 3, 4 lub 8 bajtw w zalenoci od liczby elementw zestawu
(maksymalnie 64)
Typy VARCHAR, B|OB i TlXT maj zmienn dugo. Dla kadego ilo pamici potrzeb-
nej do przechowania wartoci bdzie zalee od faktycznej dugoci wartoci kolumny
(reprezentowanej w ostatniej tabeli przez .), a nie od maksymalnego moliwego roz-
miaru danego typu. Kolumna VARCHAR`0) na przykad moe przechowywa acuch
o maksymalnej dugoci 10 znakw. Faktyczna ilo wymaganej pamici to dugo
acucha (.) plus 1 bajt do zapisania dugoci acucha. Dla acucha `.|cc` parametr
. jest rwny 4, a wymagany rozmiar pamici to 5 bajtw.
Typy B|OB i TlXT wymagaj 1, 2, 3 lub 4 bajtw do zapisu dugoci wartoci kolumny
w zalenoci od maksymalnej moliwej dugoci tego typu (patrz punkt 4.4.2).
Rozmiar obiektu lNUM jest ustalany na podstawie liczby rnych wartoci wyliczenia.
Przy wyliczeniach do 255 moliwych wartoci uywany jest jeden bajt, a przy wyli-
czeniach do 65 535 wartoci uywane s 2 bajty (patrz punkt 4.4.3).
Rozmiar obiektu SlT jest okrelany przez liczb rnych elementw zestawu. Jeli ze-
staw ma rozmiar 0, obiekt zajmuje 0/).8 bajtw, ktr to warto zaokrgla si do
1, 2, 3, 4 lub 8 bajtw. Obiekt SlT moe mie do 64 elementw (patrz punkt 4.4.4).
4.6. Wybieranie odpowiedniego typu
dla kolumny
Aby jak najbardziej wydajnie korzysta z pamici, naley we wszystkich przypadkach
stara si stosowa typ, ktry bdzie jak najbardziej dokadny. Jeli na przykad w kolum-
nie liczb cakowitych bd przechowywane wartoci z zakresu od ` do 99999, najlep-
szym wyborem bdzie typ MlD1UM1NT UNS1ONlD. Ze wszystkich typw, ktre reprezentuj
wszystkie wymagane wartoci, zajmuje najmniej pamici.
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych 153
Powszechnym problemem jest dokadne przedstawianie wartoci walutowych. W MySQL
naley do tego uywa typu DlC1MA|, za pomoc ktrego wartoci zapisywane s w for-
mie acucha. Dziki temu nie traci si na dokadnoci (mimo to obliczenia z wartociami
DlC1MA| mog by wci wykonywane przy uyciu operacji dziaajcych na liczbach
z podwjn precyzj). Jeli dokadno nie jest zbyt wana, by moe wystarczajco
dobrym typem bdzie DOUB|l.
Aby uzyska wiksz dokadno, mona zawsze przeksztaci warto na typ stao-
przecinkowy, przechowywany w B1O1NT. Pozwoli to wykonywa wszystkie obliczenia
na liczbach cakowitych i tylko w razie potrzeby przeksztaca wynik z powrotem na
wartoci zmiennoprzecinkowe.
4.7. Wykorzystywanie typw kolumn
z innych mechanizmw baz danych
Aby uatwi uytkownikowi zastosowanie kodu pochodzcego od innych producentw,
moliwe jest odwzorowanie typw kolumn w sposb przedstawiony w poniszej tabeli.
Odwzorowania te upraszczaj operacj importu do MySQL definicji tabel z innych
mechanizmw baz danych:
Typ innych producentw Typ MySQL
BTN/RY/| C'/R/| BTN/RY
C'/R V/RYTN/| V/RC'/R/|
F|J/T4 F|J/T
F|J/T8 OJUB|F
TNT1 TTNYTNT
TNT SM/||TNT
TNT: MFOTUMTNT
TNT4 TNT
TNT8 BTTNT
|JN V/RBTN/RY MFOTUMB|JB
|JN V/RC'/R MFOTUMTFXT
|JN MFOTUMTFXT oc M,SJ| 410|
MTOO|FTNT MFOTUMTNT
V/RBTN/RY/| C'/R/| BTN/RY
Odwzorowanie typw kolumn jest wykonywane podczas tworzenia tabeli, po czym
oryginalne deklaracje typu zostaj usunite. Jeli uytkownik utworzy tabel z typami
stosowanymi przez innych producentw, po czym wyda polecenie DlSCR1Bl PC\YCA
VCDGNK, zostanie przedstawiona struktura tabeli z odpowiadajcymi im typami MySQL.
4 Spis treci
1.8.5. Rozbienoci midzy MySQL a standardem SQL ........................................ 60
1.8.6. Jak MySQL radzi sobie z ograniczeniami ................................................. 67
1.8.7. Znane bdy i projektowe braki w MySQL................................................ 69
Rozdzia 2. Struktura jzyka .............................................................................. 77
2.1. Literay................................................................................................................... 77
2.1.1. acuchy ................................................................................................... 77
2.1.2. Liczby........................................................................................................ 80
2.1.3. Wartoci szesnastkowe .............................................................................. 80
2.1.4. Wartoci logiczne ...................................................................................... 81
2.1.5. Wartoci NULL......................................................................................... 81
2.2. Nazwy baz danych, tabel, indeksw, kolumn i aliasw......................................... 81
2.2.1. Kwalifikatory identyfikatorw .................................................................. 83
2.2.2. Znaczenie wielkoci liter w nazwach identyfikatorw.............................. 83
2.3. Zmienne definiowane przez uytkownika.............................................................. 85
2.4. Zmienne systemowe............................................................................................... 87
2.4.1. Strukturalne zmienne systemowe .............................................................. 89
2.5. Skadnia komentarza .............................................................................................. 91
2.6. Traktowanie sw zastrzeonych w MySQL.......................................................... 92
Rozdzia 3. Obsuga zestaww znakw............................................................... 95
3.1. Oglne informacje o zestawach znakw i sortowaniu ........................................... 95
3.2. Zestawy znakw i porzdki sortowania w MySQL................................................ 96
3.3. Okrelanie domylnego zestawu znakw i sortowania........................................... 98
3.3.1. Zestaw znakw i sortowanie dla serwera................................................... 98
3.3.2. Zestaw znakw i sortowanie dla bazy danych........................................... 99
3.3.3. Zestaw znakw i sortowanie dla tabeli .................................................... 100
3.3.4. Zestaw znakw i sortowanie dla kolumny............................................... 100
3.3.5. Przykady przypisywania zestawu znakw i sortowania ......................... 101
3.3.6. Zestawy znakw i sortowanie dla poczenia .......................................... 102
3.3.7. Zestaw znakw i sortowanie dla acucha znakw.................................. 104
3.3.8. Wykorzystywanie COLLATE w instrukcjach SQL.................................... 105
3.3.9. Priorytet klauzuli COLLATE .................................................................. 106
3.3.10. Operator BINARY................................................................................... 106
3.3.11. Niektre przypadki specjalne, w ktrych trudno okreli sortowanie...... 106
3.3.12. Sortowania musz by odpowiednie dla danego zestawu znakw........... 107
3.3.13. Przykad wpywu porzdku sortowania ................................................... 108
3.4. Operacje, na ktre ma wpyw obsuga zestaww znakw.................................... 109
3.4.1. acuchy wyjciowe ............................................................................... 109
3.4.2. CONVERT()............................................................................................ 110
3.4.3. CAST() .................................................................................................... 110
3.4.4. Instrukcje SHOW .................................................................................... 111
3.5. Obsuga Unicode.................................................................................................. 112
3.6. UTF8 dla metadanych.......................................................................................... 113
3.7. Kompatybilno z innymi systemami zarzdzania baz danych .......................... 115
3.8. Nowy format pliku konfiguracji zestawu znakw................................................ 115
3.9. Narodowe zestawy znakw.................................................................................. 115
3.10. Aktualizacja zestaww znakw z MySQL 4.0..................................................... 116
3.10.1. Zestawy znakw w wersji 4.0 i odpowiadajce im w wersji 4.1 pary
skadajce si z zestawu znakw i sortowania......................................... 117
3.10.2. Przeksztacanie kolumn znakowych wersji 4.0 na format 4.1 ................. 118
3.11. Zestawy znakw i sortowania obsugiwane przez MySQL.................................. 118
3.11.1. Zestawy znakw standardu Unicode ....................................................... 119
3.11.2. Zestawy znakw zachodnioeuropejskich................................................. 120
3.11.3. Zestawy znakw dla Europy Centralnej .................................................. 121
Spis treci 5
3.11.4. Zestawy znakw poudniowoeuropejskich i rodkowowschodnich......... 122
3.11.5. Zestawy znakw regionu batyckiego...................................................... 123
3.11.6. Zestawy znakw dla cyrylicy................................................................... 123
3.11.7. Azjatyckie zestawy znakw..................................................................... 124
Rozdzia 4. Typy kolumn.................................................................................. 125
4.1. Przegld typw dla kolumny................................................................................ 126
4.1.1. Omwienie typw liczbowych ................................................................ 126
4.1.2. Przegld typw zwizanych z dat i czasem............................................ 129
4.1.3. Przegld typw acuchowych ................................................................ 130
4.2. Typy liczbowe...................................................................................................... 132
4.3. Typy zwizane z dat i czasem............................................................................ 135
4.3.1. Typy DATETIME, DATE i TIMESTAMP............................................. 137
4.3.2. Typ TIME................................................................................................ 142
4.3.3. Typ YEAR............................................................................................... 143
4.3.4. Problem roku 2000 a typy zwizane z dat.............................................. 144
4.4. Typy acuchowe ................................................................................................. 144
4.4.1. Typy CHAR i VARCHAR...................................................................... 144
4.4.2. Typy BLOB i TEXT................................................................................ 146
4.4.3. Typ Enum................................................................................................ 147
4.4.4. Typ SET .................................................................................................. 149
4.5. Rozmiar pamici potrzebnej dla typw kolumn................................................... 151
4.6. Wybieranie odpowiedniego typu dla kolumny..................................................... 152
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych ............... 153
Rozdzia 5. Funkcje i operatory........................................................................ 155
5.1. Operatory ............................................................................................................. 156
5.1.1. Nawiasy................................................................................................... 156
5.1.2. Operatory porwnania ............................................................................. 156
5.1.3. Operatory logiczne .................................................................................. 161
5.1.4. Operatory rozrniania wielkoci liter..................................................... 163
5.2. Funkcje kontroli przepywu ................................................................................. 163
5.3. Funkcje acuchowe............................................................................................. 166
5.3.1. Funkcje porwnywania acuchw.......................................................... 176
5.4. Funkcje liczbowe ................................................................................................. 178
5.4.1. Operatory arytmetyczne........................................................................... 178
5.4.2. Funkcje matematyczne ............................................................................ 180
5.5. Funkcje daty i godziny......................................................................................... 186
5.6. Funkcje obsugi wyszukiwania penotekstowego................................................. 202
5.6.1. Boolowskie wyszukiwania penotekstowe............................................... 205
5.6.2. Wyszukiwania penotekstowe z rozwijaniem zapytania .......................... 207
5.6.3. Ograniczenia dla wyszukiwania penotekstowego................................... 208
5.6.4. Modyfikowanie wyszukiwania penotekstowego MySQL ...................... 209
5.6.5. Lista rzeczy do zrobienia dla wyszukiwania penotekstowego................ 211
5.7. Funkcje konwersji typw..................................................................................... 211
5.8. Inne funkcje ......................................................................................................... 214
5.8.1. Funkcje bitowe ........................................................................................ 214
5.8.2. Funkcje szyfrujce................................................................................... 215
5.8.3. Funkcje informacyjne .............................................................................. 219
5.8.4. Funkcje rne .......................................................................................... 223
5.9. Funkcje i modyfikatory do zastosowania z klauzulami GROUP BY................... 226
5.9.1. Funkcje GROUP BY (agregujce)........................................................... 226
5.9.2. Modyfikatory GROUP BY...................................................................... 229
5.9.3. GROUP BY z ukrytymi polami............................................................... 232
6 Spis treci
Rozdzia 6. Skadnia instrukcji SQL .................................................................. 235
6.1. Instrukcje operujce na danych............................................................................ 235
6.1.1. Skadnia instrukcji DELETE................................................................... 235
6.1.2. Skadnia instrukcji DO ............................................................................ 238
6.1.3. Skadnia instrukcji HANDLER............................................................... 238
6.1.4. Skadnia instrukcji INSERT .................................................................... 240
6.1.5. Skadnia instrukcji LOAD DATA INFILE.............................................. 246
6.1.6. Skadnia instrukcji REPLACE................................................................. 255
6.1.7. Skadnia instrukcji SELECT.................................................................... 256
6.1.8. Skadnia podzapyta................................................................................ 265
6.1.9. Skadnia instrukcji TRUNCATE............................................................. 276
6.1.10. Skadnia instrukcji UPDATE................................................................... 276
6.2. Instrukcje definiowania danych ........................................................................... 278
6.2.1. Skadnia instrukcji ALTER DATABASE ............................................... 278
6.2.2. Skadnia instrukcji ALTER TABLE........................................................ 279
6.2.3. Skadnia instrukcji CREATE DATABASE............................................. 285
6.2.4. Skadnia instrukcji CREATE INDEX ..................................................... 285
6.2.5. Skadnia instrukcji CREATE TABLE..................................................... 287
6.2.6. Skadnia instrukcji DROP DATABASE.................................................. 301
6.2.7. Skadnia instrukcji DROP INDEX.......................................................... 302
6.2.8. Skadnia instrukcji DROP TABLE.......................................................... 302
6.2.9. Skadnia instrukcji RENAME TABLE.................................................... 303
6.3. Instrukcje programu MySQL............................................................................... 304
6.3.1. Skadnia instrukcji DESCRIBE
(odczytywanie informacji na temat kolumn) ........................................... 304
6.3.2. Skadnia instrukcji USE........................................................................... 304
6.4. Instrukcje obsugi transakcji i blokowania........................................................... 305
6.4.1. Skadnia instrukcji START TRANSACTION, COMMIT
oraz ROLLBACK.................................................................................... 305
6.4.2. Instrukcje niemoliwe do wycofania ....................................................... 306
6.4.3. Instrukcje wykonujce niejawne zatwierdzenie......................................... 306
6.4.4. Skadnia instrukcji SAVEPOINT i ROLLBACK TO SAVEPOINT....... 307
6.4.5. Skadnia instrukcji LOCK TABLES oraz UNLOCK TABLES .............. 307
6.4.6. Skadnia instrukcji SET TRANSACTION.............................................. 310
6.5. Administracja baz danych .................................................................................. 311
6.5.1. Instrukcje zarzdzajce kontami uytkownikw ....................................... 311
6.5.2. Instrukcje do konserwacji tabel ............................................................... 319
6.5.3. Skadnia instrukcji SET i SHOW ............................................................ 326
6.5.4. Inne instrukcje administracyjne ............................................................... 347
6.6. Instrukcje replikacji.............................................................................................. 352
6.6.1. Instrukcje SQL sterujce serwerem gwnym ......................................... 352
6.6.2. Instrukcje SQL sterujce serwerami podrzdnymi .................................. 354
Rozdzia 7. Rozszerzenia przestrzenne w MySQL............................................... 365
7.1. Wstp ................................................................................................................... 365
7.2. Model geometryczny OpenGIS............................................................................ 366
7.2.1. Hierarchia klas geometrycznych.............................................................. 366
7.2.2. Klasa Geometry ....................................................................................... 368
7.2.3. Klasa Point .............................................................................................. 369
7.2.4. Klasa Curve ............................................................................................. 369
7.2.5. Klasa LineString...................................................................................... 370
7.2.6. Klasa Surface........................................................................................... 370
7.2.7. Klasa Polygon.......................................................................................... 370
7.2.8. Klasa GeometryCollection....................................................................... 371
Spis treci 7
7.2.9. Klasa MultiPoint...................................................................................... 371
7.2.10. Klasa MultiCurve .................................................................................... 372
7.2.11. Klasa MultiLineString............................................................................. 372
7.2.12. Klasa MultiSurface .................................................................................. 372
7.2.13. Klasa MultiPolygon................................................................................. 373
7.3. Obsugiwane formaty danych przestrzennych...................................................... 373
7.3.1. Format tekstowy WKT............................................................................ 374
7.3.2. Format binarny WKB.............................................................................. 374
7.4. Tworzenie bazy danych z rozszerzeniami przestrzennymi................................... 375
7.4.1. Typy danych przestrzennych w MySQL ................................................. 375
7.4.2. Tworzenie wartoci przestrzennych......................................................... 376
7.4.3. Tworzenie kolumn przestrzennych.......................................................... 379
7.4.4. Wypenianie kolumn przestrzennych....................................................... 379
7.4.5. Pobieranie danych przestrzennych........................................................... 381
7.5. Analiza informacji przestrzennych....................................................................... 381
7.5.1. Funkcje konwersji formatw geometrycznych ........................................ 382
7.5.2. Funkcje klasy Geometry.......................................................................... 382
7.5.3. Funkcje tworzce nowe geometrie na podstawie istniejcych................. 388
7.5.4. Funkcje testujce relacje przestrzenne
midzy obiektami geometrycznymi ......................................................... 389
7.5.5. Relacje midzy minimalnymi prostoktami otaczajcymi
dla poszczeglnych geometrii.................................................................. 390
7.5.6. Funkcje sprawdzajce relacje przestrzenne pomidzy geometriami ........ 391
7.6. Optymalizacja analizy przestrzennej.................................................................... 392
7.6.1. Tworzenie indeksw przestrzennych....................................................... 392
7.6.2. Wykorzystanie indeksu przestrzennego................................................... 393
7.7. Zgodno MySQL ze standardem........................................................................ 395
7.7.1. Niezaimplementowane funkcje GIS ........................................................ 395
Rozdzia 8. Procedury i funkcje skadowane ..................................................... 397
8.1. Skadnia procedur skadowanych......................................................................... 398
8.1.1. Utrzymanie procedur skadowanych........................................................ 398
8.1.2. SHOW PROCEDURE STATUS oraz SHOW FUNCTION STATUS.... 401
8.1.3. Instrukcja CALL...................................................................................... 402
8.1.4. Instrukcja zoona BEGIN ... END.......................................................... 402
8.1.5. Instrukcja DECLARE.............................................................................. 402
8.1.6. Zmienne w procedurach skadowanych................................................... 402
8.1.7. Warunki i podprogramy obsugi .............................................................. 403
8.1.8. Kursory.................................................................................................... 405
8.1.9. Konstrukcje sterowania przepywem sterowania..................................... 406
Rozdzia 9. Obsuga bdw w MySQL .............................................................. 409
9.1. Zwracane bdy.................................................................................................... 409
9.2. Komunikaty bdw............................................................................................. 419
Dodatek A Rozwizywanie problemw z zapytaniami ........................................435
A.1. Zagadnienia zwizane z zapytaniami ................................................................... 435
A.1.1. Wielko liter przy wyszukiwaniu........................................................... 435
A.1.2. Problemy z kolumnami typu DATE ........................................................ 436
A.1.3. Problemy z wartociami NULL............................................................... 437
A.1.4. Problemy z synonimami kolumn ............................................................. 438
A.1.5. Bd wycofania dla tabel nietransakcyjnych............................................ 439
A.1.6. Usuwanie wierszy ze zwizanych tabel ................................................... 439
A.1.7. Rozwizywanie problemw z brakujcymi wierszami ............................ 440
A.1.8. Problemy z porwnaniami zmiennoprzecinkowymi................................ 441
8 Spis treci
A.2. Problemy zwizane z optymalizatorem................................................................ 443
A.3. Problemy z definicj tabel.................................................................................... 444
A.3.1. Problemy z instrukcj ALTER TABLE................................................... 444
A.3.2. Jak zmieni porzdek kolumn w tabeli .................................................... 445
A.3.3. Problemy z tabelami tymczasowymi ....................................................... 445
Dodatek B Wyraenia regularne w MySQL........................................................ 447
Skorowidz...................................................................................... 451
Rozdzia 4.
Typy kolumn
W MySQL dostpnych jest wiele typw danych, ktre mona pogrupowa w kilku pod-
stawowych kategoriach, takich jak typy liczbowe, typy zwizane z dat i czasem oraz
typy acuchowe. Na pocztku tego rozdziau przedstawiony zostanie przegld wspo-
mnianych przed chwil typw kolumn, po czym nastpi bardziej szczegowy opis ich
waciwoci z podziaem na poszczeglne kategorie i wreszcie zamieszczone zostanie
podsumowanie informacji dotyczcych wymaga co do rozmiaru pamici potrzebnej
do przechowania danej kolumny. Sam przegld jest z zamierzenia krtki. Dodatkowe
informacje o poszczeglnych typach kolumn, na przykad dopuszczalny format, w kt-
rym mona deklarowa wartoci, zostay uwzgldnione w szczegowych omwieniach.
Od wersji 4.1 MySQL rozpoznaje rozszerzenia do obsugi danych przestrzennych.
Informacje o typach przestrzennych znajduj si w rozdziale 7. tego podrcznika.
W czci opisu typw kolumn zastosowane zostay nastpujce reguy:
/
Wskazuje maksymalny rozmiar wywietlania liczby lub acucha.
Maksymalnym dopuszczalnym rozmiarem wywietlania jest 255.
&
Dotyczy typw zmiennoprzecinkowych i staoprzecinkowych. Okrela liczb
cyfr po kropce dziesitnej. Maksymalna dopuszczalna warto wynosi 30,
ale nie powinna przekracza /.
Nawiasy kwadratowe ( ) identyfikuj opcjonalne fragmenty deklaracji typu.
126 Rozdzia 4. Typy kolumn
4.1. Przegld typw dla kolumny
4.1.1. Omwienie typw liczbowych
Poniej znajduje si przegld liczbowych typw dla kolumn. Bardziej szczegowe
informacje mona znale w podrozdziale 4.2. Wymogi dotyczce rozmiaru pamici
potrzebnej do przechowywania kolumn znajduj si w podrozdziale 4.5.
Jeli dla kolumny liczbowej zostanie okrelony atrybut /lRO|1||, MySQL automatycznie
doda do kolumny atrybut UN1S1ONlD.
Naley uwaa podczas odejmowania dwch wartoci liczbowych, z ktrych jedna ma
typ UN1S1ONlD. Uzyskany wynik bdzie rwnie tego typu! patrz podrozdzia 5.7.
T1NY1NT/) UNS1ONlD /lRO|1||
Bardzo maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od `8
do `/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do bb.
B1T, BOO|, BOO|lAN
To s synonimy T1NY1NT`). Synonim BOO|lAN zosta dodany w MySQL 4.1.0.
Warto zerowa to inaczej fasz. Wartoci niezerowe traktowane s jako prawda.
W przyszoci wprowadzona zostanie pena, zgodna ze standardem SQL
obsuga typu boolowskiego.
SMA||1NT/) UNS1ONlD /lRO|1||
Maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od o/68
do o/6/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do 6bbob.
MlD1UM1NT/) UNS1ONlD /lRO|1||
rednia liczba cakowita. Dla liczb ze znakiem zakres wynosi od 8o88608
do 8o8860/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0
do `6///`b.
1NT/) UNS1ONlD /lRO|1||
Standardowa liczba cakowita. Dla liczb ze znakiem zakres wynosi
od `4/48o648 do `4/48o64/. W przypadku liczb bez znaku zakres
obejmuje wartoci od 0 do 49496/9b.
1NTlOlR/) UNS1ONlD /lRO|1||
Jest to synonim dla typu 1NT.
B1O1NT/) UNS1ONlD /lRO|1||
Dua liczba cakowita. Dla liczb ze znakiem zakres wynosi
od 9oo/0o68b4//b808 do 9oo/0o68b4//b80/. W przypadku liczb
bez znaku zakres obejmuje wartoci od 0 do `8446/440/o/09bb`6`b.
4.1. Przegld typw dla kolumny 127
Oto kilka spraw, o ktrych naley wiedzie odnonie kolumn typu B1O1NT:
Wszystkie obliczenia wykonywane s przy uyciu wartoci typu B1O1NT
lub DOUB|l ze znakiem. Oznacza to, e duych liczb cakowitych bez
znaku, wikszych ni 9oo/0o68b4//b80/ (63 bity), mona uywa tylko
z funkcjami bitowymi! Niezastosowanie si do tej zasady moe doprowadzi
do uzyskania w wyniku liczby, ktrej kilka ostatnich cyfr jest bdnych
z powodu bdw w zaokrglaniu podczas konwersji wartoci B1O1NT
na DOUB|l.
MySQL 4.0 potrafi obsugiwa B1O1NT w nastpujcych przypadkach:
Podczas wykorzystywania liczb cakowitych do przechowywania
duych wartoci bez znaku w kolumnie typu B1O1NT.
W M1NPC\YCAMQN) lub MAXPC\YCAMQN), gdzie PC\YCAMQN odnosi si
do kolumny B1O1NT.
Podczas korzystania z operatorw (midzy innymi , , *), gdy oba
argumenty s liczbami cakowitymi.
Zawsze istnieje moliwo zapisania w kolumnie B1O1NT dokadnej wartoci
liczby cakowitej. Wystarczy zapisa j przy uyciu acucha. W takim
przypadku zostanie dokonana konwersja acucha na liczb; konwersja
nie bdzie wymaga poredniego etapu przeksztacajcego liczb na jej
odpowiednik o podwjnej precyzji.
Podczas korzystania z operatorw , i * stosowana jest arytmetyka
B1O1NT, jeli oba argumenty maj warto liczby cakowitej! To oznacza,
e pomnoenie dwch duych liczb cakowitych (lub wynikw funkcji,
ktra zwraca liczby cakowite) moe spowodowa nieoczekiwane
rezultaty, jeli wynik przekroczy liczb 9oo/0o68b4//b80/.
||OATR) UNS1ONlD /lRO|1||
Liczba zmiennoprzecinkowa. Parametr R oznacza precyzj i moe przyjmowa
warto od 0 do 14 dla liczb zmiennoprzecinkowych o dokadnoci do jednego
znaku i od 25 do 53 dla liczb zmiennoprzecinkowych o dokadnoci do dwch
znakw. To przypomina opisane poniej typy ||OAT i DOUB|l. Typ ||OATR)
ma ten sam zakres, jaki posiadaj odpowiadajce mu typy ||OAT i DOUB|l,
ale w jego przypadku niezdefiniowany jest maksymalny rozmiar wywietlania
i liczba miejsc po przecinku.
Od wersji 3.23 MySQL jest to prawdziwa warto zmiennoprzecinkowa.
W wersjach wczeniejszych liczba typu ||OATR) bya zawsze liczb o dwch
miejscach po przecinku.
Ta skadnia zostaa dodana w celu zachowania zgodnoci ze standardem ODBC.
Stosowanie typu ||OAT moe spowodowa wystpienie pewnych
nieoczekiwanych problemw, poniewa wszystkie obliczenia w MySQL
s wykonywane z podwjn precyzj patrz punkt A.1.7).
||OAT/, &) UNS1ONlD /lRO|1||
128 Rozdzia 4. Typy kolumn
Maa liczba zmiennoprzecinkowa (o dokadnoci do jednego znaku). Liczba
ta moe przyj wartoci: od o408o466lo8 do ``/b494ob`lo8, 0,
i od ``/b494ob`lo8 do o408o466lo8. Jeli podany jest atrybut UN1S1ONlD,
niedozwolone s wartoci ujemne. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ ||OAT bez argumentw
lub typ ||OATR) (gdzie Rjest liczb z zakresu od 0 do 24) oznacza liczb
zmiennoprzecinkow o pojedynczej precyzji.
DOUB|l/, &) UNS1ONlD /lRO|1||
Standardowa liczba zmiennoprzecinkowa (o dokadnoci do dwch
znakw). Liczba ta moe przyj wartoci: od `/9/69o`o486o`b/lo08
do b0/o8b8b0/0`4lo08, 0, i od b0/o8b8b0/0`4lo08
do `/9/69o`o486o`b/lo08. Jeli podany jest atrybut UN1S1ONlD, wartoci
ujemne s niedozwolone. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ DOUB|l
bez argumentw lub ||OATR) (gdzie R jest liczb z zakresu od 25 do 53)
oznacza liczb zmiennoprzecinkow o podwjnej precyzji.
DOUB|l PRlC1S1ON/, &) UNS1ONlD /lRO|1||
RlA|/, &) UNS1ONlD /lRO|1||
S to synonimy DOUB|l. Wyjtek: Jeli dla parametru s;_cce serwera
wczono opcj RlA|_AS_||OAT, synonimem ||OAT jest RlA|, a nie DOUB|l.
DlC1MA|/, &) UNS1ONlD /lRO|1||
Niezapakowana liczba staoprzecinkowa. Zachowanie kolumny tego typu
przypomina kolumn typu CHAR. Niezapakowana oznacza, e liczba jest
przechowywana w postaci acucha przy uyciu jednego znaku na kad cyfr
wartoci. Parametr / definiuje maksymaln liczb cyfr, a & liczb miejsc
po przecinku. W parametrze / nie s brane pod uwag: kropka dziesitna
(odpowiadajca w naszej notacji przecinkowi) i (dla liczb ujemnych) znak ,
cho jest dla nich zarezerwowane miejsce. Wartoci nie maj miejsc
po przecinku lub czci uamkowych, jeli & jest rwne 0. Maksymalny zakres
wartoci typu DlC1MA| jest taki sam, jak dla typu DOUB|l, ale rzeczywisty zakres
danej kolumny DlC1MA| moe by ograniczony przez wybr argumentw / i &.
Jeli podany jest atrybut UN1S1ONlD, wartoci ujemne s niedozwolone.
W przypadku braku argumentu &, domyln wartoci jest 0. Jeli pominity
jest parametr /, domyln wartoci jest 10.
W wersjach poprzedzajcych MySQL 3.23 argument / musi by wystarczajco
duy, by zawiera obszar potrzebny dla znaku i kropki dziesitnej.
DlC/,&) UNS1ONlD /lRO|1||
NUMlR1C/,&) UNS1ONlD /lRO|1||
|1XlD/, &) UNS1ONlD /lRO|1||
S to synonimy typu DlC1MA|.
W MySQL 4.1.0 dodano synonim |1XlD w celu osignicia kompatybilnoci
z innymi serwerami.
4.1. Przegld typw dla kolumny 129
4.1.2. Przegld typw zwizanych z dat i czasem
Poniej znajduje si podsumowanie typw kolumn przeznaczonych dla czasu i daty.
Dodatkowe informacje na ten temat mona znale w podrozdziale 4.3. Wymogi do-
tyczce pamici potrzebnej do przechowywania danych w kolumnach zostay podane
w podrozdziale 4.5.
DATl
Data. Obsugiwany zakres obejmuje daty od ``0000`0`` do `9999`o``.
W MySQL wartoci DATl wywietlane s w formacie `RRRRMMDD`, ale mona
przypisywa wartoci do kolumn DATl przy uyciu acuchw lub liczb.
DATlT1Ml
Kombinacja daty i czasu. Obsugiwany zakres obejmuje wartoci
od ``0000`0` 000000` do `9999`o` ob9b9`. W MySQL wartoci
DATlT1Ml wywietlane s w formacie `RRRRMMDD OOMMSS`, ale mona
przypisywa wartoci do kolumn DATlT1Ml przy uyciu acuchw lub liczb.
T1MlSTAMP/)
Znacznik czasu. Obsugiwany zakres rozpoczyna si od daty ``9/00`0``
i siga roku 0o/.
Kolumna typu T1MlSTAMP przydaje si do rejestracji daty i godziny operacji
wstawiania lub aktualizacji. Pierwszej kolumnie T1MlSTAMP w tabeli
automatycznie przypisywana jest data i czas ostatniej operacji, jeli tylko tych
wartoci nie wprowadzi rcznie uytkownik. Dowolnej kolumnie T1MlSTAMP
mona rwnie przypisa biec dat i godzin, wpisujc do niej warto NU||.
Od MySQL 4.1 wartoci T1MlSTAMP s zwracane w postaci acuchw
w formacie `RRRRMMDD OOMMSS`. Aby uzyska warto w postaci liczby,
naley doda do kolumn tego typu 0. Inne szerokoci wywietlania
znacznika czasu nie s obsugiwane.
W wersjach poprzedzajcych MySQL 4.1 wartoci T1MlSTAMP s wywietlane
w formacie RRRRMMDDOOMMSS, RRMMDDOOMMSS, RRRRMMDD lub RRMMDD w zalenoci
od tego, czy parametr / jest rwny 14 (albo go brak), 12, 8 lub 6. Mona jednak
przypisywa wartoci do kolumn T1MlSTAMP przy uyciu acuchw lub liczb.
Argument / wpywa tylko na sposb wywietlania kolumny T1MlSTAMP, a nie
na jej przechowywanie. Wartoci kolumny s zawsze zapisywane w czterech
bajtach. W MySQL od wersji 4.0.12 pojawia si opcja ne., dziki ktrej
mona zmieni dziaanie serwera, upodabniajc je do MySQL 4.1.
Naley odnotowa, e kolumny T1MlSTAMP/), gdzie /jest rwne 8 lub 14,
s traktowane jako liczby, natomiast reszta kolumn T1MlSTAMP/) jest
traktowana jako acuchy. Jest to rodzaj gwarancji, e uytkownik bdzie
mg wiarygodnie usuwa i przywraca tabele tego typu.
T1Ml
Godzina. Obsugiwany zakres obejmuje wartoci od `8o8b9b9`
do ` 8o8b9b9`. W MySQL wartoci T1Ml wywietlane s w formacie
` OOMMSS`, ale mona przypisa wartoci do kolumn T1Ml przy uyciu
zarwno acuchw, jak i liczb.
130 Rozdzia 4. Typy kolumn
YlAR|4)
Rok w formacie dwu- lub czterocyfrowym. Domylnym formatem jest rok
zapisany za pomoc czterech cyfr. W tym formacie dostpne wartoci nale
do przedziau od `90` do `bb oraz 0. W formacie dwucyfrowym wartoci
dopuszczalne to liczby z zakresu od /0 do 69, ktre reprezentuj daty od roku
1970 do 2069. W MySQL wartoci YlAR wywietlane s w formacie RRRR,
ale mona przypisa wartoci do kolumn YlAR przy uyciu tak acuchw,
jak i liczb. Typ YlAR jest niedostpny dla wersji wczeniejszych ni MySQL 3.22.
4.1.3. Przegld typw acuchowych
Poniej znajduje si przegld typw acuchowych. Dodatkowe informacje mona
znale w podrozdziale 4.4. Wymogi dotyczce pamici potrzebnej do przechowywa-
nia danych w kolumnach zostay podane w podrozdziale 4.5.
W niektrych przypadkach MySQL moe zmieni kolumn typu acuchowego na typ,
ktry bdzie si rni od zadeklarowanego w instrukcji CRlATl TAB|l lub A|TlR TAB|l.
Wicej informacji na ten temat znajduje si w podpunkcie 6.2.5.2.
Od wersji 4.1 w MySQL pojawia si zmiana, ktra wpywa na wiele typw kolumn typu
acuchowego. Definicja kolumn typu znakowego moe zawiera atrybut CHARACTlR
SlT, ktry okrela zestaw znakw i opcjonalnie porzdek sortowania. Dotyczy to typw
CHAR, VARCHAR, rnych typw TlXT oraz lNUM i SlT, na przykad:
CRF/TF T/B|F !
FNUMYCTVQ
YCTVQ|
1 lub 2 bajty w zalenoci od liczby wartoci wyliczenia
(maksymalnie 65 535)
SFTYCTVQ
YCTVQ|
1, 2, 3, 4 lub 8 bajtw w zalenoci od liczby elementw zestawu
(maksymalnie 64)
Typy VARCHAR, B|OB i TlXT maj zmienn dugo. Dla kadego ilo pamici potrzeb-
nej do przechowania wartoci bdzie zalee od faktycznej dugoci wartoci kolumny
(reprezentowanej w ostatniej tabeli przez .), a nie od maksymalnego moliwego roz-
miaru danego typu. Kolumna VARCHAR`0) na przykad moe przechowywa acuch
o maksymalnej dugoci 10 znakw. Faktyczna ilo wymaganej pamici to dugo
acucha (.) plus 1 bajt do zapisania dugoci acucha. Dla acucha `.|cc` parametr
. jest rwny 4, a wymagany rozmiar pamici to 5 bajtw.
Typy B|OB i TlXT wymagaj 1, 2, 3 lub 4 bajtw do zapisu dugoci wartoci kolumny
w zalenoci od maksymalnej moliwej dugoci tego typu (patrz punkt 4.4.2).
Rozmiar obiektu lNUM jest ustalany na podstawie liczby rnych wartoci wyliczenia.
Przy wyliczeniach do 255 moliwych wartoci uywany jest jeden bajt, a przy wyli-
czeniach do 65 535 wartoci uywane s 2 bajty (patrz punkt 4.4.3).
Rozmiar obiektu SlT jest okrelany przez liczb rnych elementw zestawu. Jeli ze-
staw ma rozmiar 0, obiekt zajmuje 0/).8 bajtw, ktr to warto zaokrgla si do
1, 2, 3, 4 lub 8 bajtw. Obiekt SlT moe mie do 64 elementw (patrz punkt 4.4.4).
4.6. Wybieranie odpowiedniego typu
dla kolumny
Aby jak najbardziej wydajnie korzysta z pamici, naley we wszystkich przypadkach
stara si stosowa typ, ktry bdzie jak najbardziej dokadny. Jeli na przykad w kolum-
nie liczb cakowitych bd przechowywane wartoci z zakresu od ` do 99999, najlep-
szym wyborem bdzie typ MlD1UM1NT UNS1ONlD. Ze wszystkich typw, ktre reprezentuj
wszystkie wymagane wartoci, zajmuje najmniej pamici.
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych 153
Powszechnym problemem jest dokadne przedstawianie wartoci walutowych. W MySQL
naley do tego uywa typu DlC1MA|, za pomoc ktrego wartoci zapisywane s w for-
mie acucha. Dziki temu nie traci si na dokadnoci (mimo to obliczenia z wartociami
DlC1MA| mog by wci wykonywane przy uyciu operacji dziaajcych na liczbach
z podwjn precyzj). Jeli dokadno nie jest zbyt wana, by moe wystarczajco
dobrym typem bdzie DOUB|l.
Aby uzyska wiksz dokadno, mona zawsze przeksztaci warto na typ stao-
przecinkowy, przechowywany w B1O1NT. Pozwoli to wykonywa wszystkie obliczenia
na liczbach cakowitych i tylko w razie potrzeby przeksztaca wynik z powrotem na
wartoci zmiennoprzecinkowe.
4.7. Wykorzystywanie typw kolumn
z innych mechanizmw baz danych
Aby uatwi uytkownikowi zastosowanie kodu pochodzcego od innych producentw,
moliwe jest odwzorowanie typw kolumn w sposb przedstawiony w poniszej tabeli.
Odwzorowania te upraszczaj operacj importu do MySQL definicji tabel z innych
mechanizmw baz danych:
Typ innych producentw Typ MySQL
BTN/RY/| C'/R/| BTN/RY
C'/R V/RYTN/| V/RC'/R/|
F|J/T4 F|J/T
F|J/T8 OJUB|F
TNT1 TTNYTNT
TNT SM/||TNT
TNT: MFOTUMTNT
TNT4 TNT
TNT8 BTTNT
|JN V/RBTN/RY MFOTUMB|JB
|JN V/RC'/R MFOTUMTFXT
|JN MFOTUMTFXT oc M,SJ| 410|
MTOO|FTNT MFOTUMTNT
V/RBTN/RY/| C'/R/| BTN/RY
Odwzorowanie typw kolumn jest wykonywane podczas tworzenia tabeli, po czym
oryginalne deklaracje typu zostaj usunite. Jeli uytkownik utworzy tabel z typami
stosowanymi przez innych producentw, po czym wyda polecenie DlSCR1Bl PC\YCA
VCDGNK, zostanie przedstawiona struktura tabeli z odpowiadajcymi im typami MySQL.
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
PRZYKADOWY ROZDZIA PRZYKADOWY ROZDZIA
IDZ DO IDZ DO
ZAMW DRUKOWANY KATALOG ZAMW DRUKOWANY KATALOG
KATALOG KSIEK KATALOG KSIEK
TWJ KOSZYK TWJ KOSZYK
CENNIK I INFORMACJE CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK ZAMW CENNIK
CZYTELNIA CZYTELNIA
FRAGMENTY KSIEK ONLINE FRAGMENTY KSIEK ONLINE
SPIS TRECI SPIS TRECI
DODAJ DO KOSZYKA DODAJ DO KOSZYKA
KATALOG ONLINE KATALOG ONLINE
MySQL. Opis jzyka
Autor: Paul Dubois
Tumaczenie: Pawe Gonera, Anna Zawadzka
ISBN: 83-7361-688-8
Tytu oryginau: MySQL Language Reference
Format: B5, stron: 472
MySQL to najpopularniejsza na wiecie baza danych dostpna na licencji open
source. Dziki swojej wydajnoci, szybkoci dziaania, stabilnoci i rozbudowanym
mechanizmom zabezpiecze jest wykorzystywana niemal do wszystkich zada, do
jakich moe by potrzebna baza danych. Stanowi zaplecze dla wielu aplikacji
korporacyjnych, witryn WWW i sklepw internetowych. Bogactwo funkcji i moliwoci
to ogromna zaleta rodowiska MySQL, jednake zapamitanie skadni, parametrw
i sposobw stosowania wszystkich polece i rozszerze jest praktycznie niemoliwe.
Kady, kto chce biegle posugiwa si t baz, powinien mie pod rk materiay
opisujce stosowany w niej jzyk SQL.
Ksika MySQL. Opis jzyka to najlepsze rdo takich informacji. Stworzona,
zredagowana i sprawdzona przez pracownikw dziaw pomocy i produkcji firmy
MySQL AB publikacja zawiera wszystko, co moe by potrzebne uytkownikowi bazy
danych MySQL. Przedstawia zarwno zagadnienia podstawowe, takie jak: struktura
jzyka, typy danych i zasady konstruowania zapyta, jak i tematy zaawansowane:
transakcje, replikacj oraz administrowanie baz. Szczegowo opisane s rwnie
wszystkie zagadnienia zwizane z zaimplementowanym w niej jzykiem SQL.
Podstawowe informacje o MySQL
Jzyk SQL instrukcje, typy danych, funkcje i operatory
Zapytania
Definiowanie danych
Obsuga transakcji
Zarzdzanie kontami uytkownikw
Konserwacja tabel
Replikacja baz danych
Rozszerzenia MySQL dla systemw GIS
Procedury skadowane
Obsuga bdw
Spis treci
Rozdzia 1. Informacje oglne.............................................................................. 9
1.1. Na temat tego podrcznika....................................................................................... 9
1.1.1. Zasady przyjte w tym podrczniku .......................................................... 10
1.2. Omwienie systemu zarzdzania baz danych MySQL......................................... 12
1.2.1. Historia MySQL........................................................................................ 13
1.2.2. Gwne cechy MySQL.............................................................................. 14
1.2.3. Stabilno MySQL .................................................................................... 17
1.2.4. Jak due mog by tabele MySQL ............................................................ 18
1.2.5. Zgodno z rokiem 2000 ........................................................................... 19
1.3. Omwienie MySQL AB ........................................................................................ 21
1.3.1. Model biznesowy i usugi MySQL AB...................................................... 22
1.3.2. Informacje o kontakcie .............................................................................. 25
1.4. Obsuga techniczna oraz wydawanie licencji MySQL........................................... 26
1.4.1. Obsuga techniczna oferowana przez MySQL AB........................................ 26
1.4.2. Prawa autorskie i licencje .......................................................................... 27
1.4.3. Licencje MySQL ....................................................................................... 28
1.4.4. Logo i znaki towarowe MySQL ................................................................ 30
1.5. Plany rozwoju MySQL .......................................................................................... 32
1.5.1. MySQL 4.0 w skrcie................................................................................ 33
1.5.2. MySQL 4.1 w skrcie................................................................................ 35
1.5.3. MySQL 5.0: nastpna wersja rozwojowa .................................................. 37
1.6. MySQL i przyszo (TODO) ................................................................................ 37
1.6.1. Nowe mechanizmy planowane dla wersji 4.1............................................ 38
1.6.2. Nowe funkcje planowane dla wersji 5.0.................................................... 38
1.6.3. Nowe funkcje planowane dla 5.1............................................................... 39
1.6.4. Nowe funkcje planowane w bliskiej przyszoci ......................................... 40
1.6.5. Nowe funkcje planowane w niezbyt odlegej przyszoci.......................... 43
1.6.6. Nowe funkcje, ktrych wdroenia nie planujemy.......................................... 44
1.7. rda informacji o MySQL .................................................................................. 45
1.7.1. Listy dyskusyjne powicone MySQL ...................................................... 45
1.7.2. Wspomaganie rodowiska MySQL na IRC (Internet Relay Chat)............. 54
1.8. Zgodno MySQL ze standardami ......................................................................... 55
1.8.1. Standardy speniane przez MySQL............................................................ 56
1.8.2. Wybieranie trybw MySQL ...................................................................... 56
1.8.3. Uruchamianie MySQL w trybie ANSI ...................................................... 56
1.8.4. Rozszerzenia MySQL do standardu SQL.................................................. 57
4 Spis treci
1.8.5. Rozbienoci midzy MySQL a standardem SQL ........................................ 60
1.8.6. Jak MySQL radzi sobie z ograniczeniami ................................................. 67
1.8.7. Znane bdy i projektowe braki w MySQL................................................ 69
Rozdzia 2. Struktura jzyka .............................................................................. 77
2.1. Literay................................................................................................................... 77
2.1.1. acuchy ................................................................................................... 77
2.1.2. Liczby........................................................................................................ 80
2.1.3. Wartoci szesnastkowe .............................................................................. 80
2.1.4. Wartoci logiczne ...................................................................................... 81
2.1.5. Wartoci NULL......................................................................................... 81
2.2. Nazwy baz danych, tabel, indeksw, kolumn i aliasw......................................... 81
2.2.1. Kwalifikatory identyfikatorw .................................................................. 83
2.2.2. Znaczenie wielkoci liter w nazwach identyfikatorw.............................. 83
2.3. Zmienne definiowane przez uytkownika.............................................................. 85
2.4. Zmienne systemowe............................................................................................... 87
2.4.1. Strukturalne zmienne systemowe .............................................................. 89
2.5. Skadnia komentarza .............................................................................................. 91
2.6. Traktowanie sw zastrzeonych w MySQL.......................................................... 92
Rozdzia 3. Obsuga zestaww znakw............................................................... 95
3.1. Oglne informacje o zestawach znakw i sortowaniu ........................................... 95
3.2. Zestawy znakw i porzdki sortowania w MySQL................................................ 96
3.3. Okrelanie domylnego zestawu znakw i sortowania........................................... 98
3.3.1. Zestaw znakw i sortowanie dla serwera................................................... 98
3.3.2. Zestaw znakw i sortowanie dla bazy danych........................................... 99
3.3.3. Zestaw znakw i sortowanie dla tabeli .................................................... 100
3.3.4. Zestaw znakw i sortowanie dla kolumny............................................... 100
3.3.5. Przykady przypisywania zestawu znakw i sortowania ......................... 101
3.3.6. Zestawy znakw i sortowanie dla poczenia .......................................... 102
3.3.7. Zestaw znakw i sortowanie dla acucha znakw.................................. 104
3.3.8. Wykorzystywanie COLLATE w instrukcjach SQL.................................... 105
3.3.9. Priorytet klauzuli COLLATE .................................................................. 106
3.3.10. Operator BINARY................................................................................... 106
3.3.11. Niektre przypadki specjalne, w ktrych trudno okreli sortowanie...... 106
3.3.12. Sortowania musz by odpowiednie dla danego zestawu znakw........... 107
3.3.13. Przykad wpywu porzdku sortowania ................................................... 108
3.4. Operacje, na ktre ma wpyw obsuga zestaww znakw.................................... 109
3.4.1. acuchy wyjciowe ............................................................................... 109
3.4.2. CONVERT()............................................................................................ 110
3.4.3. CAST() .................................................................................................... 110
3.4.4. Instrukcje SHOW .................................................................................... 111
3.5. Obsuga Unicode.................................................................................................. 112
3.6. UTF8 dla metadanych.......................................................................................... 113
3.7. Kompatybilno z innymi systemami zarzdzania baz danych .......................... 115
3.8. Nowy format pliku konfiguracji zestawu znakw................................................ 115
3.9. Narodowe zestawy znakw.................................................................................. 115
3.10. Aktualizacja zestaww znakw z MySQL 4.0..................................................... 116
3.10.1. Zestawy znakw w wersji 4.0 i odpowiadajce im w wersji 4.1 pary
skadajce si z zestawu znakw i sortowania......................................... 117
3.10.2. Przeksztacanie kolumn znakowych wersji 4.0 na format 4.1 ................. 118
3.11. Zestawy znakw i sortowania obsugiwane przez MySQL.................................. 118
3.11.1. Zestawy znakw standardu Unicode ....................................................... 119
3.11.2. Zestawy znakw zachodnioeuropejskich................................................. 120
3.11.3. Zestawy znakw dla Europy Centralnej .................................................. 121
Spis treci 5
3.11.4. Zestawy znakw poudniowoeuropejskich i rodkowowschodnich......... 122
3.11.5. Zestawy znakw regionu batyckiego...................................................... 123
3.11.6. Zestawy znakw dla cyrylicy................................................................... 123
3.11.7. Azjatyckie zestawy znakw..................................................................... 124
Rozdzia 4. Typy kolumn.................................................................................. 125
4.1. Przegld typw dla kolumny................................................................................ 126
4.1.1. Omwienie typw liczbowych ................................................................ 126
4.1.2. Przegld typw zwizanych z dat i czasem............................................ 129
4.1.3. Przegld typw acuchowych ................................................................ 130
4.2. Typy liczbowe...................................................................................................... 132
4.3. Typy zwizane z dat i czasem............................................................................ 135
4.3.1. Typy DATETIME, DATE i TIMESTAMP............................................. 137
4.3.2. Typ TIME................................................................................................ 142
4.3.3. Typ YEAR............................................................................................... 143
4.3.4. Problem roku 2000 a typy zwizane z dat.............................................. 144
4.4. Typy acuchowe ................................................................................................. 144
4.4.1. Typy CHAR i VARCHAR...................................................................... 144
4.4.2. Typy BLOB i TEXT................................................................................ 146
4.4.3. Typ Enum................................................................................................ 147
4.4.4. Typ SET .................................................................................................. 149
4.5. Rozmiar pamici potrzebnej dla typw kolumn................................................... 151
4.6. Wybieranie odpowiedniego typu dla kolumny..................................................... 152
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych ............... 153
Rozdzia 5. Funkcje i operatory........................................................................ 155
5.1. Operatory ............................................................................................................. 156
5.1.1. Nawiasy................................................................................................... 156
5.1.2. Operatory porwnania ............................................................................. 156
5.1.3. Operatory logiczne .................................................................................. 161
5.1.4. Operatory rozrniania wielkoci liter..................................................... 163
5.2. Funkcje kontroli przepywu ................................................................................. 163
5.3. Funkcje acuchowe............................................................................................. 166
5.3.1. Funkcje porwnywania acuchw.......................................................... 176
5.4. Funkcje liczbowe ................................................................................................. 178
5.4.1. Operatory arytmetyczne........................................................................... 178
5.4.2. Funkcje matematyczne ............................................................................ 180
5.5. Funkcje daty i godziny......................................................................................... 186
5.6. Funkcje obsugi wyszukiwania penotekstowego................................................. 202
5.6.1. Boolowskie wyszukiwania penotekstowe............................................... 205
5.6.2. Wyszukiwania penotekstowe z rozwijaniem zapytania .......................... 207
5.6.3. Ograniczenia dla wyszukiwania penotekstowego................................... 208
5.6.4. Modyfikowanie wyszukiwania penotekstowego MySQL ...................... 209
5.6.5. Lista rzeczy do zrobienia dla wyszukiwania penotekstowego................ 211
5.7. Funkcje konwersji typw..................................................................................... 211
5.8. Inne funkcje ......................................................................................................... 214
5.8.1. Funkcje bitowe ........................................................................................ 214
5.8.2. Funkcje szyfrujce................................................................................... 215
5.8.3. Funkcje informacyjne .............................................................................. 219
5.8.4. Funkcje rne .......................................................................................... 223
5.9. Funkcje i modyfikatory do zastosowania z klauzulami GROUP BY................... 226
5.9.1. Funkcje GROUP BY (agregujce)........................................................... 226
5.9.2. Modyfikatory GROUP BY...................................................................... 229
5.9.3. GROUP BY z ukrytymi polami............................................................... 232
6 Spis treci
Rozdzia 6. Skadnia instrukcji SQL .................................................................. 235
6.1. Instrukcje operujce na danych............................................................................ 235
6.1.1. Skadnia instrukcji DELETE................................................................... 235
6.1.2. Skadnia instrukcji DO ............................................................................ 238
6.1.3. Skadnia instrukcji HANDLER............................................................... 238
6.1.4. Skadnia instrukcji INSERT .................................................................... 240
6.1.5. Skadnia instrukcji LOAD DATA INFILE.............................................. 246
6.1.6. Skadnia instrukcji REPLACE................................................................. 255
6.1.7. Skadnia instrukcji SELECT.................................................................... 256
6.1.8. Skadnia podzapyta................................................................................ 265
6.1.9. Skadnia instrukcji TRUNCATE............................................................. 276
6.1.10. Skadnia instrukcji UPDATE................................................................... 276
6.2. Instrukcje definiowania danych ........................................................................... 278
6.2.1. Skadnia instrukcji ALTER DATABASE ............................................... 278
6.2.2. Skadnia instrukcji ALTER TABLE........................................................ 279
6.2.3. Skadnia instrukcji CREATE DATABASE............................................. 285
6.2.4. Skadnia instrukcji CREATE INDEX ..................................................... 285
6.2.5. Skadnia instrukcji CREATE TABLE..................................................... 287
6.2.6. Skadnia instrukcji DROP DATABASE.................................................. 301
6.2.7. Skadnia instrukcji DROP INDEX.......................................................... 302
6.2.8. Skadnia instrukcji DROP TABLE.......................................................... 302
6.2.9. Skadnia instrukcji RENAME TABLE.................................................... 303
6.3. Instrukcje programu MySQL............................................................................... 304
6.3.1. Skadnia instrukcji DESCRIBE
(odczytywanie informacji na temat kolumn) ........................................... 304
6.3.2. Skadnia instrukcji USE........................................................................... 304
6.4. Instrukcje obsugi transakcji i blokowania........................................................... 305
6.4.1. Skadnia instrukcji START TRANSACTION, COMMIT
oraz ROLLBACK.................................................................................... 305
6.4.2. Instrukcje niemoliwe do wycofania ....................................................... 306
6.4.3. Instrukcje wykonujce niejawne zatwierdzenie......................................... 306
6.4.4. Skadnia instrukcji SAVEPOINT i ROLLBACK TO SAVEPOINT....... 307
6.4.5. Skadnia instrukcji LOCK TABLES oraz UNLOCK TABLES .............. 307
6.4.6. Skadnia instrukcji SET TRANSACTION.............................................. 310
6.5. Administracja baz danych .................................................................................. 311
6.5.1. Instrukcje zarzdzajce kontami uytkownikw ....................................... 311
6.5.2. Instrukcje do konserwacji tabel ............................................................... 319
6.5.3. Skadnia instrukcji SET i SHOW ............................................................ 326
6.5.4. Inne instrukcje administracyjne ............................................................... 347
6.6. Instrukcje replikacji.............................................................................................. 352
6.6.1. Instrukcje SQL sterujce serwerem gwnym ......................................... 352
6.6.2. Instrukcje SQL sterujce serwerami podrzdnymi .................................. 354
Rozdzia 7. Rozszerzenia przestrzenne w MySQL............................................... 365
7.1. Wstp ................................................................................................................... 365
7.2. Model geometryczny OpenGIS............................................................................ 366
7.2.1. Hierarchia klas geometrycznych.............................................................. 366
7.2.2. Klasa Geometry ....................................................................................... 368
7.2.3. Klasa Point .............................................................................................. 369
7.2.4. Klasa Curve ............................................................................................. 369
7.2.5. Klasa LineString...................................................................................... 370
7.2.6. Klasa Surface........................................................................................... 370
7.2.7. Klasa Polygon.......................................................................................... 370
7.2.8. Klasa GeometryCollection....................................................................... 371
Spis treci 7
7.2.9. Klasa MultiPoint...................................................................................... 371
7.2.10. Klasa MultiCurve .................................................................................... 372
7.2.11. Klasa MultiLineString............................................................................. 372
7.2.12. Klasa MultiSurface .................................................................................. 372
7.2.13. Klasa MultiPolygon................................................................................. 373
7.3. Obsugiwane formaty danych przestrzennych...................................................... 373
7.3.1. Format tekstowy WKT............................................................................ 374
7.3.2. Format binarny WKB.............................................................................. 374
7.4. Tworzenie bazy danych z rozszerzeniami przestrzennymi................................... 375
7.4.1. Typy danych przestrzennych w MySQL ................................................. 375
7.4.2. Tworzenie wartoci przestrzennych......................................................... 376
7.4.3. Tworzenie kolumn przestrzennych.......................................................... 379
7.4.4. Wypenianie kolumn przestrzennych....................................................... 379
7.4.5. Pobieranie danych przestrzennych........................................................... 381
7.5. Analiza informacji przestrzennych....................................................................... 381
7.5.1. Funkcje konwersji formatw geometrycznych ........................................ 382
7.5.2. Funkcje klasy Geometry.......................................................................... 382
7.5.3. Funkcje tworzce nowe geometrie na podstawie istniejcych................. 388
7.5.4. Funkcje testujce relacje przestrzenne
midzy obiektami geometrycznymi ......................................................... 389
7.5.5. Relacje midzy minimalnymi prostoktami otaczajcymi
dla poszczeglnych geometrii.................................................................. 390
7.5.6. Funkcje sprawdzajce relacje przestrzenne pomidzy geometriami ........ 391
7.6. Optymalizacja analizy przestrzennej.................................................................... 392
7.6.1. Tworzenie indeksw przestrzennych....................................................... 392
7.6.2. Wykorzystanie indeksu przestrzennego................................................... 393
7.7. Zgodno MySQL ze standardem........................................................................ 395
7.7.1. Niezaimplementowane funkcje GIS ........................................................ 395
Rozdzia 8. Procedury i funkcje skadowane ..................................................... 397
8.1. Skadnia procedur skadowanych......................................................................... 398
8.1.1. Utrzymanie procedur skadowanych........................................................ 398
8.1.2. SHOW PROCEDURE STATUS oraz SHOW FUNCTION STATUS.... 401
8.1.3. Instrukcja CALL...................................................................................... 402
8.1.4. Instrukcja zoona BEGIN ... END.......................................................... 402
8.1.5. Instrukcja DECLARE.............................................................................. 402
8.1.6. Zmienne w procedurach skadowanych................................................... 402
8.1.7. Warunki i podprogramy obsugi .............................................................. 403
8.1.8. Kursory.................................................................................................... 405
8.1.9. Konstrukcje sterowania przepywem sterowania..................................... 406
Rozdzia 9. Obsuga bdw w MySQL .............................................................. 409
9.1. Zwracane bdy.................................................................................................... 409
9.2. Komunikaty bdw............................................................................................. 419
Dodatek A Rozwizywanie problemw z zapytaniami ........................................435
A.1. Zagadnienia zwizane z zapytaniami ................................................................... 435
A.1.1. Wielko liter przy wyszukiwaniu........................................................... 435
A.1.2. Problemy z kolumnami typu DATE ........................................................ 436
A.1.3. Problemy z wartociami NULL............................................................... 437
A.1.4. Problemy z synonimami kolumn ............................................................. 438
A.1.5. Bd wycofania dla tabel nietransakcyjnych............................................ 439
A.1.6. Usuwanie wierszy ze zwizanych tabel ................................................... 439
A.1.7. Rozwizywanie problemw z brakujcymi wierszami ............................ 440
A.1.8. Problemy z porwnaniami zmiennoprzecinkowymi................................ 441
8 Spis treci
A.2. Problemy zwizane z optymalizatorem................................................................ 443
A.3. Problemy z definicj tabel.................................................................................... 444
A.3.1. Problemy z instrukcj ALTER TABLE................................................... 444
A.3.2. Jak zmieni porzdek kolumn w tabeli .................................................... 445
A.3.3. Problemy z tabelami tymczasowymi ....................................................... 445
Dodatek B Wyraenia regularne w MySQL........................................................ 447
Skorowidz...................................................................................... 451
Rozdzia 4.
Typy kolumn
W MySQL dostpnych jest wiele typw danych, ktre mona pogrupowa w kilku pod-
stawowych kategoriach, takich jak typy liczbowe, typy zwizane z dat i czasem oraz
typy acuchowe. Na pocztku tego rozdziau przedstawiony zostanie przegld wspo-
mnianych przed chwil typw kolumn, po czym nastpi bardziej szczegowy opis ich
waciwoci z podziaem na poszczeglne kategorie i wreszcie zamieszczone zostanie
podsumowanie informacji dotyczcych wymaga co do rozmiaru pamici potrzebnej
do przechowania danej kolumny. Sam przegld jest z zamierzenia krtki. Dodatkowe
informacje o poszczeglnych typach kolumn, na przykad dopuszczalny format, w kt-
rym mona deklarowa wartoci, zostay uwzgldnione w szczegowych omwieniach.
Od wersji 4.1 MySQL rozpoznaje rozszerzenia do obsugi danych przestrzennych.
Informacje o typach przestrzennych znajduj si w rozdziale 7. tego podrcznika.
W czci opisu typw kolumn zastosowane zostay nastpujce reguy:
/
Wskazuje maksymalny rozmiar wywietlania liczby lub acucha.
Maksymalnym dopuszczalnym rozmiarem wywietlania jest 255.
&
Dotyczy typw zmiennoprzecinkowych i staoprzecinkowych. Okrela liczb
cyfr po kropce dziesitnej. Maksymalna dopuszczalna warto wynosi 30,
ale nie powinna przekracza /.
Nawiasy kwadratowe ( ) identyfikuj opcjonalne fragmenty deklaracji typu.
126 Rozdzia 4. Typy kolumn
4.1. Przegld typw dla kolumny
4.1.1. Omwienie typw liczbowych
Poniej znajduje si przegld liczbowych typw dla kolumn. Bardziej szczegowe
informacje mona znale w podrozdziale 4.2. Wymogi dotyczce rozmiaru pamici
potrzebnej do przechowywania kolumn znajduj si w podrozdziale 4.5.
Jeli dla kolumny liczbowej zostanie okrelony atrybut /lRO|1||, MySQL automatycznie
doda do kolumny atrybut UN1S1ONlD.
Naley uwaa podczas odejmowania dwch wartoci liczbowych, z ktrych jedna ma
typ UN1S1ONlD. Uzyskany wynik bdzie rwnie tego typu! patrz podrozdzia 5.7.
T1NY1NT/) UNS1ONlD /lRO|1||
Bardzo maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od `8
do `/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do bb.
B1T, BOO|, BOO|lAN
To s synonimy T1NY1NT`). Synonim BOO|lAN zosta dodany w MySQL 4.1.0.
Warto zerowa to inaczej fasz. Wartoci niezerowe traktowane s jako prawda.
W przyszoci wprowadzona zostanie pena, zgodna ze standardem SQL
obsuga typu boolowskiego.
SMA||1NT/) UNS1ONlD /lRO|1||
Maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od o/68
do o/6/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do 6bbob.
MlD1UM1NT/) UNS1ONlD /lRO|1||
rednia liczba cakowita. Dla liczb ze znakiem zakres wynosi od 8o88608
do 8o8860/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0
do `6///`b.
1NT/) UNS1ONlD /lRO|1||
Standardowa liczba cakowita. Dla liczb ze znakiem zakres wynosi
od `4/48o648 do `4/48o64/. W przypadku liczb bez znaku zakres
obejmuje wartoci od 0 do 49496/9b.
1NTlOlR/) UNS1ONlD /lRO|1||
Jest to synonim dla typu 1NT.
B1O1NT/) UNS1ONlD /lRO|1||
Dua liczba cakowita. Dla liczb ze znakiem zakres wynosi
od 9oo/0o68b4//b808 do 9oo/0o68b4//b80/. W przypadku liczb
bez znaku zakres obejmuje wartoci od 0 do `8446/440/o/09bb`6`b.
4.1. Przegld typw dla kolumny 127
Oto kilka spraw, o ktrych naley wiedzie odnonie kolumn typu B1O1NT:
Wszystkie obliczenia wykonywane s przy uyciu wartoci typu B1O1NT
lub DOUB|l ze znakiem. Oznacza to, e duych liczb cakowitych bez
znaku, wikszych ni 9oo/0o68b4//b80/ (63 bity), mona uywa tylko
z funkcjami bitowymi! Niezastosowanie si do tej zasady moe doprowadzi
do uzyskania w wyniku liczby, ktrej kilka ostatnich cyfr jest bdnych
z powodu bdw w zaokrglaniu podczas konwersji wartoci B1O1NT
na DOUB|l.
MySQL 4.0 potrafi obsugiwa B1O1NT w nastpujcych przypadkach:
Podczas wykorzystywania liczb cakowitych do przechowywania
duych wartoci bez znaku w kolumnie typu B1O1NT.
W M1NPC\YCAMQN) lub MAXPC\YCAMQN), gdzie PC\YCAMQN odnosi si
do kolumny B1O1NT.
Podczas korzystania z operatorw (midzy innymi , , *), gdy oba
argumenty s liczbami cakowitymi.
Zawsze istnieje moliwo zapisania w kolumnie B1O1NT dokadnej wartoci
liczby cakowitej. Wystarczy zapisa j przy uyciu acucha. W takim
przypadku zostanie dokonana konwersja acucha na liczb; konwersja
nie bdzie wymaga poredniego etapu przeksztacajcego liczb na jej
odpowiednik o podwjnej precyzji.
Podczas korzystania z operatorw , i * stosowana jest arytmetyka
B1O1NT, jeli oba argumenty maj warto liczby cakowitej! To oznacza,
e pomnoenie dwch duych liczb cakowitych (lub wynikw funkcji,
ktra zwraca liczby cakowite) moe spowodowa nieoczekiwane
rezultaty, jeli wynik przekroczy liczb 9oo/0o68b4//b80/.
||OATR) UNS1ONlD /lRO|1||
Liczba zmiennoprzecinkowa. Parametr R oznacza precyzj i moe przyjmowa
warto od 0 do 14 dla liczb zmiennoprzecinkowych o dokadnoci do jednego
znaku i od 25 do 53 dla liczb zmiennoprzecinkowych o dokadnoci do dwch
znakw. To przypomina opisane poniej typy ||OAT i DOUB|l. Typ ||OATR)
ma ten sam zakres, jaki posiadaj odpowiadajce mu typy ||OAT i DOUB|l,
ale w jego przypadku niezdefiniowany jest maksymalny rozmiar wywietlania
i liczba miejsc po przecinku.
Od wersji 3.23 MySQL jest to prawdziwa warto zmiennoprzecinkowa.
W wersjach wczeniejszych liczba typu ||OATR) bya zawsze liczb o dwch
miejscach po przecinku.
Ta skadnia zostaa dodana w celu zachowania zgodnoci ze standardem ODBC.
Stosowanie typu ||OAT moe spowodowa wystpienie pewnych
nieoczekiwanych problemw, poniewa wszystkie obliczenia w MySQL
s wykonywane z podwjn precyzj patrz punkt A.1.7).
||OAT/, &) UNS1ONlD /lRO|1||
128 Rozdzia 4. Typy kolumn
Maa liczba zmiennoprzecinkowa (o dokadnoci do jednego znaku). Liczba
ta moe przyj wartoci: od o408o466lo8 do ``/b494ob`lo8, 0,
i od ``/b494ob`lo8 do o408o466lo8. Jeli podany jest atrybut UN1S1ONlD,
niedozwolone s wartoci ujemne. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ ||OAT bez argumentw
lub typ ||OATR) (gdzie Rjest liczb z zakresu od 0 do 24) oznacza liczb
zmiennoprzecinkow o pojedynczej precyzji.
DOUB|l/, &) UNS1ONlD /lRO|1||
Standardowa liczba zmiennoprzecinkowa (o dokadnoci do dwch
znakw). Liczba ta moe przyj wartoci: od `/9/69o`o486o`b/lo08
do b0/o8b8b0/0`4lo08, 0, i od b0/o8b8b0/0`4lo08
do `/9/69o`o486o`b/lo08. Jeli podany jest atrybut UN1S1ONlD, wartoci
ujemne s niedozwolone. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ DOUB|l
bez argumentw lub ||OATR) (gdzie R jest liczb z zakresu od 25 do 53)
oznacza liczb zmiennoprzecinkow o podwjnej precyzji.
DOUB|l PRlC1S1ON/, &) UNS1ONlD /lRO|1||
RlA|/, &) UNS1ONlD /lRO|1||
S to synonimy DOUB|l. Wyjtek: Jeli dla parametru s;_cce serwera
wczono opcj RlA|_AS_||OAT, synonimem ||OAT jest RlA|, a nie DOUB|l.
DlC1MA|/, &) UNS1ONlD /lRO|1||
Niezapakowana liczba staoprzecinkowa. Zachowanie kolumny tego typu
przypomina kolumn typu CHAR. Niezapakowana oznacza, e liczba jest
przechowywana w postaci acucha przy uyciu jednego znaku na kad cyfr
wartoci. Parametr / definiuje maksymaln liczb cyfr, a & liczb miejsc
po przecinku. W parametrze / nie s brane pod uwag: kropka dziesitna
(odpowiadajca w naszej notacji przecinkowi) i (dla liczb ujemnych) znak ,
cho jest dla nich zarezerwowane miejsce. Wartoci nie maj miejsc
po przecinku lub czci uamkowych, jeli & jest rwne 0. Maksymalny zakres
wartoci typu DlC1MA| jest taki sam, jak dla typu DOUB|l, ale rzeczywisty zakres
danej kolumny DlC1MA| moe by ograniczony przez wybr argumentw / i &.
Jeli podany jest atrybut UN1S1ONlD, wartoci ujemne s niedozwolone.
W przypadku braku argumentu &, domyln wartoci jest 0. Jeli pominity
jest parametr /, domyln wartoci jest 10.
W wersjach poprzedzajcych MySQL 3.23 argument / musi by wystarczajco
duy, by zawiera obszar potrzebny dla znaku i kropki dziesitnej.
DlC/,&) UNS1ONlD /lRO|1||
NUMlR1C/,&) UNS1ONlD /lRO|1||
|1XlD/, &) UNS1ONlD /lRO|1||
S to synonimy typu DlC1MA|.
W MySQL 4.1.0 dodano synonim |1XlD w celu osignicia kompatybilnoci
z innymi serwerami.
4.1. Przegld typw dla kolumny 129
4.1.2. Przegld typw zwizanych z dat i czasem
Poniej znajduje si podsumowanie typw kolumn przeznaczonych dla czasu i daty.
Dodatkowe informacje na ten temat mona znale w podrozdziale 4.3. Wymogi do-
tyczce pamici potrzebnej do przechowywania danych w kolumnach zostay podane
w podrozdziale 4.5.
DATl
Data. Obsugiwany zakres obejmuje daty od ``0000`0`` do `9999`o``.
W MySQL wartoci DATl wywietlane s w formacie `RRRRMMDD`, ale mona
przypisywa wartoci do kolumn DATl przy uyciu acuchw lub liczb.
DATlT1Ml
Kombinacja daty i czasu. Obsugiwany zakres obejmuje wartoci
od ``0000`0` 000000` do `9999`o` ob9b9`. W MySQL wartoci
DATlT1Ml wywietlane s w formacie `RRRRMMDD OOMMSS`, ale mona
przypisywa wartoci do kolumn DATlT1Ml przy uyciu acuchw lub liczb.
T1MlSTAMP/)
Znacznik czasu. Obsugiwany zakres rozpoczyna si od daty ``9/00`0``
i siga roku 0o/.
Kolumna typu T1MlSTAMP przydaje si do rejestracji daty i godziny operacji
wstawiania lub aktualizacji. Pierwszej kolumnie T1MlSTAMP w tabeli
automatycznie przypisywana jest data i czas ostatniej operacji, jeli tylko tych
wartoci nie wprowadzi rcznie uytkownik. Dowolnej kolumnie T1MlSTAMP
mona rwnie przypisa biec dat i godzin, wpisujc do niej warto NU||.
Od MySQL 4.1 wartoci T1MlSTAMP s zwracane w postaci acuchw
w formacie `RRRRMMDD OOMMSS`. Aby uzyska warto w postaci liczby,
naley doda do kolumn tego typu 0. Inne szerokoci wywietlania
znacznika czasu nie s obsugiwane.
W wersjach poprzedzajcych MySQL 4.1 wartoci T1MlSTAMP s wywietlane
w formacie RRRRMMDDOOMMSS, RRMMDDOOMMSS, RRRRMMDD lub RRMMDD w zalenoci
od tego, czy parametr / jest rwny 14 (albo go brak), 12, 8 lub 6. Mona jednak
przypisywa wartoci do kolumn T1MlSTAMP przy uyciu acuchw lub liczb.
Argument / wpywa tylko na sposb wywietlania kolumny T1MlSTAMP, a nie
na jej przechowywanie. Wartoci kolumny s zawsze zapisywane w czterech
bajtach. W MySQL od wersji 4.0.12 pojawia si opcja ne., dziki ktrej
mona zmieni dziaanie serwera, upodabniajc je do MySQL 4.1.
Naley odnotowa, e kolumny T1MlSTAMP/), gdzie /jest rwne 8 lub 14,
s traktowane jako liczby, natomiast reszta kolumn T1MlSTAMP/) jest
traktowana jako acuchy. Jest to rodzaj gwarancji, e uytkownik bdzie
mg wiarygodnie usuwa i przywraca tabele tego typu.
T1Ml
Godzina. Obsugiwany zakres obejmuje wartoci od `8o8b9b9`
do ` 8o8b9b9`. W MySQL wartoci T1Ml wywietlane s w formacie
` OOMMSS`, ale mona przypisa wartoci do kolumn T1Ml przy uyciu
zarwno acuchw, jak i liczb.
130 Rozdzia 4. Typy kolumn
YlAR|4)
Rok w formacie dwu- lub czterocyfrowym. Domylnym formatem jest rok
zapisany za pomoc czterech cyfr. W tym formacie dostpne wartoci nale
do przedziau od `90` do `bb oraz 0. W formacie dwucyfrowym wartoci
dopuszczalne to liczby z zakresu od /0 do 69, ktre reprezentuj daty od roku
1970 do 2069. W MySQL wartoci YlAR wywietlane s w formacie RRRR,
ale mona przypisa wartoci do kolumn YlAR przy uyciu tak acuchw,
jak i liczb. Typ YlAR jest niedostpny dla wersji wczeniejszych ni MySQL 3.22.
4.1.3. Przegld typw acuchowych
Poniej znajduje si przegld typw acuchowych. Dodatkowe informacje mona
znale w podrozdziale 4.4. Wymogi dotyczce pamici potrzebnej do przechowywa-
nia danych w kolumnach zostay podane w podrozdziale 4.5.
W niektrych przypadkach MySQL moe zmieni kolumn typu acuchowego na typ,
ktry bdzie si rni od zadeklarowanego w instrukcji CRlATl TAB|l lub A|TlR TAB|l.
Wicej informacji na ten temat znajduje si w podpunkcie 6.2.5.2.
Od wersji 4.1 w MySQL pojawia si zmiana, ktra wpywa na wiele typw kolumn typu
acuchowego. Definicja kolumn typu znakowego moe zawiera atrybut CHARACTlR
SlT, ktry okrela zestaw znakw i opcjonalnie porzdek sortowania. Dotyczy to typw
CHAR, VARCHAR, rnych typw TlXT oraz lNUM i SlT, na przykad:
CRF/TF T/B|F !
FNUMYCTVQ
YCTVQ|
1 lub 2 bajty w zalenoci od liczby wartoci wyliczenia
(maksymalnie 65 535)
SFTYCTVQ
YCTVQ|
1, 2, 3, 4 lub 8 bajtw w zalenoci od liczby elementw zestawu
(maksymalnie 64)
Typy VARCHAR, B|OB i TlXT maj zmienn dugo. Dla kadego ilo pamici potrzeb-
nej do przechowania wartoci bdzie zalee od faktycznej dugoci wartoci kolumny
(reprezentowanej w ostatniej tabeli przez .), a nie od maksymalnego moliwego roz-
miaru danego typu. Kolumna VARCHAR`0) na przykad moe przechowywa acuch
o maksymalnej dugoci 10 znakw. Faktyczna ilo wymaganej pamici to dugo
acucha (.) plus 1 bajt do zapisania dugoci acucha. Dla acucha `.|cc` parametr
. jest rwny 4, a wymagany rozmiar pamici to 5 bajtw.
Typy B|OB i TlXT wymagaj 1, 2, 3 lub 4 bajtw do zapisu dugoci wartoci kolumny
w zalenoci od maksymalnej moliwej dugoci tego typu (patrz punkt 4.4.2).
Rozmiar obiektu lNUM jest ustalany na podstawie liczby rnych wartoci wyliczenia.
Przy wyliczeniach do 255 moliwych wartoci uywany jest jeden bajt, a przy wyli-
czeniach do 65 535 wartoci uywane s 2 bajty (patrz punkt 4.4.3).
Rozmiar obiektu SlT jest okrelany przez liczb rnych elementw zestawu. Jeli ze-
staw ma rozmiar 0, obiekt zajmuje 0/).8 bajtw, ktr to warto zaokrgla si do
1, 2, 3, 4 lub 8 bajtw. Obiekt SlT moe mie do 64 elementw (patrz punkt 4.4.4).
4.6. Wybieranie odpowiedniego typu
dla kolumny
Aby jak najbardziej wydajnie korzysta z pamici, naley we wszystkich przypadkach
stara si stosowa typ, ktry bdzie jak najbardziej dokadny. Jeli na przykad w kolum-
nie liczb cakowitych bd przechowywane wartoci z zakresu od ` do 99999, najlep-
szym wyborem bdzie typ MlD1UM1NT UNS1ONlD. Ze wszystkich typw, ktre reprezentuj
wszystkie wymagane wartoci, zajmuje najmniej pamici.
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych 153
Powszechnym problemem jest dokadne przedstawianie wartoci walutowych. W MySQL
naley do tego uywa typu DlC1MA|, za pomoc ktrego wartoci zapisywane s w for-
mie acucha. Dziki temu nie traci si na dokadnoci (mimo to obliczenia z wartociami
DlC1MA| mog by wci wykonywane przy uyciu operacji dziaajcych na liczbach
z podwjn precyzj). Jeli dokadno nie jest zbyt wana, by moe wystarczajco
dobrym typem bdzie DOUB|l.
Aby uzyska wiksz dokadno, mona zawsze przeksztaci warto na typ stao-
przecinkowy, przechowywany w B1O1NT. Pozwoli to wykonywa wszystkie obliczenia
na liczbach cakowitych i tylko w razie potrzeby przeksztaca wynik z powrotem na
wartoci zmiennoprzecinkowe.
4.7. Wykorzystywanie typw kolumn
z innych mechanizmw baz danych
Aby uatwi uytkownikowi zastosowanie kodu pochodzcego od innych producentw,
moliwe jest odwzorowanie typw kolumn w sposb przedstawiony w poniszej tabeli.
Odwzorowania te upraszczaj operacj importu do MySQL definicji tabel z innych
mechanizmw baz danych:
Typ innych producentw Typ MySQL
BTN/RY/| C'/R/| BTN/RY
C'/R V/RYTN/| V/RC'/R/|
F|J/T4 F|J/T
F|J/T8 OJUB|F
TNT1 TTNYTNT
TNT SM/||TNT
TNT: MFOTUMTNT
TNT4 TNT
TNT8 BTTNT
|JN V/RBTN/RY MFOTUMB|JB
|JN V/RC'/R MFOTUMTFXT
|JN MFOTUMTFXT oc M,SJ| 410|
MTOO|FTNT MFOTUMTNT
V/RBTN/RY/| C'/R/| BTN/RY
Odwzorowanie typw kolumn jest wykonywane podczas tworzenia tabeli, po czym
oryginalne deklaracje typu zostaj usunite. Jeli uytkownik utworzy tabel z typami
stosowanymi przez innych producentw, po czym wyda polecenie DlSCR1Bl PC\YCA
VCDGNK, zostanie przedstawiona struktura tabeli z odpowiadajcymi im typami MySQL.
4 Spis treci
1.8.5. Rozbienoci midzy MySQL a standardem SQL ........................................ 60
1.8.6. Jak MySQL radzi sobie z ograniczeniami ................................................. 67
1.8.7. Znane bdy i projektowe braki w MySQL................................................ 69
Rozdzia 2. Struktura jzyka .............................................................................. 77
2.1. Literay................................................................................................................... 77
2.1.1. acuchy ................................................................................................... 77
2.1.2. Liczby........................................................................................................ 80
2.1.3. Wartoci szesnastkowe .............................................................................. 80
2.1.4. Wartoci logiczne ...................................................................................... 81
2.1.5. Wartoci NULL......................................................................................... 81
2.2. Nazwy baz danych, tabel, indeksw, kolumn i aliasw......................................... 81
2.2.1. Kwalifikatory identyfikatorw .................................................................. 83
2.2.2. Znaczenie wielkoci liter w nazwach identyfikatorw.............................. 83
2.3. Zmienne definiowane przez uytkownika.............................................................. 85
2.4. Zmienne systemowe............................................................................................... 87
2.4.1. Strukturalne zmienne systemowe .............................................................. 89
2.5. Skadnia komentarza .............................................................................................. 91
2.6. Traktowanie sw zastrzeonych w MySQL.......................................................... 92
Rozdzia 3. Obsuga zestaww znakw............................................................... 95
3.1. Oglne informacje o zestawach znakw i sortowaniu ........................................... 95
3.2. Zestawy znakw i porzdki sortowania w MySQL................................................ 96
3.3. Okrelanie domylnego zestawu znakw i sortowania........................................... 98
3.3.1. Zestaw znakw i sortowanie dla serwera................................................... 98
3.3.2. Zestaw znakw i sortowanie dla bazy danych........................................... 99
3.3.3. Zestaw znakw i sortowanie dla tabeli .................................................... 100
3.3.4. Zestaw znakw i sortowanie dla kolumny............................................... 100
3.3.5. Przykady przypisywania zestawu znakw i sortowania ......................... 101
3.3.6. Zestawy znakw i sortowanie dla poczenia .......................................... 102
3.3.7. Zestaw znakw i sortowanie dla acucha znakw.................................. 104
3.3.8. Wykorzystywanie COLLATE w instrukcjach SQL.................................... 105
3.3.9. Priorytet klauzuli COLLATE .................................................................. 106
3.3.10. Operator BINARY................................................................................... 106
3.3.11. Niektre przypadki specjalne, w ktrych trudno okreli sortowanie...... 106
3.3.12. Sortowania musz by odpowiednie dla danego zestawu znakw........... 107
3.3.13. Przykad wpywu porzdku sortowania ................................................... 108
3.4. Operacje, na ktre ma wpyw obsuga zestaww znakw.................................... 109
3.4.1. acuchy wyjciowe ............................................................................... 109
3.4.2. CONVERT()............................................................................................ 110
3.4.3. CAST() .................................................................................................... 110
3.4.4. Instrukcje SHOW .................................................................................... 111
3.5. Obsuga Unicode.................................................................................................. 112
3.6. UTF8 dla metadanych.......................................................................................... 113
3.7. Kompatybilno z innymi systemami zarzdzania baz danych .......................... 115
3.8. Nowy format pliku konfiguracji zestawu znakw................................................ 115
3.9. Narodowe zestawy znakw.................................................................................. 115
3.10. Aktualizacja zestaww znakw z MySQL 4.0..................................................... 116
3.10.1. Zestawy znakw w wersji 4.0 i odpowiadajce im w wersji 4.1 pary
skadajce si z zestawu znakw i sortowania......................................... 117
3.10.2. Przeksztacanie kolumn znakowych wersji 4.0 na format 4.1 ................. 118
3.11. Zestawy znakw i sortowania obsugiwane przez MySQL.................................. 118
3.11.1. Zestawy znakw standardu Unicode ....................................................... 119
3.11.2. Zestawy znakw zachodnioeuropejskich................................................. 120
3.11.3. Zestawy znakw dla Europy Centralnej .................................................. 121
Spis treci 5
3.11.4. Zestawy znakw poudniowoeuropejskich i rodkowowschodnich......... 122
3.11.5. Zestawy znakw regionu batyckiego...................................................... 123
3.11.6. Zestawy znakw dla cyrylicy................................................................... 123
3.11.7. Azjatyckie zestawy znakw..................................................................... 124
Rozdzia 4. Typy kolumn.................................................................................. 125
4.1. Przegld typw dla kolumny................................................................................ 126
4.1.1. Omwienie typw liczbowych ................................................................ 126
4.1.2. Przegld typw zwizanych z dat i czasem............................................ 129
4.1.3. Przegld typw acuchowych ................................................................ 130
4.2. Typy liczbowe...................................................................................................... 132
4.3. Typy zwizane z dat i czasem............................................................................ 135
4.3.1. Typy DATETIME, DATE i TIMESTAMP............................................. 137
4.3.2. Typ TIME................................................................................................ 142
4.3.3. Typ YEAR............................................................................................... 143
4.3.4. Problem roku 2000 a typy zwizane z dat.............................................. 144
4.4. Typy acuchowe ................................................................................................. 144
4.4.1. Typy CHAR i VARCHAR...................................................................... 144
4.4.2. Typy BLOB i TEXT................................................................................ 146
4.4.3. Typ Enum................................................................................................ 147
4.4.4. Typ SET .................................................................................................. 149
4.5. Rozmiar pamici potrzebnej dla typw kolumn................................................... 151
4.6. Wybieranie odpowiedniego typu dla kolumny..................................................... 152
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych ............... 153
Rozdzia 5. Funkcje i operatory........................................................................ 155
5.1. Operatory ............................................................................................................. 156
5.1.1. Nawiasy................................................................................................... 156
5.1.2. Operatory porwnania ............................................................................. 156
5.1.3. Operatory logiczne .................................................................................. 161
5.1.4. Operatory rozrniania wielkoci liter..................................................... 163
5.2. Funkcje kontroli przepywu ................................................................................. 163
5.3. Funkcje acuchowe............................................................................................. 166
5.3.1. Funkcje porwnywania acuchw.......................................................... 176
5.4. Funkcje liczbowe ................................................................................................. 178
5.4.1. Operatory arytmetyczne........................................................................... 178
5.4.2. Funkcje matematyczne ............................................................................ 180
5.5. Funkcje daty i godziny......................................................................................... 186
5.6. Funkcje obsugi wyszukiwania penotekstowego................................................. 202
5.6.1. Boolowskie wyszukiwania penotekstowe............................................... 205
5.6.2. Wyszukiwania penotekstowe z rozwijaniem zapytania .......................... 207
5.6.3. Ograniczenia dla wyszukiwania penotekstowego................................... 208
5.6.4. Modyfikowanie wyszukiwania penotekstowego MySQL ...................... 209
5.6.5. Lista rzeczy do zrobienia dla wyszukiwania penotekstowego................ 211
5.7. Funkcje konwersji typw..................................................................................... 211
5.8. Inne funkcje ......................................................................................................... 214
5.8.1. Funkcje bitowe ........................................................................................ 214
5.8.2. Funkcje szyfrujce................................................................................... 215
5.8.3. Funkcje informacyjne .............................................................................. 219
5.8.4. Funkcje rne .......................................................................................... 223
5.9. Funkcje i modyfikatory do zastosowania z klauzulami GROUP BY................... 226
5.9.1. Funkcje GROUP BY (agregujce)........................................................... 226
5.9.2. Modyfikatory GROUP BY...................................................................... 229
5.9.3. GROUP BY z ukrytymi polami............................................................... 232
6 Spis treci
Rozdzia 6. Skadnia instrukcji SQL .................................................................. 235
6.1. Instrukcje operujce na danych............................................................................ 235
6.1.1. Skadnia instrukcji DELETE................................................................... 235
6.1.2. Skadnia instrukcji DO ............................................................................ 238
6.1.3. Skadnia instrukcji HANDLER............................................................... 238
6.1.4. Skadnia instrukcji INSERT .................................................................... 240
6.1.5. Skadnia instrukcji LOAD DATA INFILE.............................................. 246
6.1.6. Skadnia instrukcji REPLACE................................................................. 255
6.1.7. Skadnia instrukcji SELECT.................................................................... 256
6.1.8. Skadnia podzapyta................................................................................ 265
6.1.9. Skadnia instrukcji TRUNCATE............................................................. 276
6.1.10. Skadnia instrukcji UPDATE................................................................... 276
6.2. Instrukcje definiowania danych ........................................................................... 278
6.2.1. Skadnia instrukcji ALTER DATABASE ............................................... 278
6.2.2. Skadnia instrukcji ALTER TABLE........................................................ 279
6.2.3. Skadnia instrukcji CREATE DATABASE............................................. 285
6.2.4. Skadnia instrukcji CREATE INDEX ..................................................... 285
6.2.5. Skadnia instrukcji CREATE TABLE..................................................... 287
6.2.6. Skadnia instrukcji DROP DATABASE.................................................. 301
6.2.7. Skadnia instrukcji DROP INDEX.......................................................... 302
6.2.8. Skadnia instrukcji DROP TABLE.......................................................... 302
6.2.9. Skadnia instrukcji RENAME TABLE.................................................... 303
6.3. Instrukcje programu MySQL............................................................................... 304
6.3.1. Skadnia instrukcji DESCRIBE
(odczytywanie informacji na temat kolumn) ........................................... 304
6.3.2. Skadnia instrukcji USE........................................................................... 304
6.4. Instrukcje obsugi transakcji i blokowania........................................................... 305
6.4.1. Skadnia instrukcji START TRANSACTION, COMMIT
oraz ROLLBACK.................................................................................... 305
6.4.2. Instrukcje niemoliwe do wycofania ....................................................... 306
6.4.3. Instrukcje wykonujce niejawne zatwierdzenie......................................... 306
6.4.4. Skadnia instrukcji SAVEPOINT i ROLLBACK TO SAVEPOINT....... 307
6.4.5. Skadnia instrukcji LOCK TABLES oraz UNLOCK TABLES .............. 307
6.4.6. Skadnia instrukcji SET TRANSACTION.............................................. 310
6.5. Administracja baz danych .................................................................................. 311
6.5.1. Instrukcje zarzdzajce kontami uytkownikw ....................................... 311
6.5.2. Instrukcje do konserwacji tabel ............................................................... 319
6.5.3. Skadnia instrukcji SET i SHOW ............................................................ 326
6.5.4. Inne instrukcje administracyjne ............................................................... 347
6.6. Instrukcje replikacji.............................................................................................. 352
6.6.1. Instrukcje SQL sterujce serwerem gwnym ......................................... 352
6.6.2. Instrukcje SQL sterujce serwerami podrzdnymi .................................. 354
Rozdzia 7. Rozszerzenia przestrzenne w MySQL............................................... 365
7.1. Wstp ................................................................................................................... 365
7.2. Model geometryczny OpenGIS............................................................................ 366
7.2.1. Hierarchia klas geometrycznych.............................................................. 366
7.2.2. Klasa Geometry ....................................................................................... 368
7.2.3. Klasa Point .............................................................................................. 369
7.2.4. Klasa Curve ............................................................................................. 369
7.2.5. Klasa LineString...................................................................................... 370
7.2.6. Klasa Surface........................................................................................... 370
7.2.7. Klasa Polygon.......................................................................................... 370
7.2.8. Klasa GeometryCollection....................................................................... 371
Spis treci 7
7.2.9. Klasa MultiPoint...................................................................................... 371
7.2.10. Klasa MultiCurve .................................................................................... 372
7.2.11. Klasa MultiLineString............................................................................. 372
7.2.12. Klasa MultiSurface .................................................................................. 372
7.2.13. Klasa MultiPolygon................................................................................. 373
7.3. Obsugiwane formaty danych przestrzennych...................................................... 373
7.3.1. Format tekstowy WKT............................................................................ 374
7.3.2. Format binarny WKB.............................................................................. 374
7.4. Tworzenie bazy danych z rozszerzeniami przestrzennymi................................... 375
7.4.1. Typy danych przestrzennych w MySQL ................................................. 375
7.4.2. Tworzenie wartoci przestrzennych......................................................... 376
7.4.3. Tworzenie kolumn przestrzennych.......................................................... 379
7.4.4. Wypenianie kolumn przestrzennych....................................................... 379
7.4.5. Pobieranie danych przestrzennych........................................................... 381
7.5. Analiza informacji przestrzennych....................................................................... 381
7.5.1. Funkcje konwersji formatw geometrycznych ........................................ 382
7.5.2. Funkcje klasy Geometry.......................................................................... 382
7.5.3. Funkcje tworzce nowe geometrie na podstawie istniejcych................. 388
7.5.4. Funkcje testujce relacje przestrzenne
midzy obiektami geometrycznymi ......................................................... 389
7.5.5. Relacje midzy minimalnymi prostoktami otaczajcymi
dla poszczeglnych geometrii.................................................................. 390
7.5.6. Funkcje sprawdzajce relacje przestrzenne pomidzy geometriami ........ 391
7.6. Optymalizacja analizy przestrzennej.................................................................... 392
7.6.1. Tworzenie indeksw przestrzennych....................................................... 392
7.6.2. Wykorzystanie indeksu przestrzennego................................................... 393
7.7. Zgodno MySQL ze standardem........................................................................ 395
7.7.1. Niezaimplementowane funkcje GIS ........................................................ 395
Rozdzia 8. Procedury i funkcje skadowane ..................................................... 397
8.1. Skadnia procedur skadowanych......................................................................... 398
8.1.1. Utrzymanie procedur skadowanych........................................................ 398
8.1.2. SHOW PROCEDURE STATUS oraz SHOW FUNCTION STATUS.... 401
8.1.3. Instrukcja CALL...................................................................................... 402
8.1.4. Instrukcja zoona BEGIN ... END.......................................................... 402
8.1.5. Instrukcja DECLARE.............................................................................. 402
8.1.6. Zmienne w procedurach skadowanych................................................... 402
8.1.7. Warunki i podprogramy obsugi .............................................................. 403
8.1.8. Kursory.................................................................................................... 405
8.1.9. Konstrukcje sterowania przepywem sterowania..................................... 406
Rozdzia 9. Obsuga bdw w MySQL .............................................................. 409
9.1. Zwracane bdy.................................................................................................... 409
9.2. Komunikaty bdw............................................................................................. 419
Dodatek A Rozwizywanie problemw z zapytaniami ........................................435
A.1. Zagadnienia zwizane z zapytaniami ................................................................... 435
A.1.1. Wielko liter przy wyszukiwaniu........................................................... 435
A.1.2. Problemy z kolumnami typu DATE ........................................................ 436
A.1.3. Problemy z wartociami NULL............................................................... 437
A.1.4. Problemy z synonimami kolumn ............................................................. 438
A.1.5. Bd wycofania dla tabel nietransakcyjnych............................................ 439
A.1.6. Usuwanie wierszy ze zwizanych tabel ................................................... 439
A.1.7. Rozwizywanie problemw z brakujcymi wierszami ............................ 440
A.1.8. Problemy z porwnaniami zmiennoprzecinkowymi................................ 441
8 Spis treci
A.2. Problemy zwizane z optymalizatorem................................................................ 443
A.3. Problemy z definicj tabel.................................................................................... 444
A.3.1. Problemy z instrukcj ALTER TABLE................................................... 444
A.3.2. Jak zmieni porzdek kolumn w tabeli .................................................... 445
A.3.3. Problemy z tabelami tymczasowymi ....................................................... 445
Dodatek B Wyraenia regularne w MySQL........................................................ 447
Skorowidz...................................................................................... 451
Rozdzia 4.
Typy kolumn
W MySQL dostpnych jest wiele typw danych, ktre mona pogrupowa w kilku pod-
stawowych kategoriach, takich jak typy liczbowe, typy zwizane z dat i czasem oraz
typy acuchowe. Na pocztku tego rozdziau przedstawiony zostanie przegld wspo-
mnianych przed chwil typw kolumn, po czym nastpi bardziej szczegowy opis ich
waciwoci z podziaem na poszczeglne kategorie i wreszcie zamieszczone zostanie
podsumowanie informacji dotyczcych wymaga co do rozmiaru pamici potrzebnej
do przechowania danej kolumny. Sam przegld jest z zamierzenia krtki. Dodatkowe
informacje o poszczeglnych typach kolumn, na przykad dopuszczalny format, w kt-
rym mona deklarowa wartoci, zostay uwzgldnione w szczegowych omwieniach.
Od wersji 4.1 MySQL rozpoznaje rozszerzenia do obsugi danych przestrzennych.
Informacje o typach przestrzennych znajduj si w rozdziale 7. tego podrcznika.
W czci opisu typw kolumn zastosowane zostay nastpujce reguy:
/
Wskazuje maksymalny rozmiar wywietlania liczby lub acucha.
Maksymalnym dopuszczalnym rozmiarem wywietlania jest 255.
&
Dotyczy typw zmiennoprzecinkowych i staoprzecinkowych. Okrela liczb
cyfr po kropce dziesitnej. Maksymalna dopuszczalna warto wynosi 30,
ale nie powinna przekracza /.
Nawiasy kwadratowe ( ) identyfikuj opcjonalne fragmenty deklaracji typu.
126 Rozdzia 4. Typy kolumn
4.1. Przegld typw dla kolumny
4.1.1. Omwienie typw liczbowych
Poniej znajduje si przegld liczbowych typw dla kolumn. Bardziej szczegowe
informacje mona znale w podrozdziale 4.2. Wymogi dotyczce rozmiaru pamici
potrzebnej do przechowywania kolumn znajduj si w podrozdziale 4.5.
Jeli dla kolumny liczbowej zostanie okrelony atrybut /lRO|1||, MySQL automatycznie
doda do kolumny atrybut UN1S1ONlD.
Naley uwaa podczas odejmowania dwch wartoci liczbowych, z ktrych jedna ma
typ UN1S1ONlD. Uzyskany wynik bdzie rwnie tego typu! patrz podrozdzia 5.7.
T1NY1NT/) UNS1ONlD /lRO|1||
Bardzo maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od `8
do `/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do bb.
B1T, BOO|, BOO|lAN
To s synonimy T1NY1NT`). Synonim BOO|lAN zosta dodany w MySQL 4.1.0.
Warto zerowa to inaczej fasz. Wartoci niezerowe traktowane s jako prawda.
W przyszoci wprowadzona zostanie pena, zgodna ze standardem SQL
obsuga typu boolowskiego.
SMA||1NT/) UNS1ONlD /lRO|1||
Maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od o/68
do o/6/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do 6bbob.
MlD1UM1NT/) UNS1ONlD /lRO|1||
rednia liczba cakowita. Dla liczb ze znakiem zakres wynosi od 8o88608
do 8o8860/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0
do `6///`b.
1NT/) UNS1ONlD /lRO|1||
Standardowa liczba cakowita. Dla liczb ze znakiem zakres wynosi
od `4/48o648 do `4/48o64/. W przypadku liczb bez znaku zakres
obejmuje wartoci od 0 do 49496/9b.
1NTlOlR/) UNS1ONlD /lRO|1||
Jest to synonim dla typu 1NT.
B1O1NT/) UNS1ONlD /lRO|1||
Dua liczba cakowita. Dla liczb ze znakiem zakres wynosi
od 9oo/0o68b4//b808 do 9oo/0o68b4//b80/. W przypadku liczb
bez znaku zakres obejmuje wartoci od 0 do `8446/440/o/09bb`6`b.
4.1. Przegld typw dla kolumny 127
Oto kilka spraw, o ktrych naley wiedzie odnonie kolumn typu B1O1NT:
Wszystkie obliczenia wykonywane s przy uyciu wartoci typu B1O1NT
lub DOUB|l ze znakiem. Oznacza to, e duych liczb cakowitych bez
znaku, wikszych ni 9oo/0o68b4//b80/ (63 bity), mona uywa tylko
z funkcjami bitowymi! Niezastosowanie si do tej zasady moe doprowadzi
do uzyskania w wyniku liczby, ktrej kilka ostatnich cyfr jest bdnych
z powodu bdw w zaokrglaniu podczas konwersji wartoci B1O1NT
na DOUB|l.
MySQL 4.0 potrafi obsugiwa B1O1NT w nastpujcych przypadkach:
Podczas wykorzystywania liczb cakowitych do przechowywania
duych wartoci bez znaku w kolumnie typu B1O1NT.
W M1NPC\YCAMQN) lub MAXPC\YCAMQN), gdzie PC\YCAMQN odnosi si
do kolumny B1O1NT.
Podczas korzystania z operatorw (midzy innymi , , *), gdy oba
argumenty s liczbami cakowitymi.
Zawsze istnieje moliwo zapisania w kolumnie B1O1NT dokadnej wartoci
liczby cakowitej. Wystarczy zapisa j przy uyciu acucha. W takim
przypadku zostanie dokonana konwersja acucha na liczb; konwersja
nie bdzie wymaga poredniego etapu przeksztacajcego liczb na jej
odpowiednik o podwjnej precyzji.
Podczas korzystania z operatorw , i * stosowana jest arytmetyka
B1O1NT, jeli oba argumenty maj warto liczby cakowitej! To oznacza,
e pomnoenie dwch duych liczb cakowitych (lub wynikw funkcji,
ktra zwraca liczby cakowite) moe spowodowa nieoczekiwane
rezultaty, jeli wynik przekroczy liczb 9oo/0o68b4//b80/.
||OATR) UNS1ONlD /lRO|1||
Liczba zmiennoprzecinkowa. Parametr R oznacza precyzj i moe przyjmowa
warto od 0 do 14 dla liczb zmiennoprzecinkowych o dokadnoci do jednego
znaku i od 25 do 53 dla liczb zmiennoprzecinkowych o dokadnoci do dwch
znakw. To przypomina opisane poniej typy ||OAT i DOUB|l. Typ ||OATR)
ma ten sam zakres, jaki posiadaj odpowiadajce mu typy ||OAT i DOUB|l,
ale w jego przypadku niezdefiniowany jest maksymalny rozmiar wywietlania
i liczba miejsc po przecinku.
Od wersji 3.23 MySQL jest to prawdziwa warto zmiennoprzecinkowa.
W wersjach wczeniejszych liczba typu ||OATR) bya zawsze liczb o dwch
miejscach po przecinku.
Ta skadnia zostaa dodana w celu zachowania zgodnoci ze standardem ODBC.
Stosowanie typu ||OAT moe spowodowa wystpienie pewnych
nieoczekiwanych problemw, poniewa wszystkie obliczenia w MySQL
s wykonywane z podwjn precyzj patrz punkt A.1.7).
||OAT/, &) UNS1ONlD /lRO|1||
128 Rozdzia 4. Typy kolumn
Maa liczba zmiennoprzecinkowa (o dokadnoci do jednego znaku). Liczba
ta moe przyj wartoci: od o408o466lo8 do ``/b494ob`lo8, 0,
i od ``/b494ob`lo8 do o408o466lo8. Jeli podany jest atrybut UN1S1ONlD,
niedozwolone s wartoci ujemne. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ ||OAT bez argumentw
lub typ ||OATR) (gdzie Rjest liczb z zakresu od 0 do 24) oznacza liczb
zmiennoprzecinkow o pojedynczej precyzji.
DOUB|l/, &) UNS1ONlD /lRO|1||
Standardowa liczba zmiennoprzecinkowa (o dokadnoci do dwch
znakw). Liczba ta moe przyj wartoci: od `/9/69o`o486o`b/lo08
do b0/o8b8b0/0`4lo08, 0, i od b0/o8b8b0/0`4lo08
do `/9/69o`o486o`b/lo08. Jeli podany jest atrybut UN1S1ONlD, wartoci
ujemne s niedozwolone. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ DOUB|l
bez argumentw lub ||OATR) (gdzie R jest liczb z zakresu od 25 do 53)
oznacza liczb zmiennoprzecinkow o podwjnej precyzji.
DOUB|l PRlC1S1ON/, &) UNS1ONlD /lRO|1||
RlA|/, &) UNS1ONlD /lRO|1||
S to synonimy DOUB|l. Wyjtek: Jeli dla parametru s;_cce serwera
wczono opcj RlA|_AS_||OAT, synonimem ||OAT jest RlA|, a nie DOUB|l.
DlC1MA|/, &) UNS1ONlD /lRO|1||
Niezapakowana liczba staoprzecinkowa. Zachowanie kolumny tego typu
przypomina kolumn typu CHAR. Niezapakowana oznacza, e liczba jest
przechowywana w postaci acucha przy uyciu jednego znaku na kad cyfr
wartoci. Parametr / definiuje maksymaln liczb cyfr, a & liczb miejsc
po przecinku. W parametrze / nie s brane pod uwag: kropka dziesitna
(odpowiadajca w naszej notacji przecinkowi) i (dla liczb ujemnych) znak ,
cho jest dla nich zarezerwowane miejsce. Wartoci nie maj miejsc
po przecinku lub czci uamkowych, jeli & jest rwne 0. Maksymalny zakres
wartoci typu DlC1MA| jest taki sam, jak dla typu DOUB|l, ale rzeczywisty zakres
danej kolumny DlC1MA| moe by ograniczony przez wybr argumentw / i &.
Jeli podany jest atrybut UN1S1ONlD, wartoci ujemne s niedozwolone.
W przypadku braku argumentu &, domyln wartoci jest 0. Jeli pominity
jest parametr /, domyln wartoci jest 10.
W wersjach poprzedzajcych MySQL 3.23 argument / musi by wystarczajco
duy, by zawiera obszar potrzebny dla znaku i kropki dziesitnej.
DlC/,&) UNS1ONlD /lRO|1||
NUMlR1C/,&) UNS1ONlD /lRO|1||
|1XlD/, &) UNS1ONlD /lRO|1||
S to synonimy typu DlC1MA|.
W MySQL 4.1.0 dodano synonim |1XlD w celu osignicia kompatybilnoci
z innymi serwerami.
4.1. Przegld typw dla kolumny 129
4.1.2. Przegld typw zwizanych z dat i czasem
Poniej znajduje si podsumowanie typw kolumn przeznaczonych dla czasu i daty.
Dodatkowe informacje na ten temat mona znale w podrozdziale 4.3. Wymogi do-
tyczce pamici potrzebnej do przechowywania danych w kolumnach zostay podane
w podrozdziale 4.5.
DATl
Data. Obsugiwany zakres obejmuje daty od ``0000`0`` do `9999`o``.
W MySQL wartoci DATl wywietlane s w formacie `RRRRMMDD`, ale mona
przypisywa wartoci do kolumn DATl przy uyciu acuchw lub liczb.
DATlT1Ml
Kombinacja daty i czasu. Obsugiwany zakres obejmuje wartoci
od ``0000`0` 000000` do `9999`o` ob9b9`. W MySQL wartoci
DATlT1Ml wywietlane s w formacie `RRRRMMDD OOMMSS`, ale mona
przypisywa wartoci do kolumn DATlT1Ml przy uyciu acuchw lub liczb.
T1MlSTAMP/)
Znacznik czasu. Obsugiwany zakres rozpoczyna si od daty ``9/00`0``
i siga roku 0o/.
Kolumna typu T1MlSTAMP przydaje si do rejestracji daty i godziny operacji
wstawiania lub aktualizacji. Pierwszej kolumnie T1MlSTAMP w tabeli
automatycznie przypisywana jest data i czas ostatniej operacji, jeli tylko tych
wartoci nie wprowadzi rcznie uytkownik. Dowolnej kolumnie T1MlSTAMP
mona rwnie przypisa biec dat i godzin, wpisujc do niej warto NU||.
Od MySQL 4.1 wartoci T1MlSTAMP s zwracane w postaci acuchw
w formacie `RRRRMMDD OOMMSS`. Aby uzyska warto w postaci liczby,
naley doda do kolumn tego typu 0. Inne szerokoci wywietlania
znacznika czasu nie s obsugiwane.
W wersjach poprzedzajcych MySQL 4.1 wartoci T1MlSTAMP s wywietlane
w formacie RRRRMMDDOOMMSS, RRMMDDOOMMSS, RRRRMMDD lub RRMMDD w zalenoci
od tego, czy parametr / jest rwny 14 (albo go brak), 12, 8 lub 6. Mona jednak
przypisywa wartoci do kolumn T1MlSTAMP przy uyciu acuchw lub liczb.
Argument / wpywa tylko na sposb wywietlania kolumny T1MlSTAMP, a nie
na jej przechowywanie. Wartoci kolumny s zawsze zapisywane w czterech
bajtach. W MySQL od wersji 4.0.12 pojawia si opcja ne., dziki ktrej
mona zmieni dziaanie serwera, upodabniajc je do MySQL 4.1.
Naley odnotowa, e kolumny T1MlSTAMP/), gdzie /jest rwne 8 lub 14,
s traktowane jako liczby, natomiast reszta kolumn T1MlSTAMP/) jest
traktowana jako acuchy. Jest to rodzaj gwarancji, e uytkownik bdzie
mg wiarygodnie usuwa i przywraca tabele tego typu.
T1Ml
Godzina. Obsugiwany zakres obejmuje wartoci od `8o8b9b9`
do ` 8o8b9b9`. W MySQL wartoci T1Ml wywietlane s w formacie
` OOMMSS`, ale mona przypisa wartoci do kolumn T1Ml przy uyciu
zarwno acuchw, jak i liczb.
130 Rozdzia 4. Typy kolumn
YlAR|4)
Rok w formacie dwu- lub czterocyfrowym. Domylnym formatem jest rok
zapisany za pomoc czterech cyfr. W tym formacie dostpne wartoci nale
do przedziau od `90` do `bb oraz 0. W formacie dwucyfrowym wartoci
dopuszczalne to liczby z zakresu od /0 do 69, ktre reprezentuj daty od roku
1970 do 2069. W MySQL wartoci YlAR wywietlane s w formacie RRRR,
ale mona przypisa wartoci do kolumn YlAR przy uyciu tak acuchw,
jak i liczb. Typ YlAR jest niedostpny dla wersji wczeniejszych ni MySQL 3.22.
4.1.3. Przegld typw acuchowych
Poniej znajduje si przegld typw acuchowych. Dodatkowe informacje mona
znale w podrozdziale 4.4. Wymogi dotyczce pamici potrzebnej do przechowywa-
nia danych w kolumnach zostay podane w podrozdziale 4.5.
W niektrych przypadkach MySQL moe zmieni kolumn typu acuchowego na typ,
ktry bdzie si rni od zadeklarowanego w instrukcji CRlATl TAB|l lub A|TlR TAB|l.
Wicej informacji na ten temat znajduje si w podpunkcie 6.2.5.2.
Od wersji 4.1 w MySQL pojawia si zmiana, ktra wpywa na wiele typw kolumn typu
acuchowego. Definicja kolumn typu znakowego moe zawiera atrybut CHARACTlR
SlT, ktry okrela zestaw znakw i opcjonalnie porzdek sortowania. Dotyczy to typw
CHAR, VARCHAR, rnych typw TlXT oraz lNUM i SlT, na przykad:
CRF/TF T/B|F !
FNUMYCTVQ
YCTVQ|
1 lub 2 bajty w zalenoci od liczby wartoci wyliczenia
(maksymalnie 65 535)
SFTYCTVQ
YCTVQ|
1, 2, 3, 4 lub 8 bajtw w zalenoci od liczby elementw zestawu
(maksymalnie 64)
Typy VARCHAR, B|OB i TlXT maj zmienn dugo. Dla kadego ilo pamici potrzeb-
nej do przechowania wartoci bdzie zalee od faktycznej dugoci wartoci kolumny
(reprezentowanej w ostatniej tabeli przez .), a nie od maksymalnego moliwego roz-
miaru danego typu. Kolumna VARCHAR`0) na przykad moe przechowywa acuch
o maksymalnej dugoci 10 znakw. Faktyczna ilo wymaganej pamici to dugo
acucha (.) plus 1 bajt do zapisania dugoci acucha. Dla acucha `.|cc` parametr
. jest rwny 4, a wymagany rozmiar pamici to 5 bajtw.
Typy B|OB i TlXT wymagaj 1, 2, 3 lub 4 bajtw do zapisu dugoci wartoci kolumny
w zalenoci od maksymalnej moliwej dugoci tego typu (patrz punkt 4.4.2).
Rozmiar obiektu lNUM jest ustalany na podstawie liczby rnych wartoci wyliczenia.
Przy wyliczeniach do 255 moliwych wartoci uywany jest jeden bajt, a przy wyli-
czeniach do 65 535 wartoci uywane s 2 bajty (patrz punkt 4.4.3).
Rozmiar obiektu SlT jest okrelany przez liczb rnych elementw zestawu. Jeli ze-
staw ma rozmiar 0, obiekt zajmuje 0/).8 bajtw, ktr to warto zaokrgla si do
1, 2, 3, 4 lub 8 bajtw. Obiekt SlT moe mie do 64 elementw (patrz punkt 4.4.4).
4.6. Wybieranie odpowiedniego typu
dla kolumny
Aby jak najbardziej wydajnie korzysta z pamici, naley we wszystkich przypadkach
stara si stosowa typ, ktry bdzie jak najbardziej dokadny. Jeli na przykad w kolum-
nie liczb cakowitych bd przechowywane wartoci z zakresu od ` do 99999, najlep-
szym wyborem bdzie typ MlD1UM1NT UNS1ONlD. Ze wszystkich typw, ktre reprezentuj
wszystkie wymagane wartoci, zajmuje najmniej pamici.
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych 153
Powszechnym problemem jest dokadne przedstawianie wartoci walutowych. W MySQL
naley do tego uywa typu DlC1MA|, za pomoc ktrego wartoci zapisywane s w for-
mie acucha. Dziki temu nie traci si na dokadnoci (mimo to obliczenia z wartociami
DlC1MA| mog by wci wykonywane przy uyciu operacji dziaajcych na liczbach
z podwjn precyzj). Jeli dokadno nie jest zbyt wana, by moe wystarczajco
dobrym typem bdzie DOUB|l.
Aby uzyska wiksz dokadno, mona zawsze przeksztaci warto na typ stao-
przecinkowy, przechowywany w B1O1NT. Pozwoli to wykonywa wszystkie obliczenia
na liczbach cakowitych i tylko w razie potrzeby przeksztaca wynik z powrotem na
wartoci zmiennoprzecinkowe.
4.7. Wykorzystywanie typw kolumn
z innych mechanizmw baz danych
Aby uatwi uytkownikowi zastosowanie kodu pochodzcego od innych producentw,
moliwe jest odwzorowanie typw kolumn w sposb przedstawiony w poniszej tabeli.
Odwzorowania te upraszczaj operacj importu do MySQL definicji tabel z innych
mechanizmw baz danych:
Typ innych producentw Typ MySQL
BTN/RY/| C'/R/| BTN/RY
C'/R V/RYTN/| V/RC'/R/|
F|J/T4 F|J/T
F|J/T8 OJUB|F
TNT1 TTNYTNT
TNT SM/||TNT
TNT: MFOTUMTNT
TNT4 TNT
TNT8 BTTNT
|JN V/RBTN/RY MFOTUMB|JB
|JN V/RC'/R MFOTUMTFXT
|JN MFOTUMTFXT oc M,SJ| 410|
MTOO|FTNT MFOTUMTNT
V/RBTN/RY/| C'/R/| BTN/RY
Odwzorowanie typw kolumn jest wykonywane podczas tworzenia tabeli, po czym
oryginalne deklaracje typu zostaj usunite. Jeli uytkownik utworzy tabel z typami
stosowanymi przez innych producentw, po czym wyda polecenie DlSCR1Bl PC\YCA
VCDGNK, zostanie przedstawiona struktura tabeli z odpowiadajcymi im typami MySQL.
4 Spis treci
1.8.5. Rozbienoci midzy MySQL a standardem SQL ........................................ 60
1.8.6. Jak MySQL radzi sobie z ograniczeniami ................................................. 67
1.8.7. Znane bdy i projektowe braki w MySQL................................................ 69
Rozdzia 2. Struktura jzyka .............................................................................. 77
2.1. Literay................................................................................................................... 77
2.1.1. acuchy ................................................................................................... 77
2.1.2. Liczby........................................................................................................ 80
2.1.3. Wartoci szesnastkowe .............................................................................. 80
2.1.4. Wartoci logiczne ...................................................................................... 81
2.1.5. Wartoci NULL......................................................................................... 81
2.2. Nazwy baz danych, tabel, indeksw, kolumn i aliasw......................................... 81
2.2.1. Kwalifikatory identyfikatorw .................................................................. 83
2.2.2. Znaczenie wielkoci liter w nazwach identyfikatorw.............................. 83
2.3. Zmienne definiowane przez uytkownika.............................................................. 85
2.4. Zmienne systemowe............................................................................................... 87
2.4.1. Strukturalne zmienne systemowe .............................................................. 89
2.5. Skadnia komentarza .............................................................................................. 91
2.6. Traktowanie sw zastrzeonych w MySQL.......................................................... 92
Rozdzia 3. Obsuga zestaww znakw............................................................... 95
3.1. Oglne informacje o zestawach znakw i sortowaniu ........................................... 95
3.2. Zestawy znakw i porzdki sortowania w MySQL................................................ 96
3.3. Okrelanie domylnego zestawu znakw i sortowania........................................... 98
3.3.1. Zestaw znakw i sortowanie dla serwera................................................... 98
3.3.2. Zestaw znakw i sortowanie dla bazy danych........................................... 99
3.3.3. Zestaw znakw i sortowanie dla tabeli .................................................... 100
3.3.4. Zestaw znakw i sortowanie dla kolumny............................................... 100
3.3.5. Przykady przypisywania zestawu znakw i sortowania ......................... 101
3.3.6. Zestawy znakw i sortowanie dla poczenia .......................................... 102
3.3.7. Zestaw znakw i sortowanie dla acucha znakw.................................. 104
3.3.8. Wykorzystywanie COLLATE w instrukcjach SQL.................................... 105
3.3.9. Priorytet klauzuli COLLATE .................................................................. 106
3.3.10. Operator BINARY................................................................................... 106
3.3.11. Niektre przypadki specjalne, w ktrych trudno okreli sortowanie...... 106
3.3.12. Sortowania musz by odpowiednie dla danego zestawu znakw........... 107
3.3.13. Przykad wpywu porzdku sortowania ................................................... 108
3.4. Operacje, na ktre ma wpyw obsuga zestaww znakw.................................... 109
3.4.1. acuchy wyjciowe ............................................................................... 109
3.4.2. CONVERT()............................................................................................ 110
3.4.3. CAST() .................................................................................................... 110
3.4.4. Instrukcje SHOW .................................................................................... 111
3.5. Obsuga Unicode.................................................................................................. 112
3.6. UTF8 dla metadanych.......................................................................................... 113
3.7. Kompatybilno z innymi systemami zarzdzania baz danych .......................... 115
3.8. Nowy format pliku konfiguracji zestawu znakw................................................ 115
3.9. Narodowe zestawy znakw.................................................................................. 115
3.10. Aktualizacja zestaww znakw z MySQL 4.0..................................................... 116
3.10.1. Zestawy znakw w wersji 4.0 i odpowiadajce im w wersji 4.1 pary
skadajce si z zestawu znakw i sortowania......................................... 117
3.10.2. Przeksztacanie kolumn znakowych wersji 4.0 na format 4.1 ................. 118
3.11. Zestawy znakw i sortowania obsugiwane przez MySQL.................................. 118
3.11.1. Zestawy znakw standardu Unicode ....................................................... 119
3.11.2. Zestawy znakw zachodnioeuropejskich................................................. 120
3.11.3. Zestawy znakw dla Europy Centralnej .................................................. 121
Spis treci 5
3.11.4. Zestawy znakw poudniowoeuropejskich i rodkowowschodnich......... 122
3.11.5. Zestawy znakw regionu batyckiego...................................................... 123
3.11.6. Zestawy znakw dla cyrylicy................................................................... 123
3.11.7. Azjatyckie zestawy znakw..................................................................... 124
Rozdzia 4. Typy kolumn.................................................................................. 125
4.1. Przegld typw dla kolumny................................................................................ 126
4.1.1. Omwienie typw liczbowych ................................................................ 126
4.1.2. Przegld typw zwizanych z dat i czasem............................................ 129
4.1.3. Przegld typw acuchowych ................................................................ 130
4.2. Typy liczbowe...................................................................................................... 132
4.3. Typy zwizane z dat i czasem............................................................................ 135
4.3.1. Typy DATETIME, DATE i TIMESTAMP............................................. 137
4.3.2. Typ TIME................................................................................................ 142
4.3.3. Typ YEAR............................................................................................... 143
4.3.4. Problem roku 2000 a typy zwizane z dat.............................................. 144
4.4. Typy acuchowe ................................................................................................. 144
4.4.1. Typy CHAR i VARCHAR...................................................................... 144
4.4.2. Typy BLOB i TEXT................................................................................ 146
4.4.3. Typ Enum................................................................................................ 147
4.4.4. Typ SET .................................................................................................. 149
4.5. Rozmiar pamici potrzebnej dla typw kolumn................................................... 151
4.6. Wybieranie odpowiedniego typu dla kolumny..................................................... 152
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych ............... 153
Rozdzia 5. Funkcje i operatory........................................................................ 155
5.1. Operatory ............................................................................................................. 156
5.1.1. Nawiasy................................................................................................... 156
5.1.2. Operatory porwnania ............................................................................. 156
5.1.3. Operatory logiczne .................................................................................. 161
5.1.4. Operatory rozrniania wielkoci liter..................................................... 163
5.2. Funkcje kontroli przepywu ................................................................................. 163
5.3. Funkcje acuchowe............................................................................................. 166
5.3.1. Funkcje porwnywania acuchw.......................................................... 176
5.4. Funkcje liczbowe ................................................................................................. 178
5.4.1. Operatory arytmetyczne........................................................................... 178
5.4.2. Funkcje matematyczne ............................................................................ 180
5.5. Funkcje daty i godziny......................................................................................... 186
5.6. Funkcje obsugi wyszukiwania penotekstowego................................................. 202
5.6.1. Boolowskie wyszukiwania penotekstowe............................................... 205
5.6.2. Wyszukiwania penotekstowe z rozwijaniem zapytania .......................... 207
5.6.3. Ograniczenia dla wyszukiwania penotekstowego................................... 208
5.6.4. Modyfikowanie wyszukiwania penotekstowego MySQL ...................... 209
5.6.5. Lista rzeczy do zrobienia dla wyszukiwania penotekstowego................ 211
5.7. Funkcje konwersji typw..................................................................................... 211
5.8. Inne funkcje ......................................................................................................... 214
5.8.1. Funkcje bitowe ........................................................................................ 214
5.8.2. Funkcje szyfrujce................................................................................... 215
5.8.3. Funkcje informacyjne .............................................................................. 219
5.8.4. Funkcje rne .......................................................................................... 223
5.9. Funkcje i modyfikatory do zastosowania z klauzulami GROUP BY................... 226
5.9.1. Funkcje GROUP BY (agregujce)........................................................... 226
5.9.2. Modyfikatory GROUP BY...................................................................... 229
5.9.3. GROUP BY z ukrytymi polami............................................................... 232
6 Spis treci
Rozdzia 6. Skadnia instrukcji SQL .................................................................. 235
6.1. Instrukcje operujce na danych............................................................................ 235
6.1.1. Skadnia instrukcji DELETE................................................................... 235
6.1.2. Skadnia instrukcji DO ............................................................................ 238
6.1.3. Skadnia instrukcji HANDLER............................................................... 238
6.1.4. Skadnia instrukcji INSERT .................................................................... 240
6.1.5. Skadnia instrukcji LOAD DATA INFILE.............................................. 246
6.1.6. Skadnia instrukcji REPLACE................................................................. 255
6.1.7. Skadnia instrukcji SELECT.................................................................... 256
6.1.8. Skadnia podzapyta................................................................................ 265
6.1.9. Skadnia instrukcji TRUNCATE............................................................. 276
6.1.10. Skadnia instrukcji UPDATE................................................................... 276
6.2. Instrukcje definiowania danych ........................................................................... 278
6.2.1. Skadnia instrukcji ALTER DATABASE ............................................... 278
6.2.2. Skadnia instrukcji ALTER TABLE........................................................ 279
6.2.3. Skadnia instrukcji CREATE DATABASE............................................. 285
6.2.4. Skadnia instrukcji CREATE INDEX ..................................................... 285
6.2.5. Skadnia instrukcji CREATE TABLE..................................................... 287
6.2.6. Skadnia instrukcji DROP DATABASE.................................................. 301
6.2.7. Skadnia instrukcji DROP INDEX.......................................................... 302
6.2.8. Skadnia instrukcji DROP TABLE.......................................................... 302
6.2.9. Skadnia instrukcji RENAME TABLE.................................................... 303
6.3. Instrukcje programu MySQL............................................................................... 304
6.3.1. Skadnia instrukcji DESCRIBE
(odczytywanie informacji na temat kolumn) ........................................... 304
6.3.2. Skadnia instrukcji USE........................................................................... 304
6.4. Instrukcje obsugi transakcji i blokowania........................................................... 305
6.4.1. Skadnia instrukcji START TRANSACTION, COMMIT
oraz ROLLBACK.................................................................................... 305
6.4.2. Instrukcje niemoliwe do wycofania ....................................................... 306
6.4.3. Instrukcje wykonujce niejawne zatwierdzenie......................................... 306
6.4.4. Skadnia instrukcji SAVEPOINT i ROLLBACK TO SAVEPOINT....... 307
6.4.5. Skadnia instrukcji LOCK TABLES oraz UNLOCK TABLES .............. 307
6.4.6. Skadnia instrukcji SET TRANSACTION.............................................. 310
6.5. Administracja baz danych .................................................................................. 311
6.5.1. Instrukcje zarzdzajce kontami uytkownikw ....................................... 311
6.5.2. Instrukcje do konserwacji tabel ............................................................... 319
6.5.3. Skadnia instrukcji SET i SHOW ............................................................ 326
6.5.4. Inne instrukcje administracyjne ............................................................... 347
6.6. Instrukcje replikacji.............................................................................................. 352
6.6.1. Instrukcje SQL sterujce serwerem gwnym ......................................... 352
6.6.2. Instrukcje SQL sterujce serwerami podrzdnymi .................................. 354
Rozdzia 7. Rozszerzenia przestrzenne w MySQL............................................... 365
7.1. Wstp ................................................................................................................... 365
7.2. Model geometryczny OpenGIS............................................................................ 366
7.2.1. Hierarchia klas geometrycznych.............................................................. 366
7.2.2. Klasa Geometry ....................................................................................... 368
7.2.3. Klasa Point .............................................................................................. 369
7.2.4. Klasa Curve ............................................................................................. 369
7.2.5. Klasa LineString...................................................................................... 370
7.2.6. Klasa Surface........................................................................................... 370
7.2.7. Klasa Polygon.......................................................................................... 370
7.2.8. Klasa GeometryCollection....................................................................... 371
Spis treci 7
7.2.9. Klasa MultiPoint...................................................................................... 371
7.2.10. Klasa MultiCurve .................................................................................... 372
7.2.11. Klasa MultiLineString............................................................................. 372
7.2.12. Klasa MultiSurface .................................................................................. 372
7.2.13. Klasa MultiPolygon................................................................................. 373
7.3. Obsugiwane formaty danych przestrzennych...................................................... 373
7.3.1. Format tekstowy WKT............................................................................ 374
7.3.2. Format binarny WKB.............................................................................. 374
7.4. Tworzenie bazy danych z rozszerzeniami przestrzennymi................................... 375
7.4.1. Typy danych przestrzennych w MySQL ................................................. 375
7.4.2. Tworzenie wartoci przestrzennych......................................................... 376
7.4.3. Tworzenie kolumn przestrzennych.......................................................... 379
7.4.4. Wypenianie kolumn przestrzennych....................................................... 379
7.4.5. Pobieranie danych przestrzennych........................................................... 381
7.5. Analiza informacji przestrzennych....................................................................... 381
7.5.1. Funkcje konwersji formatw geometrycznych ........................................ 382
7.5.2. Funkcje klasy Geometry.......................................................................... 382
7.5.3. Funkcje tworzce nowe geometrie na podstawie istniejcych................. 388
7.5.4. Funkcje testujce relacje przestrzenne
midzy obiektami geometrycznymi ......................................................... 389
7.5.5. Relacje midzy minimalnymi prostoktami otaczajcymi
dla poszczeglnych geometrii.................................................................. 390
7.5.6. Funkcje sprawdzajce relacje przestrzenne pomidzy geometriami ........ 391
7.6. Optymalizacja analizy przestrzennej.................................................................... 392
7.6.1. Tworzenie indeksw przestrzennych....................................................... 392
7.6.2. Wykorzystanie indeksu przestrzennego................................................... 393
7.7. Zgodno MySQL ze standardem........................................................................ 395
7.7.1. Niezaimplementowane funkcje GIS ........................................................ 395
Rozdzia 8. Procedury i funkcje skadowane ..................................................... 397
8.1. Skadnia procedur skadowanych......................................................................... 398
8.1.1. Utrzymanie procedur skadowanych........................................................ 398
8.1.2. SHOW PROCEDURE STATUS oraz SHOW FUNCTION STATUS.... 401
8.1.3. Instrukcja CALL...................................................................................... 402
8.1.4. Instrukcja zoona BEGIN ... END.......................................................... 402
8.1.5. Instrukcja DECLARE.............................................................................. 402
8.1.6. Zmienne w procedurach skadowanych................................................... 402
8.1.7. Warunki i podprogramy obsugi .............................................................. 403
8.1.8. Kursory.................................................................................................... 405
8.1.9. Konstrukcje sterowania przepywem sterowania..................................... 406
Rozdzia 9. Obsuga bdw w MySQL .............................................................. 409
9.1. Zwracane bdy.................................................................................................... 409
9.2. Komunikaty bdw............................................................................................. 419
Dodatek A Rozwizywanie problemw z zapytaniami ........................................435
A.1. Zagadnienia zwizane z zapytaniami ................................................................... 435
A.1.1. Wielko liter przy wyszukiwaniu........................................................... 435
A.1.2. Problemy z kolumnami typu DATE ........................................................ 436
A.1.3. Problemy z wartociami NULL............................................................... 437
A.1.4. Problemy z synonimami kolumn ............................................................. 438
A.1.5. Bd wycofania dla tabel nietransakcyjnych............................................ 439
A.1.6. Usuwanie wierszy ze zwizanych tabel ................................................... 439
A.1.7. Rozwizywanie problemw z brakujcymi wierszami ............................ 440
A.1.8. Problemy z porwnaniami zmiennoprzecinkowymi................................ 441
8 Spis treci
A.2. Problemy zwizane z optymalizatorem................................................................ 443
A.3. Problemy z definicj tabel.................................................................................... 444
A.3.1. Problemy z instrukcj ALTER TABLE................................................... 444
A.3.2. Jak zmieni porzdek kolumn w tabeli .................................................... 445
A.3.3. Problemy z tabelami tymczasowymi ....................................................... 445
Dodatek B Wyraenia regularne w MySQL........................................................ 447
Skorowidz...................................................................................... 451
Rozdzia 4.
Typy kolumn
W MySQL dostpnych jest wiele typw danych, ktre mona pogrupowa w kilku pod-
stawowych kategoriach, takich jak typy liczbowe, typy zwizane z dat i czasem oraz
typy acuchowe. Na pocztku tego rozdziau przedstawiony zostanie przegld wspo-
mnianych przed chwil typw kolumn, po czym nastpi bardziej szczegowy opis ich
waciwoci z podziaem na poszczeglne kategorie i wreszcie zamieszczone zostanie
podsumowanie informacji dotyczcych wymaga co do rozmiaru pamici potrzebnej
do przechowania danej kolumny. Sam przegld jest z zamierzenia krtki. Dodatkowe
informacje o poszczeglnych typach kolumn, na przykad dopuszczalny format, w kt-
rym mona deklarowa wartoci, zostay uwzgldnione w szczegowych omwieniach.
Od wersji 4.1 MySQL rozpoznaje rozszerzenia do obsugi danych przestrzennych.
Informacje o typach przestrzennych znajduj si w rozdziale 7. tego podrcznika.
W czci opisu typw kolumn zastosowane zostay nastpujce reguy:
/
Wskazuje maksymalny rozmiar wywietlania liczby lub acucha.
Maksymalnym dopuszczalnym rozmiarem wywietlania jest 255.
&
Dotyczy typw zmiennoprzecinkowych i staoprzecinkowych. Okrela liczb
cyfr po kropce dziesitnej. Maksymalna dopuszczalna warto wynosi 30,
ale nie powinna przekracza /.
Nawiasy kwadratowe ( ) identyfikuj opcjonalne fragmenty deklaracji typu.
126 Rozdzia 4. Typy kolumn
4.1. Przegld typw dla kolumny
4.1.1. Omwienie typw liczbowych
Poniej znajduje si przegld liczbowych typw dla kolumn. Bardziej szczegowe
informacje mona znale w podrozdziale 4.2. Wymogi dotyczce rozmiaru pamici
potrzebnej do przechowywania kolumn znajduj si w podrozdziale 4.5.
Jeli dla kolumny liczbowej zostanie okrelony atrybut /lRO|1||, MySQL automatycznie
doda do kolumny atrybut UN1S1ONlD.
Naley uwaa podczas odejmowania dwch wartoci liczbowych, z ktrych jedna ma
typ UN1S1ONlD. Uzyskany wynik bdzie rwnie tego typu! patrz podrozdzia 5.7.
T1NY1NT/) UNS1ONlD /lRO|1||
Bardzo maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od `8
do `/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do bb.
B1T, BOO|, BOO|lAN
To s synonimy T1NY1NT`). Synonim BOO|lAN zosta dodany w MySQL 4.1.0.
Warto zerowa to inaczej fasz. Wartoci niezerowe traktowane s jako prawda.
W przyszoci wprowadzona zostanie pena, zgodna ze standardem SQL
obsuga typu boolowskiego.
SMA||1NT/) UNS1ONlD /lRO|1||
Maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od o/68
do o/6/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do 6bbob.
MlD1UM1NT/) UNS1ONlD /lRO|1||
rednia liczba cakowita. Dla liczb ze znakiem zakres wynosi od 8o88608
do 8o8860/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0
do `6///`b.
1NT/) UNS1ONlD /lRO|1||
Standardowa liczba cakowita. Dla liczb ze znakiem zakres wynosi
od `4/48o648 do `4/48o64/. W przypadku liczb bez znaku zakres
obejmuje wartoci od 0 do 49496/9b.
1NTlOlR/) UNS1ONlD /lRO|1||
Jest to synonim dla typu 1NT.
B1O1NT/) UNS1ONlD /lRO|1||
Dua liczba cakowita. Dla liczb ze znakiem zakres wynosi
od 9oo/0o68b4//b808 do 9oo/0o68b4//b80/. W przypadku liczb
bez znaku zakres obejmuje wartoci od 0 do `8446/440/o/09bb`6`b.
4.1. Przegld typw dla kolumny 127
Oto kilka spraw, o ktrych naley wiedzie odnonie kolumn typu B1O1NT:
Wszystkie obliczenia wykonywane s przy uyciu wartoci typu B1O1NT
lub DOUB|l ze znakiem. Oznacza to, e duych liczb cakowitych bez
znaku, wikszych ni 9oo/0o68b4//b80/ (63 bity), mona uywa tylko
z funkcjami bitowymi! Niezastosowanie si do tej zasady moe doprowadzi
do uzyskania w wyniku liczby, ktrej kilka ostatnich cyfr jest bdnych
z powodu bdw w zaokrglaniu podczas konwersji wartoci B1O1NT
na DOUB|l.
MySQL 4.0 potrafi obsugiwa B1O1NT w nastpujcych przypadkach:
Podczas wykorzystywania liczb cakowitych do przechowywania
duych wartoci bez znaku w kolumnie typu B1O1NT.
W M1NPC\YCAMQN) lub MAXPC\YCAMQN), gdzie PC\YCAMQN odnosi si
do kolumny B1O1NT.
Podczas korzystania z operatorw (midzy innymi , , *), gdy oba
argumenty s liczbami cakowitymi.
Zawsze istnieje moliwo zapisania w kolumnie B1O1NT dokadnej wartoci
liczby cakowitej. Wystarczy zapisa j przy uyciu acucha. W takim
przypadku zostanie dokonana konwersja acucha na liczb; konwersja
nie bdzie wymaga poredniego etapu przeksztacajcego liczb na jej
odpowiednik o podwjnej precyzji.
Podczas korzystania z operatorw , i * stosowana jest arytmetyka
B1O1NT, jeli oba argumenty maj warto liczby cakowitej! To oznacza,
e pomnoenie dwch duych liczb cakowitych (lub wynikw funkcji,
ktra zwraca liczby cakowite) moe spowodowa nieoczekiwane
rezultaty, jeli wynik przekroczy liczb 9oo/0o68b4//b80/.
||OATR) UNS1ONlD /lRO|1||
Liczba zmiennoprzecinkowa. Parametr R oznacza precyzj i moe przyjmowa
warto od 0 do 14 dla liczb zmiennoprzecinkowych o dokadnoci do jednego
znaku i od 25 do 53 dla liczb zmiennoprzecinkowych o dokadnoci do dwch
znakw. To przypomina opisane poniej typy ||OAT i DOUB|l. Typ ||OATR)
ma ten sam zakres, jaki posiadaj odpowiadajce mu typy ||OAT i DOUB|l,
ale w jego przypadku niezdefiniowany jest maksymalny rozmiar wywietlania
i liczba miejsc po przecinku.
Od wersji 3.23 MySQL jest to prawdziwa warto zmiennoprzecinkowa.
W wersjach wczeniejszych liczba typu ||OATR) bya zawsze liczb o dwch
miejscach po przecinku.
Ta skadnia zostaa dodana w celu zachowania zgodnoci ze standardem ODBC.
Stosowanie typu ||OAT moe spowodowa wystpienie pewnych
nieoczekiwanych problemw, poniewa wszystkie obliczenia w MySQL
s wykonywane z podwjn precyzj patrz punkt A.1.7).
||OAT/, &) UNS1ONlD /lRO|1||
128 Rozdzia 4. Typy kolumn
Maa liczba zmiennoprzecinkowa (o dokadnoci do jednego znaku). Liczba
ta moe przyj wartoci: od o408o466lo8 do ``/b494ob`lo8, 0,
i od ``/b494ob`lo8 do o408o466lo8. Jeli podany jest atrybut UN1S1ONlD,
niedozwolone s wartoci ujemne. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ ||OAT bez argumentw
lub typ ||OATR) (gdzie Rjest liczb z zakresu od 0 do 24) oznacza liczb
zmiennoprzecinkow o pojedynczej precyzji.
DOUB|l/, &) UNS1ONlD /lRO|1||
Standardowa liczba zmiennoprzecinkowa (o dokadnoci do dwch
znakw). Liczba ta moe przyj wartoci: od `/9/69o`o486o`b/lo08
do b0/o8b8b0/0`4lo08, 0, i od b0/o8b8b0/0`4lo08
do `/9/69o`o486o`b/lo08. Jeli podany jest atrybut UN1S1ONlD, wartoci
ujemne s niedozwolone. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ DOUB|l
bez argumentw lub ||OATR) (gdzie R jest liczb z zakresu od 25 do 53)
oznacza liczb zmiennoprzecinkow o podwjnej precyzji.
DOUB|l PRlC1S1ON/, &) UNS1ONlD /lRO|1||
RlA|/, &) UNS1ONlD /lRO|1||
S to synonimy DOUB|l. Wyjtek: Jeli dla parametru s;_cce serwera
wczono opcj RlA|_AS_||OAT, synonimem ||OAT jest RlA|, a nie DOUB|l.
DlC1MA|/, &) UNS1ONlD /lRO|1||
Niezapakowana liczba staoprzecinkowa. Zachowanie kolumny tego typu
przypomina kolumn typu CHAR. Niezapakowana oznacza, e liczba jest
przechowywana w postaci acucha przy uyciu jednego znaku na kad cyfr
wartoci. Parametr / definiuje maksymaln liczb cyfr, a & liczb miejsc
po przecinku. W parametrze / nie s brane pod uwag: kropka dziesitna
(odpowiadajca w naszej notacji przecinkowi) i (dla liczb ujemnych) znak ,
cho jest dla nich zarezerwowane miejsce. Wartoci nie maj miejsc
po przecinku lub czci uamkowych, jeli & jest rwne 0. Maksymalny zakres
wartoci typu DlC1MA| jest taki sam, jak dla typu DOUB|l, ale rzeczywisty zakres
danej kolumny DlC1MA| moe by ograniczony przez wybr argumentw / i &.
Jeli podany jest atrybut UN1S1ONlD, wartoci ujemne s niedozwolone.
W przypadku braku argumentu &, domyln wartoci jest 0. Jeli pominity
jest parametr /, domyln wartoci jest 10.
W wersjach poprzedzajcych MySQL 3.23 argument / musi by wystarczajco
duy, by zawiera obszar potrzebny dla znaku i kropki dziesitnej.
DlC/,&) UNS1ONlD /lRO|1||
NUMlR1C/,&) UNS1ONlD /lRO|1||
|1XlD/, &) UNS1ONlD /lRO|1||
S to synonimy typu DlC1MA|.
W MySQL 4.1.0 dodano synonim |1XlD w celu osignicia kompatybilnoci
z innymi serwerami.
4.1. Przegld typw dla kolumny 129
4.1.2. Przegld typw zwizanych z dat i czasem
Poniej znajduje si podsumowanie typw kolumn przeznaczonych dla czasu i daty.
Dodatkowe informacje na ten temat mona znale w podrozdziale 4.3. Wymogi do-
tyczce pamici potrzebnej do przechowywania danych w kolumnach zostay podane
w podrozdziale 4.5.
DATl
Data. Obsugiwany zakres obejmuje daty od ``0000`0`` do `9999`o``.
W MySQL wartoci DATl wywietlane s w formacie `RRRRMMDD`, ale mona
przypisywa wartoci do kolumn DATl przy uyciu acuchw lub liczb.
DATlT1Ml
Kombinacja daty i czasu. Obsugiwany zakres obejmuje wartoci
od ``0000`0` 000000` do `9999`o` ob9b9`. W MySQL wartoci
DATlT1Ml wywietlane s w formacie `RRRRMMDD OOMMSS`, ale mona
przypisywa wartoci do kolumn DATlT1Ml przy uyciu acuchw lub liczb.
T1MlSTAMP/)
Znacznik czasu. Obsugiwany zakres rozpoczyna si od daty ``9/00`0``
i siga roku 0o/.
Kolumna typu T1MlSTAMP przydaje si do rejestracji daty i godziny operacji
wstawiania lub aktualizacji. Pierwszej kolumnie T1MlSTAMP w tabeli
automatycznie przypisywana jest data i czas ostatniej operacji, jeli tylko tych
wartoci nie wprowadzi rcznie uytkownik. Dowolnej kolumnie T1MlSTAMP
mona rwnie przypisa biec dat i godzin, wpisujc do niej warto NU||.
Od MySQL 4.1 wartoci T1MlSTAMP s zwracane w postaci acuchw
w formacie `RRRRMMDD OOMMSS`. Aby uzyska warto w postaci liczby,
naley doda do kolumn tego typu 0. Inne szerokoci wywietlania
znacznika czasu nie s obsugiwane.
W wersjach poprzedzajcych MySQL 4.1 wartoci T1MlSTAMP s wywietlane
w formacie RRRRMMDDOOMMSS, RRMMDDOOMMSS, RRRRMMDD lub RRMMDD w zalenoci
od tego, czy parametr / jest rwny 14 (albo go brak), 12, 8 lub 6. Mona jednak
przypisywa wartoci do kolumn T1MlSTAMP przy uyciu acuchw lub liczb.
Argument / wpywa tylko na sposb wywietlania kolumny T1MlSTAMP, a nie
na jej przechowywanie. Wartoci kolumny s zawsze zapisywane w czterech
bajtach. W MySQL od wersji 4.0.12 pojawia si opcja ne., dziki ktrej
mona zmieni dziaanie serwera, upodabniajc je do MySQL 4.1.
Naley odnotowa, e kolumny T1MlSTAMP/), gdzie /jest rwne 8 lub 14,
s traktowane jako liczby, natomiast reszta kolumn T1MlSTAMP/) jest
traktowana jako acuchy. Jest to rodzaj gwarancji, e uytkownik bdzie
mg wiarygodnie usuwa i przywraca tabele tego typu.
T1Ml
Godzina. Obsugiwany zakres obejmuje wartoci od `8o8b9b9`
do ` 8o8b9b9`. W MySQL wartoci T1Ml wywietlane s w formacie
` OOMMSS`, ale mona przypisa wartoci do kolumn T1Ml przy uyciu
zarwno acuchw, jak i liczb.
130 Rozdzia 4. Typy kolumn
YlAR|4)
Rok w formacie dwu- lub czterocyfrowym. Domylnym formatem jest rok
zapisany za pomoc czterech cyfr. W tym formacie dostpne wartoci nale
do przedziau od `90` do `bb oraz 0. W formacie dwucyfrowym wartoci
dopuszczalne to liczby z zakresu od /0 do 69, ktre reprezentuj daty od roku
1970 do 2069. W MySQL wartoci YlAR wywietlane s w formacie RRRR,
ale mona przypisa wartoci do kolumn YlAR przy uyciu tak acuchw,
jak i liczb. Typ YlAR jest niedostpny dla wersji wczeniejszych ni MySQL 3.22.
4.1.3. Przegld typw acuchowych
Poniej znajduje si przegld typw acuchowych. Dodatkowe informacje mona
znale w podrozdziale 4.4. Wymogi dotyczce pamici potrzebnej do przechowywa-
nia danych w kolumnach zostay podane w podrozdziale 4.5.
W niektrych przypadkach MySQL moe zmieni kolumn typu acuchowego na typ,
ktry bdzie si rni od zadeklarowanego w instrukcji CRlATl TAB|l lub A|TlR TAB|l.
Wicej informacji na ten temat znajduje si w podpunkcie 6.2.5.2.
Od wersji 4.1 w MySQL pojawia si zmiana, ktra wpywa na wiele typw kolumn typu
acuchowego. Definicja kolumn typu znakowego moe zawiera atrybut CHARACTlR
SlT, ktry okrela zestaw znakw i opcjonalnie porzdek sortowania. Dotyczy to typw
CHAR, VARCHAR, rnych typw TlXT oraz lNUM i SlT, na przykad:
CRF/TF T/B|F !
FNUMYCTVQ
YCTVQ|
1 lub 2 bajty w zalenoci od liczby wartoci wyliczenia
(maksymalnie 65 535)
SFTYCTVQ
YCTVQ|
1, 2, 3, 4 lub 8 bajtw w zalenoci od liczby elementw zestawu
(maksymalnie 64)
Typy VARCHAR, B|OB i TlXT maj zmienn dugo. Dla kadego ilo pamici potrzeb-
nej do przechowania wartoci bdzie zalee od faktycznej dugoci wartoci kolumny
(reprezentowanej w ostatniej tabeli przez .), a nie od maksymalnego moliwego roz-
miaru danego typu. Kolumna VARCHAR`0) na przykad moe przechowywa acuch
o maksymalnej dugoci 10 znakw. Faktyczna ilo wymaganej pamici to dugo
acucha (.) plus 1 bajt do zapisania dugoci acucha. Dla acucha `.|cc` parametr
. jest rwny 4, a wymagany rozmiar pamici to 5 bajtw.
Typy B|OB i TlXT wymagaj 1, 2, 3 lub 4 bajtw do zapisu dugoci wartoci kolumny
w zalenoci od maksymalnej moliwej dugoci tego typu (patrz punkt 4.4.2).
Rozmiar obiektu lNUM jest ustalany na podstawie liczby rnych wartoci wyliczenia.
Przy wyliczeniach do 255 moliwych wartoci uywany jest jeden bajt, a przy wyli-
czeniach do 65 535 wartoci uywane s 2 bajty (patrz punkt 4.4.3).
Rozmiar obiektu SlT jest okrelany przez liczb rnych elementw zestawu. Jeli ze-
staw ma rozmiar 0, obiekt zajmuje 0/).8 bajtw, ktr to warto zaokrgla si do
1, 2, 3, 4 lub 8 bajtw. Obiekt SlT moe mie do 64 elementw (patrz punkt 4.4.4).
4.6. Wybieranie odpowiedniego typu
dla kolumny
Aby jak najbardziej wydajnie korzysta z pamici, naley we wszystkich przypadkach
stara si stosowa typ, ktry bdzie jak najbardziej dokadny. Jeli na przykad w kolum-
nie liczb cakowitych bd przechowywane wartoci z zakresu od ` do 99999, najlep-
szym wyborem bdzie typ MlD1UM1NT UNS1ONlD. Ze wszystkich typw, ktre reprezentuj
wszystkie wymagane wartoci, zajmuje najmniej pamici.
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych 153
Powszechnym problemem jest dokadne przedstawianie wartoci walutowych. W MySQL
naley do tego uywa typu DlC1MA|, za pomoc ktrego wartoci zapisywane s w for-
mie acucha. Dziki temu nie traci si na dokadnoci (mimo to obliczenia z wartociami
DlC1MA| mog by wci wykonywane przy uyciu operacji dziaajcych na liczbach
z podwjn precyzj). Jeli dokadno nie jest zbyt wana, by moe wystarczajco
dobrym typem bdzie DOUB|l.
Aby uzyska wiksz dokadno, mona zawsze przeksztaci warto na typ stao-
przecinkowy, przechowywany w B1O1NT. Pozwoli to wykonywa wszystkie obliczenia
na liczbach cakowitych i tylko w razie potrzeby przeksztaca wynik z powrotem na
wartoci zmiennoprzecinkowe.
4.7. Wykorzystywanie typw kolumn
z innych mechanizmw baz danych
Aby uatwi uytkownikowi zastosowanie kodu pochodzcego od innych producentw,
moliwe jest odwzorowanie typw kolumn w sposb przedstawiony w poniszej tabeli.
Odwzorowania te upraszczaj operacj importu do MySQL definicji tabel z innych
mechanizmw baz danych:
Typ innych producentw Typ MySQL
BTN/RY/| C'/R/| BTN/RY
C'/R V/RYTN/| V/RC'/R/|
F|J/T4 F|J/T
F|J/T8 OJUB|F
TNT1 TTNYTNT
TNT SM/||TNT
TNT: MFOTUMTNT
TNT4 TNT
TNT8 BTTNT
|JN V/RBTN/RY MFOTUMB|JB
|JN V/RC'/R MFOTUMTFXT
|JN MFOTUMTFXT oc M,SJ| 410|
MTOO|FTNT MFOTUMTNT
V/RBTN/RY/| C'/R/| BTN/RY
Odwzorowanie typw kolumn jest wykonywane podczas tworzenia tabeli, po czym
oryginalne deklaracje typu zostaj usunite. Jeli uytkownik utworzy tabel z typami
stosowanymi przez innych producentw, po czym wyda polecenie DlSCR1Bl PC\YCA
VCDGNK, zostanie przedstawiona struktura tabeli z odpowiadajcymi im typami MySQL.
4 Spis treci
1.8.5. Rozbienoci midzy MySQL a standardem SQL ........................................ 60
1.8.6. Jak MySQL radzi sobie z ograniczeniami ................................................. 67
1.8.7. Znane bdy i projektowe braki w MySQL................................................ 69
Rozdzia 2. Struktura jzyka .............................................................................. 77
2.1. Literay................................................................................................................... 77
2.1.1. acuchy ................................................................................................... 77
2.1.2. Liczby........................................................................................................ 80
2.1.3. Wartoci szesnastkowe .............................................................................. 80
2.1.4. Wartoci logiczne ...................................................................................... 81
2.1.5. Wartoci NULL......................................................................................... 81
2.2. Nazwy baz danych, tabel, indeksw, kolumn i aliasw......................................... 81
2.2.1. Kwalifikatory identyfikatorw .................................................................. 83
2.2.2. Znaczenie wielkoci liter w nazwach identyfikatorw.............................. 83
2.3. Zmienne definiowane przez uytkownika.............................................................. 85
2.4. Zmienne systemowe............................................................................................... 87
2.4.1. Strukturalne zmienne systemowe .............................................................. 89
2.5. Skadnia komentarza .............................................................................................. 91
2.6. Traktowanie sw zastrzeonych w MySQL.......................................................... 92
Rozdzia 3. Obsuga zestaww znakw............................................................... 95
3.1. Oglne informacje o zestawach znakw i sortowaniu ........................................... 95
3.2. Zestawy znakw i porzdki sortowania w MySQL................................................ 96
3.3. Okrelanie domylnego zestawu znakw i sortowania........................................... 98
3.3.1. Zestaw znakw i sortowanie dla serwera................................................... 98
3.3.2. Zestaw znakw i sortowanie dla bazy danych........................................... 99
3.3.3. Zestaw znakw i sortowanie dla tabeli .................................................... 100
3.3.4. Zestaw znakw i sortowanie dla kolumny............................................... 100
3.3.5. Przykady przypisywania zestawu znakw i sortowania ......................... 101
3.3.6. Zestawy znakw i sortowanie dla poczenia .......................................... 102
3.3.7. Zestaw znakw i sortowanie dla acucha znakw.................................. 104
3.3.8. Wykorzystywanie COLLATE w instrukcjach SQL.................................... 105
3.3.9. Priorytet klauzuli COLLATE .................................................................. 106
3.3.10. Operator BINARY................................................................................... 106
3.3.11. Niektre przypadki specjalne, w ktrych trudno okreli sortowanie...... 106
3.3.12. Sortowania musz by odpowiednie dla danego zestawu znakw........... 107
3.3.13. Przykad wpywu porzdku sortowania ................................................... 108
3.4. Operacje, na ktre ma wpyw obsuga zestaww znakw.................................... 109
3.4.1. acuchy wyjciowe ............................................................................... 109
3.4.2. CONVERT()............................................................................................ 110
3.4.3. CAST() .................................................................................................... 110
3.4.4. Instrukcje SHOW .................................................................................... 111
3.5. Obsuga Unicode.................................................................................................. 112
3.6. UTF8 dla metadanych.......................................................................................... 113
3.7. Kompatybilno z innymi systemami zarzdzania baz danych .......................... 115
3.8. Nowy format pliku konfiguracji zestawu znakw................................................ 115
3.9. Narodowe zestawy znakw.................................................................................. 115
3.10. Aktualizacja zestaww znakw z MySQL 4.0..................................................... 116
3.10.1. Zestawy znakw w wersji 4.0 i odpowiadajce im w wersji 4.1 pary
skadajce si z zestawu znakw i sortowania......................................... 117
3.10.2. Przeksztacanie kolumn znakowych wersji 4.0 na format 4.1 ................. 118
3.11. Zestawy znakw i sortowania obsugiwane przez MySQL.................................. 118
3.11.1. Zestawy znakw standardu Unicode ....................................................... 119
3.11.2. Zestawy znakw zachodnioeuropejskich................................................. 120
3.11.3. Zestawy znakw dla Europy Centralnej .................................................. 121
Spis treci 5
3.11.4. Zestawy znakw poudniowoeuropejskich i rodkowowschodnich......... 122
3.11.5. Zestawy znakw regionu batyckiego...................................................... 123
3.11.6. Zestawy znakw dla cyrylicy................................................................... 123
3.11.7. Azjatyckie zestawy znakw..................................................................... 124
Rozdzia 4. Typy kolumn.................................................................................. 125
4.1. Przegld typw dla kolumny................................................................................ 126
4.1.1. Omwienie typw liczbowych ................................................................ 126
4.1.2. Przegld typw zwizanych z dat i czasem............................................ 129
4.1.3. Przegld typw acuchowych ................................................................ 130
4.2. Typy liczbowe...................................................................................................... 132
4.3. Typy zwizane z dat i czasem............................................................................ 135
4.3.1. Typy DATETIME, DATE i TIMESTAMP............................................. 137
4.3.2. Typ TIME................................................................................................ 142
4.3.3. Typ YEAR............................................................................................... 143
4.3.4. Problem roku 2000 a typy zwizane z dat.............................................. 144
4.4. Typy acuchowe ................................................................................................. 144
4.4.1. Typy CHAR i VARCHAR...................................................................... 144
4.4.2. Typy BLOB i TEXT................................................................................ 146
4.4.3. Typ Enum................................................................................................ 147
4.4.4. Typ SET .................................................................................................. 149
4.5. Rozmiar pamici potrzebnej dla typw kolumn................................................... 151
4.6. Wybieranie odpowiedniego typu dla kolumny..................................................... 152
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych ............... 153
Rozdzia 5. Funkcje i operatory........................................................................ 155
5.1. Operatory ............................................................................................................. 156
5.1.1. Nawiasy................................................................................................... 156
5.1.2. Operatory porwnania ............................................................................. 156
5.1.3. Operatory logiczne .................................................................................. 161
5.1.4. Operatory rozrniania wielkoci liter..................................................... 163
5.2. Funkcje kontroli przepywu ................................................................................. 163
5.3. Funkcje acuchowe............................................................................................. 166
5.3.1. Funkcje porwnywania acuchw.......................................................... 176
5.4. Funkcje liczbowe ................................................................................................. 178
5.4.1. Operatory arytmetyczne........................................................................... 178
5.4.2. Funkcje matematyczne ............................................................................ 180
5.5. Funkcje daty i godziny......................................................................................... 186
5.6. Funkcje obsugi wyszukiwania penotekstowego................................................. 202
5.6.1. Boolowskie wyszukiwania penotekstowe............................................... 205
5.6.2. Wyszukiwania penotekstowe z rozwijaniem zapytania .......................... 207
5.6.3. Ograniczenia dla wyszukiwania penotekstowego................................... 208
5.6.4. Modyfikowanie wyszukiwania penotekstowego MySQL ...................... 209
5.6.5. Lista rzeczy do zrobienia dla wyszukiwania penotekstowego................ 211
5.7. Funkcje konwersji typw..................................................................................... 211
5.8. Inne funkcje ......................................................................................................... 214
5.8.1. Funkcje bitowe ........................................................................................ 214
5.8.2. Funkcje szyfrujce................................................................................... 215
5.8.3. Funkcje informacyjne .............................................................................. 219
5.8.4. Funkcje rne .......................................................................................... 223
5.9. Funkcje i modyfikatory do zastosowania z klauzulami GROUP BY................... 226
5.9.1. Funkcje GROUP BY (agregujce)........................................................... 226
5.9.2. Modyfikatory GROUP BY...................................................................... 229
5.9.3. GROUP BY z ukrytymi polami............................................................... 232
6 Spis treci
Rozdzia 6. Skadnia instrukcji SQL .................................................................. 235
6.1. Instrukcje operujce na danych............................................................................ 235
6.1.1. Skadnia instrukcji DELETE................................................................... 235
6.1.2. Skadnia instrukcji DO ............................................................................ 238
6.1.3. Skadnia instrukcji HANDLER............................................................... 238
6.1.4. Skadnia instrukcji INSERT .................................................................... 240
6.1.5. Skadnia instrukcji LOAD DATA INFILE.............................................. 246
6.1.6. Skadnia instrukcji REPLACE................................................................. 255
6.1.7. Skadnia instrukcji SELECT.................................................................... 256
6.1.8. Skadnia podzapyta................................................................................ 265
6.1.9. Skadnia instrukcji TRUNCATE............................................................. 276
6.1.10. Skadnia instrukcji UPDATE................................................................... 276
6.2. Instrukcje definiowania danych ........................................................................... 278
6.2.1. Skadnia instrukcji ALTER DATABASE ............................................... 278
6.2.2. Skadnia instrukcji ALTER TABLE........................................................ 279
6.2.3. Skadnia instrukcji CREATE DATABASE............................................. 285
6.2.4. Skadnia instrukcji CREATE INDEX ..................................................... 285
6.2.5. Skadnia instrukcji CREATE TABLE..................................................... 287
6.2.6. Skadnia instrukcji DROP DATABASE.................................................. 301
6.2.7. Skadnia instrukcji DROP INDEX.......................................................... 302
6.2.8. Skadnia instrukcji DROP TABLE.......................................................... 302
6.2.9. Skadnia instrukcji RENAME TABLE.................................................... 303
6.3. Instrukcje programu MySQL............................................................................... 304
6.3.1. Skadnia instrukcji DESCRIBE
(odczytywanie informacji na temat kolumn) ........................................... 304
6.3.2. Skadnia instrukcji USE........................................................................... 304
6.4. Instrukcje obsugi transakcji i blokowania........................................................... 305
6.4.1. Skadnia instrukcji START TRANSACTION, COMMIT
oraz ROLLBACK.................................................................................... 305
6.4.2. Instrukcje niemoliwe do wycofania ....................................................... 306
6.4.3. Instrukcje wykonujce niejawne zatwierdzenie......................................... 306
6.4.4. Skadnia instrukcji SAVEPOINT i ROLLBACK TO SAVEPOINT....... 307
6.4.5. Skadnia instrukcji LOCK TABLES oraz UNLOCK TABLES .............. 307
6.4.6. Skadnia instrukcji SET TRANSACTION.............................................. 310
6.5. Administracja baz danych .................................................................................. 311
6.5.1. Instrukcje zarzdzajce kontami uytkownikw ....................................... 311
6.5.2. Instrukcje do konserwacji tabel ............................................................... 319
6.5.3. Skadnia instrukcji SET i SHOW ............................................................ 326
6.5.4. Inne instrukcje administracyjne ............................................................... 347
6.6. Instrukcje replikacji.............................................................................................. 352
6.6.1. Instrukcje SQL sterujce serwerem gwnym ......................................... 352
6.6.2. Instrukcje SQL sterujce serwerami podrzdnymi .................................. 354
Rozdzia 7. Rozszerzenia przestrzenne w MySQL............................................... 365
7.1. Wstp ................................................................................................................... 365
7.2. Model geometryczny OpenGIS............................................................................ 366
7.2.1. Hierarchia klas geometrycznych.............................................................. 366
7.2.2. Klasa Geometry ....................................................................................... 368
7.2.3. Klasa Point .............................................................................................. 369
7.2.4. Klasa Curve ............................................................................................. 369
7.2.5. Klasa LineString...................................................................................... 370
7.2.6. Klasa Surface........................................................................................... 370
7.2.7. Klasa Polygon.......................................................................................... 370
7.2.8. Klasa GeometryCollection....................................................................... 371
Spis treci 7
7.2.9. Klasa MultiPoint...................................................................................... 371
7.2.10. Klasa MultiCurve .................................................................................... 372
7.2.11. Klasa MultiLineString............................................................................. 372
7.2.12. Klasa MultiSurface .................................................................................. 372
7.2.13. Klasa MultiPolygon................................................................................. 373
7.3. Obsugiwane formaty danych przestrzennych...................................................... 373
7.3.1. Format tekstowy WKT............................................................................ 374
7.3.2. Format binarny WKB.............................................................................. 374
7.4. Tworzenie bazy danych z rozszerzeniami przestrzennymi................................... 375
7.4.1. Typy danych przestrzennych w MySQL ................................................. 375
7.4.2. Tworzenie wartoci przestrzennych......................................................... 376
7.4.3. Tworzenie kolumn przestrzennych.......................................................... 379
7.4.4. Wypenianie kolumn przestrzennych....................................................... 379
7.4.5. Pobieranie danych przestrzennych........................................................... 381
7.5. Analiza informacji przestrzennych....................................................................... 381
7.5.1. Funkcje konwersji formatw geometrycznych ........................................ 382
7.5.2. Funkcje klasy Geometry.......................................................................... 382
7.5.3. Funkcje tworzce nowe geometrie na podstawie istniejcych................. 388
7.5.4. Funkcje testujce relacje przestrzenne
midzy obiektami geometrycznymi ......................................................... 389
7.5.5. Relacje midzy minimalnymi prostoktami otaczajcymi
dla poszczeglnych geometrii.................................................................. 390
7.5.6. Funkcje sprawdzajce relacje przestrzenne pomidzy geometriami ........ 391
7.6. Optymalizacja analizy przestrzennej.................................................................... 392
7.6.1. Tworzenie indeksw przestrzennych....................................................... 392
7.6.2. Wykorzystanie indeksu przestrzennego................................................... 393
7.7. Zgodno MySQL ze standardem........................................................................ 395
7.7.1. Niezaimplementowane funkcje GIS ........................................................ 395
Rozdzia 8. Procedury i funkcje skadowane ..................................................... 397
8.1. Skadnia procedur skadowanych......................................................................... 398
8.1.1. Utrzymanie procedur skadowanych........................................................ 398
8.1.2. SHOW PROCEDURE STATUS oraz SHOW FUNCTION STATUS.... 401
8.1.3. Instrukcja CALL...................................................................................... 402
8.1.4. Instrukcja zoona BEGIN ... END.......................................................... 402
8.1.5. Instrukcja DECLARE.............................................................................. 402
8.1.6. Zmienne w procedurach skadowanych................................................... 402
8.1.7. Warunki i podprogramy obsugi .............................................................. 403
8.1.8. Kursory.................................................................................................... 405
8.1.9. Konstrukcje sterowania przepywem sterowania..................................... 406
Rozdzia 9. Obsuga bdw w MySQL .............................................................. 409
9.1. Zwracane bdy.................................................................................................... 409
9.2. Komunikaty bdw............................................................................................. 419
Dodatek A Rozwizywanie problemw z zapytaniami ........................................435
A.1. Zagadnienia zwizane z zapytaniami ................................................................... 435
A.1.1. Wielko liter przy wyszukiwaniu........................................................... 435
A.1.2. Problemy z kolumnami typu DATE ........................................................ 436
A.1.3. Problemy z wartociami NULL............................................................... 437
A.1.4. Problemy z synonimami kolumn ............................................................. 438
A.1.5. Bd wycofania dla tabel nietransakcyjnych............................................ 439
A.1.6. Usuwanie wierszy ze zwizanych tabel ................................................... 439
A.1.7. Rozwizywanie problemw z brakujcymi wierszami ............................ 440
A.1.8. Problemy z porwnaniami zmiennoprzecinkowymi................................ 441
8 Spis treci
A.2. Problemy zwizane z optymalizatorem................................................................ 443
A.3. Problemy z definicj tabel.................................................................................... 444
A.3.1. Problemy z instrukcj ALTER TABLE................................................... 444
A.3.2. Jak zmieni porzdek kolumn w tabeli .................................................... 445
A.3.3. Problemy z tabelami tymczasowymi ....................................................... 445
Dodatek B Wyraenia regularne w MySQL........................................................ 447
Skorowidz...................................................................................... 451
Rozdzia 4.
Typy kolumn
W MySQL dostpnych jest wiele typw danych, ktre mona pogrupowa w kilku pod-
stawowych kategoriach, takich jak typy liczbowe, typy zwizane z dat i czasem oraz
typy acuchowe. Na pocztku tego rozdziau przedstawiony zostanie przegld wspo-
mnianych przed chwil typw kolumn, po czym nastpi bardziej szczegowy opis ich
waciwoci z podziaem na poszczeglne kategorie i wreszcie zamieszczone zostanie
podsumowanie informacji dotyczcych wymaga co do rozmiaru pamici potrzebnej
do przechowania danej kolumny. Sam przegld jest z zamierzenia krtki. Dodatkowe
informacje o poszczeglnych typach kolumn, na przykad dopuszczalny format, w kt-
rym mona deklarowa wartoci, zostay uwzgldnione w szczegowych omwieniach.
Od wersji 4.1 MySQL rozpoznaje rozszerzenia do obsugi danych przestrzennych.
Informacje o typach przestrzennych znajduj si w rozdziale 7. tego podrcznika.
W czci opisu typw kolumn zastosowane zostay nastpujce reguy:
/
Wskazuje maksymalny rozmiar wywietlania liczby lub acucha.
Maksymalnym dopuszczalnym rozmiarem wywietlania jest 255.
&
Dotyczy typw zmiennoprzecinkowych i staoprzecinkowych. Okrela liczb
cyfr po kropce dziesitnej. Maksymalna dopuszczalna warto wynosi 30,
ale nie powinna przekracza /.
Nawiasy kwadratowe ( ) identyfikuj opcjonalne fragmenty deklaracji typu.
126 Rozdzia 4. Typy kolumn
4.1. Przegld typw dla kolumny
4.1.1. Omwienie typw liczbowych
Poniej znajduje si przegld liczbowych typw dla kolumn. Bardziej szczegowe
informacje mona znale w podrozdziale 4.2. Wymogi dotyczce rozmiaru pamici
potrzebnej do przechowywania kolumn znajduj si w podrozdziale 4.5.
Jeli dla kolumny liczbowej zostanie okrelony atrybut /lRO|1||, MySQL automatycznie
doda do kolumny atrybut UN1S1ONlD.
Naley uwaa podczas odejmowania dwch wartoci liczbowych, z ktrych jedna ma
typ UN1S1ONlD. Uzyskany wynik bdzie rwnie tego typu! patrz podrozdzia 5.7.
T1NY1NT/) UNS1ONlD /lRO|1||
Bardzo maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od `8
do `/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do bb.
B1T, BOO|, BOO|lAN
To s synonimy T1NY1NT`). Synonim BOO|lAN zosta dodany w MySQL 4.1.0.
Warto zerowa to inaczej fasz. Wartoci niezerowe traktowane s jako prawda.
W przyszoci wprowadzona zostanie pena, zgodna ze standardem SQL
obsuga typu boolowskiego.
SMA||1NT/) UNS1ONlD /lRO|1||
Maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od o/68
do o/6/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do 6bbob.
MlD1UM1NT/) UNS1ONlD /lRO|1||
rednia liczba cakowita. Dla liczb ze znakiem zakres wynosi od 8o88608
do 8o8860/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0
do `6///`b.
1NT/) UNS1ONlD /lRO|1||
Standardowa liczba cakowita. Dla liczb ze znakiem zakres wynosi
od `4/48o648 do `4/48o64/. W przypadku liczb bez znaku zakres
obejmuje wartoci od 0 do 49496/9b.
1NTlOlR/) UNS1ONlD /lRO|1||
Jest to synonim dla typu 1NT.
B1O1NT/) UNS1ONlD /lRO|1||
Dua liczba cakowita. Dla liczb ze znakiem zakres wynosi
od 9oo/0o68b4//b808 do 9oo/0o68b4//b80/. W przypadku liczb
bez znaku zakres obejmuje wartoci od 0 do `8446/440/o/09bb`6`b.
4.1. Przegld typw dla kolumny 127
Oto kilka spraw, o ktrych naley wiedzie odnonie kolumn typu B1O1NT:
Wszystkie obliczenia wykonywane s przy uyciu wartoci typu B1O1NT
lub DOUB|l ze znakiem. Oznacza to, e duych liczb cakowitych bez
znaku, wikszych ni 9oo/0o68b4//b80/ (63 bity), mona uywa tylko
z funkcjami bitowymi! Niezastosowanie si do tej zasady moe doprowadzi
do uzyskania w wyniku liczby, ktrej kilka ostatnich cyfr jest bdnych
z powodu bdw w zaokrglaniu podczas konwersji wartoci B1O1NT
na DOUB|l.
MySQL 4.0 potrafi obsugiwa B1O1NT w nastpujcych przypadkach:
Podczas wykorzystywania liczb cakowitych do przechowywania
duych wartoci bez znaku w kolumnie typu B1O1NT.
W M1NPC\YCAMQN) lub MAXPC\YCAMQN), gdzie PC\YCAMQN odnosi si
do kolumny B1O1NT.
Podczas korzystania z operatorw (midzy innymi , , *), gdy oba
argumenty s liczbami cakowitymi.
Zawsze istnieje moliwo zapisania w kolumnie B1O1NT dokadnej wartoci
liczby cakowitej. Wystarczy zapisa j przy uyciu acucha. W takim
przypadku zostanie dokonana konwersja acucha na liczb; konwersja
nie bdzie wymaga poredniego etapu przeksztacajcego liczb na jej
odpowiednik o podwjnej precyzji.
Podczas korzystania z operatorw , i * stosowana jest arytmetyka
B1O1NT, jeli oba argumenty maj warto liczby cakowitej! To oznacza,
e pomnoenie dwch duych liczb cakowitych (lub wynikw funkcji,
ktra zwraca liczby cakowite) moe spowodowa nieoczekiwane
rezultaty, jeli wynik przekroczy liczb 9oo/0o68b4//b80/.
||OATR) UNS1ONlD /lRO|1||
Liczba zmiennoprzecinkowa. Parametr R oznacza precyzj i moe przyjmowa
warto od 0 do 14 dla liczb zmiennoprzecinkowych o dokadnoci do jednego
znaku i od 25 do 53 dla liczb zmiennoprzecinkowych o dokadnoci do dwch
znakw. To przypomina opisane poniej typy ||OAT i DOUB|l. Typ ||OATR)
ma ten sam zakres, jaki posiadaj odpowiadajce mu typy ||OAT i DOUB|l,
ale w jego przypadku niezdefiniowany jest maksymalny rozmiar wywietlania
i liczba miejsc po przecinku.
Od wersji 3.23 MySQL jest to prawdziwa warto zmiennoprzecinkowa.
W wersjach wczeniejszych liczba typu ||OATR) bya zawsze liczb o dwch
miejscach po przecinku.
Ta skadnia zostaa dodana w celu zachowania zgodnoci ze standardem ODBC.
Stosowanie typu ||OAT moe spowodowa wystpienie pewnych
nieoczekiwanych problemw, poniewa wszystkie obliczenia w MySQL
s wykonywane z podwjn precyzj patrz punkt A.1.7).
||OAT/, &) UNS1ONlD /lRO|1||
128 Rozdzia 4. Typy kolumn
Maa liczba zmiennoprzecinkowa (o dokadnoci do jednego znaku). Liczba
ta moe przyj wartoci: od o408o466lo8 do ``/b494ob`lo8, 0,
i od ``/b494ob`lo8 do o408o466lo8. Jeli podany jest atrybut UN1S1ONlD,
niedozwolone s wartoci ujemne. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ ||OAT bez argumentw
lub typ ||OATR) (gdzie Rjest liczb z zakresu od 0 do 24) oznacza liczb
zmiennoprzecinkow o pojedynczej precyzji.
DOUB|l/, &) UNS1ONlD /lRO|1||
Standardowa liczba zmiennoprzecinkowa (o dokadnoci do dwch
znakw). Liczba ta moe przyj wartoci: od `/9/69o`o486o`b/lo08
do b0/o8b8b0/0`4lo08, 0, i od b0/o8b8b0/0`4lo08
do `/9/69o`o486o`b/lo08. Jeli podany jest atrybut UN1S1ONlD, wartoci
ujemne s niedozwolone. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ DOUB|l
bez argumentw lub ||OATR) (gdzie R jest liczb z zakresu od 25 do 53)
oznacza liczb zmiennoprzecinkow o podwjnej precyzji.
DOUB|l PRlC1S1ON/, &) UNS1ONlD /lRO|1||
RlA|/, &) UNS1ONlD /lRO|1||
S to synonimy DOUB|l. Wyjtek: Jeli dla parametru s;_cce serwera
wczono opcj RlA|_AS_||OAT, synonimem ||OAT jest RlA|, a nie DOUB|l.
DlC1MA|/, &) UNS1ONlD /lRO|1||
Niezapakowana liczba staoprzecinkowa. Zachowanie kolumny tego typu
przypomina kolumn typu CHAR. Niezapakowana oznacza, e liczba jest
przechowywana w postaci acucha przy uyciu jednego znaku na kad cyfr
wartoci. Parametr / definiuje maksymaln liczb cyfr, a & liczb miejsc
po przecinku. W parametrze / nie s brane pod uwag: kropka dziesitna
(odpowiadajca w naszej notacji przecinkowi) i (dla liczb ujemnych) znak ,
cho jest dla nich zarezerwowane miejsce. Wartoci nie maj miejsc
po przecinku lub czci uamkowych, jeli & jest rwne 0. Maksymalny zakres
wartoci typu DlC1MA| jest taki sam, jak dla typu DOUB|l, ale rzeczywisty zakres
danej kolumny DlC1MA| moe by ograniczony przez wybr argumentw / i &.
Jeli podany jest atrybut UN1S1ONlD, wartoci ujemne s niedozwolone.
W przypadku braku argumentu &, domyln wartoci jest 0. Jeli pominity
jest parametr /, domyln wartoci jest 10.
W wersjach poprzedzajcych MySQL 3.23 argument / musi by wystarczajco
duy, by zawiera obszar potrzebny dla znaku i kropki dziesitnej.
DlC/,&) UNS1ONlD /lRO|1||
NUMlR1C/,&) UNS1ONlD /lRO|1||
|1XlD/, &) UNS1ONlD /lRO|1||
S to synonimy typu DlC1MA|.
W MySQL 4.1.0 dodano synonim |1XlD w celu osignicia kompatybilnoci
z innymi serwerami.
4.1. Przegld typw dla kolumny 129
4.1.2. Przegld typw zwizanych z dat i czasem
Poniej znajduje si podsumowanie typw kolumn przeznaczonych dla czasu i daty.
Dodatkowe informacje na ten temat mona znale w podrozdziale 4.3. Wymogi do-
tyczce pamici potrzebnej do przechowywania danych w kolumnach zostay podane
w podrozdziale 4.5.
DATl
Data. Obsugiwany zakres obejmuje daty od ``0000`0`` do `9999`o``.
W MySQL wartoci DATl wywietlane s w formacie `RRRRMMDD`, ale mona
przypisywa wartoci do kolumn DATl przy uyciu acuchw lub liczb.
DATlT1Ml
Kombinacja daty i czasu. Obsugiwany zakres obejmuje wartoci
od ``0000`0` 000000` do `9999`o` ob9b9`. W MySQL wartoci
DATlT1Ml wywietlane s w formacie `RRRRMMDD OOMMSS`, ale mona
przypisywa wartoci do kolumn DATlT1Ml przy uyciu acuchw lub liczb.
T1MlSTAMP/)
Znacznik czasu. Obsugiwany zakres rozpoczyna si od daty ``9/00`0``
i siga roku 0o/.
Kolumna typu T1MlSTAMP przydaje si do rejestracji daty i godziny operacji
wstawiania lub aktualizacji. Pierwszej kolumnie T1MlSTAMP w tabeli
automatycznie przypisywana jest data i czas ostatniej operacji, jeli tylko tych
wartoci nie wprowadzi rcznie uytkownik. Dowolnej kolumnie T1MlSTAMP
mona rwnie przypisa biec dat i godzin, wpisujc do niej warto NU||.
Od MySQL 4.1 wartoci T1MlSTAMP s zwracane w postaci acuchw
w formacie `RRRRMMDD OOMMSS`. Aby uzyska warto w postaci liczby,
naley doda do kolumn tego typu 0. Inne szerokoci wywietlania
znacznika czasu nie s obsugiwane.
W wersjach poprzedzajcych MySQL 4.1 wartoci T1MlSTAMP s wywietlane
w formacie RRRRMMDDOOMMSS, RRMMDDOOMMSS, RRRRMMDD lub RRMMDD w zalenoci
od tego, czy parametr / jest rwny 14 (albo go brak), 12, 8 lub 6. Mona jednak
przypisywa wartoci do kolumn T1MlSTAMP przy uyciu acuchw lub liczb.
Argument / wpywa tylko na sposb wywietlania kolumny T1MlSTAMP, a nie
na jej przechowywanie. Wartoci kolumny s zawsze zapisywane w czterech
bajtach. W MySQL od wersji 4.0.12 pojawia si opcja ne., dziki ktrej
mona zmieni dziaanie serwera, upodabniajc je do MySQL 4.1.
Naley odnotowa, e kolumny T1MlSTAMP/), gdzie /jest rwne 8 lub 14,
s traktowane jako liczby, natomiast reszta kolumn T1MlSTAMP/) jest
traktowana jako acuchy. Jest to rodzaj gwarancji, e uytkownik bdzie
mg wiarygodnie usuwa i przywraca tabele tego typu.
T1Ml
Godzina. Obsugiwany zakres obejmuje wartoci od `8o8b9b9`
do ` 8o8b9b9`. W MySQL wartoci T1Ml wywietlane s w formacie
` OOMMSS`, ale mona przypisa wartoci do kolumn T1Ml przy uyciu
zarwno acuchw, jak i liczb.
130 Rozdzia 4. Typy kolumn
YlAR|4)
Rok w formacie dwu- lub czterocyfrowym. Domylnym formatem jest rok
zapisany za pomoc czterech cyfr. W tym formacie dostpne wartoci nale
do przedziau od `90` do `bb oraz 0. W formacie dwucyfrowym wartoci
dopuszczalne to liczby z zakresu od /0 do 69, ktre reprezentuj daty od roku
1970 do 2069. W MySQL wartoci YlAR wywietlane s w formacie RRRR,
ale mona przypisa wartoci do kolumn YlAR przy uyciu tak acuchw,
jak i liczb. Typ YlAR jest niedostpny dla wersji wczeniejszych ni MySQL 3.22.
4.1.3. Przegld typw acuchowych
Poniej znajduje si przegld typw acuchowych. Dodatkowe informacje mona
znale w podrozdziale 4.4. Wymogi dotyczce pamici potrzebnej do przechowywa-
nia danych w kolumnach zostay podane w podrozdziale 4.5.
W niektrych przypadkach MySQL moe zmieni kolumn typu acuchowego na typ,
ktry bdzie si rni od zadeklarowanego w instrukcji CRlATl TAB|l lub A|TlR TAB|l.
Wicej informacji na ten temat znajduje si w podpunkcie 6.2.5.2.
Od wersji 4.1 w MySQL pojawia si zmiana, ktra wpywa na wiele typw kolumn typu
acuchowego. Definicja kolumn typu znakowego moe zawiera atrybut CHARACTlR
SlT, ktry okrela zestaw znakw i opcjonalnie porzdek sortowania. Dotyczy to typw
CHAR, VARCHAR, rnych typw TlXT oraz lNUM i SlT, na przykad:
CRF/TF T/B|F !
FNUMYCTVQ
YCTVQ|
1 lub 2 bajty w zalenoci od liczby wartoci wyliczenia
(maksymalnie 65 535)
SFTYCTVQ
YCTVQ|
1, 2, 3, 4 lub 8 bajtw w zalenoci od liczby elementw zestawu
(maksymalnie 64)
Typy VARCHAR, B|OB i TlXT maj zmienn dugo. Dla kadego ilo pamici potrzeb-
nej do przechowania wartoci bdzie zalee od faktycznej dugoci wartoci kolumny
(reprezentowanej w ostatniej tabeli przez .), a nie od maksymalnego moliwego roz-
miaru danego typu. Kolumna VARCHAR`0) na przykad moe przechowywa acuch
o maksymalnej dugoci 10 znakw. Faktyczna ilo wymaganej pamici to dugo
acucha (.) plus 1 bajt do zapisania dugoci acucha. Dla acucha `.|cc` parametr
. jest rwny 4, a wymagany rozmiar pamici to 5 bajtw.
Typy B|OB i TlXT wymagaj 1, 2, 3 lub 4 bajtw do zapisu dugoci wartoci kolumny
w zalenoci od maksymalnej moliwej dugoci tego typu (patrz punkt 4.4.2).
Rozmiar obiektu lNUM jest ustalany na podstawie liczby rnych wartoci wyliczenia.
Przy wyliczeniach do 255 moliwych wartoci uywany jest jeden bajt, a przy wyli-
czeniach do 65 535 wartoci uywane s 2 bajty (patrz punkt 4.4.3).
Rozmiar obiektu SlT jest okrelany przez liczb rnych elementw zestawu. Jeli ze-
staw ma rozmiar 0, obiekt zajmuje 0/).8 bajtw, ktr to warto zaokrgla si do
1, 2, 3, 4 lub 8 bajtw. Obiekt SlT moe mie do 64 elementw (patrz punkt 4.4.4).
4.6. Wybieranie odpowiedniego typu
dla kolumny
Aby jak najbardziej wydajnie korzysta z pamici, naley we wszystkich przypadkach
stara si stosowa typ, ktry bdzie jak najbardziej dokadny. Jeli na przykad w kolum-
nie liczb cakowitych bd przechowywane wartoci z zakresu od ` do 99999, najlep-
szym wyborem bdzie typ MlD1UM1NT UNS1ONlD. Ze wszystkich typw, ktre reprezentuj
wszystkie wymagane wartoci, zajmuje najmniej pamici.
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych 153
Powszechnym problemem jest dokadne przedstawianie wartoci walutowych. W MySQL
naley do tego uywa typu DlC1MA|, za pomoc ktrego wartoci zapisywane s w for-
mie acucha. Dziki temu nie traci si na dokadnoci (mimo to obliczenia z wartociami
DlC1MA| mog by wci wykonywane przy uyciu operacji dziaajcych na liczbach
z podwjn precyzj). Jeli dokadno nie jest zbyt wana, by moe wystarczajco
dobrym typem bdzie DOUB|l.
Aby uzyska wiksz dokadno, mona zawsze przeksztaci warto na typ stao-
przecinkowy, przechowywany w B1O1NT. Pozwoli to wykonywa wszystkie obliczenia
na liczbach cakowitych i tylko w razie potrzeby przeksztaca wynik z powrotem na
wartoci zmiennoprzecinkowe.
4.7. Wykorzystywanie typw kolumn
z innych mechanizmw baz danych
Aby uatwi uytkownikowi zastosowanie kodu pochodzcego od innych producentw,
moliwe jest odwzorowanie typw kolumn w sposb przedstawiony w poniszej tabeli.
Odwzorowania te upraszczaj operacj importu do MySQL definicji tabel z innych
mechanizmw baz danych:
Typ innych producentw Typ MySQL
BTN/RY/| C'/R/| BTN/RY
C'/R V/RYTN/| V/RC'/R/|
F|J/T4 F|J/T
F|J/T8 OJUB|F
TNT1 TTNYTNT
TNT SM/||TNT
TNT: MFOTUMTNT
TNT4 TNT
TNT8 BTTNT
|JN V/RBTN/RY MFOTUMB|JB
|JN V/RC'/R MFOTUMTFXT
|JN MFOTUMTFXT oc M,SJ| 410|
MTOO|FTNT MFOTUMTNT
V/RBTN/RY/| C'/R/| BTN/RY
Odwzorowanie typw kolumn jest wykonywane podczas tworzenia tabeli, po czym
oryginalne deklaracje typu zostaj usunite. Jeli uytkownik utworzy tabel z typami
stosowanymi przez innych producentw, po czym wyda polecenie DlSCR1Bl PC\YCA
VCDGNK, zostanie przedstawiona struktura tabeli z odpowiadajcymi im typami MySQL.
4 Spis treci
1.8.5. Rozbienoci midzy MySQL a standardem SQL ........................................ 60
1.8.6. Jak MySQL radzi sobie z ograniczeniami ................................................. 67
1.8.7. Znane bdy i projektowe braki w MySQL................................................ 69
Rozdzia 2. Struktura jzyka .............................................................................. 77
2.1. Literay................................................................................................................... 77
2.1.1. acuchy ................................................................................................... 77
2.1.2. Liczby........................................................................................................ 80
2.1.3. Wartoci szesnastkowe .............................................................................. 80
2.1.4. Wartoci logiczne ...................................................................................... 81
2.1.5. Wartoci NULL......................................................................................... 81
2.2. Nazwy baz danych, tabel, indeksw, kolumn i aliasw......................................... 81
2.2.1. Kwalifikatory identyfikatorw .................................................................. 83
2.2.2. Znaczenie wielkoci liter w nazwach identyfikatorw.............................. 83
2.3. Zmienne definiowane przez uytkownika.............................................................. 85
2.4. Zmienne systemowe............................................................................................... 87
2.4.1. Strukturalne zmienne systemowe .............................................................. 89
2.5. Skadnia komentarza .............................................................................................. 91
2.6. Traktowanie sw zastrzeonych w MySQL.......................................................... 92
Rozdzia 3. Obsuga zestaww znakw............................................................... 95
3.1. Oglne informacje o zestawach znakw i sortowaniu ........................................... 95
3.2. Zestawy znakw i porzdki sortowania w MySQL................................................ 96
3.3. Okrelanie domylnego zestawu znakw i sortowania........................................... 98
3.3.1. Zestaw znakw i sortowanie dla serwera................................................... 98
3.3.2. Zestaw znakw i sortowanie dla bazy danych........................................... 99
3.3.3. Zestaw znakw i sortowanie dla tabeli .................................................... 100
3.3.4. Zestaw znakw i sortowanie dla kolumny............................................... 100
3.3.5. Przykady przypisywania zestawu znakw i sortowania ......................... 101
3.3.6. Zestawy znakw i sortowanie dla poczenia .......................................... 102
3.3.7. Zestaw znakw i sortowanie dla acucha znakw.................................. 104
3.3.8. Wykorzystywanie COLLATE w instrukcjach SQL.................................... 105
3.3.9. Priorytet klauzuli COLLATE .................................................................. 106
3.3.10. Operator BINARY................................................................................... 106
3.3.11. Niektre przypadki specjalne, w ktrych trudno okreli sortowanie...... 106
3.3.12. Sortowania musz by odpowiednie dla danego zestawu znakw........... 107
3.3.13. Przykad wpywu porzdku sortowania ................................................... 108
3.4. Operacje, na ktre ma wpyw obsuga zestaww znakw.................................... 109
3.4.1. acuchy wyjciowe ............................................................................... 109
3.4.2. CONVERT()............................................................................................ 110
3.4.3. CAST() .................................................................................................... 110
3.4.4. Instrukcje SHOW .................................................................................... 111
3.5. Obsuga Unicode.................................................................................................. 112
3.6. UTF8 dla metadanych.......................................................................................... 113
3.7. Kompatybilno z innymi systemami zarzdzania baz danych .......................... 115
3.8. Nowy format pliku konfiguracji zestawu znakw................................................ 115
3.9. Narodowe zestawy znakw.................................................................................. 115
3.10. Aktualizacja zestaww znakw z MySQL 4.0..................................................... 116
3.10.1. Zestawy znakw w wersji 4.0 i odpowiadajce im w wersji 4.1 pary
skadajce si z zestawu znakw i sortowania......................................... 117
3.10.2. Przeksztacanie kolumn znakowych wersji 4.0 na format 4.1 ................. 118
3.11. Zestawy znakw i sortowania obsugiwane przez MySQL.................................. 118
3.11.1. Zestawy znakw standardu Unicode ....................................................... 119
3.11.2. Zestawy znakw zachodnioeuropejskich................................................. 120
3.11.3. Zestawy znakw dla Europy Centralnej .................................................. 121
Spis treci 5
3.11.4. Zestawy znakw poudniowoeuropejskich i rodkowowschodnich......... 122
3.11.5. Zestawy znakw regionu batyckiego...................................................... 123
3.11.6. Zestawy znakw dla cyrylicy................................................................... 123
3.11.7. Azjatyckie zestawy znakw..................................................................... 124
Rozdzia 4. Typy kolumn.................................................................................. 125
4.1. Przegld typw dla kolumny................................................................................ 126
4.1.1. Omwienie typw liczbowych ................................................................ 126
4.1.2. Przegld typw zwizanych z dat i czasem............................................ 129
4.1.3. Przegld typw acuchowych ................................................................ 130
4.2. Typy liczbowe...................................................................................................... 132
4.3. Typy zwizane z dat i czasem............................................................................ 135
4.3.1. Typy DATETIME, DATE i TIMESTAMP............................................. 137
4.3.2. Typ TIME................................................................................................ 142
4.3.3. Typ YEAR............................................................................................... 143
4.3.4. Problem roku 2000 a typy zwizane z dat.............................................. 144
4.4. Typy acuchowe ................................................................................................. 144
4.4.1. Typy CHAR i VARCHAR...................................................................... 144
4.4.2. Typy BLOB i TEXT................................................................................ 146
4.4.3. Typ Enum................................................................................................ 147
4.4.4. Typ SET .................................................................................................. 149
4.5. Rozmiar pamici potrzebnej dla typw kolumn................................................... 151
4.6. Wybieranie odpowiedniego typu dla kolumny..................................................... 152
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych ............... 153
Rozdzia 5. Funkcje i operatory........................................................................ 155
5.1. Operatory ............................................................................................................. 156
5.1.1. Nawiasy................................................................................................... 156
5.1.2. Operatory porwnania ............................................................................. 156
5.1.3. Operatory logiczne .................................................................................. 161
5.1.4. Operatory rozrniania wielkoci liter..................................................... 163
5.2. Funkcje kontroli przepywu ................................................................................. 163
5.3. Funkcje acuchowe............................................................................................. 166
5.3.1. Funkcje porwnywania acuchw.......................................................... 176
5.4. Funkcje liczbowe ................................................................................................. 178
5.4.1. Operatory arytmetyczne........................................................................... 178
5.4.2. Funkcje matematyczne ............................................................................ 180
5.5. Funkcje daty i godziny......................................................................................... 186
5.6. Funkcje obsugi wyszukiwania penotekstowego................................................. 202
5.6.1. Boolowskie wyszukiwania penotekstowe............................................... 205
5.6.2. Wyszukiwania penotekstowe z rozwijaniem zapytania .......................... 207
5.6.3. Ograniczenia dla wyszukiwania penotekstowego................................... 208
5.6.4. Modyfikowanie wyszukiwania penotekstowego MySQL ...................... 209
5.6.5. Lista rzeczy do zrobienia dla wyszukiwania penotekstowego................ 211
5.7. Funkcje konwersji typw..................................................................................... 211
5.8. Inne funkcje ......................................................................................................... 214
5.8.1. Funkcje bitowe ........................................................................................ 214
5.8.2. Funkcje szyfrujce................................................................................... 215
5.8.3. Funkcje informacyjne .............................................................................. 219
5.8.4. Funkcje rne .......................................................................................... 223
5.9. Funkcje i modyfikatory do zastosowania z klauzulami GROUP BY................... 226
5.9.1. Funkcje GROUP BY (agregujce)........................................................... 226
5.9.2. Modyfikatory GROUP BY...................................................................... 229
5.9.3. GROUP BY z ukrytymi polami............................................................... 232
6 Spis treci
Rozdzia 6. Skadnia instrukcji SQL .................................................................. 235
6.1. Instrukcje operujce na danych............................................................................ 235
6.1.1. Skadnia instrukcji DELETE................................................................... 235
6.1.2. Skadnia instrukcji DO ............................................................................ 238
6.1.3. Skadnia instrukcji HANDLER............................................................... 238
6.1.4. Skadnia instrukcji INSERT .................................................................... 240
6.1.5. Skadnia instrukcji LOAD DATA INFILE.............................................. 246
6.1.6. Skadnia instrukcji REPLACE................................................................. 255
6.1.7. Skadnia instrukcji SELECT.................................................................... 256
6.1.8. Skadnia podzapyta................................................................................ 265
6.1.9. Skadnia instrukcji TRUNCATE............................................................. 276
6.1.10. Skadnia instrukcji UPDATE................................................................... 276
6.2. Instrukcje definiowania danych ........................................................................... 278
6.2.1. Skadnia instrukcji ALTER DATABASE ............................................... 278
6.2.2. Skadnia instrukcji ALTER TABLE........................................................ 279
6.2.3. Skadnia instrukcji CREATE DATABASE............................................. 285
6.2.4. Skadnia instrukcji CREATE INDEX ..................................................... 285
6.2.5. Skadnia instrukcji CREATE TABLE..................................................... 287
6.2.6. Skadnia instrukcji DROP DATABASE.................................................. 301
6.2.7. Skadnia instrukcji DROP INDEX.......................................................... 302
6.2.8. Skadnia instrukcji DROP TABLE.......................................................... 302
6.2.9. Skadnia instrukcji RENAME TABLE.................................................... 303
6.3. Instrukcje programu MySQL............................................................................... 304
6.3.1. Skadnia instrukcji DESCRIBE
(odczytywanie informacji na temat kolumn) ........................................... 304
6.3.2. Skadnia instrukcji USE........................................................................... 304
6.4. Instrukcje obsugi transakcji i blokowania........................................................... 305
6.4.1. Skadnia instrukcji START TRANSACTION, COMMIT
oraz ROLLBACK.................................................................................... 305
6.4.2. Instrukcje niemoliwe do wycofania ....................................................... 306
6.4.3. Instrukcje wykonujce niejawne zatwierdzenie......................................... 306
6.4.4. Skadnia instrukcji SAVEPOINT i ROLLBACK TO SAVEPOINT....... 307
6.4.5. Skadnia instrukcji LOCK TABLES oraz UNLOCK TABLES .............. 307
6.4.6. Skadnia instrukcji SET TRANSACTION.............................................. 310
6.5. Administracja baz danych .................................................................................. 311
6.5.1. Instrukcje zarzdzajce kontami uytkownikw ....................................... 311
6.5.2. Instrukcje do konserwacji tabel ............................................................... 319
6.5.3. Skadnia instrukcji SET i SHOW ............................................................ 326
6.5.4. Inne instrukcje administracyjne ............................................................... 347
6.6. Instrukcje replikacji.............................................................................................. 352
6.6.1. Instrukcje SQL sterujce serwerem gwnym ......................................... 352
6.6.2. Instrukcje SQL sterujce serwerami podrzdnymi .................................. 354
Rozdzia 7. Rozszerzenia przestrzenne w MySQL............................................... 365
7.1. Wstp ................................................................................................................... 365
7.2. Model geometryczny OpenGIS............................................................................ 366
7.2.1. Hierarchia klas geometrycznych.............................................................. 366
7.2.2. Klasa Geometry ....................................................................................... 368
7.2.3. Klasa Point .............................................................................................. 369
7.2.4. Klasa Curve ............................................................................................. 369
7.2.5. Klasa LineString...................................................................................... 370
7.2.6. Klasa Surface........................................................................................... 370
7.2.7. Klasa Polygon.......................................................................................... 370
7.2.8. Klasa GeometryCollection....................................................................... 371
Spis treci 7
7.2.9. Klasa MultiPoint...................................................................................... 371
7.2.10. Klasa MultiCurve .................................................................................... 372
7.2.11. Klasa MultiLineString............................................................................. 372
7.2.12. Klasa MultiSurface .................................................................................. 372
7.2.13. Klasa MultiPolygon................................................................................. 373
7.3. Obsugiwane formaty danych przestrzennych...................................................... 373
7.3.1. Format tekstowy WKT............................................................................ 374
7.3.2. Format binarny WKB.............................................................................. 374
7.4. Tworzenie bazy danych z rozszerzeniami przestrzennymi................................... 375
7.4.1. Typy danych przestrzennych w MySQL ................................................. 375
7.4.2. Tworzenie wartoci przestrzennych......................................................... 376
7.4.3. Tworzenie kolumn przestrzennych.......................................................... 379
7.4.4. Wypenianie kolumn przestrzennych....................................................... 379
7.4.5. Pobieranie danych przestrzennych........................................................... 381
7.5. Analiza informacji przestrzennych....................................................................... 381
7.5.1. Funkcje konwersji formatw geometrycznych ........................................ 382
7.5.2. Funkcje klasy Geometry.......................................................................... 382
7.5.3. Funkcje tworzce nowe geometrie na podstawie istniejcych................. 388
7.5.4. Funkcje testujce relacje przestrzenne
midzy obiektami geometrycznymi ......................................................... 389
7.5.5. Relacje midzy minimalnymi prostoktami otaczajcymi
dla poszczeglnych geometrii.................................................................. 390
7.5.6. Funkcje sprawdzajce relacje przestrzenne pomidzy geometriami ........ 391
7.6. Optymalizacja analizy przestrzennej.................................................................... 392
7.6.1. Tworzenie indeksw przestrzennych....................................................... 392
7.6.2. Wykorzystanie indeksu przestrzennego................................................... 393
7.7. Zgodno MySQL ze standardem........................................................................ 395
7.7.1. Niezaimplementowane funkcje GIS ........................................................ 395
Rozdzia 8. Procedury i funkcje skadowane ..................................................... 397
8.1. Skadnia procedur skadowanych......................................................................... 398
8.1.1. Utrzymanie procedur skadowanych........................................................ 398
8.1.2. SHOW PROCEDURE STATUS oraz SHOW FUNCTION STATUS.... 401
8.1.3. Instrukcja CALL...................................................................................... 402
8.1.4. Instrukcja zoona BEGIN ... END.......................................................... 402
8.1.5. Instrukcja DECLARE.............................................................................. 402
8.1.6. Zmienne w procedurach skadowanych................................................... 402
8.1.7. Warunki i podprogramy obsugi .............................................................. 403
8.1.8. Kursory.................................................................................................... 405
8.1.9. Konstrukcje sterowania przepywem sterowania..................................... 406
Rozdzia 9. Obsuga bdw w MySQL .............................................................. 409
9.1. Zwracane bdy.................................................................................................... 409
9.2. Komunikaty bdw............................................................................................. 419
Dodatek A Rozwizywanie problemw z zapytaniami ........................................435
A.1. Zagadnienia zwizane z zapytaniami ................................................................... 435
A.1.1. Wielko liter przy wyszukiwaniu........................................................... 435
A.1.2. Problemy z kolumnami typu DATE ........................................................ 436
A.1.3. Problemy z wartociami NULL............................................................... 437
A.1.4. Problemy z synonimami kolumn ............................................................. 438
A.1.5. Bd wycofania dla tabel nietransakcyjnych............................................ 439
A.1.6. Usuwanie wierszy ze zwizanych tabel ................................................... 439
A.1.7. Rozwizywanie problemw z brakujcymi wierszami ............................ 440
A.1.8. Problemy z porwnaniami zmiennoprzecinkowymi................................ 441
8 Spis treci
A.2. Problemy zwizane z optymalizatorem................................................................ 443
A.3. Problemy z definicj tabel.................................................................................... 444
A.3.1. Problemy z instrukcj ALTER TABLE................................................... 444
A.3.2. Jak zmieni porzdek kolumn w tabeli .................................................... 445
A.3.3. Problemy z tabelami tymczasowymi ....................................................... 445
Dodatek B Wyraenia regularne w MySQL........................................................ 447
Skorowidz...................................................................................... 451
Rozdzia 4.
Typy kolumn
W MySQL dostpnych jest wiele typw danych, ktre mona pogrupowa w kilku pod-
stawowych kategoriach, takich jak typy liczbowe, typy zwizane z dat i czasem oraz
typy acuchowe. Na pocztku tego rozdziau przedstawiony zostanie przegld wspo-
mnianych przed chwil typw kolumn, po czym nastpi bardziej szczegowy opis ich
waciwoci z podziaem na poszczeglne kategorie i wreszcie zamieszczone zostanie
podsumowanie informacji dotyczcych wymaga co do rozmiaru pamici potrzebnej
do przechowania danej kolumny. Sam przegld jest z zamierzenia krtki. Dodatkowe
informacje o poszczeglnych typach kolumn, na przykad dopuszczalny format, w kt-
rym mona deklarowa wartoci, zostay uwzgldnione w szczegowych omwieniach.
Od wersji 4.1 MySQL rozpoznaje rozszerzenia do obsugi danych przestrzennych.
Informacje o typach przestrzennych znajduj si w rozdziale 7. tego podrcznika.
W czci opisu typw kolumn zastosowane zostay nastpujce reguy:
/
Wskazuje maksymalny rozmiar wywietlania liczby lub acucha.
Maksymalnym dopuszczalnym rozmiarem wywietlania jest 255.
&
Dotyczy typw zmiennoprzecinkowych i staoprzecinkowych. Okrela liczb
cyfr po kropce dziesitnej. Maksymalna dopuszczalna warto wynosi 30,
ale nie powinna przekracza /.
Nawiasy kwadratowe ( ) identyfikuj opcjonalne fragmenty deklaracji typu.
126 Rozdzia 4. Typy kolumn
4.1. Przegld typw dla kolumny
4.1.1. Omwienie typw liczbowych
Poniej znajduje si przegld liczbowych typw dla kolumn. Bardziej szczegowe
informacje mona znale w podrozdziale 4.2. Wymogi dotyczce rozmiaru pamici
potrzebnej do przechowywania kolumn znajduj si w podrozdziale 4.5.
Jeli dla kolumny liczbowej zostanie okrelony atrybut /lRO|1||, MySQL automatycznie
doda do kolumny atrybut UN1S1ONlD.
Naley uwaa podczas odejmowania dwch wartoci liczbowych, z ktrych jedna ma
typ UN1S1ONlD. Uzyskany wynik bdzie rwnie tego typu! patrz podrozdzia 5.7.
T1NY1NT/) UNS1ONlD /lRO|1||
Bardzo maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od `8
do `/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do bb.
B1T, BOO|, BOO|lAN
To s synonimy T1NY1NT`). Synonim BOO|lAN zosta dodany w MySQL 4.1.0.
Warto zerowa to inaczej fasz. Wartoci niezerowe traktowane s jako prawda.
W przyszoci wprowadzona zostanie pena, zgodna ze standardem SQL
obsuga typu boolowskiego.
SMA||1NT/) UNS1ONlD /lRO|1||
Maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od o/68
do o/6/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do 6bbob.
MlD1UM1NT/) UNS1ONlD /lRO|1||
rednia liczba cakowita. Dla liczb ze znakiem zakres wynosi od 8o88608
do 8o8860/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0
do `6///`b.
1NT/) UNS1ONlD /lRO|1||
Standardowa liczba cakowita. Dla liczb ze znakiem zakres wynosi
od `4/48o648 do `4/48o64/. W przypadku liczb bez znaku zakres
obejmuje wartoci od 0 do 49496/9b.
1NTlOlR/) UNS1ONlD /lRO|1||
Jest to synonim dla typu 1NT.
B1O1NT/) UNS1ONlD /lRO|1||
Dua liczba cakowita. Dla liczb ze znakiem zakres wynosi
od 9oo/0o68b4//b808 do 9oo/0o68b4//b80/. W przypadku liczb
bez znaku zakres obejmuje wartoci od 0 do `8446/440/o/09bb`6`b.
4.1. Przegld typw dla kolumny 127
Oto kilka spraw, o ktrych naley wiedzie odnonie kolumn typu B1O1NT:
Wszystkie obliczenia wykonywane s przy uyciu wartoci typu B1O1NT
lub DOUB|l ze znakiem. Oznacza to, e duych liczb cakowitych bez
znaku, wikszych ni 9oo/0o68b4//b80/ (63 bity), mona uywa tylko
z funkcjami bitowymi! Niezastosowanie si do tej zasady moe doprowadzi
do uzyskania w wyniku liczby, ktrej kilka ostatnich cyfr jest bdnych
z powodu bdw w zaokrglaniu podczas konwersji wartoci B1O1NT
na DOUB|l.
MySQL 4.0 potrafi obsugiwa B1O1NT w nastpujcych przypadkach:
Podczas wykorzystywania liczb cakowitych do przechowywania
duych wartoci bez znaku w kolumnie typu B1O1NT.
W M1NPC\YCAMQN) lub MAXPC\YCAMQN), gdzie PC\YCAMQN odnosi si
do kolumny B1O1NT.
Podczas korzystania z operatorw (midzy innymi , , *), gdy oba
argumenty s liczbami cakowitymi.
Zawsze istnieje moliwo zapisania w kolumnie B1O1NT dokadnej wartoci
liczby cakowitej. Wystarczy zapisa j przy uyciu acucha. W takim
przypadku zostanie dokonana konwersja acucha na liczb; konwersja
nie bdzie wymaga poredniego etapu przeksztacajcego liczb na jej
odpowiednik o podwjnej precyzji.
Podczas korzystania z operatorw , i * stosowana jest arytmetyka
B1O1NT, jeli oba argumenty maj warto liczby cakowitej! To oznacza,
e pomnoenie dwch duych liczb cakowitych (lub wynikw funkcji,
ktra zwraca liczby cakowite) moe spowodowa nieoczekiwane
rezultaty, jeli wynik przekroczy liczb 9oo/0o68b4//b80/.
||OATR) UNS1ONlD /lRO|1||
Liczba zmiennoprzecinkowa. Parametr R oznacza precyzj i moe przyjmowa
warto od 0 do 14 dla liczb zmiennoprzecinkowych o dokadnoci do jednego
znaku i od 25 do 53 dla liczb zmiennoprzecinkowych o dokadnoci do dwch
znakw. To przypomina opisane poniej typy ||OAT i DOUB|l. Typ ||OATR)
ma ten sam zakres, jaki posiadaj odpowiadajce mu typy ||OAT i DOUB|l,
ale w jego przypadku niezdefiniowany jest maksymalny rozmiar wywietlania
i liczba miejsc po przecinku.
Od wersji 3.23 MySQL jest to prawdziwa warto zmiennoprzecinkowa.
W wersjach wczeniejszych liczba typu ||OATR) bya zawsze liczb o dwch
miejscach po przecinku.
Ta skadnia zostaa dodana w celu zachowania zgodnoci ze standardem ODBC.
Stosowanie typu ||OAT moe spowodowa wystpienie pewnych
nieoczekiwanych problemw, poniewa wszystkie obliczenia w MySQL
s wykonywane z podwjn precyzj patrz punkt A.1.7).
||OAT/, &) UNS1ONlD /lRO|1||
128 Rozdzia 4. Typy kolumn
Maa liczba zmiennoprzecinkowa (o dokadnoci do jednego znaku). Liczba
ta moe przyj wartoci: od o408o466lo8 do ``/b494ob`lo8, 0,
i od ``/b494ob`lo8 do o408o466lo8. Jeli podany jest atrybut UN1S1ONlD,
niedozwolone s wartoci ujemne. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ ||OAT bez argumentw
lub typ ||OATR) (gdzie Rjest liczb z zakresu od 0 do 24) oznacza liczb
zmiennoprzecinkow o pojedynczej precyzji.
DOUB|l/, &) UNS1ONlD /lRO|1||
Standardowa liczba zmiennoprzecinkowa (o dokadnoci do dwch
znakw). Liczba ta moe przyj wartoci: od `/9/69o`o486o`b/lo08
do b0/o8b8b0/0`4lo08, 0, i od b0/o8b8b0/0`4lo08
do `/9/69o`o486o`b/lo08. Jeli podany jest atrybut UN1S1ONlD, wartoci
ujemne s niedozwolone. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ DOUB|l
bez argumentw lub ||OATR) (gdzie R jest liczb z zakresu od 25 do 53)
oznacza liczb zmiennoprzecinkow o podwjnej precyzji.
DOUB|l PRlC1S1ON/, &) UNS1ONlD /lRO|1||
RlA|/, &) UNS1ONlD /lRO|1||
S to synonimy DOUB|l. Wyjtek: Jeli dla parametru s;_cce serwera
wczono opcj RlA|_AS_||OAT, synonimem ||OAT jest RlA|, a nie DOUB|l.
DlC1MA|/, &) UNS1ONlD /lRO|1||
Niezapakowana liczba staoprzecinkowa. Zachowanie kolumny tego typu
przypomina kolumn typu CHAR. Niezapakowana oznacza, e liczba jest
przechowywana w postaci acucha przy uyciu jednego znaku na kad cyfr
wartoci. Parametr / definiuje maksymaln liczb cyfr, a & liczb miejsc
po przecinku. W parametrze / nie s brane pod uwag: kropka dziesitna
(odpowiadajca w naszej notacji przecinkowi) i (dla liczb ujemnych) znak ,
cho jest dla nich zarezerwowane miejsce. Wartoci nie maj miejsc
po przecinku lub czci uamkowych, jeli & jest rwne 0. Maksymalny zakres
wartoci typu DlC1MA| jest taki sam, jak dla typu DOUB|l, ale rzeczywisty zakres
danej kolumny DlC1MA| moe by ograniczony przez wybr argumentw / i &.
Jeli podany jest atrybut UN1S1ONlD, wartoci ujemne s niedozwolone.
W przypadku braku argumentu &, domyln wartoci jest 0. Jeli pominity
jest parametr /, domyln wartoci jest 10.
W wersjach poprzedzajcych MySQL 3.23 argument / musi by wystarczajco
duy, by zawiera obszar potrzebny dla znaku i kropki dziesitnej.
DlC/,&) UNS1ONlD /lRO|1||
NUMlR1C/,&) UNS1ONlD /lRO|1||
|1XlD/, &) UNS1ONlD /lRO|1||
S to synonimy typu DlC1MA|.
W MySQL 4.1.0 dodano synonim |1XlD w celu osignicia kompatybilnoci
z innymi serwerami.
4.1. Przegld typw dla kolumny 129
4.1.2. Przegld typw zwizanych z dat i czasem
Poniej znajduje si podsumowanie typw kolumn przeznaczonych dla czasu i daty.
Dodatkowe informacje na ten temat mona znale w podrozdziale 4.3. Wymogi do-
tyczce pamici potrzebnej do przechowywania danych w kolumnach zostay podane
w podrozdziale 4.5.
DATl
Data. Obsugiwany zakres obejmuje daty od ``0000`0`` do `9999`o``.
W MySQL wartoci DATl wywietlane s w formacie `RRRRMMDD`, ale mona
przypisywa wartoci do kolumn DATl przy uyciu acuchw lub liczb.
DATlT1Ml
Kombinacja daty i czasu. Obsugiwany zakres obejmuje wartoci
od ``0000`0` 000000` do `9999`o` ob9b9`. W MySQL wartoci
DATlT1Ml wywietlane s w formacie `RRRRMMDD OOMMSS`, ale mona
przypisywa wartoci do kolumn DATlT1Ml przy uyciu acuchw lub liczb.
T1MlSTAMP/)
Znacznik czasu. Obsugiwany zakres rozpoczyna si od daty ``9/00`0``
i siga roku 0o/.
Kolumna typu T1MlSTAMP przydaje si do rejestracji daty i godziny operacji
wstawiania lub aktualizacji. Pierwszej kolumnie T1MlSTAMP w tabeli
automatycznie przypisywana jest data i czas ostatniej operacji, jeli tylko tych
wartoci nie wprowadzi rcznie uytkownik. Dowolnej kolumnie T1MlSTAMP
mona rwnie przypisa biec dat i godzin, wpisujc do niej warto NU||.
Od MySQL 4.1 wartoci T1MlSTAMP s zwracane w postaci acuchw
w formacie `RRRRMMDD OOMMSS`. Aby uzyska warto w postaci liczby,
naley doda do kolumn tego typu 0. Inne szerokoci wywietlania
znacznika czasu nie s obsugiwane.
W wersjach poprzedzajcych MySQL 4.1 wartoci T1MlSTAMP s wywietlane
w formacie RRRRMMDDOOMMSS, RRMMDDOOMMSS, RRRRMMDD lub RRMMDD w zalenoci
od tego, czy parametr / jest rwny 14 (albo go brak), 12, 8 lub 6. Mona jednak
przypisywa wartoci do kolumn T1MlSTAMP przy uyciu acuchw lub liczb.
Argument / wpywa tylko na sposb wywietlania kolumny T1MlSTAMP, a nie
na jej przechowywanie. Wartoci kolumny s zawsze zapisywane w czterech
bajtach. W MySQL od wersji 4.0.12 pojawia si opcja ne., dziki ktrej
mona zmieni dziaanie serwera, upodabniajc je do MySQL 4.1.
Naley odnotowa, e kolumny T1MlSTAMP/), gdzie /jest rwne 8 lub 14,
s traktowane jako liczby, natomiast reszta kolumn T1MlSTAMP/) jest
traktowana jako acuchy. Jest to rodzaj gwarancji, e uytkownik bdzie
mg wiarygodnie usuwa i przywraca tabele tego typu.
T1Ml
Godzina. Obsugiwany zakres obejmuje wartoci od `8o8b9b9`
do ` 8o8b9b9`. W MySQL wartoci T1Ml wywietlane s w formacie
` OOMMSS`, ale mona przypisa wartoci do kolumn T1Ml przy uyciu
zarwno acuchw, jak i liczb.
130 Rozdzia 4. Typy kolumn
YlAR|4)
Rok w formacie dwu- lub czterocyfrowym. Domylnym formatem jest rok
zapisany za pomoc czterech cyfr. W tym formacie dostpne wartoci nale
do przedziau od `90` do `bb oraz 0. W formacie dwucyfrowym wartoci
dopuszczalne to liczby z zakresu od /0 do 69, ktre reprezentuj daty od roku
1970 do 2069. W MySQL wartoci YlAR wywietlane s w formacie RRRR,
ale mona przypisa wartoci do kolumn YlAR przy uyciu tak acuchw,
jak i liczb. Typ YlAR jest niedostpny dla wersji wczeniejszych ni MySQL 3.22.
4.1.3. Przegld typw acuchowych
Poniej znajduje si przegld typw acuchowych. Dodatkowe informacje mona
znale w podrozdziale 4.4. Wymogi dotyczce pamici potrzebnej do przechowywa-
nia danych w kolumnach zostay podane w podrozdziale 4.5.
W niektrych przypadkach MySQL moe zmieni kolumn typu acuchowego na typ,
ktry bdzie si rni od zadeklarowanego w instrukcji CRlATl TAB|l lub A|TlR TAB|l.
Wicej informacji na ten temat znajduje si w podpunkcie 6.2.5.2.
Od wersji 4.1 w MySQL pojawia si zmiana, ktra wpywa na wiele typw kolumn typu
acuchowego. Definicja kolumn typu znakowego moe zawiera atrybut CHARACTlR
SlT, ktry okrela zestaw znakw i opcjonalnie porzdek sortowania. Dotyczy to typw
CHAR, VARCHAR, rnych typw TlXT oraz lNUM i SlT, na przykad:
CRF/TF T/B|F !
FNUMYCTVQ
YCTVQ|
1 lub 2 bajty w zalenoci od liczby wartoci wyliczenia
(maksymalnie 65 535)
SFTYCTVQ
YCTVQ|
1, 2, 3, 4 lub 8 bajtw w zalenoci od liczby elementw zestawu
(maksymalnie 64)
Typy VARCHAR, B|OB i TlXT maj zmienn dugo. Dla kadego ilo pamici potrzeb-
nej do przechowania wartoci bdzie zalee od faktycznej dugoci wartoci kolumny
(reprezentowanej w ostatniej tabeli przez .), a nie od maksymalnego moliwego roz-
miaru danego typu. Kolumna VARCHAR`0) na przykad moe przechowywa acuch
o maksymalnej dugoci 10 znakw. Faktyczna ilo wymaganej pamici to dugo
acucha (.) plus 1 bajt do zapisania dugoci acucha. Dla acucha `.|cc` parametr
. jest rwny 4, a wymagany rozmiar pamici to 5 bajtw.
Typy B|OB i TlXT wymagaj 1, 2, 3 lub 4 bajtw do zapisu dugoci wartoci kolumny
w zalenoci od maksymalnej moliwej dugoci tego typu (patrz punkt 4.4.2).
Rozmiar obiektu lNUM jest ustalany na podstawie liczby rnych wartoci wyliczenia.
Przy wyliczeniach do 255 moliwych wartoci uywany jest jeden bajt, a przy wyli-
czeniach do 65 535 wartoci uywane s 2 bajty (patrz punkt 4.4.3).
Rozmiar obiektu SlT jest okrelany przez liczb rnych elementw zestawu. Jeli ze-
staw ma rozmiar 0, obiekt zajmuje 0/).8 bajtw, ktr to warto zaokrgla si do
1, 2, 3, 4 lub 8 bajtw. Obiekt SlT moe mie do 64 elementw (patrz punkt 4.4.4).
4.6. Wybieranie odpowiedniego typu
dla kolumny
Aby jak najbardziej wydajnie korzysta z pamici, naley we wszystkich przypadkach
stara si stosowa typ, ktry bdzie jak najbardziej dokadny. Jeli na przykad w kolum-
nie liczb cakowitych bd przechowywane wartoci z zakresu od ` do 99999, najlep-
szym wyborem bdzie typ MlD1UM1NT UNS1ONlD. Ze wszystkich typw, ktre reprezentuj
wszystkie wymagane wartoci, zajmuje najmniej pamici.
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych 153
Powszechnym problemem jest dokadne przedstawianie wartoci walutowych. W MySQL
naley do tego uywa typu DlC1MA|, za pomoc ktrego wartoci zapisywane s w for-
mie acucha. Dziki temu nie traci si na dokadnoci (mimo to obliczenia z wartociami
DlC1MA| mog by wci wykonywane przy uyciu operacji dziaajcych na liczbach
z podwjn precyzj). Jeli dokadno nie jest zbyt wana, by moe wystarczajco
dobrym typem bdzie DOUB|l.
Aby uzyska wiksz dokadno, mona zawsze przeksztaci warto na typ stao-
przecinkowy, przechowywany w B1O1NT. Pozwoli to wykonywa wszystkie obliczenia
na liczbach cakowitych i tylko w razie potrzeby przeksztaca wynik z powrotem na
wartoci zmiennoprzecinkowe.
4.7. Wykorzystywanie typw kolumn
z innych mechanizmw baz danych
Aby uatwi uytkownikowi zastosowanie kodu pochodzcego od innych producentw,
moliwe jest odwzorowanie typw kolumn w sposb przedstawiony w poniszej tabeli.
Odwzorowania te upraszczaj operacj importu do MySQL definicji tabel z innych
mechanizmw baz danych:
Typ innych producentw Typ MySQL
BTN/RY/| C'/R/| BTN/RY
C'/R V/RYTN/| V/RC'/R/|
F|J/T4 F|J/T
F|J/T8 OJUB|F
TNT1 TTNYTNT
TNT SM/||TNT
TNT: MFOTUMTNT
TNT4 TNT
TNT8 BTTNT
|JN V/RBTN/RY MFOTUMB|JB
|JN V/RC'/R MFOTUMTFXT
|JN MFOTUMTFXT oc M,SJ| 410|
MTOO|FTNT MFOTUMTNT
V/RBTN/RY/| C'/R/| BTN/RY
Odwzorowanie typw kolumn jest wykonywane podczas tworzenia tabeli, po czym
oryginalne deklaracje typu zostaj usunite. Jeli uytkownik utworzy tabel z typami
stosowanymi przez innych producentw, po czym wyda polecenie DlSCR1Bl PC\YCA
VCDGNK, zostanie przedstawiona struktura tabeli z odpowiadajcymi im typami MySQL.
4 Spis treci
1.8.5. Rozbienoci midzy MySQL a standardem SQL ........................................ 60
1.8.6. Jak MySQL radzi sobie z ograniczeniami ................................................. 67
1.8.7. Znane bdy i projektowe braki w MySQL................................................ 69
Rozdzia 2. Struktura jzyka .............................................................................. 77
2.1. Literay................................................................................................................... 77
2.1.1. acuchy ................................................................................................... 77
2.1.2. Liczby........................................................................................................ 80
2.1.3. Wartoci szesnastkowe .............................................................................. 80
2.1.4. Wartoci logiczne ...................................................................................... 81
2.1.5. Wartoci NULL......................................................................................... 81
2.2. Nazwy baz danych, tabel, indeksw, kolumn i aliasw......................................... 81
2.2.1. Kwalifikatory identyfikatorw .................................................................. 83
2.2.2. Znaczenie wielkoci liter w nazwach identyfikatorw.............................. 83
2.3. Zmienne definiowane przez uytkownika.............................................................. 85
2.4. Zmienne systemowe............................................................................................... 87
2.4.1. Strukturalne zmienne systemowe .............................................................. 89
2.5. Skadnia komentarza .............................................................................................. 91
2.6. Traktowanie sw zastrzeonych w MySQL.......................................................... 92
Rozdzia 3. Obsuga zestaww znakw............................................................... 95
3.1. Oglne informacje o zestawach znakw i sortowaniu ........................................... 95
3.2. Zestawy znakw i porzdki sortowania w MySQL................................................ 96
3.3. Okrelanie domylnego zestawu znakw i sortowania........................................... 98
3.3.1. Zestaw znakw i sortowanie dla serwera................................................... 98
3.3.2. Zestaw znakw i sortowanie dla bazy danych........................................... 99
3.3.3. Zestaw znakw i sortowanie dla tabeli .................................................... 100
3.3.4. Zestaw znakw i sortowanie dla kolumny............................................... 100
3.3.5. Przykady przypisywania zestawu znakw i sortowania ......................... 101
3.3.6. Zestawy znakw i sortowanie dla poczenia .......................................... 102
3.3.7. Zestaw znakw i sortowanie dla acucha znakw.................................. 104
3.3.8. Wykorzystywanie COLLATE w instrukcjach SQL.................................... 105
3.3.9. Priorytet klauzuli COLLATE .................................................................. 106
3.3.10. Operator BINARY................................................................................... 106
3.3.11. Niektre przypadki specjalne, w ktrych trudno okreli sortowanie...... 106
3.3.12. Sortowania musz by odpowiednie dla danego zestawu znakw........... 107
3.3.13. Przykad wpywu porzdku sortowania ................................................... 108
3.4. Operacje, na ktre ma wpyw obsuga zestaww znakw.................................... 109
3.4.1. acuchy wyjciowe ............................................................................... 109
3.4.2. CONVERT()............................................................................................ 110
3.4.3. CAST() .................................................................................................... 110
3.4.4. Instrukcje SHOW .................................................................................... 111
3.5. Obsuga Unicode.................................................................................................. 112
3.6. UTF8 dla metadanych.......................................................................................... 113
3.7. Kompatybilno z innymi systemami zarzdzania baz danych .......................... 115
3.8. Nowy format pliku konfiguracji zestawu znakw................................................ 115
3.9. Narodowe zestawy znakw.................................................................................. 115
3.10. Aktualizacja zestaww znakw z MySQL 4.0..................................................... 116
3.10.1. Zestawy znakw w wersji 4.0 i odpowiadajce im w wersji 4.1 pary
skadajce si z zestawu znakw i sortowania......................................... 117
3.10.2. Przeksztacanie kolumn znakowych wersji 4.0 na format 4.1 ................. 118
3.11. Zestawy znakw i sortowania obsugiwane przez MySQL.................................. 118
3.11.1. Zestawy znakw standardu Unicode ....................................................... 119
3.11.2. Zestawy znakw zachodnioeuropejskich................................................. 120
3.11.3. Zestawy znakw dla Europy Centralnej .................................................. 121
Spis treci 5
3.11.4. Zestawy znakw poudniowoeuropejskich i rodkowowschodnich......... 122
3.11.5. Zestawy znakw regionu batyckiego...................................................... 123
3.11.6. Zestawy znakw dla cyrylicy................................................................... 123
3.11.7. Azjatyckie zestawy znakw..................................................................... 124
Rozdzia 4. Typy kolumn.................................................................................. 125
4.1. Przegld typw dla kolumny................................................................................ 126
4.1.1. Omwienie typw liczbowych ................................................................ 126
4.1.2. Przegld typw zwizanych z dat i czasem............................................ 129
4.1.3. Przegld typw acuchowych ................................................................ 130
4.2. Typy liczbowe...................................................................................................... 132
4.3. Typy zwizane z dat i czasem............................................................................ 135
4.3.1. Typy DATETIME, DATE i TIMESTAMP............................................. 137
4.3.2. Typ TIME................................................................................................ 142
4.3.3. Typ YEAR............................................................................................... 143
4.3.4. Problem roku 2000 a typy zwizane z dat.............................................. 144
4.4. Typy acuchowe ................................................................................................. 144
4.4.1. Typy CHAR i VARCHAR...................................................................... 144
4.4.2. Typy BLOB i TEXT................................................................................ 146
4.4.3. Typ Enum................................................................................................ 147
4.4.4. Typ SET .................................................................................................. 149
4.5. Rozmiar pamici potrzebnej dla typw kolumn................................................... 151
4.6. Wybieranie odpowiedniego typu dla kolumny..................................................... 152
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych ............... 153
Rozdzia 5. Funkcje i operatory........................................................................ 155
5.1. Operatory ............................................................................................................. 156
5.1.1. Nawiasy................................................................................................... 156
5.1.2. Operatory porwnania ............................................................................. 156
5.1.3. Operatory logiczne .................................................................................. 161
5.1.4. Operatory rozrniania wielkoci liter..................................................... 163
5.2. Funkcje kontroli przepywu ................................................................................. 163
5.3. Funkcje acuchowe............................................................................................. 166
5.3.1. Funkcje porwnywania acuchw.......................................................... 176
5.4. Funkcje liczbowe ................................................................................................. 178
5.4.1. Operatory arytmetyczne........................................................................... 178
5.4.2. Funkcje matematyczne ............................................................................ 180
5.5. Funkcje daty i godziny......................................................................................... 186
5.6. Funkcje obsugi wyszukiwania penotekstowego................................................. 202
5.6.1. Boolowskie wyszukiwania penotekstowe............................................... 205
5.6.2. Wyszukiwania penotekstowe z rozwijaniem zapytania .......................... 207
5.6.3. Ograniczenia dla wyszukiwania penotekstowego................................... 208
5.6.4. Modyfikowanie wyszukiwania penotekstowego MySQL ...................... 209
5.6.5. Lista rzeczy do zrobienia dla wyszukiwania penotekstowego................ 211
5.7. Funkcje konwersji typw..................................................................................... 211
5.8. Inne funkcje ......................................................................................................... 214
5.8.1. Funkcje bitowe ........................................................................................ 214
5.8.2. Funkcje szyfrujce................................................................................... 215
5.8.3. Funkcje informacyjne .............................................................................. 219
5.8.4. Funkcje rne .......................................................................................... 223
5.9. Funkcje i modyfikatory do zastosowania z klauzulami GROUP BY................... 226
5.9.1. Funkcje GROUP BY (agregujce)........................................................... 226
5.9.2. Modyfikatory GROUP BY...................................................................... 229
5.9.3. GROUP BY z ukrytymi polami............................................................... 232
6 Spis treci
Rozdzia 6. Skadnia instrukcji SQL .................................................................. 235
6.1. Instrukcje operujce na danych............................................................................ 235
6.1.1. Skadnia instrukcji DELETE................................................................... 235
6.1.2. Skadnia instrukcji DO ............................................................................ 238
6.1.3. Skadnia instrukcji HANDLER............................................................... 238
6.1.4. Skadnia instrukcji INSERT .................................................................... 240
6.1.5. Skadnia instrukcji LOAD DATA INFILE.............................................. 246
6.1.6. Skadnia instrukcji REPLACE................................................................. 255
6.1.7. Skadnia instrukcji SELECT.................................................................... 256
6.1.8. Skadnia podzapyta................................................................................ 265
6.1.9. Skadnia instrukcji TRUNCATE............................................................. 276
6.1.10. Skadnia instrukcji UPDATE................................................................... 276
6.2. Instrukcje definiowania danych ........................................................................... 278
6.2.1. Skadnia instrukcji ALTER DATABASE ............................................... 278
6.2.2. Skadnia instrukcji ALTER TABLE........................................................ 279
6.2.3. Skadnia instrukcji CREATE DATABASE............................................. 285
6.2.4. Skadnia instrukcji CREATE INDEX ..................................................... 285
6.2.5. Skadnia instrukcji CREATE TABLE..................................................... 287
6.2.6. Skadnia instrukcji DROP DATABASE.................................................. 301
6.2.7. Skadnia instrukcji DROP INDEX.......................................................... 302
6.2.8. Skadnia instrukcji DROP TABLE.......................................................... 302
6.2.9. Skadnia instrukcji RENAME TABLE.................................................... 303
6.3. Instrukcje programu MySQL............................................................................... 304
6.3.1. Skadnia instrukcji DESCRIBE
(odczytywanie informacji na temat kolumn) ........................................... 304
6.3.2. Skadnia instrukcji USE........................................................................... 304
6.4. Instrukcje obsugi transakcji i blokowania........................................................... 305
6.4.1. Skadnia instrukcji START TRANSACTION, COMMIT
oraz ROLLBACK.................................................................................... 305
6.4.2. Instrukcje niemoliwe do wycofania ....................................................... 306
6.4.3. Instrukcje wykonujce niejawne zatwierdzenie......................................... 306
6.4.4. Skadnia instrukcji SAVEPOINT i ROLLBACK TO SAVEPOINT....... 307
6.4.5. Skadnia instrukcji LOCK TABLES oraz UNLOCK TABLES .............. 307
6.4.6. Skadnia instrukcji SET TRANSACTION.............................................. 310
6.5. Administracja baz danych .................................................................................. 311
6.5.1. Instrukcje zarzdzajce kontami uytkownikw ....................................... 311
6.5.2. Instrukcje do konserwacji tabel ............................................................... 319
6.5.3. Skadnia instrukcji SET i SHOW ............................................................ 326
6.5.4. Inne instrukcje administracyjne ............................................................... 347
6.6. Instrukcje replikacji.............................................................................................. 352
6.6.1. Instrukcje SQL sterujce serwerem gwnym ......................................... 352
6.6.2. Instrukcje SQL sterujce serwerami podrzdnymi .................................. 354
Rozdzia 7. Rozszerzenia przestrzenne w MySQL............................................... 365
7.1. Wstp ................................................................................................................... 365
7.2. Model geometryczny OpenGIS............................................................................ 366
7.2.1. Hierarchia klas geometrycznych.............................................................. 366
7.2.2. Klasa Geometry ....................................................................................... 368
7.2.3. Klasa Point .............................................................................................. 369
7.2.4. Klasa Curve ............................................................................................. 369
7.2.5. Klasa LineString...................................................................................... 370
7.2.6. Klasa Surface........................................................................................... 370
7.2.7. Klasa Polygon.......................................................................................... 370
7.2.8. Klasa GeometryCollection....................................................................... 371
Spis treci 7
7.2.9. Klasa MultiPoint...................................................................................... 371
7.2.10. Klasa MultiCurve .................................................................................... 372
7.2.11. Klasa MultiLineString............................................................................. 372
7.2.12. Klasa MultiSurface .................................................................................. 372
7.2.13. Klasa MultiPolygon................................................................................. 373
7.3. Obsugiwane formaty danych przestrzennych...................................................... 373
7.3.1. Format tekstowy WKT............................................................................ 374
7.3.2. Format binarny WKB.............................................................................. 374
7.4. Tworzenie bazy danych z rozszerzeniami przestrzennymi................................... 375
7.4.1. Typy danych przestrzennych w MySQL ................................................. 375
7.4.2. Tworzenie wartoci przestrzennych......................................................... 376
7.4.3. Tworzenie kolumn przestrzennych.......................................................... 379
7.4.4. Wypenianie kolumn przestrzennych....................................................... 379
7.4.5. Pobieranie danych przestrzennych........................................................... 381
7.5. Analiza informacji przestrzennych....................................................................... 381
7.5.1. Funkcje konwersji formatw geometrycznych ........................................ 382
7.5.2. Funkcje klasy Geometry.......................................................................... 382
7.5.3. Funkcje tworzce nowe geometrie na podstawie istniejcych................. 388
7.5.4. Funkcje testujce relacje przestrzenne
midzy obiektami geometrycznymi ......................................................... 389
7.5.5. Relacje midzy minimalnymi prostoktami otaczajcymi
dla poszczeglnych geometrii.................................................................. 390
7.5.6. Funkcje sprawdzajce relacje przestrzenne pomidzy geometriami ........ 391
7.6. Optymalizacja analizy przestrzennej.................................................................... 392
7.6.1. Tworzenie indeksw przestrzennych....................................................... 392
7.6.2. Wykorzystanie indeksu przestrzennego................................................... 393
7.7. Zgodno MySQL ze standardem........................................................................ 395
7.7.1. Niezaimplementowane funkcje GIS ........................................................ 395
Rozdzia 8. Procedury i funkcje skadowane ..................................................... 397
8.1. Skadnia procedur skadowanych......................................................................... 398
8.1.1. Utrzymanie procedur skadowanych........................................................ 398
8.1.2. SHOW PROCEDURE STATUS oraz SHOW FUNCTION STATUS.... 401
8.1.3. Instrukcja CALL...................................................................................... 402
8.1.4. Instrukcja zoona BEGIN ... END.......................................................... 402
8.1.5. Instrukcja DECLARE.............................................................................. 402
8.1.6. Zmienne w procedurach skadowanych................................................... 402
8.1.7. Warunki i podprogramy obsugi .............................................................. 403
8.1.8. Kursory.................................................................................................... 405
8.1.9. Konstrukcje sterowania przepywem sterowania..................................... 406
Rozdzia 9. Obsuga bdw w MySQL .............................................................. 409
9.1. Zwracane bdy.................................................................................................... 409
9.2. Komunikaty bdw............................................................................................. 419
Dodatek A Rozwizywanie problemw z zapytaniami ........................................435
A.1. Zagadnienia zwizane z zapytaniami ................................................................... 435
A.1.1. Wielko liter przy wyszukiwaniu........................................................... 435
A.1.2. Problemy z kolumnami typu DATE ........................................................ 436
A.1.3. Problemy z wartociami NULL............................................................... 437
A.1.4. Problemy z synonimami kolumn ............................................................. 438
A.1.5. Bd wycofania dla tabel nietransakcyjnych............................................ 439
A.1.6. Usuwanie wierszy ze zwizanych tabel ................................................... 439
A.1.7. Rozwizywanie problemw z brakujcymi wierszami ............................ 440
A.1.8. Problemy z porwnaniami zmiennoprzecinkowymi................................ 441
8 Spis treci
A.2. Problemy zwizane z optymalizatorem................................................................ 443
A.3. Problemy z definicj tabel.................................................................................... 444
A.3.1. Problemy z instrukcj ALTER TABLE................................................... 444
A.3.2. Jak zmieni porzdek kolumn w tabeli .................................................... 445
A.3.3. Problemy z tabelami tymczasowymi ....................................................... 445
Dodatek B Wyraenia regularne w MySQL........................................................ 447
Skorowidz...................................................................................... 451
Rozdzia 4.
Typy kolumn
W MySQL dostpnych jest wiele typw danych, ktre mona pogrupowa w kilku pod-
stawowych kategoriach, takich jak typy liczbowe, typy zwizane z dat i czasem oraz
typy acuchowe. Na pocztku tego rozdziau przedstawiony zostanie przegld wspo-
mnianych przed chwil typw kolumn, po czym nastpi bardziej szczegowy opis ich
waciwoci z podziaem na poszczeglne kategorie i wreszcie zamieszczone zostanie
podsumowanie informacji dotyczcych wymaga co do rozmiaru pamici potrzebnej
do przechowania danej kolumny. Sam przegld jest z zamierzenia krtki. Dodatkowe
informacje o poszczeglnych typach kolumn, na przykad dopuszczalny format, w kt-
rym mona deklarowa wartoci, zostay uwzgldnione w szczegowych omwieniach.
Od wersji 4.1 MySQL rozpoznaje rozszerzenia do obsugi danych przestrzennych.
Informacje o typach przestrzennych znajduj si w rozdziale 7. tego podrcznika.
W czci opisu typw kolumn zastosowane zostay nastpujce reguy:
/
Wskazuje maksymalny rozmiar wywietlania liczby lub acucha.
Maksymalnym dopuszczalnym rozmiarem wywietlania jest 255.
&
Dotyczy typw zmiennoprzecinkowych i staoprzecinkowych. Okrela liczb
cyfr po kropce dziesitnej. Maksymalna dopuszczalna warto wynosi 30,
ale nie powinna przekracza /.
Nawiasy kwadratowe ( ) identyfikuj opcjonalne fragmenty deklaracji typu.
126 Rozdzia 4. Typy kolumn
4.1. Przegld typw dla kolumny
4.1.1. Omwienie typw liczbowych
Poniej znajduje si przegld liczbowych typw dla kolumn. Bardziej szczegowe
informacje mona znale w podrozdziale 4.2. Wymogi dotyczce rozmiaru pamici
potrzebnej do przechowywania kolumn znajduj si w podrozdziale 4.5.
Jeli dla kolumny liczbowej zostanie okrelony atrybut /lRO|1||, MySQL automatycznie
doda do kolumny atrybut UN1S1ONlD.
Naley uwaa podczas odejmowania dwch wartoci liczbowych, z ktrych jedna ma
typ UN1S1ONlD. Uzyskany wynik bdzie rwnie tego typu! patrz podrozdzia 5.7.
T1NY1NT/) UNS1ONlD /lRO|1||
Bardzo maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od `8
do `/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do bb.
B1T, BOO|, BOO|lAN
To s synonimy T1NY1NT`). Synonim BOO|lAN zosta dodany w MySQL 4.1.0.
Warto zerowa to inaczej fasz. Wartoci niezerowe traktowane s jako prawda.
W przyszoci wprowadzona zostanie pena, zgodna ze standardem SQL
obsuga typu boolowskiego.
SMA||1NT/) UNS1ONlD /lRO|1||
Maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od o/68
do o/6/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do 6bbob.
MlD1UM1NT/) UNS1ONlD /lRO|1||
rednia liczba cakowita. Dla liczb ze znakiem zakres wynosi od 8o88608
do 8o8860/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0
do `6///`b.
1NT/) UNS1ONlD /lRO|1||
Standardowa liczba cakowita. Dla liczb ze znakiem zakres wynosi
od `4/48o648 do `4/48o64/. W przypadku liczb bez znaku zakres
obejmuje wartoci od 0 do 49496/9b.
1NTlOlR/) UNS1ONlD /lRO|1||
Jest to synonim dla typu 1NT.
B1O1NT/) UNS1ONlD /lRO|1||
Dua liczba cakowita. Dla liczb ze znakiem zakres wynosi
od 9oo/0o68b4//b808 do 9oo/0o68b4//b80/. W przypadku liczb
bez znaku zakres obejmuje wartoci od 0 do `8446/440/o/09bb`6`b.
4.1. Przegld typw dla kolumny 127
Oto kilka spraw, o ktrych naley wiedzie odnonie kolumn typu B1O1NT:
Wszystkie obliczenia wykonywane s przy uyciu wartoci typu B1O1NT
lub DOUB|l ze znakiem. Oznacza to, e duych liczb cakowitych bez
znaku, wikszych ni 9oo/0o68b4//b80/ (63 bity), mona uywa tylko
z funkcjami bitowymi! Niezastosowanie si do tej zasady moe doprowadzi
do uzyskania w wyniku liczby, ktrej kilka ostatnich cyfr jest bdnych
z powodu bdw w zaokrglaniu podczas konwersji wartoci B1O1NT
na DOUB|l.
MySQL 4.0 potrafi obsugiwa B1O1NT w nastpujcych przypadkach:
Podczas wykorzystywania liczb cakowitych do przechowywania
duych wartoci bez znaku w kolumnie typu B1O1NT.
W M1NPC\YCAMQN) lub MAXPC\YCAMQN), gdzie PC\YCAMQN odnosi si
do kolumny B1O1NT.
Podczas korzystania z operatorw (midzy innymi , , *), gdy oba
argumenty s liczbami cakowitymi.
Zawsze istnieje moliwo zapisania w kolumnie B1O1NT dokadnej wartoci
liczby cakowitej. Wystarczy zapisa j przy uyciu acucha. W takim
przypadku zostanie dokonana konwersja acucha na liczb; konwersja
nie bdzie wymaga poredniego etapu przeksztacajcego liczb na jej
odpowiednik o podwjnej precyzji.
Podczas korzystania z operatorw , i * stosowana jest arytmetyka
B1O1NT, jeli oba argumenty maj warto liczby cakowitej! To oznacza,
e pomnoenie dwch duych liczb cakowitych (lub wynikw funkcji,
ktra zwraca liczby cakowite) moe spowodowa nieoczekiwane
rezultaty, jeli wynik przekroczy liczb 9oo/0o68b4//b80/.
||OATR) UNS1ONlD /lRO|1||
Liczba zmiennoprzecinkowa. Parametr R oznacza precyzj i moe przyjmowa
warto od 0 do 14 dla liczb zmiennoprzecinkowych o dokadnoci do jednego
znaku i od 25 do 53 dla liczb zmiennoprzecinkowych o dokadnoci do dwch
znakw. To przypomina opisane poniej typy ||OAT i DOUB|l. Typ ||OATR)
ma ten sam zakres, jaki posiadaj odpowiadajce mu typy ||OAT i DOUB|l,
ale w jego przypadku niezdefiniowany jest maksymalny rozmiar wywietlania
i liczba miejsc po przecinku.
Od wersji 3.23 MySQL jest to prawdziwa warto zmiennoprzecinkowa.
W wersjach wczeniejszych liczba typu ||OATR) bya zawsze liczb o dwch
miejscach po przecinku.
Ta skadnia zostaa dodana w celu zachowania zgodnoci ze standardem ODBC.
Stosowanie typu ||OAT moe spowodowa wystpienie pewnych
nieoczekiwanych problemw, poniewa wszystkie obliczenia w MySQL
s wykonywane z podwjn precyzj patrz punkt A.1.7).
||OAT/, &) UNS1ONlD /lRO|1||
128 Rozdzia 4. Typy kolumn
Maa liczba zmiennoprzecinkowa (o dokadnoci do jednego znaku). Liczba
ta moe przyj wartoci: od o408o466lo8 do ``/b494ob`lo8, 0,
i od ``/b494ob`lo8 do o408o466lo8. Jeli podany jest atrybut UN1S1ONlD,
niedozwolone s wartoci ujemne. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ ||OAT bez argumentw
lub typ ||OATR) (gdzie Rjest liczb z zakresu od 0 do 24) oznacza liczb
zmiennoprzecinkow o pojedynczej precyzji.
DOUB|l/, &) UNS1ONlD /lRO|1||
Standardowa liczba zmiennoprzecinkowa (o dokadnoci do dwch
znakw). Liczba ta moe przyj wartoci: od `/9/69o`o486o`b/lo08
do b0/o8b8b0/0`4lo08, 0, i od b0/o8b8b0/0`4lo08
do `/9/69o`o486o`b/lo08. Jeli podany jest atrybut UN1S1ONlD, wartoci
ujemne s niedozwolone. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ DOUB|l
bez argumentw lub ||OATR) (gdzie R jest liczb z zakresu od 25 do 53)
oznacza liczb zmiennoprzecinkow o podwjnej precyzji.
DOUB|l PRlC1S1ON/, &) UNS1ONlD /lRO|1||
RlA|/, &) UNS1ONlD /lRO|1||
S to synonimy DOUB|l. Wyjtek: Jeli dla parametru s;_cce serwera
wczono opcj RlA|_AS_||OAT, synonimem ||OAT jest RlA|, a nie DOUB|l.
DlC1MA|/, &) UNS1ONlD /lRO|1||
Niezapakowana liczba staoprzecinkowa. Zachowanie kolumny tego typu
przypomina kolumn typu CHAR. Niezapakowana oznacza, e liczba jest
przechowywana w postaci acucha przy uyciu jednego znaku na kad cyfr
wartoci. Parametr / definiuje maksymaln liczb cyfr, a & liczb miejsc
po przecinku. W parametrze / nie s brane pod uwag: kropka dziesitna
(odpowiadajca w naszej notacji przecinkowi) i (dla liczb ujemnych) znak ,
cho jest dla nich zarezerwowane miejsce. Wartoci nie maj miejsc
po przecinku lub czci uamkowych, jeli & jest rwne 0. Maksymalny zakres
wartoci typu DlC1MA| jest taki sam, jak dla typu DOUB|l, ale rzeczywisty zakres
danej kolumny DlC1MA| moe by ograniczony przez wybr argumentw / i &.
Jeli podany jest atrybut UN1S1ONlD, wartoci ujemne s niedozwolone.
W przypadku braku argumentu &, domyln wartoci jest 0. Jeli pominity
jest parametr /, domyln wartoci jest 10.
W wersjach poprzedzajcych MySQL 3.23 argument / musi by wystarczajco
duy, by zawiera obszar potrzebny dla znaku i kropki dziesitnej.
DlC/,&) UNS1ONlD /lRO|1||
NUMlR1C/,&) UNS1ONlD /lRO|1||
|1XlD/, &) UNS1ONlD /lRO|1||
S to synonimy typu DlC1MA|.
W MySQL 4.1.0 dodano synonim |1XlD w celu osignicia kompatybilnoci
z innymi serwerami.
4.1. Przegld typw dla kolumny 129
4.1.2. Przegld typw zwizanych z dat i czasem
Poniej znajduje si podsumowanie typw kolumn przeznaczonych dla czasu i daty.
Dodatkowe informacje na ten temat mona znale w podrozdziale 4.3. Wymogi do-
tyczce pamici potrzebnej do przechowywania danych w kolumnach zostay podane
w podrozdziale 4.5.
DATl
Data. Obsugiwany zakres obejmuje daty od ``0000`0`` do `9999`o``.
W MySQL wartoci DATl wywietlane s w formacie `RRRRMMDD`, ale mona
przypisywa wartoci do kolumn DATl przy uyciu acuchw lub liczb.
DATlT1Ml
Kombinacja daty i czasu. Obsugiwany zakres obejmuje wartoci
od ``0000`0` 000000` do `9999`o` ob9b9`. W MySQL wartoci
DATlT1Ml wywietlane s w formacie `RRRRMMDD OOMMSS`, ale mona
przypisywa wartoci do kolumn DATlT1Ml przy uyciu acuchw lub liczb.
T1MlSTAMP/)
Znacznik czasu. Obsugiwany zakres rozpoczyna si od daty ``9/00`0``
i siga roku 0o/.
Kolumna typu T1MlSTAMP przydaje si do rejestracji daty i godziny operacji
wstawiania lub aktualizacji. Pierwszej kolumnie T1MlSTAMP w tabeli
automatycznie przypisywana jest data i czas ostatniej operacji, jeli tylko tych
wartoci nie wprowadzi rcznie uytkownik. Dowolnej kolumnie T1MlSTAMP
mona rwnie przypisa biec dat i godzin, wpisujc do niej warto NU||.
Od MySQL 4.1 wartoci T1MlSTAMP s zwracane w postaci acuchw
w formacie `RRRRMMDD OOMMSS`. Aby uzyska warto w postaci liczby,
naley doda do kolumn tego typu 0. Inne szerokoci wywietlania
znacznika czasu nie s obsugiwane.
W wersjach poprzedzajcych MySQL 4.1 wartoci T1MlSTAMP s wywietlane
w formacie RRRRMMDDOOMMSS, RRMMDDOOMMSS, RRRRMMDD lub RRMMDD w zalenoci
od tego, czy parametr / jest rwny 14 (albo go brak), 12, 8 lub 6. Mona jednak
przypisywa wartoci do kolumn T1MlSTAMP przy uyciu acuchw lub liczb.
Argument / wpywa tylko na sposb wywietlania kolumny T1MlSTAMP, a nie
na jej przechowywanie. Wartoci kolumny s zawsze zapisywane w czterech
bajtach. W MySQL od wersji 4.0.12 pojawia si opcja ne., dziki ktrej
mona zmieni dziaanie serwera, upodabniajc je do MySQL 4.1.
Naley odnotowa, e kolumny T1MlSTAMP/), gdzie /jest rwne 8 lub 14,
s traktowane jako liczby, natomiast reszta kolumn T1MlSTAMP/) jest
traktowana jako acuchy. Jest to rodzaj gwarancji, e uytkownik bdzie
mg wiarygodnie usuwa i przywraca tabele tego typu.
T1Ml
Godzina. Obsugiwany zakres obejmuje wartoci od `8o8b9b9`
do ` 8o8b9b9`. W MySQL wartoci T1Ml wywietlane s w formacie
` OOMMSS`, ale mona przypisa wartoci do kolumn T1Ml przy uyciu
zarwno acuchw, jak i liczb.
130 Rozdzia 4. Typy kolumn
YlAR|4)
Rok w formacie dwu- lub czterocyfrowym. Domylnym formatem jest rok
zapisany za pomoc czterech cyfr. W tym formacie dostpne wartoci nale
do przedziau od `90` do `bb oraz 0. W formacie dwucyfrowym wartoci
dopuszczalne to liczby z zakresu od /0 do 69, ktre reprezentuj daty od roku
1970 do 2069. W MySQL wartoci YlAR wywietlane s w formacie RRRR,
ale mona przypisa wartoci do kolumn YlAR przy uyciu tak acuchw,
jak i liczb. Typ YlAR jest niedostpny dla wersji wczeniejszych ni MySQL 3.22.
4.1.3. Przegld typw acuchowych
Poniej znajduje si przegld typw acuchowych. Dodatkowe informacje mona
znale w podrozdziale 4.4. Wymogi dotyczce pamici potrzebnej do przechowywa-
nia danych w kolumnach zostay podane w podrozdziale 4.5.
W niektrych przypadkach MySQL moe zmieni kolumn typu acuchowego na typ,
ktry bdzie si rni od zadeklarowanego w instrukcji CRlATl TAB|l lub A|TlR TAB|l.
Wicej informacji na ten temat znajduje si w podpunkcie 6.2.5.2.
Od wersji 4.1 w MySQL pojawia si zmiana, ktra wpywa na wiele typw kolumn typu
acuchowego. Definicja kolumn typu znakowego moe zawiera atrybut CHARACTlR
SlT, ktry okrela zestaw znakw i opcjonalnie porzdek sortowania. Dotyczy to typw
CHAR, VARCHAR, rnych typw TlXT oraz lNUM i SlT, na przykad:
CRF/TF T/B|F !
FNUMYCTVQ
YCTVQ|
1 lub 2 bajty w zalenoci od liczby wartoci wyliczenia
(maksymalnie 65 535)
SFTYCTVQ
YCTVQ|
1, 2, 3, 4 lub 8 bajtw w zalenoci od liczby elementw zestawu
(maksymalnie 64)
Typy VARCHAR, B|OB i TlXT maj zmienn dugo. Dla kadego ilo pamici potrzeb-
nej do przechowania wartoci bdzie zalee od faktycznej dugoci wartoci kolumny
(reprezentowanej w ostatniej tabeli przez .), a nie od maksymalnego moliwego roz-
miaru danego typu. Kolumna VARCHAR`0) na przykad moe przechowywa acuch
o maksymalnej dugoci 10 znakw. Faktyczna ilo wymaganej pamici to dugo
acucha (.) plus 1 bajt do zapisania dugoci acucha. Dla acucha `.|cc` parametr
. jest rwny 4, a wymagany rozmiar pamici to 5 bajtw.
Typy B|OB i TlXT wymagaj 1, 2, 3 lub 4 bajtw do zapisu dugoci wartoci kolumny
w zalenoci od maksymalnej moliwej dugoci tego typu (patrz punkt 4.4.2).
Rozmiar obiektu lNUM jest ustalany na podstawie liczby rnych wartoci wyliczenia.
Przy wyliczeniach do 255 moliwych wartoci uywany jest jeden bajt, a przy wyli-
czeniach do 65 535 wartoci uywane s 2 bajty (patrz punkt 4.4.3).
Rozmiar obiektu SlT jest okrelany przez liczb rnych elementw zestawu. Jeli ze-
staw ma rozmiar 0, obiekt zajmuje 0/).8 bajtw, ktr to warto zaokrgla si do
1, 2, 3, 4 lub 8 bajtw. Obiekt SlT moe mie do 64 elementw (patrz punkt 4.4.4).
4.6. Wybieranie odpowiedniego typu
dla kolumny
Aby jak najbardziej wydajnie korzysta z pamici, naley we wszystkich przypadkach
stara si stosowa typ, ktry bdzie jak najbardziej dokadny. Jeli na przykad w kolum-
nie liczb cakowitych bd przechowywane wartoci z zakresu od ` do 99999, najlep-
szym wyborem bdzie typ MlD1UM1NT UNS1ONlD. Ze wszystkich typw, ktre reprezentuj
wszystkie wymagane wartoci, zajmuje najmniej pamici.
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych 153
Powszechnym problemem jest dokadne przedstawianie wartoci walutowych. W MySQL
naley do tego uywa typu DlC1MA|, za pomoc ktrego wartoci zapisywane s w for-
mie acucha. Dziki temu nie traci si na dokadnoci (mimo to obliczenia z wartociami
DlC1MA| mog by wci wykonywane przy uyciu operacji dziaajcych na liczbach
z podwjn precyzj). Jeli dokadno nie jest zbyt wana, by moe wystarczajco
dobrym typem bdzie DOUB|l.
Aby uzyska wiksz dokadno, mona zawsze przeksztaci warto na typ stao-
przecinkowy, przechowywany w B1O1NT. Pozwoli to wykonywa wszystkie obliczenia
na liczbach cakowitych i tylko w razie potrzeby przeksztaca wynik z powrotem na
wartoci zmiennoprzecinkowe.
4.7. Wykorzystywanie typw kolumn
z innych mechanizmw baz danych
Aby uatwi uytkownikowi zastosowanie kodu pochodzcego od innych producentw,
moliwe jest odwzorowanie typw kolumn w sposb przedstawiony w poniszej tabeli.
Odwzorowania te upraszczaj operacj importu do MySQL definicji tabel z innych
mechanizmw baz danych:
Typ innych producentw Typ MySQL
BTN/RY/| C'/R/| BTN/RY
C'/R V/RYTN/| V/RC'/R/|
F|J/T4 F|J/T
F|J/T8 OJUB|F
TNT1 TTNYTNT
TNT SM/||TNT
TNT: MFOTUMTNT
TNT4 TNT
TNT8 BTTNT
|JN V/RBTN/RY MFOTUMB|JB
|JN V/RC'/R MFOTUMTFXT
|JN MFOTUMTFXT oc M,SJ| 410|
MTOO|FTNT MFOTUMTNT
V/RBTN/RY/| C'/R/| BTN/RY
Odwzorowanie typw kolumn jest wykonywane podczas tworzenia tabeli, po czym
oryginalne deklaracje typu zostaj usunite. Jeli uytkownik utworzy tabel z typami
stosowanymi przez innych producentw, po czym wyda polecenie DlSCR1Bl PC\YCA
VCDGNK, zostanie przedstawiona struktura tabeli z odpowiadajcymi im typami MySQL.
4 Spis treci
1.8.5. Rozbienoci midzy MySQL a standardem SQL ........................................ 60
1.8.6. Jak MySQL radzi sobie z ograniczeniami ................................................. 67
1.8.7. Znane bdy i projektowe braki w MySQL................................................ 69
Rozdzia 2. Struktura jzyka .............................................................................. 77
2.1. Literay................................................................................................................... 77
2.1.1. acuchy ................................................................................................... 77
2.1.2. Liczby........................................................................................................ 80
2.1.3. Wartoci szesnastkowe .............................................................................. 80
2.1.4. Wartoci logiczne ...................................................................................... 81
2.1.5. Wartoci NULL......................................................................................... 81
2.2. Nazwy baz danych, tabel, indeksw, kolumn i aliasw......................................... 81
2.2.1. Kwalifikatory identyfikatorw .................................................................. 83
2.2.2. Znaczenie wielkoci liter w nazwach identyfikatorw.............................. 83
2.3. Zmienne definiowane przez uytkownika.............................................................. 85
2.4. Zmienne systemowe............................................................................................... 87
2.4.1. Strukturalne zmienne systemowe .............................................................. 89
2.5. Skadnia komentarza .............................................................................................. 91
2.6. Traktowanie sw zastrzeonych w MySQL.......................................................... 92
Rozdzia 3. Obsuga zestaww znakw............................................................... 95
3.1. Oglne informacje o zestawach znakw i sortowaniu ........................................... 95
3.2. Zestawy znakw i porzdki sortowania w MySQL................................................ 96
3.3. Okrelanie domylnego zestawu znakw i sortowania........................................... 98
3.3.1. Zestaw znakw i sortowanie dla serwera................................................... 98
3.3.2. Zestaw znakw i sortowanie dla bazy danych........................................... 99
3.3.3. Zestaw znakw i sortowanie dla tabeli .................................................... 100
3.3.4. Zestaw znakw i sortowanie dla kolumny............................................... 100
3.3.5. Przykady przypisywania zestawu znakw i sortowania ......................... 101
3.3.6. Zestawy znakw i sortowanie dla poczenia .......................................... 102
3.3.7. Zestaw znakw i sortowanie dla acucha znakw.................................. 104
3.3.8. Wykorzystywanie COLLATE w instrukcjach SQL.................................... 105
3.3.9. Priorytet klauzuli COLLATE .................................................................. 106
3.3.10. Operator BINARY................................................................................... 106
3.3.11. Niektre przypadki specjalne, w ktrych trudno okreli sortowanie...... 106
3.3.12. Sortowania musz by odpowiednie dla danego zestawu znakw........... 107
3.3.13. Przykad wpywu porzdku sortowania ................................................... 108
3.4. Operacje, na ktre ma wpyw obsuga zestaww znakw.................................... 109
3.4.1. acuchy wyjciowe ............................................................................... 109
3.4.2. CONVERT()............................................................................................ 110
3.4.3. CAST() .................................................................................................... 110
3.4.4. Instrukcje SHOW .................................................................................... 111
3.5. Obsuga Unicode.................................................................................................. 112
3.6. UTF8 dla metadanych.......................................................................................... 113
3.7. Kompatybilno z innymi systemami zarzdzania baz danych .......................... 115
3.8. Nowy format pliku konfiguracji zestawu znakw................................................ 115
3.9. Narodowe zestawy znakw.................................................................................. 115
3.10. Aktualizacja zestaww znakw z MySQL 4.0..................................................... 116
3.10.1. Zestawy znakw w wersji 4.0 i odpowiadajce im w wersji 4.1 pary
skadajce si z zestawu znakw i sortowania......................................... 117
3.10.2. Przeksztacanie kolumn znakowych wersji 4.0 na format 4.1 ................. 118
3.11. Zestawy znakw i sortowania obsugiwane przez MySQL.................................. 118
3.11.1. Zestawy znakw standardu Unicode ....................................................... 119
3.11.2. Zestawy znakw zachodnioeuropejskich................................................. 120
3.11.3. Zestawy znakw dla Europy Centralnej .................................................. 121
Spis treci 5
3.11.4. Zestawy znakw poudniowoeuropejskich i rodkowowschodnich......... 122
3.11.5. Zestawy znakw regionu batyckiego...................................................... 123
3.11.6. Zestawy znakw dla cyrylicy................................................................... 123
3.11.7. Azjatyckie zestawy znakw..................................................................... 124
Rozdzia 4. Typy kolumn.................................................................................. 125
4.1. Przegld typw dla kolumny................................................................................ 126
4.1.1. Omwienie typw liczbowych ................................................................ 126
4.1.2. Przegld typw zwizanych z dat i czasem............................................ 129
4.1.3. Przegld typw acuchowych ................................................................ 130
4.2. Typy liczbowe...................................................................................................... 132
4.3. Typy zwizane z dat i czasem............................................................................ 135
4.3.1. Typy DATETIME, DATE i TIMESTAMP............................................. 137
4.3.2. Typ TIME................................................................................................ 142
4.3.3. Typ YEAR............................................................................................... 143
4.3.4. Problem roku 2000 a typy zwizane z dat.............................................. 144
4.4. Typy acuchowe ................................................................................................. 144
4.4.1. Typy CHAR i VARCHAR...................................................................... 144
4.4.2. Typy BLOB i TEXT................................................................................ 146
4.4.3. Typ Enum................................................................................................ 147
4.4.4. Typ SET .................................................................................................. 149
4.5. Rozmiar pamici potrzebnej dla typw kolumn................................................... 151
4.6. Wybieranie odpowiedniego typu dla kolumny..................................................... 152
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych ............... 153
Rozdzia 5. Funkcje i operatory........................................................................ 155
5.1. Operatory ............................................................................................................. 156
5.1.1. Nawiasy................................................................................................... 156
5.1.2. Operatory porwnania ............................................................................. 156
5.1.3. Operatory logiczne .................................................................................. 161
5.1.4. Operatory rozrniania wielkoci liter..................................................... 163
5.2. Funkcje kontroli przepywu ................................................................................. 163
5.3. Funkcje acuchowe............................................................................................. 166
5.3.1. Funkcje porwnywania acuchw.......................................................... 176
5.4. Funkcje liczbowe ................................................................................................. 178
5.4.1. Operatory arytmetyczne........................................................................... 178
5.4.2. Funkcje matematyczne ............................................................................ 180
5.5. Funkcje daty i godziny......................................................................................... 186
5.6. Funkcje obsugi wyszukiwania penotekstowego................................................. 202
5.6.1. Boolowskie wyszukiwania penotekstowe............................................... 205
5.6.2. Wyszukiwania penotekstowe z rozwijaniem zapytania .......................... 207
5.6.3. Ograniczenia dla wyszukiwania penotekstowego................................... 208
5.6.4. Modyfikowanie wyszukiwania penotekstowego MySQL ...................... 209
5.6.5. Lista rzeczy do zrobienia dla wyszukiwania penotekstowego................ 211
5.7. Funkcje konwersji typw..................................................................................... 211
5.8. Inne funkcje ......................................................................................................... 214
5.8.1. Funkcje bitowe ........................................................................................ 214
5.8.2. Funkcje szyfrujce................................................................................... 215
5.8.3. Funkcje informacyjne .............................................................................. 219
5.8.4. Funkcje rne .......................................................................................... 223
5.9. Funkcje i modyfikatory do zastosowania z klauzulami GROUP BY................... 226
5.9.1. Funkcje GROUP BY (agregujce)........................................................... 226
5.9.2. Modyfikatory GROUP BY...................................................................... 229
5.9.3. GROUP BY z ukrytymi polami............................................................... 232
6 Spis treci
Rozdzia 6. Skadnia instrukcji SQL .................................................................. 235
6.1. Instrukcje operujce na danych............................................................................ 235
6.1.1. Skadnia instrukcji DELETE................................................................... 235
6.1.2. Skadnia instrukcji DO ............................................................................ 238
6.1.3. Skadnia instrukcji HANDLER............................................................... 238
6.1.4. Skadnia instrukcji INSERT .................................................................... 240
6.1.5. Skadnia instrukcji LOAD DATA INFILE.............................................. 246
6.1.6. Skadnia instrukcji REPLACE................................................................. 255
6.1.7. Skadnia instrukcji SELECT.................................................................... 256
6.1.8. Skadnia podzapyta................................................................................ 265
6.1.9. Skadnia instrukcji TRUNCATE............................................................. 276
6.1.10. Skadnia instrukcji UPDATE................................................................... 276
6.2. Instrukcje definiowania danych ........................................................................... 278
6.2.1. Skadnia instrukcji ALTER DATABASE ............................................... 278
6.2.2. Skadnia instrukcji ALTER TABLE........................................................ 279
6.2.3. Skadnia instrukcji CREATE DATABASE............................................. 285
6.2.4. Skadnia instrukcji CREATE INDEX ..................................................... 285
6.2.5. Skadnia instrukcji CREATE TABLE..................................................... 287
6.2.6. Skadnia instrukcji DROP DATABASE.................................................. 301
6.2.7. Skadnia instrukcji DROP INDEX.......................................................... 302
6.2.8. Skadnia instrukcji DROP TABLE.......................................................... 302
6.2.9. Skadnia instrukcji RENAME TABLE.................................................... 303
6.3. Instrukcje programu MySQL............................................................................... 304
6.3.1. Skadnia instrukcji DESCRIBE
(odczytywanie informacji na temat kolumn) ........................................... 304
6.3.2. Skadnia instrukcji USE........................................................................... 304
6.4. Instrukcje obsugi transakcji i blokowania........................................................... 305
6.4.1. Skadnia instrukcji START TRANSACTION, COMMIT
oraz ROLLBACK.................................................................................... 305
6.4.2. Instrukcje niemoliwe do wycofania ....................................................... 306
6.4.3. Instrukcje wykonujce niejawne zatwierdzenie......................................... 306
6.4.4. Skadnia instrukcji SAVEPOINT i ROLLBACK TO SAVEPOINT....... 307
6.4.5. Skadnia instrukcji LOCK TABLES oraz UNLOCK TABLES .............. 307
6.4.6. Skadnia instrukcji SET TRANSACTION.............................................. 310
6.5. Administracja baz danych .................................................................................. 311
6.5.1. Instrukcje zarzdzajce kontami uytkownikw ....................................... 311
6.5.2. Instrukcje do konserwacji tabel ............................................................... 319
6.5.3. Skadnia instrukcji SET i SHOW ............................................................ 326
6.5.4. Inne instrukcje administracyjne ............................................................... 347
6.6. Instrukcje replikacji.............................................................................................. 352
6.6.1. Instrukcje SQL sterujce serwerem gwnym ......................................... 352
6.6.2. Instrukcje SQL sterujce serwerami podrzdnymi .................................. 354
Rozdzia 7. Rozszerzenia przestrzenne w MySQL............................................... 365
7.1. Wstp ................................................................................................................... 365
7.2. Model geometryczny OpenGIS............................................................................ 366
7.2.1. Hierarchia klas geometrycznych.............................................................. 366
7.2.2. Klasa Geometry ....................................................................................... 368
7.2.3. Klasa Point .............................................................................................. 369
7.2.4. Klasa Curve ............................................................................................. 369
7.2.5. Klasa LineString...................................................................................... 370
7.2.6. Klasa Surface........................................................................................... 370
7.2.7. Klasa Polygon.......................................................................................... 370
7.2.8. Klasa GeometryCollection....................................................................... 371
Spis treci 7
7.2.9. Klasa MultiPoint...................................................................................... 371
7.2.10. Klasa MultiCurve .................................................................................... 372
7.2.11. Klasa MultiLineString............................................................................. 372
7.2.12. Klasa MultiSurface .................................................................................. 372
7.2.13. Klasa MultiPolygon................................................................................. 373
7.3. Obsugiwane formaty danych przestrzennych...................................................... 373
7.3.1. Format tekstowy WKT............................................................................ 374
7.3.2. Format binarny WKB.............................................................................. 374
7.4. Tworzenie bazy danych z rozszerzeniami przestrzennymi................................... 375
7.4.1. Typy danych przestrzennych w MySQL ................................................. 375
7.4.2. Tworzenie wartoci przestrzennych......................................................... 376
7.4.3. Tworzenie kolumn przestrzennych.......................................................... 379
7.4.4. Wypenianie kolumn przestrzennych....................................................... 379
7.4.5. Pobieranie danych przestrzennych........................................................... 381
7.5. Analiza informacji przestrzennych....................................................................... 381
7.5.1. Funkcje konwersji formatw geometrycznych ........................................ 382
7.5.2. Funkcje klasy Geometry.......................................................................... 382
7.5.3. Funkcje tworzce nowe geometrie na podstawie istniejcych................. 388
7.5.4. Funkcje testujce relacje przestrzenne
midzy obiektami geometrycznymi ......................................................... 389
7.5.5. Relacje midzy minimalnymi prostoktami otaczajcymi
dla poszczeglnych geometrii.................................................................. 390
7.5.6. Funkcje sprawdzajce relacje przestrzenne pomidzy geometriami ........ 391
7.6. Optymalizacja analizy przestrzennej.................................................................... 392
7.6.1. Tworzenie indeksw przestrzennych....................................................... 392
7.6.2. Wykorzystanie indeksu przestrzennego................................................... 393
7.7. Zgodno MySQL ze standardem........................................................................ 395
7.7.1. Niezaimplementowane funkcje GIS ........................................................ 395
Rozdzia 8. Procedury i funkcje skadowane ..................................................... 397
8.1. Skadnia procedur skadowanych......................................................................... 398
8.1.1. Utrzymanie procedur skadowanych........................................................ 398
8.1.2. SHOW PROCEDURE STATUS oraz SHOW FUNCTION STATUS.... 401
8.1.3. Instrukcja CALL...................................................................................... 402
8.1.4. Instrukcja zoona BEGIN ... END.......................................................... 402
8.1.5. Instrukcja DECLARE.............................................................................. 402
8.1.6. Zmienne w procedurach skadowanych................................................... 402
8.1.7. Warunki i podprogramy obsugi .............................................................. 403
8.1.8. Kursory.................................................................................................... 405
8.1.9. Konstrukcje sterowania przepywem sterowania..................................... 406
Rozdzia 9. Obsuga bdw w MySQL .............................................................. 409
9.1. Zwracane bdy.................................................................................................... 409
9.2. Komunikaty bdw............................................................................................. 419
Dodatek A Rozwizywanie problemw z zapytaniami ........................................435
A.1. Zagadnienia zwizane z zapytaniami ................................................................... 435
A.1.1. Wielko liter przy wyszukiwaniu........................................................... 435
A.1.2. Problemy z kolumnami typu DATE ........................................................ 436
A.1.3. Problemy z wartociami NULL............................................................... 437
A.1.4. Problemy z synonimami kolumn ............................................................. 438
A.1.5. Bd wycofania dla tabel nietransakcyjnych............................................ 439
A.1.6. Usuwanie wierszy ze zwizanych tabel ................................................... 439
A.1.7. Rozwizywanie problemw z brakujcymi wierszami ............................ 440
A.1.8. Problemy z porwnaniami zmiennoprzecinkowymi................................ 441
8 Spis treci
A.2. Problemy zwizane z optymalizatorem................................................................ 443
A.3. Problemy z definicj tabel.................................................................................... 444
A.3.1. Problemy z instrukcj ALTER TABLE................................................... 444
A.3.2. Jak zmieni porzdek kolumn w tabeli .................................................... 445
A.3.3. Problemy z tabelami tymczasowymi ....................................................... 445
Dodatek B Wyraenia regularne w MySQL........................................................ 447
Skorowidz...................................................................................... 451
Rozdzia 4.
Typy kolumn
W MySQL dostpnych jest wiele typw danych, ktre mona pogrupowa w kilku pod-
stawowych kategoriach, takich jak typy liczbowe, typy zwizane z dat i czasem oraz
typy acuchowe. Na pocztku tego rozdziau przedstawiony zostanie przegld wspo-
mnianych przed chwil typw kolumn, po czym nastpi bardziej szczegowy opis ich
waciwoci z podziaem na poszczeglne kategorie i wreszcie zamieszczone zostanie
podsumowanie informacji dotyczcych wymaga co do rozmiaru pamici potrzebnej
do przechowania danej kolumny. Sam przegld jest z zamierzenia krtki. Dodatkowe
informacje o poszczeglnych typach kolumn, na przykad dopuszczalny format, w kt-
rym mona deklarowa wartoci, zostay uwzgldnione w szczegowych omwieniach.
Od wersji 4.1 MySQL rozpoznaje rozszerzenia do obsugi danych przestrzennych.
Informacje o typach przestrzennych znajduj si w rozdziale 7. tego podrcznika.
W czci opisu typw kolumn zastosowane zostay nastpujce reguy:
/
Wskazuje maksymalny rozmiar wywietlania liczby lub acucha.
Maksymalnym dopuszczalnym rozmiarem wywietlania jest 255.
&
Dotyczy typw zmiennoprzecinkowych i staoprzecinkowych. Okrela liczb
cyfr po kropce dziesitnej. Maksymalna dopuszczalna warto wynosi 30,
ale nie powinna przekracza /.
Nawiasy kwadratowe ( ) identyfikuj opcjonalne fragmenty deklaracji typu.
126 Rozdzia 4. Typy kolumn
4.1. Przegld typw dla kolumny
4.1.1. Omwienie typw liczbowych
Poniej znajduje si przegld liczbowych typw dla kolumn. Bardziej szczegowe
informacje mona znale w podrozdziale 4.2. Wymogi dotyczce rozmiaru pamici
potrzebnej do przechowywania kolumn znajduj si w podrozdziale 4.5.
Jeli dla kolumny liczbowej zostanie okrelony atrybut /lRO|1||, MySQL automatycznie
doda do kolumny atrybut UN1S1ONlD.
Naley uwaa podczas odejmowania dwch wartoci liczbowych, z ktrych jedna ma
typ UN1S1ONlD. Uzyskany wynik bdzie rwnie tego typu! patrz podrozdzia 5.7.
T1NY1NT/) UNS1ONlD /lRO|1||
Bardzo maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od `8
do `/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do bb.
B1T, BOO|, BOO|lAN
To s synonimy T1NY1NT`). Synonim BOO|lAN zosta dodany w MySQL 4.1.0.
Warto zerowa to inaczej fasz. Wartoci niezerowe traktowane s jako prawda.
W przyszoci wprowadzona zostanie pena, zgodna ze standardem SQL
obsuga typu boolowskiego.
SMA||1NT/) UNS1ONlD /lRO|1||
Maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od o/68
do o/6/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do 6bbob.
MlD1UM1NT/) UNS1ONlD /lRO|1||
rednia liczba cakowita. Dla liczb ze znakiem zakres wynosi od 8o88608
do 8o8860/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0
do `6///`b.
1NT/) UNS1ONlD /lRO|1||
Standardowa liczba cakowita. Dla liczb ze znakiem zakres wynosi
od `4/48o648 do `4/48o64/. W przypadku liczb bez znaku zakres
obejmuje wartoci od 0 do 49496/9b.
1NTlOlR/) UNS1ONlD /lRO|1||
Jest to synonim dla typu 1NT.
B1O1NT/) UNS1ONlD /lRO|1||
Dua liczba cakowita. Dla liczb ze znakiem zakres wynosi
od 9oo/0o68b4//b808 do 9oo/0o68b4//b80/. W przypadku liczb
bez znaku zakres obejmuje wartoci od 0 do `8446/440/o/09bb`6`b.
4.1. Przegld typw dla kolumny 127
Oto kilka spraw, o ktrych naley wiedzie odnonie kolumn typu B1O1NT:
Wszystkie obliczenia wykonywane s przy uyciu wartoci typu B1O1NT
lub DOUB|l ze znakiem. Oznacza to, e duych liczb cakowitych bez
znaku, wikszych ni 9oo/0o68b4//b80/ (63 bity), mona uywa tylko
z funkcjami bitowymi! Niezastosowanie si do tej zasady moe doprowadzi
do uzyskania w wyniku liczby, ktrej kilka ostatnich cyfr jest bdnych
z powodu bdw w zaokrglaniu podczas konwersji wartoci B1O1NT
na DOUB|l.
MySQL 4.0 potrafi obsugiwa B1O1NT w nastpujcych przypadkach:
Podczas wykorzystywania liczb cakowitych do przechowywania
duych wartoci bez znaku w kolumnie typu B1O1NT.
W M1NPC\YCAMQN) lub MAXPC\YCAMQN), gdzie PC\YCAMQN odnosi si
do kolumny B1O1NT.
Podczas korzystania z operatorw (midzy innymi , , *), gdy oba
argumenty s liczbami cakowitymi.
Zawsze istnieje moliwo zapisania w kolumnie B1O1NT dokadnej wartoci
liczby cakowitej. Wystarczy zapisa j przy uyciu acucha. W takim
przypadku zostanie dokonana konwersja acucha na liczb; konwersja
nie bdzie wymaga poredniego etapu przeksztacajcego liczb na jej
odpowiednik o podwjnej precyzji.
Podczas korzystania z operatorw , i * stosowana jest arytmetyka
B1O1NT, jeli oba argumenty maj warto liczby cakowitej! To oznacza,
e pomnoenie dwch duych liczb cakowitych (lub wynikw funkcji,
ktra zwraca liczby cakowite) moe spowodowa nieoczekiwane
rezultaty, jeli wynik przekroczy liczb 9oo/0o68b4//b80/.
||OATR) UNS1ONlD /lRO|1||
Liczba zmiennoprzecinkowa. Parametr R oznacza precyzj i moe przyjmowa
warto od 0 do 14 dla liczb zmiennoprzecinkowych o dokadnoci do jednego
znaku i od 25 do 53 dla liczb zmiennoprzecinkowych o dokadnoci do dwch
znakw. To przypomina opisane poniej typy ||OAT i DOUB|l. Typ ||OATR)
ma ten sam zakres, jaki posiadaj odpowiadajce mu typy ||OAT i DOUB|l,
ale w jego przypadku niezdefiniowany jest maksymalny rozmiar wywietlania
i liczba miejsc po przecinku.
Od wersji 3.23 MySQL jest to prawdziwa warto zmiennoprzecinkowa.
W wersjach wczeniejszych liczba typu ||OATR) bya zawsze liczb o dwch
miejscach po przecinku.
Ta skadnia zostaa dodana w celu zachowania zgodnoci ze standardem ODBC.
Stosowanie typu ||OAT moe spowodowa wystpienie pewnych
nieoczekiwanych problemw, poniewa wszystkie obliczenia w MySQL
s wykonywane z podwjn precyzj patrz punkt A.1.7).
||OAT/, &) UNS1ONlD /lRO|1||
128 Rozdzia 4. Typy kolumn
Maa liczba zmiennoprzecinkowa (o dokadnoci do jednego znaku). Liczba
ta moe przyj wartoci: od o408o466lo8 do ``/b494ob`lo8, 0,
i od ``/b494ob`lo8 do o408o466lo8. Jeli podany jest atrybut UN1S1ONlD,
niedozwolone s wartoci ujemne. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ ||OAT bez argumentw
lub typ ||OATR) (gdzie Rjest liczb z zakresu od 0 do 24) oznacza liczb
zmiennoprzecinkow o pojedynczej precyzji.
DOUB|l/, &) UNS1ONlD /lRO|1||
Standardowa liczba zmiennoprzecinkowa (o dokadnoci do dwch
znakw). Liczba ta moe przyj wartoci: od `/9/69o`o486o`b/lo08
do b0/o8b8b0/0`4lo08, 0, i od b0/o8b8b0/0`4lo08
do `/9/69o`o486o`b/lo08. Jeli podany jest atrybut UN1S1ONlD, wartoci
ujemne s niedozwolone. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ DOUB|l
bez argumentw lub ||OATR) (gdzie R jest liczb z zakresu od 25 do 53)
oznacza liczb zmiennoprzecinkow o podwjnej precyzji.
DOUB|l PRlC1S1ON/, &) UNS1ONlD /lRO|1||
RlA|/, &) UNS1ONlD /lRO|1||
S to synonimy DOUB|l. Wyjtek: Jeli dla parametru s;_cce serwera
wczono opcj RlA|_AS_||OAT, synonimem ||OAT jest RlA|, a nie DOUB|l.
DlC1MA|/, &) UNS1ONlD /lRO|1||
Niezapakowana liczba staoprzecinkowa. Zachowanie kolumny tego typu
przypomina kolumn typu CHAR. Niezapakowana oznacza, e liczba jest
przechowywana w postaci acucha przy uyciu jednego znaku na kad cyfr
wartoci. Parametr / definiuje maksymaln liczb cyfr, a & liczb miejsc
po przecinku. W parametrze / nie s brane pod uwag: kropka dziesitna
(odpowiadajca w naszej notacji przecinkowi) i (dla liczb ujemnych) znak ,
cho jest dla nich zarezerwowane miejsce. Wartoci nie maj miejsc
po przecinku lub czci uamkowych, jeli & jest rwne 0. Maksymalny zakres
wartoci typu DlC1MA| jest taki sam, jak dla typu DOUB|l, ale rzeczywisty zakres
danej kolumny DlC1MA| moe by ograniczony przez wybr argumentw / i &.
Jeli podany jest atrybut UN1S1ONlD, wartoci ujemne s niedozwolone.
W przypadku braku argumentu &, domyln wartoci jest 0. Jeli pominity
jest parametr /, domyln wartoci jest 10.
W wersjach poprzedzajcych MySQL 3.23 argument / musi by wystarczajco
duy, by zawiera obszar potrzebny dla znaku i kropki dziesitnej.
DlC/,&) UNS1ONlD /lRO|1||
NUMlR1C/,&) UNS1ONlD /lRO|1||
|1XlD/, &) UNS1ONlD /lRO|1||
S to synonimy typu DlC1MA|.
W MySQL 4.1.0 dodano synonim |1XlD w celu osignicia kompatybilnoci
z innymi serwerami.
4.1. Przegld typw dla kolumny 129
4.1.2. Przegld typw zwizanych z dat i czasem
Poniej znajduje si podsumowanie typw kolumn przeznaczonych dla czasu i daty.
Dodatkowe informacje na ten temat mona znale w podrozdziale 4.3. Wymogi do-
tyczce pamici potrzebnej do przechowywania danych w kolumnach zostay podane
w podrozdziale 4.5.
DATl
Data. Obsugiwany zakres obejmuje daty od ``0000`0`` do `9999`o``.
W MySQL wartoci DATl wywietlane s w formacie `RRRRMMDD`, ale mona
przypisywa wartoci do kolumn DATl przy uyciu acuchw lub liczb.
DATlT1Ml
Kombinacja daty i czasu. Obsugiwany zakres obejmuje wartoci
od ``0000`0` 000000` do `9999`o` ob9b9`. W MySQL wartoci
DATlT1Ml wywietlane s w formacie `RRRRMMDD OOMMSS`, ale mona
przypisywa wartoci do kolumn DATlT1Ml przy uyciu acuchw lub liczb.
T1MlSTAMP/)
Znacznik czasu. Obsugiwany zakres rozpoczyna si od daty ``9/00`0``
i siga roku 0o/.
Kolumna typu T1MlSTAMP przydaje si do rejestracji daty i godziny operacji
wstawiania lub aktualizacji. Pierwszej kolumnie T1MlSTAMP w tabeli
automatycznie przypisywana jest data i czas ostatniej operacji, jeli tylko tych
wartoci nie wprowadzi rcznie uytkownik. Dowolnej kolumnie T1MlSTAMP
mona rwnie przypisa biec dat i godzin, wpisujc do niej warto NU||.
Od MySQL 4.1 wartoci T1MlSTAMP s zwracane w postaci acuchw
w formacie `RRRRMMDD OOMMSS`. Aby uzyska warto w postaci liczby,
naley doda do kolumn tego typu 0. Inne szerokoci wywietlania
znacznika czasu nie s obsugiwane.
W wersjach poprzedzajcych MySQL 4.1 wartoci T1MlSTAMP s wywietlane
w formacie RRRRMMDDOOMMSS, RRMMDDOOMMSS, RRRRMMDD lub RRMMDD w zalenoci
od tego, czy parametr / jest rwny 14 (albo go brak), 12, 8 lub 6. Mona jednak
przypisywa wartoci do kolumn T1MlSTAMP przy uyciu acuchw lub liczb.
Argument / wpywa tylko na sposb wywietlania kolumny T1MlSTAMP, a nie
na jej przechowywanie. Wartoci kolumny s zawsze zapisywane w czterech
bajtach. W MySQL od wersji 4.0.12 pojawia si opcja ne., dziki ktrej
mona zmieni dziaanie serwera, upodabniajc je do MySQL 4.1.
Naley odnotowa, e kolumny T1MlSTAMP/), gdzie /jest rwne 8 lub 14,
s traktowane jako liczby, natomiast reszta kolumn T1MlSTAMP/) jest
traktowana jako acuchy. Jest to rodzaj gwarancji, e uytkownik bdzie
mg wiarygodnie usuwa i przywraca tabele tego typu.
T1Ml
Godzina. Obsugiwany zakres obejmuje wartoci od `8o8b9b9`
do ` 8o8b9b9`. W MySQL wartoci T1Ml wywietlane s w formacie
` OOMMSS`, ale mona przypisa wartoci do kolumn T1Ml przy uyciu
zarwno acuchw, jak i liczb.
130 Rozdzia 4. Typy kolumn
YlAR|4)
Rok w formacie dwu- lub czterocyfrowym. Domylnym formatem jest rok
zapisany za pomoc czterech cyfr. W tym formacie dostpne wartoci nale
do przedziau od `90` do `bb oraz 0. W formacie dwucyfrowym wartoci
dopuszczalne to liczby z zakresu od /0 do 69, ktre reprezentuj daty od roku
1970 do 2069. W MySQL wartoci YlAR wywietlane s w formacie RRRR,
ale mona przypisa wartoci do kolumn YlAR przy uyciu tak acuchw,
jak i liczb. Typ YlAR jest niedostpny dla wersji wczeniejszych ni MySQL 3.22.
4.1.3. Przegld typw acuchowych
Poniej znajduje si przegld typw acuchowych. Dodatkowe informacje mona
znale w podrozdziale 4.4. Wymogi dotyczce pamici potrzebnej do przechowywa-
nia danych w kolumnach zostay podane w podrozdziale 4.5.
W niektrych przypadkach MySQL moe zmieni kolumn typu acuchowego na typ,
ktry bdzie si rni od zadeklarowanego w instrukcji CRlATl TAB|l lub A|TlR TAB|l.
Wicej informacji na ten temat znajduje si w podpunkcie 6.2.5.2.
Od wersji 4.1 w MySQL pojawia si zmiana, ktra wpywa na wiele typw kolumn typu
acuchowego. Definicja kolumn typu znakowego moe zawiera atrybut CHARACTlR
SlT, ktry okrela zestaw znakw i opcjonalnie porzdek sortowania. Dotyczy to typw
CHAR, VARCHAR, rnych typw TlXT oraz lNUM i SlT, na przykad:
CRF/TF T/B|F !
FNUMYCTVQ
YCTVQ|
1 lub 2 bajty w zalenoci od liczby wartoci wyliczenia
(maksymalnie 65 535)
SFTYCTVQ
YCTVQ|
1, 2, 3, 4 lub 8 bajtw w zalenoci od liczby elementw zestawu
(maksymalnie 64)
Typy VARCHAR, B|OB i TlXT maj zmienn dugo. Dla kadego ilo pamici potrzeb-
nej do przechowania wartoci bdzie zalee od faktycznej dugoci wartoci kolumny
(reprezentowanej w ostatniej tabeli przez .), a nie od maksymalnego moliwego roz-
miaru danego typu. Kolumna VARCHAR`0) na przykad moe przechowywa acuch
o maksymalnej dugoci 10 znakw. Faktyczna ilo wymaganej pamici to dugo
acucha (.) plus 1 bajt do zapisania dugoci acucha. Dla acucha `.|cc` parametr
. jest rwny 4, a wymagany rozmiar pamici to 5 bajtw.
Typy B|OB i TlXT wymagaj 1, 2, 3 lub 4 bajtw do zapisu dugoci wartoci kolumny
w zalenoci od maksymalnej moliwej dugoci tego typu (patrz punkt 4.4.2).
Rozmiar obiektu lNUM jest ustalany na podstawie liczby rnych wartoci wyliczenia.
Przy wyliczeniach do 255 moliwych wartoci uywany jest jeden bajt, a przy wyli-
czeniach do 65 535 wartoci uywane s 2 bajty (patrz punkt 4.4.3).
Rozmiar obiektu SlT jest okrelany przez liczb rnych elementw zestawu. Jeli ze-
staw ma rozmiar 0, obiekt zajmuje 0/).8 bajtw, ktr to warto zaokrgla si do
1, 2, 3, 4 lub 8 bajtw. Obiekt SlT moe mie do 64 elementw (patrz punkt 4.4.4).
4.6. Wybieranie odpowiedniego typu
dla kolumny
Aby jak najbardziej wydajnie korzysta z pamici, naley we wszystkich przypadkach
stara si stosowa typ, ktry bdzie jak najbardziej dokadny. Jeli na przykad w kolum-
nie liczb cakowitych bd przechowywane wartoci z zakresu od ` do 99999, najlep-
szym wyborem bdzie typ MlD1UM1NT UNS1ONlD. Ze wszystkich typw, ktre reprezentuj
wszystkie wymagane wartoci, zajmuje najmniej pamici.
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych 153
Powszechnym problemem jest dokadne przedstawianie wartoci walutowych. W MySQL
naley do tego uywa typu DlC1MA|, za pomoc ktrego wartoci zapisywane s w for-
mie acucha. Dziki temu nie traci si na dokadnoci (mimo to obliczenia z wartociami
DlC1MA| mog by wci wykonywane przy uyciu operacji dziaajcych na liczbach
z podwjn precyzj). Jeli dokadno nie jest zbyt wana, by moe wystarczajco
dobrym typem bdzie DOUB|l.
Aby uzyska wiksz dokadno, mona zawsze przeksztaci warto na typ stao-
przecinkowy, przechowywany w B1O1NT. Pozwoli to wykonywa wszystkie obliczenia
na liczbach cakowitych i tylko w razie potrzeby przeksztaca wynik z powrotem na
wartoci zmiennoprzecinkowe.
4.7. Wykorzystywanie typw kolumn
z innych mechanizmw baz danych
Aby uatwi uytkownikowi zastosowanie kodu pochodzcego od innych producentw,
moliwe jest odwzorowanie typw kolumn w sposb przedstawiony w poniszej tabeli.
Odwzorowania te upraszczaj operacj importu do MySQL definicji tabel z innych
mechanizmw baz danych:
Typ innych producentw Typ MySQL
BTN/RY/| C'/R/| BTN/RY
C'/R V/RYTN/| V/RC'/R/|
F|J/T4 F|J/T
F|J/T8 OJUB|F
TNT1 TTNYTNT
TNT SM/||TNT
TNT: MFOTUMTNT
TNT4 TNT
TNT8 BTTNT
|JN V/RBTN/RY MFOTUMB|JB
|JN V/RC'/R MFOTUMTFXT
|JN MFOTUMTFXT oc M,SJ| 410|
MTOO|FTNT MFOTUMTNT
V/RBTN/RY/| C'/R/| BTN/RY
Odwzorowanie typw kolumn jest wykonywane podczas tworzenia tabeli, po czym
oryginalne deklaracje typu zostaj usunite. Jeli uytkownik utworzy tabel z typami
stosowanymi przez innych producentw, po czym wyda polecenie DlSCR1Bl PC\YCA
VCDGNK, zostanie przedstawiona struktura tabeli z odpowiadajcymi im typami MySQL.
4 Spis treci
1.8.5. Rozbienoci midzy MySQL a standardem SQL ........................................ 60
1.8.6. Jak MySQL radzi sobie z ograniczeniami ................................................. 67
1.8.7. Znane bdy i projektowe braki w MySQL................................................ 69
Rozdzia 2. Struktura jzyka .............................................................................. 77
2.1. Literay................................................................................................................... 77
2.1.1. acuchy ................................................................................................... 77
2.1.2. Liczby........................................................................................................ 80
2.1.3. Wartoci szesnastkowe .............................................................................. 80
2.1.4. Wartoci logiczne ...................................................................................... 81
2.1.5. Wartoci NULL......................................................................................... 81
2.2. Nazwy baz danych, tabel, indeksw, kolumn i aliasw......................................... 81
2.2.1. Kwalifikatory identyfikatorw .................................................................. 83
2.2.2. Znaczenie wielkoci liter w nazwach identyfikatorw.............................. 83
2.3. Zmienne definiowane przez uytkownika.............................................................. 85
2.4. Zmienne systemowe............................................................................................... 87
2.4.1. Strukturalne zmienne systemowe .............................................................. 89
2.5. Skadnia komentarza .............................................................................................. 91
2.6. Traktowanie sw zastrzeonych w MySQL.......................................................... 92
Rozdzia 3. Obsuga zestaww znakw............................................................... 95
3.1. Oglne informacje o zestawach znakw i sortowaniu ........................................... 95
3.2. Zestawy znakw i porzdki sortowania w MySQL................................................ 96
3.3. Okrelanie domylnego zestawu znakw i sortowania........................................... 98
3.3.1. Zestaw znakw i sortowanie dla serwera................................................... 98
3.3.2. Zestaw znakw i sortowanie dla bazy danych........................................... 99
3.3.3. Zestaw znakw i sortowanie dla tabeli .................................................... 100
3.3.4. Zestaw znakw i sortowanie dla kolumny............................................... 100
3.3.5. Przykady przypisywania zestawu znakw i sortowania ......................... 101
3.3.6. Zestawy znakw i sortowanie dla poczenia .......................................... 102
3.3.7. Zestaw znakw i sortowanie dla acucha znakw.................................. 104
3.3.8. Wykorzystywanie COLLATE w instrukcjach SQL.................................... 105
3.3.9. Priorytet klauzuli COLLATE .................................................................. 106
3.3.10. Operator BINARY................................................................................... 106
3.3.11. Niektre przypadki specjalne, w ktrych trudno okreli sortowanie...... 106
3.3.12. Sortowania musz by odpowiednie dla danego zestawu znakw........... 107
3.3.13. Przykad wpywu porzdku sortowania ................................................... 108
3.4. Operacje, na ktre ma wpyw obsuga zestaww znakw.................................... 109
3.4.1. acuchy wyjciowe ............................................................................... 109
3.4.2. CONVERT()............................................................................................ 110
3.4.3. CAST() .................................................................................................... 110
3.4.4. Instrukcje SHOW .................................................................................... 111
3.5. Obsuga Unicode.................................................................................................. 112
3.6. UTF8 dla metadanych.......................................................................................... 113
3.7. Kompatybilno z innymi systemami zarzdzania baz danych .......................... 115
3.8. Nowy format pliku konfiguracji zestawu znakw................................................ 115
3.9. Narodowe zestawy znakw.................................................................................. 115
3.10. Aktualizacja zestaww znakw z MySQL 4.0..................................................... 116
3.10.1. Zestawy znakw w wersji 4.0 i odpowiadajce im w wersji 4.1 pary
skadajce si z zestawu znakw i sortowania......................................... 117
3.10.2. Przeksztacanie kolumn znakowych wersji 4.0 na format 4.1 ................. 118
3.11. Zestawy znakw i sortowania obsugiwane przez MySQL.................................. 118
3.11.1. Zestawy znakw standardu Unicode ....................................................... 119
3.11.2. Zestawy znakw zachodnioeuropejskich................................................. 120
3.11.3. Zestawy znakw dla Europy Centralnej .................................................. 121
Spis treci 5
3.11.4. Zestawy znakw poudniowoeuropejskich i rodkowowschodnich......... 122
3.11.5. Zestawy znakw regionu batyckiego...................................................... 123
3.11.6. Zestawy znakw dla cyrylicy................................................................... 123
3.11.7. Azjatyckie zestawy znakw..................................................................... 124
Rozdzia 4. Typy kolumn.................................................................................. 125
4.1. Przegld typw dla kolumny................................................................................ 126
4.1.1. Omwienie typw liczbowych ................................................................ 126
4.1.2. Przegld typw zwizanych z dat i czasem............................................ 129
4.1.3. Przegld typw acuchowych ................................................................ 130
4.2. Typy liczbowe...................................................................................................... 132
4.3. Typy zwizane z dat i czasem............................................................................ 135
4.3.1. Typy DATETIME, DATE i TIMESTAMP............................................. 137
4.3.2. Typ TIME................................................................................................ 142
4.3.3. Typ YEAR............................................................................................... 143
4.3.4. Problem roku 2000 a typy zwizane z dat.............................................. 144
4.4. Typy acuchowe ................................................................................................. 144
4.4.1. Typy CHAR i VARCHAR...................................................................... 144
4.4.2. Typy BLOB i TEXT................................................................................ 146
4.4.3. Typ Enum................................................................................................ 147
4.4.4. Typ SET .................................................................................................. 149
4.5. Rozmiar pamici potrzebnej dla typw kolumn................................................... 151
4.6. Wybieranie odpowiedniego typu dla kolumny..................................................... 152
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych ............... 153
Rozdzia 5. Funkcje i operatory........................................................................ 155
5.1. Operatory ............................................................................................................. 156
5.1.1. Nawiasy................................................................................................... 156
5.1.2. Operatory porwnania ............................................................................. 156
5.1.3. Operatory logiczne .................................................................................. 161
5.1.4. Operatory rozrniania wielkoci liter..................................................... 163
5.2. Funkcje kontroli przepywu ................................................................................. 163
5.3. Funkcje acuchowe............................................................................................. 166
5.3.1. Funkcje porwnywania acuchw.......................................................... 176
5.4. Funkcje liczbowe ................................................................................................. 178
5.4.1. Operatory arytmetyczne........................................................................... 178
5.4.2. Funkcje matematyczne ............................................................................ 180
5.5. Funkcje daty i godziny......................................................................................... 186
5.6. Funkcje obsugi wyszukiwania penotekstowego................................................. 202
5.6.1. Boolowskie wyszukiwania penotekstowe............................................... 205
5.6.2. Wyszukiwania penotekstowe z rozwijaniem zapytania .......................... 207
5.6.3. Ograniczenia dla wyszukiwania penotekstowego................................... 208
5.6.4. Modyfikowanie wyszukiwania penotekstowego MySQL ...................... 209
5.6.5. Lista rzeczy do zrobienia dla wyszukiwania penotekstowego................ 211
5.7. Funkcje konwersji typw..................................................................................... 211
5.8. Inne funkcje ......................................................................................................... 214
5.8.1. Funkcje bitowe ........................................................................................ 214
5.8.2. Funkcje szyfrujce................................................................................... 215
5.8.3. Funkcje informacyjne .............................................................................. 219
5.8.4. Funkcje rne .......................................................................................... 223
5.9. Funkcje i modyfikatory do zastosowania z klauzulami GROUP BY................... 226
5.9.1. Funkcje GROUP BY (agregujce)........................................................... 226
5.9.2. Modyfikatory GROUP BY...................................................................... 229
5.9.3. GROUP BY z ukrytymi polami............................................................... 232
6 Spis treci
Rozdzia 6. Skadnia instrukcji SQL .................................................................. 235
6.1. Instrukcje operujce na danych............................................................................ 235
6.1.1. Skadnia instrukcji DELETE................................................................... 235
6.1.2. Skadnia instrukcji DO ............................................................................ 238
6.1.3. Skadnia instrukcji HANDLER............................................................... 238
6.1.4. Skadnia instrukcji INSERT .................................................................... 240
6.1.5. Skadnia instrukcji LOAD DATA INFILE.............................................. 246
6.1.6. Skadnia instrukcji REPLACE................................................................. 255
6.1.7. Skadnia instrukcji SELECT.................................................................... 256
6.1.8. Skadnia podzapyta................................................................................ 265
6.1.9. Skadnia instrukcji TRUNCATE............................................................. 276
6.1.10. Skadnia instrukcji UPDATE................................................................... 276
6.2. Instrukcje definiowania danych ........................................................................... 278
6.2.1. Skadnia instrukcji ALTER DATABASE ............................................... 278
6.2.2. Skadnia instrukcji ALTER TABLE........................................................ 279
6.2.3. Skadnia instrukcji CREATE DATABASE............................................. 285
6.2.4. Skadnia instrukcji CREATE INDEX ..................................................... 285
6.2.5. Skadnia instrukcji CREATE TABLE..................................................... 287
6.2.6. Skadnia instrukcji DROP DATABASE.................................................. 301
6.2.7. Skadnia instrukcji DROP INDEX.......................................................... 302
6.2.8. Skadnia instrukcji DROP TABLE.......................................................... 302
6.2.9. Skadnia instrukcji RENAME TABLE.................................................... 303
6.3. Instrukcje programu MySQL............................................................................... 304
6.3.1. Skadnia instrukcji DESCRIBE
(odczytywanie informacji na temat kolumn) ........................................... 304
6.3.2. Skadnia instrukcji USE........................................................................... 304
6.4. Instrukcje obsugi transakcji i blokowania........................................................... 305
6.4.1. Skadnia instrukcji START TRANSACTION, COMMIT
oraz ROLLBACK.................................................................................... 305
6.4.2. Instrukcje niemoliwe do wycofania ....................................................... 306
6.4.3. Instrukcje wykonujce niejawne zatwierdzenie......................................... 306
6.4.4. Skadnia instrukcji SAVEPOINT i ROLLBACK TO SAVEPOINT....... 307
6.4.5. Skadnia instrukcji LOCK TABLES oraz UNLOCK TABLES .............. 307
6.4.6. Skadnia instrukcji SET TRANSACTION.............................................. 310
6.5. Administracja baz danych .................................................................................. 311
6.5.1. Instrukcje zarzdzajce kontami uytkownikw ....................................... 311
6.5.2. Instrukcje do konserwacji tabel ............................................................... 319
6.5.3. Skadnia instrukcji SET i SHOW ............................................................ 326
6.5.4. Inne instrukcje administracyjne ............................................................... 347
6.6. Instrukcje replikacji.............................................................................................. 352
6.6.1. Instrukcje SQL sterujce serwerem gwnym ......................................... 352
6.6.2. Instrukcje SQL sterujce serwerami podrzdnymi .................................. 354
Rozdzia 7. Rozszerzenia przestrzenne w MySQL............................................... 365
7.1. Wstp ................................................................................................................... 365
7.2. Model geometryczny OpenGIS............................................................................ 366
7.2.1. Hierarchia klas geometrycznych.............................................................. 366
7.2.2. Klasa Geometry ....................................................................................... 368
7.2.3. Klasa Point .............................................................................................. 369
7.2.4. Klasa Curve ............................................................................................. 369
7.2.5. Klasa LineString...................................................................................... 370
7.2.6. Klasa Surface........................................................................................... 370
7.2.7. Klasa Polygon.......................................................................................... 370
7.2.8. Klasa GeometryCollection....................................................................... 371
Spis treci 7
7.2.9. Klasa MultiPoint...................................................................................... 371
7.2.10. Klasa MultiCurve .................................................................................... 372
7.2.11. Klasa MultiLineString............................................................................. 372
7.2.12. Klasa MultiSurface .................................................................................. 372
7.2.13. Klasa MultiPolygon................................................................................. 373
7.3. Obsugiwane formaty danych przestrzennych...................................................... 373
7.3.1. Format tekstowy WKT............................................................................ 374
7.3.2. Format binarny WKB.............................................................................. 374
7.4. Tworzenie bazy danych z rozszerzeniami przestrzennymi................................... 375
7.4.1. Typy danych przestrzennych w MySQL ................................................. 375
7.4.2. Tworzenie wartoci przestrzennych......................................................... 376
7.4.3. Tworzenie kolumn przestrzennych.......................................................... 379
7.4.4. Wypenianie kolumn przestrzennych....................................................... 379
7.4.5. Pobieranie danych przestrzennych........................................................... 381
7.5. Analiza informacji przestrzennych....................................................................... 381
7.5.1. Funkcje konwersji formatw geometrycznych ........................................ 382
7.5.2. Funkcje klasy Geometry.......................................................................... 382
7.5.3. Funkcje tworzce nowe geometrie na podstawie istniejcych................. 388
7.5.4. Funkcje testujce relacje przestrzenne
midzy obiektami geometrycznymi ......................................................... 389
7.5.5. Relacje midzy minimalnymi prostoktami otaczajcymi
dla poszczeglnych geometrii.................................................................. 390
7.5.6. Funkcje sprawdzajce relacje przestrzenne pomidzy geometriami ........ 391
7.6. Optymalizacja analizy przestrzennej.................................................................... 392
7.6.1. Tworzenie indeksw przestrzennych....................................................... 392
7.6.2. Wykorzystanie indeksu przestrzennego................................................... 393
7.7. Zgodno MySQL ze standardem........................................................................ 395
7.7.1. Niezaimplementowane funkcje GIS ........................................................ 395
Rozdzia 8. Procedury i funkcje skadowane ..................................................... 397
8.1. Skadnia procedur skadowanych......................................................................... 398
8.1.1. Utrzymanie procedur skadowanych........................................................ 398
8.1.2. SHOW PROCEDURE STATUS oraz SHOW FUNCTION STATUS.... 401
8.1.3. Instrukcja CALL...................................................................................... 402
8.1.4. Instrukcja zoona BEGIN ... END.......................................................... 402
8.1.5. Instrukcja DECLARE.............................................................................. 402
8.1.6. Zmienne w procedurach skadowanych................................................... 402
8.1.7. Warunki i podprogramy obsugi .............................................................. 403
8.1.8. Kursory.................................................................................................... 405
8.1.9. Konstrukcje sterowania przepywem sterowania..................................... 406
Rozdzia 9. Obsuga bdw w MySQL .............................................................. 409
9.1. Zwracane bdy.................................................................................................... 409
9.2. Komunikaty bdw............................................................................................. 419
Dodatek A Rozwizywanie problemw z zapytaniami ........................................435
A.1. Zagadnienia zwizane z zapytaniami ................................................................... 435
A.1.1. Wielko liter przy wyszukiwaniu........................................................... 435
A.1.2. Problemy z kolumnami typu DATE ........................................................ 436
A.1.3. Problemy z wartociami NULL............................................................... 437
A.1.4. Problemy z synonimami kolumn ............................................................. 438
A.1.5. Bd wycofania dla tabel nietransakcyjnych............................................ 439
A.1.6. Usuwanie wierszy ze zwizanych tabel ................................................... 439
A.1.7. Rozwizywanie problemw z brakujcymi wierszami ............................ 440
A.1.8. Problemy z porwnaniami zmiennoprzecinkowymi................................ 441
8 Spis treci
A.2. Problemy zwizane z optymalizatorem................................................................ 443
A.3. Problemy z definicj tabel.................................................................................... 444
A.3.1. Problemy z instrukcj ALTER TABLE................................................... 444
A.3.2. Jak zmieni porzdek kolumn w tabeli .................................................... 445
A.3.3. Problemy z tabelami tymczasowymi ....................................................... 445
Dodatek B Wyraenia regularne w MySQL........................................................ 447
Skorowidz...................................................................................... 451
Rozdzia 4.
Typy kolumn
W MySQL dostpnych jest wiele typw danych, ktre mona pogrupowa w kilku pod-
stawowych kategoriach, takich jak typy liczbowe, typy zwizane z dat i czasem oraz
typy acuchowe. Na pocztku tego rozdziau przedstawiony zostanie przegld wspo-
mnianych przed chwil typw kolumn, po czym nastpi bardziej szczegowy opis ich
waciwoci z podziaem na poszczeglne kategorie i wreszcie zamieszczone zostanie
podsumowanie informacji dotyczcych wymaga co do rozmiaru pamici potrzebnej
do przechowania danej kolumny. Sam przegld jest z zamierzenia krtki. Dodatkowe
informacje o poszczeglnych typach kolumn, na przykad dopuszczalny format, w kt-
rym mona deklarowa wartoci, zostay uwzgldnione w szczegowych omwieniach.
Od wersji 4.1 MySQL rozpoznaje rozszerzenia do obsugi danych przestrzennych.
Informacje o typach przestrzennych znajduj si w rozdziale 7. tego podrcznika.
W czci opisu typw kolumn zastosowane zostay nastpujce reguy:
/
Wskazuje maksymalny rozmiar wywietlania liczby lub acucha.
Maksymalnym dopuszczalnym rozmiarem wywietlania jest 255.
&
Dotyczy typw zmiennoprzecinkowych i staoprzecinkowych. Okrela liczb
cyfr po kropce dziesitnej. Maksymalna dopuszczalna warto wynosi 30,
ale nie powinna przekracza /.
Nawiasy kwadratowe ( ) identyfikuj opcjonalne fragmenty deklaracji typu.
126 Rozdzia 4. Typy kolumn
4.1. Przegld typw dla kolumny
4.1.1. Omwienie typw liczbowych
Poniej znajduje si przegld liczbowych typw dla kolumn. Bardziej szczegowe
informacje mona znale w podrozdziale 4.2. Wymogi dotyczce rozmiaru pamici
potrzebnej do przechowywania kolumn znajduj si w podrozdziale 4.5.
Jeli dla kolumny liczbowej zostanie okrelony atrybut /lRO|1||, MySQL automatycznie
doda do kolumny atrybut UN1S1ONlD.
Naley uwaa podczas odejmowania dwch wartoci liczbowych, z ktrych jedna ma
typ UN1S1ONlD. Uzyskany wynik bdzie rwnie tego typu! patrz podrozdzia 5.7.
T1NY1NT/) UNS1ONlD /lRO|1||
Bardzo maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od `8
do `/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do bb.
B1T, BOO|, BOO|lAN
To s synonimy T1NY1NT`). Synonim BOO|lAN zosta dodany w MySQL 4.1.0.
Warto zerowa to inaczej fasz. Wartoci niezerowe traktowane s jako prawda.
W przyszoci wprowadzona zostanie pena, zgodna ze standardem SQL
obsuga typu boolowskiego.
SMA||1NT/) UNS1ONlD /lRO|1||
Maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od o/68
do o/6/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do 6bbob.
MlD1UM1NT/) UNS1ONlD /lRO|1||
rednia liczba cakowita. Dla liczb ze znakiem zakres wynosi od 8o88608
do 8o8860/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0
do `6///`b.
1NT/) UNS1ONlD /lRO|1||
Standardowa liczba cakowita. Dla liczb ze znakiem zakres wynosi
od `4/48o648 do `4/48o64/. W przypadku liczb bez znaku zakres
obejmuje wartoci od 0 do 49496/9b.
1NTlOlR/) UNS1ONlD /lRO|1||
Jest to synonim dla typu 1NT.
B1O1NT/) UNS1ONlD /lRO|1||
Dua liczba cakowita. Dla liczb ze znakiem zakres wynosi
od 9oo/0o68b4//b808 do 9oo/0o68b4//b80/. W przypadku liczb
bez znaku zakres obejmuje wartoci od 0 do `8446/440/o/09bb`6`b.
4.1. Przegld typw dla kolumny 127
Oto kilka spraw, o ktrych naley wiedzie odnonie kolumn typu B1O1NT:
Wszystkie obliczenia wykonywane s przy uyciu wartoci typu B1O1NT
lub DOUB|l ze znakiem. Oznacza to, e duych liczb cakowitych bez
znaku, wikszych ni 9oo/0o68b4//b80/ (63 bity), mona uywa tylko
z funkcjami bitowymi! Niezastosowanie si do tej zasady moe doprowadzi
do uzyskania w wyniku liczby, ktrej kilka ostatnich cyfr jest bdnych
z powodu bdw w zaokrglaniu podczas konwersji wartoci B1O1NT
na DOUB|l.
MySQL 4.0 potrafi obsugiwa B1O1NT w nastpujcych przypadkach:
Podczas wykorzystywania liczb cakowitych do przechowywania
duych wartoci bez znaku w kolumnie typu B1O1NT.
W M1NPC\YCAMQN) lub MAXPC\YCAMQN), gdzie PC\YCAMQN odnosi si
do kolumny B1O1NT.
Podczas korzystania z operatorw (midzy innymi , , *), gdy oba
argumenty s liczbami cakowitymi.
Zawsze istnieje moliwo zapisania w kolumnie B1O1NT dokadnej wartoci
liczby cakowitej. Wystarczy zapisa j przy uyciu acucha. W takim
przypadku zostanie dokonana konwersja acucha na liczb; konwersja
nie bdzie wymaga poredniego etapu przeksztacajcego liczb na jej
odpowiednik o podwjnej precyzji.
Podczas korzystania z operatorw , i * stosowana jest arytmetyka
B1O1NT, jeli oba argumenty maj warto liczby cakowitej! To oznacza,
e pomnoenie dwch duych liczb cakowitych (lub wynikw funkcji,
ktra zwraca liczby cakowite) moe spowodowa nieoczekiwane
rezultaty, jeli wynik przekroczy liczb 9oo/0o68b4//b80/.
||OATR) UNS1ONlD /lRO|1||
Liczba zmiennoprzecinkowa. Parametr R oznacza precyzj i moe przyjmowa
warto od 0 do 14 dla liczb zmiennoprzecinkowych o dokadnoci do jednego
znaku i od 25 do 53 dla liczb zmiennoprzecinkowych o dokadnoci do dwch
znakw. To przypomina opisane poniej typy ||OAT i DOUB|l. Typ ||OATR)
ma ten sam zakres, jaki posiadaj odpowiadajce mu typy ||OAT i DOUB|l,
ale w jego przypadku niezdefiniowany jest maksymalny rozmiar wywietlania
i liczba miejsc po przecinku.
Od wersji 3.23 MySQL jest to prawdziwa warto zmiennoprzecinkowa.
W wersjach wczeniejszych liczba typu ||OATR) bya zawsze liczb o dwch
miejscach po przecinku.
Ta skadnia zostaa dodana w celu zachowania zgodnoci ze standardem ODBC.
Stosowanie typu ||OAT moe spowodowa wystpienie pewnych
nieoczekiwanych problemw, poniewa wszystkie obliczenia w MySQL
s wykonywane z podwjn precyzj patrz punkt A.1.7).
||OAT/, &) UNS1ONlD /lRO|1||
128 Rozdzia 4. Typy kolumn
Maa liczba zmiennoprzecinkowa (o dokadnoci do jednego znaku). Liczba
ta moe przyj wartoci: od o408o466lo8 do ``/b494ob`lo8, 0,
i od ``/b494ob`lo8 do o408o466lo8. Jeli podany jest atrybut UN1S1ONlD,
niedozwolone s wartoci ujemne. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ ||OAT bez argumentw
lub typ ||OATR) (gdzie Rjest liczb z zakresu od 0 do 24) oznacza liczb
zmiennoprzecinkow o pojedynczej precyzji.
DOUB|l/, &) UNS1ONlD /lRO|1||
Standardowa liczba zmiennoprzecinkowa (o dokadnoci do dwch
znakw). Liczba ta moe przyj wartoci: od `/9/69o`o486o`b/lo08
do b0/o8b8b0/0`4lo08, 0, i od b0/o8b8b0/0`4lo08
do `/9/69o`o486o`b/lo08. Jeli podany jest atrybut UN1S1ONlD, wartoci
ujemne s niedozwolone. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ DOUB|l
bez argumentw lub ||OATR) (gdzie R jest liczb z zakresu od 25 do 53)
oznacza liczb zmiennoprzecinkow o podwjnej precyzji.
DOUB|l PRlC1S1ON/, &) UNS1ONlD /lRO|1||
RlA|/, &) UNS1ONlD /lRO|1||
S to synonimy DOUB|l. Wyjtek: Jeli dla parametru s;_cce serwera
wczono opcj RlA|_AS_||OAT, synonimem ||OAT jest RlA|, a nie DOUB|l.
DlC1MA|/, &) UNS1ONlD /lRO|1||
Niezapakowana liczba staoprzecinkowa. Zachowanie kolumny tego typu
przypomina kolumn typu CHAR. Niezapakowana oznacza, e liczba jest
przechowywana w postaci acucha przy uyciu jednego znaku na kad cyfr
wartoci. Parametr / definiuje maksymaln liczb cyfr, a & liczb miejsc
po przecinku. W parametrze / nie s brane pod uwag: kropka dziesitna
(odpowiadajca w naszej notacji przecinkowi) i (dla liczb ujemnych) znak ,
cho jest dla nich zarezerwowane miejsce. Wartoci nie maj miejsc
po przecinku lub czci uamkowych, jeli & jest rwne 0. Maksymalny zakres
wartoci typu DlC1MA| jest taki sam, jak dla typu DOUB|l, ale rzeczywisty zakres
danej kolumny DlC1MA| moe by ograniczony przez wybr argumentw / i &.
Jeli podany jest atrybut UN1S1ONlD, wartoci ujemne s niedozwolone.
W przypadku braku argumentu &, domyln wartoci jest 0. Jeli pominity
jest parametr /, domyln wartoci jest 10.
W wersjach poprzedzajcych MySQL 3.23 argument / musi by wystarczajco
duy, by zawiera obszar potrzebny dla znaku i kropki dziesitnej.
DlC/,&) UNS1ONlD /lRO|1||
NUMlR1C/,&) UNS1ONlD /lRO|1||
|1XlD/, &) UNS1ONlD /lRO|1||
S to synonimy typu DlC1MA|.
W MySQL 4.1.0 dodano synonim |1XlD w celu osignicia kompatybilnoci
z innymi serwerami.
4.1. Przegld typw dla kolumny 129
4.1.2. Przegld typw zwizanych z dat i czasem
Poniej znajduje si podsumowanie typw kolumn przeznaczonych dla czasu i daty.
Dodatkowe informacje na ten temat mona znale w podrozdziale 4.3. Wymogi do-
tyczce pamici potrzebnej do przechowywania danych w kolumnach zostay podane
w podrozdziale 4.5.
DATl
Data. Obsugiwany zakres obejmuje daty od ``0000`0`` do `9999`o``.
W MySQL wartoci DATl wywietlane s w formacie `RRRRMMDD`, ale mona
przypisywa wartoci do kolumn DATl przy uyciu acuchw lub liczb.
DATlT1Ml
Kombinacja daty i czasu. Obsugiwany zakres obejmuje wartoci
od ``0000`0` 000000` do `9999`o` ob9b9`. W MySQL wartoci
DATlT1Ml wywietlane s w formacie `RRRRMMDD OOMMSS`, ale mona
przypisywa wartoci do kolumn DATlT1Ml przy uyciu acuchw lub liczb.
T1MlSTAMP/)
Znacznik czasu. Obsugiwany zakres rozpoczyna si od daty ``9/00`0``
i siga roku 0o/.
Kolumna typu T1MlSTAMP przydaje si do rejestracji daty i godziny operacji
wstawiania lub aktualizacji. Pierwszej kolumnie T1MlSTAMP w tabeli
automatycznie przypisywana jest data i czas ostatniej operacji, jeli tylko tych
wartoci nie wprowadzi rcznie uytkownik. Dowolnej kolumnie T1MlSTAMP
mona rwnie przypisa biec dat i godzin, wpisujc do niej warto NU||.
Od MySQL 4.1 wartoci T1MlSTAMP s zwracane w postaci acuchw
w formacie `RRRRMMDD OOMMSS`. Aby uzyska warto w postaci liczby,
naley doda do kolumn tego typu 0. Inne szerokoci wywietlania
znacznika czasu nie s obsugiwane.
W wersjach poprzedzajcych MySQL 4.1 wartoci T1MlSTAMP s wywietlane
w formacie RRRRMMDDOOMMSS, RRMMDDOOMMSS, RRRRMMDD lub RRMMDD w zalenoci
od tego, czy parametr / jest rwny 14 (albo go brak), 12, 8 lub 6. Mona jednak
przypisywa wartoci do kolumn T1MlSTAMP przy uyciu acuchw lub liczb.
Argument / wpywa tylko na sposb wywietlania kolumny T1MlSTAMP, a nie
na jej przechowywanie. Wartoci kolumny s zawsze zapisywane w czterech
bajtach. W MySQL od wersji 4.0.12 pojawia si opcja ne., dziki ktrej
mona zmieni dziaanie serwera, upodabniajc je do MySQL 4.1.
Naley odnotowa, e kolumny T1MlSTAMP/), gdzie /jest rwne 8 lub 14,
s traktowane jako liczby, natomiast reszta kolumn T1MlSTAMP/) jest
traktowana jako acuchy. Jest to rodzaj gwarancji, e uytkownik bdzie
mg wiarygodnie usuwa i przywraca tabele tego typu.
T1Ml
Godzina. Obsugiwany zakres obejmuje wartoci od `8o8b9b9`
do ` 8o8b9b9`. W MySQL wartoci T1Ml wywietlane s w formacie
` OOMMSS`, ale mona przypisa wartoci do kolumn T1Ml przy uyciu
zarwno acuchw, jak i liczb.
130 Rozdzia 4. Typy kolumn
YlAR|4)
Rok w formacie dwu- lub czterocyfrowym. Domylnym formatem jest rok
zapisany za pomoc czterech cyfr. W tym formacie dostpne wartoci nale
do przedziau od `90` do `bb oraz 0. W formacie dwucyfrowym wartoci
dopuszczalne to liczby z zakresu od /0 do 69, ktre reprezentuj daty od roku
1970 do 2069. W MySQL wartoci YlAR wywietlane s w formacie RRRR,
ale mona przypisa wartoci do kolumn YlAR przy uyciu tak acuchw,
jak i liczb. Typ YlAR jest niedostpny dla wersji wczeniejszych ni MySQL 3.22.
4.1.3. Przegld typw acuchowych
Poniej znajduje si przegld typw acuchowych. Dodatkowe informacje mona
znale w podrozdziale 4.4. Wymogi dotyczce pamici potrzebnej do przechowywa-
nia danych w kolumnach zostay podane w podrozdziale 4.5.
W niektrych przypadkach MySQL moe zmieni kolumn typu acuchowego na typ,
ktry bdzie si rni od zadeklarowanego w instrukcji CRlATl TAB|l lub A|TlR TAB|l.
Wicej informacji na ten temat znajduje si w podpunkcie 6.2.5.2.
Od wersji 4.1 w MySQL pojawia si zmiana, ktra wpywa na wiele typw kolumn typu
acuchowego. Definicja kolumn typu znakowego moe zawiera atrybut CHARACTlR
SlT, ktry okrela zestaw znakw i opcjonalnie porzdek sortowania. Dotyczy to typw
CHAR, VARCHAR, rnych typw TlXT oraz lNUM i SlT, na przykad:
CRF/TF T/B|F !
FNUMYCTVQ
YCTVQ|
1 lub 2 bajty w zalenoci od liczby wartoci wyliczenia
(maksymalnie 65 535)
SFTYCTVQ
YCTVQ|
1, 2, 3, 4 lub 8 bajtw w zalenoci od liczby elementw zestawu
(maksymalnie 64)
Typy VARCHAR, B|OB i TlXT maj zmienn dugo. Dla kadego ilo pamici potrzeb-
nej do przechowania wartoci bdzie zalee od faktycznej dugoci wartoci kolumny
(reprezentowanej w ostatniej tabeli przez .), a nie od maksymalnego moliwego roz-
miaru danego typu. Kolumna VARCHAR`0) na przykad moe przechowywa acuch
o maksymalnej dugoci 10 znakw. Faktyczna ilo wymaganej pamici to dugo
acucha (.) plus 1 bajt do zapisania dugoci acucha. Dla acucha `.|cc` parametr
. jest rwny 4, a wymagany rozmiar pamici to 5 bajtw.
Typy B|OB i TlXT wymagaj 1, 2, 3 lub 4 bajtw do zapisu dugoci wartoci kolumny
w zalenoci od maksymalnej moliwej dugoci tego typu (patrz punkt 4.4.2).
Rozmiar obiektu lNUM jest ustalany na podstawie liczby rnych wartoci wyliczenia.
Przy wyliczeniach do 255 moliwych wartoci uywany jest jeden bajt, a przy wyli-
czeniach do 65 535 wartoci uywane s 2 bajty (patrz punkt 4.4.3).
Rozmiar obiektu SlT jest okrelany przez liczb rnych elementw zestawu. Jeli ze-
staw ma rozmiar 0, obiekt zajmuje 0/).8 bajtw, ktr to warto zaokrgla si do
1, 2, 3, 4 lub 8 bajtw. Obiekt SlT moe mie do 64 elementw (patrz punkt 4.4.4).
4.6. Wybieranie odpowiedniego typu
dla kolumny
Aby jak najbardziej wydajnie korzysta z pamici, naley we wszystkich przypadkach
stara si stosowa typ, ktry bdzie jak najbardziej dokadny. Jeli na przykad w kolum-
nie liczb cakowitych bd przechowywane wartoci z zakresu od ` do 99999, najlep-
szym wyborem bdzie typ MlD1UM1NT UNS1ONlD. Ze wszystkich typw, ktre reprezentuj
wszystkie wymagane wartoci, zajmuje najmniej pamici.
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych 153
Powszechnym problemem jest dokadne przedstawianie wartoci walutowych. W MySQL
naley do tego uywa typu DlC1MA|, za pomoc ktrego wartoci zapisywane s w for-
mie acucha. Dziki temu nie traci si na dokadnoci (mimo to obliczenia z wartociami
DlC1MA| mog by wci wykonywane przy uyciu operacji dziaajcych na liczbach
z podwjn precyzj). Jeli dokadno nie jest zbyt wana, by moe wystarczajco
dobrym typem bdzie DOUB|l.
Aby uzyska wiksz dokadno, mona zawsze przeksztaci warto na typ stao-
przecinkowy, przechowywany w B1O1NT. Pozwoli to wykonywa wszystkie obliczenia
na liczbach cakowitych i tylko w razie potrzeby przeksztaca wynik z powrotem na
wartoci zmiennoprzecinkowe.
4.7. Wykorzystywanie typw kolumn
z innych mechanizmw baz danych
Aby uatwi uytkownikowi zastosowanie kodu pochodzcego od innych producentw,
moliwe jest odwzorowanie typw kolumn w sposb przedstawiony w poniszej tabeli.
Odwzorowania te upraszczaj operacj importu do MySQL definicji tabel z innych
mechanizmw baz danych:
Typ innych producentw Typ MySQL
BTN/RY/| C'/R/| BTN/RY
C'/R V/RYTN/| V/RC'/R/|
F|J/T4 F|J/T
F|J/T8 OJUB|F
TNT1 TTNYTNT
TNT SM/||TNT
TNT: MFOTUMTNT
TNT4 TNT
TNT8 BTTNT
|JN V/RBTN/RY MFOTUMB|JB
|JN V/RC'/R MFOTUMTFXT
|JN MFOTUMTFXT oc M,SJ| 410|
MTOO|FTNT MFOTUMTNT
V/RBTN/RY/| C'/R/| BTN/RY
Odwzorowanie typw kolumn jest wykonywane podczas tworzenia tabeli, po czym
oryginalne deklaracje typu zostaj usunite. Jeli uytkownik utworzy tabel z typami
stosowanymi przez innych producentw, po czym wyda polecenie DlSCR1Bl PC\YCA
VCDGNK, zostanie przedstawiona struktura tabeli z odpowiadajcymi im typami MySQL.
4 Spis treci
1.8.5. Rozbienoci midzy MySQL a standardem SQL ........................................ 60
1.8.6. Jak MySQL radzi sobie z ograniczeniami ................................................. 67
1.8.7. Znane bdy i projektowe braki w MySQL................................................ 69
Rozdzia 2. Struktura jzyka .............................................................................. 77
2.1. Literay................................................................................................................... 77
2.1.1. acuchy ................................................................................................... 77
2.1.2. Liczby........................................................................................................ 80
2.1.3. Wartoci szesnastkowe .............................................................................. 80
2.1.4. Wartoci logiczne ...................................................................................... 81
2.1.5. Wartoci NULL......................................................................................... 81
2.2. Nazwy baz danych, tabel, indeksw, kolumn i aliasw......................................... 81
2.2.1. Kwalifikatory identyfikatorw .................................................................. 83
2.2.2. Znaczenie wielkoci liter w nazwach identyfikatorw.............................. 83
2.3. Zmienne definiowane przez uytkownika.............................................................. 85
2.4. Zmienne systemowe............................................................................................... 87
2.4.1. Strukturalne zmienne systemowe .............................................................. 89
2.5. Skadnia komentarza .............................................................................................. 91
2.6. Traktowanie sw zastrzeonych w MySQL.......................................................... 92
Rozdzia 3. Obsuga zestaww znakw............................................................... 95
3.1. Oglne informacje o zestawach znakw i sortowaniu ........................................... 95
3.2. Zestawy znakw i porzdki sortowania w MySQL................................................ 96
3.3. Okrelanie domylnego zestawu znakw i sortowania........................................... 98
3.3.1. Zestaw znakw i sortowanie dla serwera................................................... 98
3.3.2. Zestaw znakw i sortowanie dla bazy danych........................................... 99
3.3.3. Zestaw znakw i sortowanie dla tabeli .................................................... 100
3.3.4. Zestaw znakw i sortowanie dla kolumny............................................... 100
3.3.5. Przykady przypisywania zestawu znakw i sortowania ......................... 101
3.3.6. Zestawy znakw i sortowanie dla poczenia .......................................... 102
3.3.7. Zestaw znakw i sortowanie dla acucha znakw.................................. 104
3.3.8. Wykorzystywanie COLLATE w instrukcjach SQL.................................... 105
3.3.9. Priorytet klauzuli COLLATE .................................................................. 106
3.3.10. Operator BINARY................................................................................... 106
3.3.11. Niektre przypadki specjalne, w ktrych trudno okreli sortowanie...... 106
3.3.12. Sortowania musz by odpowiednie dla danego zestawu znakw........... 107
3.3.13. Przykad wpywu porzdku sortowania ................................................... 108
3.4. Operacje, na ktre ma wpyw obsuga zestaww znakw.................................... 109
3.4.1. acuchy wyjciowe ............................................................................... 109
3.4.2. CONVERT()............................................................................................ 110
3.4.3. CAST() .................................................................................................... 110
3.4.4. Instrukcje SHOW .................................................................................... 111
3.5. Obsuga Unicode.................................................................................................. 112
3.6. UTF8 dla metadanych.......................................................................................... 113
3.7. Kompatybilno z innymi systemami zarzdzania baz danych .......................... 115
3.8. Nowy format pliku konfiguracji zestawu znakw................................................ 115
3.9. Narodowe zestawy znakw.................................................................................. 115
3.10. Aktualizacja zestaww znakw z MySQL 4.0..................................................... 116
3.10.1. Zestawy znakw w wersji 4.0 i odpowiadajce im w wersji 4.1 pary
skadajce si z zestawu znakw i sortowania......................................... 117
3.10.2. Przeksztacanie kolumn znakowych wersji 4.0 na format 4.1 ................. 118
3.11. Zestawy znakw i sortowania obsugiwane przez MySQL.................................. 118
3.11.1. Zestawy znakw standardu Unicode ....................................................... 119
3.11.2. Zestawy znakw zachodnioeuropejskich................................................. 120
3.11.3. Zestawy znakw dla Europy Centralnej .................................................. 121
Spis treci 5
3.11.4. Zestawy znakw poudniowoeuropejskich i rodkowowschodnich......... 122
3.11.5. Zestawy znakw regionu batyckiego...................................................... 123
3.11.6. Zestawy znakw dla cyrylicy................................................................... 123
3.11.7. Azjatyckie zestawy znakw..................................................................... 124
Rozdzia 4. Typy kolumn.................................................................................. 125
4.1. Przegld typw dla kolumny................................................................................ 126
4.1.1. Omwienie typw liczbowych ................................................................ 126
4.1.2. Przegld typw zwizanych z dat i czasem............................................ 129
4.1.3. Przegld typw acuchowych ................................................................ 130
4.2. Typy liczbowe...................................................................................................... 132
4.3. Typy zwizane z dat i czasem............................................................................ 135
4.3.1. Typy DATETIME, DATE i TIMESTAMP............................................. 137
4.3.2. Typ TIME................................................................................................ 142
4.3.3. Typ YEAR............................................................................................... 143
4.3.4. Problem roku 2000 a typy zwizane z dat.............................................. 144
4.4. Typy acuchowe ................................................................................................. 144
4.4.1. Typy CHAR i VARCHAR...................................................................... 144
4.4.2. Typy BLOB i TEXT................................................................................ 146
4.4.3. Typ Enum................................................................................................ 147
4.4.4. Typ SET .................................................................................................. 149
4.5. Rozmiar pamici potrzebnej dla typw kolumn................................................... 151
4.6. Wybieranie odpowiedniego typu dla kolumny..................................................... 152
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych ............... 153
Rozdzia 5. Funkcje i operatory........................................................................ 155
5.1. Operatory ............................................................................................................. 156
5.1.1. Nawiasy................................................................................................... 156
5.1.2. Operatory porwnania ............................................................................. 156
5.1.3. Operatory logiczne .................................................................................. 161
5.1.4. Operatory rozrniania wielkoci liter..................................................... 163
5.2. Funkcje kontroli przepywu ................................................................................. 163
5.3. Funkcje acuchowe............................................................................................. 166
5.3.1. Funkcje porwnywania acuchw.......................................................... 176
5.4. Funkcje liczbowe ................................................................................................. 178
5.4.1. Operatory arytmetyczne........................................................................... 178
5.4.2. Funkcje matematyczne ............................................................................ 180
5.5. Funkcje daty i godziny......................................................................................... 186
5.6. Funkcje obsugi wyszukiwania penotekstowego................................................. 202
5.6.1. Boolowskie wyszukiwania penotekstowe............................................... 205
5.6.2. Wyszukiwania penotekstowe z rozwijaniem zapytania .......................... 207
5.6.3. Ograniczenia dla wyszukiwania penotekstowego................................... 208
5.6.4. Modyfikowanie wyszukiwania penotekstowego MySQL ...................... 209
5.6.5. Lista rzeczy do zrobienia dla wyszukiwania penotekstowego................ 211
5.7. Funkcje konwersji typw..................................................................................... 211
5.8. Inne funkcje ......................................................................................................... 214
5.8.1. Funkcje bitowe ........................................................................................ 214
5.8.2. Funkcje szyfrujce................................................................................... 215
5.8.3. Funkcje informacyjne .............................................................................. 219
5.8.4. Funkcje rne .......................................................................................... 223
5.9. Funkcje i modyfikatory do zastosowania z klauzulami GROUP BY................... 226
5.9.1. Funkcje GROUP BY (agregujce)........................................................... 226
5.9.2. Modyfikatory GROUP BY...................................................................... 229
5.9.3. GROUP BY z ukrytymi polami............................................................... 232
6 Spis treci
Rozdzia 6. Skadnia instrukcji SQL .................................................................. 235
6.1. Instrukcje operujce na danych............................................................................ 235
6.1.1. Skadnia instrukcji DELETE................................................................... 235
6.1.2. Skadnia instrukcji DO ............................................................................ 238
6.1.3. Skadnia instrukcji HANDLER............................................................... 238
6.1.4. Skadnia instrukcji INSERT .................................................................... 240
6.1.5. Skadnia instrukcji LOAD DATA INFILE.............................................. 246
6.1.6. Skadnia instrukcji REPLACE................................................................. 255
6.1.7. Skadnia instrukcji SELECT.................................................................... 256
6.1.8. Skadnia podzapyta................................................................................ 265
6.1.9. Skadnia instrukcji TRUNCATE............................................................. 276
6.1.10. Skadnia instrukcji UPDATE................................................................... 276
6.2. Instrukcje definiowania danych ........................................................................... 278
6.2.1. Skadnia instrukcji ALTER DATABASE ............................................... 278
6.2.2. Skadnia instrukcji ALTER TABLE........................................................ 279
6.2.3. Skadnia instrukcji CREATE DATABASE............................................. 285
6.2.4. Skadnia instrukcji CREATE INDEX ..................................................... 285
6.2.5. Skadnia instrukcji CREATE TABLE..................................................... 287
6.2.6. Skadnia instrukcji DROP DATABASE.................................................. 301
6.2.7. Skadnia instrukcji DROP INDEX.......................................................... 302
6.2.8. Skadnia instrukcji DROP TABLE.......................................................... 302
6.2.9. Skadnia instrukcji RENAME TABLE.................................................... 303
6.3. Instrukcje programu MySQL............................................................................... 304
6.3.1. Skadnia instrukcji DESCRIBE
(odczytywanie informacji na temat kolumn) ........................................... 304
6.3.2. Skadnia instrukcji USE........................................................................... 304
6.4. Instrukcje obsugi transakcji i blokowania........................................................... 305
6.4.1. Skadnia instrukcji START TRANSACTION, COMMIT
oraz ROLLBACK.................................................................................... 305
6.4.2. Instrukcje niemoliwe do wycofania ....................................................... 306
6.4.3. Instrukcje wykonujce niejawne zatwierdzenie......................................... 306
6.4.4. Skadnia instrukcji SAVEPOINT i ROLLBACK TO SAVEPOINT....... 307
6.4.5. Skadnia instrukcji LOCK TABLES oraz UNLOCK TABLES .............. 307
6.4.6. Skadnia instrukcji SET TRANSACTION.............................................. 310
6.5. Administracja baz danych .................................................................................. 311
6.5.1. Instrukcje zarzdzajce kontami uytkownikw ....................................... 311
6.5.2. Instrukcje do konserwacji tabel ............................................................... 319
6.5.3. Skadnia instrukcji SET i SHOW ............................................................ 326
6.5.4. Inne instrukcje administracyjne ............................................................... 347
6.6. Instrukcje replikacji.............................................................................................. 352
6.6.1. Instrukcje SQL sterujce serwerem gwnym ......................................... 352
6.6.2. Instrukcje SQL sterujce serwerami podrzdnymi .................................. 354
Rozdzia 7. Rozszerzenia przestrzenne w MySQL............................................... 365
7.1. Wstp ................................................................................................................... 365
7.2. Model geometryczny OpenGIS............................................................................ 366
7.2.1. Hierarchia klas geometrycznych.............................................................. 366
7.2.2. Klasa Geometry ....................................................................................... 368
7.2.3. Klasa Point .............................................................................................. 369
7.2.4. Klasa Curve ............................................................................................. 369
7.2.5. Klasa LineString...................................................................................... 370
7.2.6. Klasa Surface........................................................................................... 370
7.2.7. Klasa Polygon.......................................................................................... 370
7.2.8. Klasa GeometryCollection....................................................................... 371
Spis treci 7
7.2.9. Klasa MultiPoint...................................................................................... 371
7.2.10. Klasa MultiCurve .................................................................................... 372
7.2.11. Klasa MultiLineString............................................................................. 372
7.2.12. Klasa MultiSurface .................................................................................. 372
7.2.13. Klasa MultiPolygon................................................................................. 373
7.3. Obsugiwane formaty danych przestrzennych...................................................... 373
7.3.1. Format tekstowy WKT............................................................................ 374
7.3.2. Format binarny WKB.............................................................................. 374
7.4. Tworzenie bazy danych z rozszerzeniami przestrzennymi................................... 375
7.4.1. Typy danych przestrzennych w MySQL ................................................. 375
7.4.2. Tworzenie wartoci przestrzennych......................................................... 376
7.4.3. Tworzenie kolumn przestrzennych.......................................................... 379
7.4.4. Wypenianie kolumn przestrzennych....................................................... 379
7.4.5. Pobieranie danych przestrzennych........................................................... 381
7.5. Analiza informacji przestrzennych....................................................................... 381
7.5.1. Funkcje konwersji formatw geometrycznych ........................................ 382
7.5.2. Funkcje klasy Geometry.......................................................................... 382
7.5.3. Funkcje tworzce nowe geometrie na podstawie istniejcych................. 388
7.5.4. Funkcje testujce relacje przestrzenne
midzy obiektami geometrycznymi ......................................................... 389
7.5.5. Relacje midzy minimalnymi prostoktami otaczajcymi
dla poszczeglnych geometrii.................................................................. 390
7.5.6. Funkcje sprawdzajce relacje przestrzenne pomidzy geometriami ........ 391
7.6. Optymalizacja analizy przestrzennej.................................................................... 392
7.6.1. Tworzenie indeksw przestrzennych....................................................... 392
7.6.2. Wykorzystanie indeksu przestrzennego................................................... 393
7.7. Zgodno MySQL ze standardem........................................................................ 395
7.7.1. Niezaimplementowane funkcje GIS ........................................................ 395
Rozdzia 8. Procedury i funkcje skadowane ..................................................... 397
8.1. Skadnia procedur skadowanych......................................................................... 398
8.1.1. Utrzymanie procedur skadowanych........................................................ 398
8.1.2. SHOW PROCEDURE STATUS oraz SHOW FUNCTION STATUS.... 401
8.1.3. Instrukcja CALL...................................................................................... 402
8.1.4. Instrukcja zoona BEGIN ... END.......................................................... 402
8.1.5. Instrukcja DECLARE.............................................................................. 402
8.1.6. Zmienne w procedurach skadowanych................................................... 402
8.1.7. Warunki i podprogramy obsugi .............................................................. 403
8.1.8. Kursory.................................................................................................... 405
8.1.9. Konstrukcje sterowania przepywem sterowania..................................... 406
Rozdzia 9. Obsuga bdw w MySQL .............................................................. 409
9.1. Zwracane bdy.................................................................................................... 409
9.2. Komunikaty bdw............................................................................................. 419
Dodatek A Rozwizywanie problemw z zapytaniami ........................................435
A.1. Zagadnienia zwizane z zapytaniami ................................................................... 435
A.1.1. Wielko liter przy wyszukiwaniu........................................................... 435
A.1.2. Problemy z kolumnami typu DATE ........................................................ 436
A.1.3. Problemy z wartociami NULL............................................................... 437
A.1.4. Problemy z synonimami kolumn ............................................................. 438
A.1.5. Bd wycofania dla tabel nietransakcyjnych............................................ 439
A.1.6. Usuwanie wierszy ze zwizanych tabel ................................................... 439
A.1.7. Rozwizywanie problemw z brakujcymi wierszami ............................ 440
A.1.8. Problemy z porwnaniami zmiennoprzecinkowymi................................ 441
8 Spis treci
A.2. Problemy zwizane z optymalizatorem................................................................ 443
A.3. Problemy z definicj tabel.................................................................................... 444
A.3.1. Problemy z instrukcj ALTER TABLE................................................... 444
A.3.2. Jak zmieni porzdek kolumn w tabeli .................................................... 445
A.3.3. Problemy z tabelami tymczasowymi ....................................................... 445
Dodatek B Wyraenia regularne w MySQL........................................................ 447
Skorowidz...................................................................................... 451
Rozdzia 4.
Typy kolumn
W MySQL dostpnych jest wiele typw danych, ktre mona pogrupowa w kilku pod-
stawowych kategoriach, takich jak typy liczbowe, typy zwizane z dat i czasem oraz
typy acuchowe. Na pocztku tego rozdziau przedstawiony zostanie przegld wspo-
mnianych przed chwil typw kolumn, po czym nastpi bardziej szczegowy opis ich
waciwoci z podziaem na poszczeglne kategorie i wreszcie zamieszczone zostanie
podsumowanie informacji dotyczcych wymaga co do rozmiaru pamici potrzebnej
do przechowania danej kolumny. Sam przegld jest z zamierzenia krtki. Dodatkowe
informacje o poszczeglnych typach kolumn, na przykad dopuszczalny format, w kt-
rym mona deklarowa wartoci, zostay uwzgldnione w szczegowych omwieniach.
Od wersji 4.1 MySQL rozpoznaje rozszerzenia do obsugi danych przestrzennych.
Informacje o typach przestrzennych znajduj si w rozdziale 7. tego podrcznika.
W czci opisu typw kolumn zastosowane zostay nastpujce reguy:
/
Wskazuje maksymalny rozmiar wywietlania liczby lub acucha.
Maksymalnym dopuszczalnym rozmiarem wywietlania jest 255.
&
Dotyczy typw zmiennoprzecinkowych i staoprzecinkowych. Okrela liczb
cyfr po kropce dziesitnej. Maksymalna dopuszczalna warto wynosi 30,
ale nie powinna przekracza /.
Nawiasy kwadratowe ( ) identyfikuj opcjonalne fragmenty deklaracji typu.
126 Rozdzia 4. Typy kolumn
4.1. Przegld typw dla kolumny
4.1.1. Omwienie typw liczbowych
Poniej znajduje si przegld liczbowych typw dla kolumn. Bardziej szczegowe
informacje mona znale w podrozdziale 4.2. Wymogi dotyczce rozmiaru pamici
potrzebnej do przechowywania kolumn znajduj si w podrozdziale 4.5.
Jeli dla kolumny liczbowej zostanie okrelony atrybut /lRO|1||, MySQL automatycznie
doda do kolumny atrybut UN1S1ONlD.
Naley uwaa podczas odejmowania dwch wartoci liczbowych, z ktrych jedna ma
typ UN1S1ONlD. Uzyskany wynik bdzie rwnie tego typu! patrz podrozdzia 5.7.
T1NY1NT/) UNS1ONlD /lRO|1||
Bardzo maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od `8
do `/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do bb.
B1T, BOO|, BOO|lAN
To s synonimy T1NY1NT`). Synonim BOO|lAN zosta dodany w MySQL 4.1.0.
Warto zerowa to inaczej fasz. Wartoci niezerowe traktowane s jako prawda.
W przyszoci wprowadzona zostanie pena, zgodna ze standardem SQL
obsuga typu boolowskiego.
SMA||1NT/) UNS1ONlD /lRO|1||
Maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od o/68
do o/6/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do 6bbob.
MlD1UM1NT/) UNS1ONlD /lRO|1||
rednia liczba cakowita. Dla liczb ze znakiem zakres wynosi od 8o88608
do 8o8860/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0
do `6///`b.
1NT/) UNS1ONlD /lRO|1||
Standardowa liczba cakowita. Dla liczb ze znakiem zakres wynosi
od `4/48o648 do `4/48o64/. W przypadku liczb bez znaku zakres
obejmuje wartoci od 0 do 49496/9b.
1NTlOlR/) UNS1ONlD /lRO|1||
Jest to synonim dla typu 1NT.
B1O1NT/) UNS1ONlD /lRO|1||
Dua liczba cakowita. Dla liczb ze znakiem zakres wynosi
od 9oo/0o68b4//b808 do 9oo/0o68b4//b80/. W przypadku liczb
bez znaku zakres obejmuje wartoci od 0 do `8446/440/o/09bb`6`b.
4.1. Przegld typw dla kolumny 127
Oto kilka spraw, o ktrych naley wiedzie odnonie kolumn typu B1O1NT:
Wszystkie obliczenia wykonywane s przy uyciu wartoci typu B1O1NT
lub DOUB|l ze znakiem. Oznacza to, e duych liczb cakowitych bez
znaku, wikszych ni 9oo/0o68b4//b80/ (63 bity), mona uywa tylko
z funkcjami bitowymi! Niezastosowanie si do tej zasady moe doprowadzi
do uzyskania w wyniku liczby, ktrej kilka ostatnich cyfr jest bdnych
z powodu bdw w zaokrglaniu podczas konwersji wartoci B1O1NT
na DOUB|l.
MySQL 4.0 potrafi obsugiwa B1O1NT w nastpujcych przypadkach:
Podczas wykorzystywania liczb cakowitych do przechowywania
duych wartoci bez znaku w kolumnie typu B1O1NT.
W M1NPC\YCAMQN) lub MAXPC\YCAMQN), gdzie PC\YCAMQN odnosi si
do kolumny B1O1NT.
Podczas korzystania z operatorw (midzy innymi , , *), gdy oba
argumenty s liczbami cakowitymi.
Zawsze istnieje moliwo zapisania w kolumnie B1O1NT dokadnej wartoci
liczby cakowitej. Wystarczy zapisa j przy uyciu acucha. W takim
przypadku zostanie dokonana konwersja acucha na liczb; konwersja
nie bdzie wymaga poredniego etapu przeksztacajcego liczb na jej
odpowiednik o podwjnej precyzji.
Podczas korzystania z operatorw , i * stosowana jest arytmetyka
B1O1NT, jeli oba argumenty maj warto liczby cakowitej! To oznacza,
e pomnoenie dwch duych liczb cakowitych (lub wynikw funkcji,
ktra zwraca liczby cakowite) moe spowodowa nieoczekiwane
rezultaty, jeli wynik przekroczy liczb 9oo/0o68b4//b80/.
||OATR) UNS1ONlD /lRO|1||
Liczba zmiennoprzecinkowa. Parametr R oznacza precyzj i moe przyjmowa
warto od 0 do 14 dla liczb zmiennoprzecinkowych o dokadnoci do jednego
znaku i od 25 do 53 dla liczb zmiennoprzecinkowych o dokadnoci do dwch
znakw. To przypomina opisane poniej typy ||OAT i DOUB|l. Typ ||OATR)
ma ten sam zakres, jaki posiadaj odpowiadajce mu typy ||OAT i DOUB|l,
ale w jego przypadku niezdefiniowany jest maksymalny rozmiar wywietlania
i liczba miejsc po przecinku.
Od wersji 3.23 MySQL jest to prawdziwa warto zmiennoprzecinkowa.
W wersjach wczeniejszych liczba typu ||OATR) bya zawsze liczb o dwch
miejscach po przecinku.
Ta skadnia zostaa dodana w celu zachowania zgodnoci ze standardem ODBC.
Stosowanie typu ||OAT moe spowodowa wystpienie pewnych
nieoczekiwanych problemw, poniewa wszystkie obliczenia w MySQL
s wykonywane z podwjn precyzj patrz punkt A.1.7).
||OAT/, &) UNS1ONlD /lRO|1||
128 Rozdzia 4. Typy kolumn
Maa liczba zmiennoprzecinkowa (o dokadnoci do jednego znaku). Liczba
ta moe przyj wartoci: od o408o466lo8 do ``/b494ob`lo8, 0,
i od ``/b494ob`lo8 do o408o466lo8. Jeli podany jest atrybut UN1S1ONlD,
niedozwolone s wartoci ujemne. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ ||OAT bez argumentw
lub typ ||OATR) (gdzie Rjest liczb z zakresu od 0 do 24) oznacza liczb
zmiennoprzecinkow o pojedynczej precyzji.
DOUB|l/, &) UNS1ONlD /lRO|1||
Standardowa liczba zmiennoprzecinkowa (o dokadnoci do dwch
znakw). Liczba ta moe przyj wartoci: od `/9/69o`o486o`b/lo08
do b0/o8b8b0/0`4lo08, 0, i od b0/o8b8b0/0`4lo08
do `/9/69o`o486o`b/lo08. Jeli podany jest atrybut UN1S1ONlD, wartoci
ujemne s niedozwolone. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ DOUB|l
bez argumentw lub ||OATR) (gdzie R jest liczb z zakresu od 25 do 53)
oznacza liczb zmiennoprzecinkow o podwjnej precyzji.
DOUB|l PRlC1S1ON/, &) UNS1ONlD /lRO|1||
RlA|/, &) UNS1ONlD /lRO|1||
S to synonimy DOUB|l. Wyjtek: Jeli dla parametru s;_cce serwera
wczono opcj RlA|_AS_||OAT, synonimem ||OAT jest RlA|, a nie DOUB|l.
DlC1MA|/, &) UNS1ONlD /lRO|1||
Niezapakowana liczba staoprzecinkowa. Zachowanie kolumny tego typu
przypomina kolumn typu CHAR. Niezapakowana oznacza, e liczba jest
przechowywana w postaci acucha przy uyciu jednego znaku na kad cyfr
wartoci. Parametr / definiuje maksymaln liczb cyfr, a & liczb miejsc
po przecinku. W parametrze / nie s brane pod uwag: kropka dziesitna
(odpowiadajca w naszej notacji przecinkowi) i (dla liczb ujemnych) znak ,
cho jest dla nich zarezerwowane miejsce. Wartoci nie maj miejsc
po przecinku lub czci uamkowych, jeli & jest rwne 0. Maksymalny zakres
wartoci typu DlC1MA| jest taki sam, jak dla typu DOUB|l, ale rzeczywisty zakres
danej kolumny DlC1MA| moe by ograniczony przez wybr argumentw / i &.
Jeli podany jest atrybut UN1S1ONlD, wartoci ujemne s niedozwolone.
W przypadku braku argumentu &, domyln wartoci jest 0. Jeli pominity
jest parametr /, domyln wartoci jest 10.
W wersjach poprzedzajcych MySQL 3.23 argument / musi by wystarczajco
duy, by zawiera obszar potrzebny dla znaku i kropki dziesitnej.
DlC/,&) UNS1ONlD /lRO|1||
NUMlR1C/,&) UNS1ONlD /lRO|1||
|1XlD/, &) UNS1ONlD /lRO|1||
S to synonimy typu DlC1MA|.
W MySQL 4.1.0 dodano synonim |1XlD w celu osignicia kompatybilnoci
z innymi serwerami.
4.1. Przegld typw dla kolumny 129
4.1.2. Przegld typw zwizanych z dat i czasem
Poniej znajduje si podsumowanie typw kolumn przeznaczonych dla czasu i daty.
Dodatkowe informacje na ten temat mona znale w podrozdziale 4.3. Wymogi do-
tyczce pamici potrzebnej do przechowywania danych w kolumnach zostay podane
w podrozdziale 4.5.
DATl
Data. Obsugiwany zakres obejmuje daty od ``0000`0`` do `9999`o``.
W MySQL wartoci DATl wywietlane s w formacie `RRRRMMDD`, ale mona
przypisywa wartoci do kolumn DATl przy uyciu acuchw lub liczb.
DATlT1Ml
Kombinacja daty i czasu. Obsugiwany zakres obejmuje wartoci
od ``0000`0` 000000` do `9999`o` ob9b9`. W MySQL wartoci
DATlT1Ml wywietlane s w formacie `RRRRMMDD OOMMSS`, ale mona
przypisywa wartoci do kolumn DATlT1Ml przy uyciu acuchw lub liczb.
T1MlSTAMP/)
Znacznik czasu. Obsugiwany zakres rozpoczyna si od daty ``9/00`0``
i siga roku 0o/.
Kolumna typu T1MlSTAMP przydaje si do rejestracji daty i godziny operacji
wstawiania lub aktualizacji. Pierwszej kolumnie T1MlSTAMP w tabeli
automatycznie przypisywana jest data i czas ostatniej operacji, jeli tylko tych
wartoci nie wprowadzi rcznie uytkownik. Dowolnej kolumnie T1MlSTAMP
mona rwnie przypisa biec dat i godzin, wpisujc do niej warto NU||.
Od MySQL 4.1 wartoci T1MlSTAMP s zwracane w postaci acuchw
w formacie `RRRRMMDD OOMMSS`. Aby uzyska warto w postaci liczby,
naley doda do kolumn tego typu 0. Inne szerokoci wywietlania
znacznika czasu nie s obsugiwane.
W wersjach poprzedzajcych MySQL 4.1 wartoci T1MlSTAMP s wywietlane
w formacie RRRRMMDDOOMMSS, RRMMDDOOMMSS, RRRRMMDD lub RRMMDD w zalenoci
od tego, czy parametr / jest rwny 14 (albo go brak), 12, 8 lub 6. Mona jednak
przypisywa wartoci do kolumn T1MlSTAMP przy uyciu acuchw lub liczb.
Argument / wpywa tylko na sposb wywietlania kolumny T1MlSTAMP, a nie
na jej przechowywanie. Wartoci kolumny s zawsze zapisywane w czterech
bajtach. W MySQL od wersji 4.0.12 pojawia si opcja ne., dziki ktrej
mona zmieni dziaanie serwera, upodabniajc je do MySQL 4.1.
Naley odnotowa, e kolumny T1MlSTAMP/), gdzie /jest rwne 8 lub 14,
s traktowane jako liczby, natomiast reszta kolumn T1MlSTAMP/) jest
traktowana jako acuchy. Jest to rodzaj gwarancji, e uytkownik bdzie
mg wiarygodnie usuwa i przywraca tabele tego typu.
T1Ml
Godzina. Obsugiwany zakres obejmuje wartoci od `8o8b9b9`
do ` 8o8b9b9`. W MySQL wartoci T1Ml wywietlane s w formacie
` OOMMSS`, ale mona przypisa wartoci do kolumn T1Ml przy uyciu
zarwno acuchw, jak i liczb.
130 Rozdzia 4. Typy kolumn
YlAR|4)
Rok w formacie dwu- lub czterocyfrowym. Domylnym formatem jest rok
zapisany za pomoc czterech cyfr. W tym formacie dostpne wartoci nale
do przedziau od `90` do `bb oraz 0. W formacie dwucyfrowym wartoci
dopuszczalne to liczby z zakresu od /0 do 69, ktre reprezentuj daty od roku
1970 do 2069. W MySQL wartoci YlAR wywietlane s w formacie RRRR,
ale mona przypisa wartoci do kolumn YlAR przy uyciu tak acuchw,
jak i liczb. Typ YlAR jest niedostpny dla wersji wczeniejszych ni MySQL 3.22.
4.1.3. Przegld typw acuchowych
Poniej znajduje si przegld typw acuchowych. Dodatkowe informacje mona
znale w podrozdziale 4.4. Wymogi dotyczce pamici potrzebnej do przechowywa-
nia danych w kolumnach zostay podane w podrozdziale 4.5.
W niektrych przypadkach MySQL moe zmieni kolumn typu acuchowego na typ,
ktry bdzie si rni od zadeklarowanego w instrukcji CRlATl TAB|l lub A|TlR TAB|l.
Wicej informacji na ten temat znajduje si w podpunkcie 6.2.5.2.
Od wersji 4.1 w MySQL pojawia si zmiana, ktra wpywa na wiele typw kolumn typu
acuchowego. Definicja kolumn typu znakowego moe zawiera atrybut CHARACTlR
SlT, ktry okrela zestaw znakw i opcjonalnie porzdek sortowania. Dotyczy to typw
CHAR, VARCHAR, rnych typw TlXT oraz lNUM i SlT, na przykad:
CRF/TF T/B|F !
FNUMYCTVQ
YCTVQ|
1 lub 2 bajty w zalenoci od liczby wartoci wyliczenia
(maksymalnie 65 535)
SFTYCTVQ
YCTVQ|
1, 2, 3, 4 lub 8 bajtw w zalenoci od liczby elementw zestawu
(maksymalnie 64)
Typy VARCHAR, B|OB i TlXT maj zmienn dugo. Dla kadego ilo pamici potrzeb-
nej do przechowania wartoci bdzie zalee od faktycznej dugoci wartoci kolumny
(reprezentowanej w ostatniej tabeli przez .), a nie od maksymalnego moliwego roz-
miaru danego typu. Kolumna VARCHAR`0) na przykad moe przechowywa acuch
o maksymalnej dugoci 10 znakw. Faktyczna ilo wymaganej pamici to dugo
acucha (.) plus 1 bajt do zapisania dugoci acucha. Dla acucha `.|cc` parametr
. jest rwny 4, a wymagany rozmiar pamici to 5 bajtw.
Typy B|OB i TlXT wymagaj 1, 2, 3 lub 4 bajtw do zapisu dugoci wartoci kolumny
w zalenoci od maksymalnej moliwej dugoci tego typu (patrz punkt 4.4.2).
Rozmiar obiektu lNUM jest ustalany na podstawie liczby rnych wartoci wyliczenia.
Przy wyliczeniach do 255 moliwych wartoci uywany jest jeden bajt, a przy wyli-
czeniach do 65 535 wartoci uywane s 2 bajty (patrz punkt 4.4.3).
Rozmiar obiektu SlT jest okrelany przez liczb rnych elementw zestawu. Jeli ze-
staw ma rozmiar 0, obiekt zajmuje 0/).8 bajtw, ktr to warto zaokrgla si do
1, 2, 3, 4 lub 8 bajtw. Obiekt SlT moe mie do 64 elementw (patrz punkt 4.4.4).
4.6. Wybieranie odpowiedniego typu
dla kolumny
Aby jak najbardziej wydajnie korzysta z pamici, naley we wszystkich przypadkach
stara si stosowa typ, ktry bdzie jak najbardziej dokadny. Jeli na przykad w kolum-
nie liczb cakowitych bd przechowywane wartoci z zakresu od ` do 99999, najlep-
szym wyborem bdzie typ MlD1UM1NT UNS1ONlD. Ze wszystkich typw, ktre reprezentuj
wszystkie wymagane wartoci, zajmuje najmniej pamici.
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych 153
Powszechnym problemem jest dokadne przedstawianie wartoci walutowych. W MySQL
naley do tego uywa typu DlC1MA|, za pomoc ktrego wartoci zapisywane s w for-
mie acucha. Dziki temu nie traci si na dokadnoci (mimo to obliczenia z wartociami
DlC1MA| mog by wci wykonywane przy uyciu operacji dziaajcych na liczbach
z podwjn precyzj). Jeli dokadno nie jest zbyt wana, by moe wystarczajco
dobrym typem bdzie DOUB|l.
Aby uzyska wiksz dokadno, mona zawsze przeksztaci warto na typ stao-
przecinkowy, przechowywany w B1O1NT. Pozwoli to wykonywa wszystkie obliczenia
na liczbach cakowitych i tylko w razie potrzeby przeksztaca wynik z powrotem na
wartoci zmiennoprzecinkowe.
4.7. Wykorzystywanie typw kolumn
z innych mechanizmw baz danych
Aby uatwi uytkownikowi zastosowanie kodu pochodzcego od innych producentw,
moliwe jest odwzorowanie typw kolumn w sposb przedstawiony w poniszej tabeli.
Odwzorowania te upraszczaj operacj importu do MySQL definicji tabel z innych
mechanizmw baz danych:
Typ innych producentw Typ MySQL
BTN/RY/| C'/R/| BTN/RY
C'/R V/RYTN/| V/RC'/R/|
F|J/T4 F|J/T
F|J/T8 OJUB|F
TNT1 TTNYTNT
TNT SM/||TNT
TNT: MFOTUMTNT
TNT4 TNT
TNT8 BTTNT
|JN V/RBTN/RY MFOTUMB|JB
|JN V/RC'/R MFOTUMTFXT
|JN MFOTUMTFXT oc M,SJ| 410|
MTOO|FTNT MFOTUMTNT
V/RBTN/RY/| C'/R/| BTN/RY
Odwzorowanie typw kolumn jest wykonywane podczas tworzenia tabeli, po czym
oryginalne deklaracje typu zostaj usunite. Jeli uytkownik utworzy tabel z typami
stosowanymi przez innych producentw, po czym wyda polecenie DlSCR1Bl PC\YCA
VCDGNK, zostanie przedstawiona struktura tabeli z odpowiadajcymi im typami MySQL.
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
PRZYKADOWY ROZDZIA PRZYKADOWY ROZDZIA
IDZ DO IDZ DO
ZAMW DRUKOWANY KATALOG ZAMW DRUKOWANY KATALOG
KATALOG KSIEK KATALOG KSIEK
TWJ KOSZYK TWJ KOSZYK
CENNIK I INFORMACJE CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK ZAMW CENNIK
CZYTELNIA CZYTELNIA
FRAGMENTY KSIEK ONLINE FRAGMENTY KSIEK ONLINE
SPIS TRECI SPIS TRECI
DODAJ DO KOSZYKA DODAJ DO KOSZYKA
KATALOG ONLINE KATALOG ONLINE
MySQL. Opis jzyka
Autor: Paul Dubois
Tumaczenie: Pawe Gonera, Anna Zawadzka
ISBN: 83-7361-688-8
Tytu oryginau: MySQL Language Reference
Format: B5, stron: 472
MySQL to najpopularniejsza na wiecie baza danych dostpna na licencji open
source. Dziki swojej wydajnoci, szybkoci dziaania, stabilnoci i rozbudowanym
mechanizmom zabezpiecze jest wykorzystywana niemal do wszystkich zada, do
jakich moe by potrzebna baza danych. Stanowi zaplecze dla wielu aplikacji
korporacyjnych, witryn WWW i sklepw internetowych. Bogactwo funkcji i moliwoci
to ogromna zaleta rodowiska MySQL, jednake zapamitanie skadni, parametrw
i sposobw stosowania wszystkich polece i rozszerze jest praktycznie niemoliwe.
Kady, kto chce biegle posugiwa si t baz, powinien mie pod rk materiay
opisujce stosowany w niej jzyk SQL.
Ksika MySQL. Opis jzyka to najlepsze rdo takich informacji. Stworzona,
zredagowana i sprawdzona przez pracownikw dziaw pomocy i produkcji firmy
MySQL AB publikacja zawiera wszystko, co moe by potrzebne uytkownikowi bazy
danych MySQL. Przedstawia zarwno zagadnienia podstawowe, takie jak: struktura
jzyka, typy danych i zasady konstruowania zapyta, jak i tematy zaawansowane:
transakcje, replikacj oraz administrowanie baz. Szczegowo opisane s rwnie
wszystkie zagadnienia zwizane z zaimplementowanym w niej jzykiem SQL.
Podstawowe informacje o MySQL
Jzyk SQL instrukcje, typy danych, funkcje i operatory
Zapytania
Definiowanie danych
Obsuga transakcji
Zarzdzanie kontami uytkownikw
Konserwacja tabel
Replikacja baz danych
Rozszerzenia MySQL dla systemw GIS
Procedury skadowane
Obsuga bdw
Spis treci
Rozdzia 1. Informacje oglne.............................................................................. 9
1.1. Na temat tego podrcznika....................................................................................... 9
1.1.1. Zasady przyjte w tym podrczniku .......................................................... 10
1.2. Omwienie systemu zarzdzania baz danych MySQL......................................... 12
1.2.1. Historia MySQL........................................................................................ 13
1.2.2. Gwne cechy MySQL.............................................................................. 14
1.2.3. Stabilno MySQL .................................................................................... 17
1.2.4. Jak due mog by tabele MySQL ............................................................ 18
1.2.5. Zgodno z rokiem 2000 ........................................................................... 19
1.3. Omwienie MySQL AB ........................................................................................ 21
1.3.1. Model biznesowy i usugi MySQL AB...................................................... 22
1.3.2. Informacje o kontakcie .............................................................................. 25
1.4. Obsuga techniczna oraz wydawanie licencji MySQL........................................... 26
1.4.1. Obsuga techniczna oferowana przez MySQL AB........................................ 26
1.4.2. Prawa autorskie i licencje .......................................................................... 27
1.4.3. Licencje MySQL ....................................................................................... 28
1.4.4. Logo i znaki towarowe MySQL ................................................................ 30
1.5. Plany rozwoju MySQL .......................................................................................... 32
1.5.1. MySQL 4.0 w skrcie................................................................................ 33
1.5.2. MySQL 4.1 w skrcie................................................................................ 35
1.5.3. MySQL 5.0: nastpna wersja rozwojowa .................................................. 37
1.6. MySQL i przyszo (TODO) ................................................................................ 37
1.6.1. Nowe mechanizmy planowane dla wersji 4.1............................................ 38
1.6.2. Nowe funkcje planowane dla wersji 5.0.................................................... 38
1.6.3. Nowe funkcje planowane dla 5.1............................................................... 39
1.6.4. Nowe funkcje planowane w bliskiej przyszoci ......................................... 40
1.6.5. Nowe funkcje planowane w niezbyt odlegej przyszoci.......................... 43
1.6.6. Nowe funkcje, ktrych wdroenia nie planujemy.......................................... 44
1.7. rda informacji o MySQL .................................................................................. 45
1.7.1. Listy dyskusyjne powicone MySQL ...................................................... 45
1.7.2. Wspomaganie rodowiska MySQL na IRC (Internet Relay Chat)............. 54
1.8. Zgodno MySQL ze standardami ......................................................................... 55
1.8.1. Standardy speniane przez MySQL............................................................ 56
1.8.2. Wybieranie trybw MySQL ...................................................................... 56
1.8.3. Uruchamianie MySQL w trybie ANSI ...................................................... 56
1.8.4. Rozszerzenia MySQL do standardu SQL.................................................. 57
4 Spis treci
1.8.5. Rozbienoci midzy MySQL a standardem SQL ........................................ 60
1.8.6. Jak MySQL radzi sobie z ograniczeniami ................................................. 67
1.8.7. Znane bdy i projektowe braki w MySQL................................................ 69
Rozdzia 2. Struktura jzyka .............................................................................. 77
2.1. Literay................................................................................................................... 77
2.1.1. acuchy ................................................................................................... 77
2.1.2. Liczby........................................................................................................ 80
2.1.3. Wartoci szesnastkowe .............................................................................. 80
2.1.4. Wartoci logiczne ...................................................................................... 81
2.1.5. Wartoci NULL......................................................................................... 81
2.2. Nazwy baz danych, tabel, indeksw, kolumn i aliasw......................................... 81
2.2.1. Kwalifikatory identyfikatorw .................................................................. 83
2.2.2. Znaczenie wielkoci liter w nazwach identyfikatorw.............................. 83
2.3. Zmienne definiowane przez uytkownika.............................................................. 85
2.4. Zmienne systemowe............................................................................................... 87
2.4.1. Strukturalne zmienne systemowe .............................................................. 89
2.5. Skadnia komentarza .............................................................................................. 91
2.6. Traktowanie sw zastrzeonych w MySQL.......................................................... 92
Rozdzia 3. Obsuga zestaww znakw............................................................... 95
3.1. Oglne informacje o zestawach znakw i sortowaniu ........................................... 95
3.2. Zestawy znakw i porzdki sortowania w MySQL................................................ 96
3.3. Okrelanie domylnego zestawu znakw i sortowania........................................... 98
3.3.1. Zestaw znakw i sortowanie dla serwera................................................... 98
3.3.2. Zestaw znakw i sortowanie dla bazy danych........................................... 99
3.3.3. Zestaw znakw i sortowanie dla tabeli .................................................... 100
3.3.4. Zestaw znakw i sortowanie dla kolumny............................................... 100
3.3.5. Przykady przypisywania zestawu znakw i sortowania ......................... 101
3.3.6. Zestawy znakw i sortowanie dla poczenia .......................................... 102
3.3.7. Zestaw znakw i sortowanie dla acucha znakw.................................. 104
3.3.8. Wykorzystywanie COLLATE w instrukcjach SQL.................................... 105
3.3.9. Priorytet klauzuli COLLATE .................................................................. 106
3.3.10. Operator BINARY................................................................................... 106
3.3.11. Niektre przypadki specjalne, w ktrych trudno okreli sortowanie...... 106
3.3.12. Sortowania musz by odpowiednie dla danego zestawu znakw........... 107
3.3.13. Przykad wpywu porzdku sortowania ................................................... 108
3.4. Operacje, na ktre ma wpyw obsuga zestaww znakw.................................... 109
3.4.1. acuchy wyjciowe ............................................................................... 109
3.4.2. CONVERT()............................................................................................ 110
3.4.3. CAST() .................................................................................................... 110
3.4.4. Instrukcje SHOW .................................................................................... 111
3.5. Obsuga Unicode.................................................................................................. 112
3.6. UTF8 dla metadanych.......................................................................................... 113
3.7. Kompatybilno z innymi systemami zarzdzania baz danych .......................... 115
3.8. Nowy format pliku konfiguracji zestawu znakw................................................ 115
3.9. Narodowe zestawy znakw.................................................................................. 115
3.10. Aktualizacja zestaww znakw z MySQL 4.0..................................................... 116
3.10.1. Zestawy znakw w wersji 4.0 i odpowiadajce im w wersji 4.1 pary
skadajce si z zestawu znakw i sortowania......................................... 117
3.10.2. Przeksztacanie kolumn znakowych wersji 4.0 na format 4.1 ................. 118
3.11. Zestawy znakw i sortowania obsugiwane przez MySQL.................................. 118
3.11.1. Zestawy znakw standardu Unicode ....................................................... 119
3.11.2. Zestawy znakw zachodnioeuropejskich................................................. 120
3.11.3. Zestawy znakw dla Europy Centralnej .................................................. 121
Spis treci 5
3.11.4. Zestawy znakw poudniowoeuropejskich i rodkowowschodnich......... 122
3.11.5. Zestawy znakw regionu batyckiego...................................................... 123
3.11.6. Zestawy znakw dla cyrylicy................................................................... 123
3.11.7. Azjatyckie zestawy znakw..................................................................... 124
Rozdzia 4. Typy kolumn.................................................................................. 125
4.1. Przegld typw dla kolumny................................................................................ 126
4.1.1. Omwienie typw liczbowych ................................................................ 126
4.1.2. Przegld typw zwizanych z dat i czasem............................................ 129
4.1.3. Przegld typw acuchowych ................................................................ 130
4.2. Typy liczbowe...................................................................................................... 132
4.3. Typy zwizane z dat i czasem............................................................................ 135
4.3.1. Typy DATETIME, DATE i TIMESTAMP............................................. 137
4.3.2. Typ TIME................................................................................................ 142
4.3.3. Typ YEAR............................................................................................... 143
4.3.4. Problem roku 2000 a typy zwizane z dat.............................................. 144
4.4. Typy acuchowe ................................................................................................. 144
4.4.1. Typy CHAR i VARCHAR...................................................................... 144
4.4.2. Typy BLOB i TEXT................................................................................ 146
4.4.3. Typ Enum................................................................................................ 147
4.4.4. Typ SET .................................................................................................. 149
4.5. Rozmiar pamici potrzebnej dla typw kolumn................................................... 151
4.6. Wybieranie odpowiedniego typu dla kolumny..................................................... 152
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych ............... 153
Rozdzia 5. Funkcje i operatory........................................................................ 155
5.1. Operatory ............................................................................................................. 156
5.1.1. Nawiasy................................................................................................... 156
5.1.2. Operatory porwnania ............................................................................. 156
5.1.3. Operatory logiczne .................................................................................. 161
5.1.4. Operatory rozrniania wielkoci liter..................................................... 163
5.2. Funkcje kontroli przepywu ................................................................................. 163
5.3. Funkcje acuchowe............................................................................................. 166
5.3.1. Funkcje porwnywania acuchw.......................................................... 176
5.4. Funkcje liczbowe ................................................................................................. 178
5.4.1. Operatory arytmetyczne........................................................................... 178
5.4.2. Funkcje matematyczne ............................................................................ 180
5.5. Funkcje daty i godziny......................................................................................... 186
5.6. Funkcje obsugi wyszukiwania penotekstowego................................................. 202
5.6.1. Boolowskie wyszukiwania penotekstowe............................................... 205
5.6.2. Wyszukiwania penotekstowe z rozwijaniem zapytania .......................... 207
5.6.3. Ograniczenia dla wyszukiwania penotekstowego................................... 208
5.6.4. Modyfikowanie wyszukiwania penotekstowego MySQL ...................... 209
5.6.5. Lista rzeczy do zrobienia dla wyszukiwania penotekstowego................ 211
5.7. Funkcje konwersji typw..................................................................................... 211
5.8. Inne funkcje ......................................................................................................... 214
5.8.1. Funkcje bitowe ........................................................................................ 214
5.8.2. Funkcje szyfrujce................................................................................... 215
5.8.3. Funkcje informacyjne .............................................................................. 219
5.8.4. Funkcje rne .......................................................................................... 223
5.9. Funkcje i modyfikatory do zastosowania z klauzulami GROUP BY................... 226
5.9.1. Funkcje GROUP BY (agregujce)........................................................... 226
5.9.2. Modyfikatory GROUP BY...................................................................... 229
5.9.3. GROUP BY z ukrytymi polami............................................................... 232
6 Spis treci
Rozdzia 6. Skadnia instrukcji SQL .................................................................. 235
6.1. Instrukcje operujce na danych............................................................................ 235
6.1.1. Skadnia instrukcji DELETE................................................................... 235
6.1.2. Skadnia instrukcji DO ............................................................................ 238
6.1.3. Skadnia instrukcji HANDLER............................................................... 238
6.1.4. Skadnia instrukcji INSERT .................................................................... 240
6.1.5. Skadnia instrukcji LOAD DATA INFILE.............................................. 246
6.1.6. Skadnia instrukcji REPLACE................................................................. 255
6.1.7. Skadnia instrukcji SELECT.................................................................... 256
6.1.8. Skadnia podzapyta................................................................................ 265
6.1.9. Skadnia instrukcji TRUNCATE............................................................. 276
6.1.10. Skadnia instrukcji UPDATE................................................................... 276
6.2. Instrukcje definiowania danych ........................................................................... 278
6.2.1. Skadnia instrukcji ALTER DATABASE ............................................... 278
6.2.2. Skadnia instrukcji ALTER TABLE........................................................ 279
6.2.3. Skadnia instrukcji CREATE DATABASE............................................. 285
6.2.4. Skadnia instrukcji CREATE INDEX ..................................................... 285
6.2.5. Skadnia instrukcji CREATE TABLE..................................................... 287
6.2.6. Skadnia instrukcji DROP DATABASE.................................................. 301
6.2.7. Skadnia instrukcji DROP INDEX.......................................................... 302
6.2.8. Skadnia instrukcji DROP TABLE.......................................................... 302
6.2.9. Skadnia instrukcji RENAME TABLE.................................................... 303
6.3. Instrukcje programu MySQL............................................................................... 304
6.3.1. Skadnia instrukcji DESCRIBE
(odczytywanie informacji na temat kolumn) ........................................... 304
6.3.2. Skadnia instrukcji USE........................................................................... 304
6.4. Instrukcje obsugi transakcji i blokowania........................................................... 305
6.4.1. Skadnia instrukcji START TRANSACTION, COMMIT
oraz ROLLBACK.................................................................................... 305
6.4.2. Instrukcje niemoliwe do wycofania ....................................................... 306
6.4.3. Instrukcje wykonujce niejawne zatwierdzenie......................................... 306
6.4.4. Skadnia instrukcji SAVEPOINT i ROLLBACK TO SAVEPOINT....... 307
6.4.5. Skadnia instrukcji LOCK TABLES oraz UNLOCK TABLES .............. 307
6.4.6. Skadnia instrukcji SET TRANSACTION.............................................. 310
6.5. Administracja baz danych .................................................................................. 311
6.5.1. Instrukcje zarzdzajce kontami uytkownikw ....................................... 311
6.5.2. Instrukcje do konserwacji tabel ............................................................... 319
6.5.3. Skadnia instrukcji SET i SHOW ............................................................ 326
6.5.4. Inne instrukcje administracyjne ............................................................... 347
6.6. Instrukcje replikacji.............................................................................................. 352
6.6.1. Instrukcje SQL sterujce serwerem gwnym ......................................... 352
6.6.2. Instrukcje SQL sterujce serwerami podrzdnymi .................................. 354
Rozdzia 7. Rozszerzenia przestrzenne w MySQL............................................... 365
7.1. Wstp ................................................................................................................... 365
7.2. Model geometryczny OpenGIS............................................................................ 366
7.2.1. Hierarchia klas geometrycznych.............................................................. 366
7.2.2. Klasa Geometry ....................................................................................... 368
7.2.3. Klasa Point .............................................................................................. 369
7.2.4. Klasa Curve ............................................................................................. 369
7.2.5. Klasa LineString...................................................................................... 370
7.2.6. Klasa Surface........................................................................................... 370
7.2.7. Klasa Polygon.......................................................................................... 370
7.2.8. Klasa GeometryCollection....................................................................... 371
Spis treci 7
7.2.9. Klasa MultiPoint...................................................................................... 371
7.2.10. Klasa MultiCurve .................................................................................... 372
7.2.11. Klasa MultiLineString............................................................................. 372
7.2.12. Klasa MultiSurface .................................................................................. 372
7.2.13. Klasa MultiPolygon................................................................................. 373
7.3. Obsugiwane formaty danych przestrzennych...................................................... 373
7.3.1. Format tekstowy WKT............................................................................ 374
7.3.2. Format binarny WKB.............................................................................. 374
7.4. Tworzenie bazy danych z rozszerzeniami przestrzennymi................................... 375
7.4.1. Typy danych przestrzennych w MySQL ................................................. 375
7.4.2. Tworzenie wartoci przestrzennych......................................................... 376
7.4.3. Tworzenie kolumn przestrzennych.......................................................... 379
7.4.4. Wypenianie kolumn przestrzennych....................................................... 379
7.4.5. Pobieranie danych przestrzennych........................................................... 381
7.5. Analiza informacji przestrzennych....................................................................... 381
7.5.1. Funkcje konwersji formatw geometrycznych ........................................ 382
7.5.2. Funkcje klasy Geometry.......................................................................... 382
7.5.3. Funkcje tworzce nowe geometrie na podstawie istniejcych................. 388
7.5.4. Funkcje testujce relacje przestrzenne
midzy obiektami geometrycznymi ......................................................... 389
7.5.5. Relacje midzy minimalnymi prostoktami otaczajcymi
dla poszczeglnych geometrii.................................................................. 390
7.5.6. Funkcje sprawdzajce relacje przestrzenne pomidzy geometriami ........ 391
7.6. Optymalizacja analizy przestrzennej.................................................................... 392
7.6.1. Tworzenie indeksw przestrzennych....................................................... 392
7.6.2. Wykorzystanie indeksu przestrzennego................................................... 393
7.7. Zgodno MySQL ze standardem........................................................................ 395
7.7.1. Niezaimplementowane funkcje GIS ........................................................ 395
Rozdzia 8. Procedury i funkcje skadowane ..................................................... 397
8.1. Skadnia procedur skadowanych......................................................................... 398
8.1.1. Utrzymanie procedur skadowanych........................................................ 398
8.1.2. SHOW PROCEDURE STATUS oraz SHOW FUNCTION STATUS.... 401
8.1.3. Instrukcja CALL...................................................................................... 402
8.1.4. Instrukcja zoona BEGIN ... END.......................................................... 402
8.1.5. Instrukcja DECLARE.............................................................................. 402
8.1.6. Zmienne w procedurach skadowanych................................................... 402
8.1.7. Warunki i podprogramy obsugi .............................................................. 403
8.1.8. Kursory.................................................................................................... 405
8.1.9. Konstrukcje sterowania przepywem sterowania..................................... 406
Rozdzia 9. Obsuga bdw w MySQL .............................................................. 409
9.1. Zwracane bdy.................................................................................................... 409
9.2. Komunikaty bdw............................................................................................. 419
Dodatek A Rozwizywanie problemw z zapytaniami ........................................435
A.1. Zagadnienia zwizane z zapytaniami ................................................................... 435
A.1.1. Wielko liter przy wyszukiwaniu........................................................... 435
A.1.2. Problemy z kolumnami typu DATE ........................................................ 436
A.1.3. Problemy z wartociami NULL............................................................... 437
A.1.4. Problemy z synonimami kolumn ............................................................. 438
A.1.5. Bd wycofania dla tabel nietransakcyjnych............................................ 439
A.1.6. Usuwanie wierszy ze zwizanych tabel ................................................... 439
A.1.7. Rozwizywanie problemw z brakujcymi wierszami ............................ 440
A.1.8. Problemy z porwnaniami zmiennoprzecinkowymi................................ 441
8 Spis treci
A.2. Problemy zwizane z optymalizatorem................................................................ 443
A.3. Problemy z definicj tabel.................................................................................... 444
A.3.1. Problemy z instrukcj ALTER TABLE................................................... 444
A.3.2. Jak zmieni porzdek kolumn w tabeli .................................................... 445
A.3.3. Problemy z tabelami tymczasowymi ....................................................... 445
Dodatek B Wyraenia regularne w MySQL........................................................ 447
Skorowidz...................................................................................... 451
Rozdzia 4.
Typy kolumn
W MySQL dostpnych jest wiele typw danych, ktre mona pogrupowa w kilku pod-
stawowych kategoriach, takich jak typy liczbowe, typy zwizane z dat i czasem oraz
typy acuchowe. Na pocztku tego rozdziau przedstawiony zostanie przegld wspo-
mnianych przed chwil typw kolumn, po czym nastpi bardziej szczegowy opis ich
waciwoci z podziaem na poszczeglne kategorie i wreszcie zamieszczone zostanie
podsumowanie informacji dotyczcych wymaga co do rozmiaru pamici potrzebnej
do przechowania danej kolumny. Sam przegld jest z zamierzenia krtki. Dodatkowe
informacje o poszczeglnych typach kolumn, na przykad dopuszczalny format, w kt-
rym mona deklarowa wartoci, zostay uwzgldnione w szczegowych omwieniach.
Od wersji 4.1 MySQL rozpoznaje rozszerzenia do obsugi danych przestrzennych.
Informacje o typach przestrzennych znajduj si w rozdziale 7. tego podrcznika.
W czci opisu typw kolumn zastosowane zostay nastpujce reguy:
/
Wskazuje maksymalny rozmiar wywietlania liczby lub acucha.
Maksymalnym dopuszczalnym rozmiarem wywietlania jest 255.
&
Dotyczy typw zmiennoprzecinkowych i staoprzecinkowych. Okrela liczb
cyfr po kropce dziesitnej. Maksymalna dopuszczalna warto wynosi 30,
ale nie powinna przekracza /.
Nawiasy kwadratowe ( ) identyfikuj opcjonalne fragmenty deklaracji typu.
126 Rozdzia 4. Typy kolumn
4.1. Przegld typw dla kolumny
4.1.1. Omwienie typw liczbowych
Poniej znajduje si przegld liczbowych typw dla kolumn. Bardziej szczegowe
informacje mona znale w podrozdziale 4.2. Wymogi dotyczce rozmiaru pamici
potrzebnej do przechowywania kolumn znajduj si w podrozdziale 4.5.
Jeli dla kolumny liczbowej zostanie okrelony atrybut /lRO|1||, MySQL automatycznie
doda do kolumny atrybut UN1S1ONlD.
Naley uwaa podczas odejmowania dwch wartoci liczbowych, z ktrych jedna ma
typ UN1S1ONlD. Uzyskany wynik bdzie rwnie tego typu! patrz podrozdzia 5.7.
T1NY1NT/) UNS1ONlD /lRO|1||
Bardzo maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od `8
do `/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do bb.
B1T, BOO|, BOO|lAN
To s synonimy T1NY1NT`). Synonim BOO|lAN zosta dodany w MySQL 4.1.0.
Warto zerowa to inaczej fasz. Wartoci niezerowe traktowane s jako prawda.
W przyszoci wprowadzona zostanie pena, zgodna ze standardem SQL
obsuga typu boolowskiego.
SMA||1NT/) UNS1ONlD /lRO|1||
Maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od o/68
do o/6/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do 6bbob.
MlD1UM1NT/) UNS1ONlD /lRO|1||
rednia liczba cakowita. Dla liczb ze znakiem zakres wynosi od 8o88608
do 8o8860/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0
do `6///`b.
1NT/) UNS1ONlD /lRO|1||
Standardowa liczba cakowita. Dla liczb ze znakiem zakres wynosi
od `4/48o648 do `4/48o64/. W przypadku liczb bez znaku zakres
obejmuje wartoci od 0 do 49496/9b.
1NTlOlR/) UNS1ONlD /lRO|1||
Jest to synonim dla typu 1NT.
B1O1NT/) UNS1ONlD /lRO|1||
Dua liczba cakowita. Dla liczb ze znakiem zakres wynosi
od 9oo/0o68b4//b808 do 9oo/0o68b4//b80/. W przypadku liczb
bez znaku zakres obejmuje wartoci od 0 do `8446/440/o/09bb`6`b.
4.1. Przegld typw dla kolumny 127
Oto kilka spraw, o ktrych naley wiedzie odnonie kolumn typu B1O1NT:
Wszystkie obliczenia wykonywane s przy uyciu wartoci typu B1O1NT
lub DOUB|l ze znakiem. Oznacza to, e duych liczb cakowitych bez
znaku, wikszych ni 9oo/0o68b4//b80/ (63 bity), mona uywa tylko
z funkcjami bitowymi! Niezastosowanie si do tej zasady moe doprowadzi
do uzyskania w wyniku liczby, ktrej kilka ostatnich cyfr jest bdnych
z powodu bdw w zaokrglaniu podczas konwersji wartoci B1O1NT
na DOUB|l.
MySQL 4.0 potrafi obsugiwa B1O1NT w nastpujcych przypadkach:
Podczas wykorzystywania liczb cakowitych do przechowywania
duych wartoci bez znaku w kolumnie typu B1O1NT.
W M1NPC\YCAMQN) lub MAXPC\YCAMQN), gdzie PC\YCAMQN odnosi si
do kolumny B1O1NT.
Podczas korzystania z operatorw (midzy innymi , , *), gdy oba
argumenty s liczbami cakowitymi.
Zawsze istnieje moliwo zapisania w kolumnie B1O1NT dokadnej wartoci
liczby cakowitej. Wystarczy zapisa j przy uyciu acucha. W takim
przypadku zostanie dokonana konwersja acucha na liczb; konwersja
nie bdzie wymaga poredniego etapu przeksztacajcego liczb na jej
odpowiednik o podwjnej precyzji.
Podczas korzystania z operatorw , i * stosowana jest arytmetyka
B1O1NT, jeli oba argumenty maj warto liczby cakowitej! To oznacza,
e pomnoenie dwch duych liczb cakowitych (lub wynikw funkcji,
ktra zwraca liczby cakowite) moe spowodowa nieoczekiwane
rezultaty, jeli wynik przekroczy liczb 9oo/0o68b4//b80/.
||OATR) UNS1ONlD /lRO|1||
Liczba zmiennoprzecinkowa. Parametr R oznacza precyzj i moe przyjmowa
warto od 0 do 14 dla liczb zmiennoprzecinkowych o dokadnoci do jednego
znaku i od 25 do 53 dla liczb zmiennoprzecinkowych o dokadnoci do dwch
znakw. To przypomina opisane poniej typy ||OAT i DOUB|l. Typ ||OATR)
ma ten sam zakres, jaki posiadaj odpowiadajce mu typy ||OAT i DOUB|l,
ale w jego przypadku niezdefiniowany jest maksymalny rozmiar wywietlania
i liczba miejsc po przecinku.
Od wersji 3.23 MySQL jest to prawdziwa warto zmiennoprzecinkowa.
W wersjach wczeniejszych liczba typu ||OATR) bya zawsze liczb o dwch
miejscach po przecinku.
Ta skadnia zostaa dodana w celu zachowania zgodnoci ze standardem ODBC.
Stosowanie typu ||OAT moe spowodowa wystpienie pewnych
nieoczekiwanych problemw, poniewa wszystkie obliczenia w MySQL
s wykonywane z podwjn precyzj patrz punkt A.1.7).
||OAT/, &) UNS1ONlD /lRO|1||
128 Rozdzia 4. Typy kolumn
Maa liczba zmiennoprzecinkowa (o dokadnoci do jednego znaku). Liczba
ta moe przyj wartoci: od o408o466lo8 do ``/b494ob`lo8, 0,
i od ``/b494ob`lo8 do o408o466lo8. Jeli podany jest atrybut UN1S1ONlD,
niedozwolone s wartoci ujemne. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ ||OAT bez argumentw
lub typ ||OATR) (gdzie Rjest liczb z zakresu od 0 do 24) oznacza liczb
zmiennoprzecinkow o pojedynczej precyzji.
DOUB|l/, &) UNS1ONlD /lRO|1||
Standardowa liczba zmiennoprzecinkowa (o dokadnoci do dwch
znakw). Liczba ta moe przyj wartoci: od `/9/69o`o486o`b/lo08
do b0/o8b8b0/0`4lo08, 0, i od b0/o8b8b0/0`4lo08
do `/9/69o`o486o`b/lo08. Jeli podany jest atrybut UN1S1ONlD, wartoci
ujemne s niedozwolone. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ DOUB|l
bez argumentw lub ||OATR) (gdzie R jest liczb z zakresu od 25 do 53)
oznacza liczb zmiennoprzecinkow o podwjnej precyzji.
DOUB|l PRlC1S1ON/, &) UNS1ONlD /lRO|1||
RlA|/, &) UNS1ONlD /lRO|1||
S to synonimy DOUB|l. Wyjtek: Jeli dla parametru s;_cce serwera
wczono opcj RlA|_AS_||OAT, synonimem ||OAT jest RlA|, a nie DOUB|l.
DlC1MA|/, &) UNS1ONlD /lRO|1||
Niezapakowana liczba staoprzecinkowa. Zachowanie kolumny tego typu
przypomina kolumn typu CHAR. Niezapakowana oznacza, e liczba jest
przechowywana w postaci acucha przy uyciu jednego znaku na kad cyfr
wartoci. Parametr / definiuje maksymaln liczb cyfr, a & liczb miejsc
po przecinku. W parametrze / nie s brane pod uwag: kropka dziesitna
(odpowiadajca w naszej notacji przecinkowi) i (dla liczb ujemnych) znak ,
cho jest dla nich zarezerwowane miejsce. Wartoci nie maj miejsc
po przecinku lub czci uamkowych, jeli & jest rwne 0. Maksymalny zakres
wartoci typu DlC1MA| jest taki sam, jak dla typu DOUB|l, ale rzeczywisty zakres
danej kolumny DlC1MA| moe by ograniczony przez wybr argumentw / i &.
Jeli podany jest atrybut UN1S1ONlD, wartoci ujemne s niedozwolone.
W przypadku braku argumentu &, domyln wartoci jest 0. Jeli pominity
jest parametr /, domyln wartoci jest 10.
W wersjach poprzedzajcych MySQL 3.23 argument / musi by wystarczajco
duy, by zawiera obszar potrzebny dla znaku i kropki dziesitnej.
DlC/,&) UNS1ONlD /lRO|1||
NUMlR1C/,&) UNS1ONlD /lRO|1||
|1XlD/, &) UNS1ONlD /lRO|1||
S to synonimy typu DlC1MA|.
W MySQL 4.1.0 dodano synonim |1XlD w celu osignicia kompatybilnoci
z innymi serwerami.
4.1. Przegld typw dla kolumny 129
4.1.2. Przegld typw zwizanych z dat i czasem
Poniej znajduje si podsumowanie typw kolumn przeznaczonych dla czasu i daty.
Dodatkowe informacje na ten temat mona znale w podrozdziale 4.3. Wymogi do-
tyczce pamici potrzebnej do przechowywania danych w kolumnach zostay podane
w podrozdziale 4.5.
DATl
Data. Obsugiwany zakres obejmuje daty od ``0000`0`` do `9999`o``.
W MySQL wartoci DATl wywietlane s w formacie `RRRRMMDD`, ale mona
przypisywa wartoci do kolumn DATl przy uyciu acuchw lub liczb.
DATlT1Ml
Kombinacja daty i czasu. Obsugiwany zakres obejmuje wartoci
od ``0000`0` 000000` do `9999`o` ob9b9`. W MySQL wartoci
DATlT1Ml wywietlane s w formacie `RRRRMMDD OOMMSS`, ale mona
przypisywa wartoci do kolumn DATlT1Ml przy uyciu acuchw lub liczb.
T1MlSTAMP/)
Znacznik czasu. Obsugiwany zakres rozpoczyna si od daty ``9/00`0``
i siga roku 0o/.
Kolumna typu T1MlSTAMP przydaje si do rejestracji daty i godziny operacji
wstawiania lub aktualizacji. Pierwszej kolumnie T1MlSTAMP w tabeli
automatycznie przypisywana jest data i czas ostatniej operacji, jeli tylko tych
wartoci nie wprowadzi rcznie uytkownik. Dowolnej kolumnie T1MlSTAMP
mona rwnie przypisa biec dat i godzin, wpisujc do niej warto NU||.
Od MySQL 4.1 wartoci T1MlSTAMP s zwracane w postaci acuchw
w formacie `RRRRMMDD OOMMSS`. Aby uzyska warto w postaci liczby,
naley doda do kolumn tego typu 0. Inne szerokoci wywietlania
znacznika czasu nie s obsugiwane.
W wersjach poprzedzajcych MySQL 4.1 wartoci T1MlSTAMP s wywietlane
w formacie RRRRMMDDOOMMSS, RRMMDDOOMMSS, RRRRMMDD lub RRMMDD w zalenoci
od tego, czy parametr / jest rwny 14 (albo go brak), 12, 8 lub 6. Mona jednak
przypisywa wartoci do kolumn T1MlSTAMP przy uyciu acuchw lub liczb.
Argument / wpywa tylko na sposb wywietlania kolumny T1MlSTAMP, a nie
na jej przechowywanie. Wartoci kolumny s zawsze zapisywane w czterech
bajtach. W MySQL od wersji 4.0.12 pojawia si opcja ne., dziki ktrej
mona zmieni dziaanie serwera, upodabniajc je do MySQL 4.1.
Naley odnotowa, e kolumny T1MlSTAMP/), gdzie /jest rwne 8 lub 14,
s traktowane jako liczby, natomiast reszta kolumn T1MlSTAMP/) jest
traktowana jako acuchy. Jest to rodzaj gwarancji, e uytkownik bdzie
mg wiarygodnie usuwa i przywraca tabele tego typu.
T1Ml
Godzina. Obsugiwany zakres obejmuje wartoci od `8o8b9b9`
do ` 8o8b9b9`. W MySQL wartoci T1Ml wywietlane s w formacie
` OOMMSS`, ale mona przypisa wartoci do kolumn T1Ml przy uyciu
zarwno acuchw, jak i liczb.
130 Rozdzia 4. Typy kolumn
YlAR|4)
Rok w formacie dwu- lub czterocyfrowym. Domylnym formatem jest rok
zapisany za pomoc czterech cyfr. W tym formacie dostpne wartoci nale
do przedziau od `90` do `bb oraz 0. W formacie dwucyfrowym wartoci
dopuszczalne to liczby z zakresu od /0 do 69, ktre reprezentuj daty od roku
1970 do 2069. W MySQL wartoci YlAR wywietlane s w formacie RRRR,
ale mona przypisa wartoci do kolumn YlAR przy uyciu tak acuchw,
jak i liczb. Typ YlAR jest niedostpny dla wersji wczeniejszych ni MySQL 3.22.
4.1.3. Przegld typw acuchowych
Poniej znajduje si przegld typw acuchowych. Dodatkowe informacje mona
znale w podrozdziale 4.4. Wymogi dotyczce pamici potrzebnej do przechowywa-
nia danych w kolumnach zostay podane w podrozdziale 4.5.
W niektrych przypadkach MySQL moe zmieni kolumn typu acuchowego na typ,
ktry bdzie si rni od zadeklarowanego w instrukcji CRlATl TAB|l lub A|TlR TAB|l.
Wicej informacji na ten temat znajduje si w podpunkcie 6.2.5.2.
Od wersji 4.1 w MySQL pojawia si zmiana, ktra wpywa na wiele typw kolumn typu
acuchowego. Definicja kolumn typu znakowego moe zawiera atrybut CHARACTlR
SlT, ktry okrela zestaw znakw i opcjonalnie porzdek sortowania. Dotyczy to typw
CHAR, VARCHAR, rnych typw TlXT oraz lNUM i SlT, na przykad:
CRF/TF T/B|F !
FNUMYCTVQ
YCTVQ|
1 lub 2 bajty w zalenoci od liczby wartoci wyliczenia
(maksymalnie 65 535)
SFTYCTVQ
YCTVQ|
1, 2, 3, 4 lub 8 bajtw w zalenoci od liczby elementw zestawu
(maksymalnie 64)
Typy VARCHAR, B|OB i TlXT maj zmienn dugo. Dla kadego ilo pamici potrzeb-
nej do przechowania wartoci bdzie zalee od faktycznej dugoci wartoci kolumny
(reprezentowanej w ostatniej tabeli przez .), a nie od maksymalnego moliwego roz-
miaru danego typu. Kolumna VARCHAR`0) na przykad moe przechowywa acuch
o maksymalnej dugoci 10 znakw. Faktyczna ilo wymaganej pamici to dugo
acucha (.) plus 1 bajt do zapisania dugoci acucha. Dla acucha `.|cc` parametr
. jest rwny 4, a wymagany rozmiar pamici to 5 bajtw.
Typy B|OB i TlXT wymagaj 1, 2, 3 lub 4 bajtw do zapisu dugoci wartoci kolumny
w zalenoci od maksymalnej moliwej dugoci tego typu (patrz punkt 4.4.2).
Rozmiar obiektu lNUM jest ustalany na podstawie liczby rnych wartoci wyliczenia.
Przy wyliczeniach do 255 moliwych wartoci uywany jest jeden bajt, a przy wyli-
czeniach do 65 535 wartoci uywane s 2 bajty (patrz punkt 4.4.3).
Rozmiar obiektu SlT jest okrelany przez liczb rnych elementw zestawu. Jeli ze-
staw ma rozmiar 0, obiekt zajmuje 0/).8 bajtw, ktr to warto zaokrgla si do
1, 2, 3, 4 lub 8 bajtw. Obiekt SlT moe mie do 64 elementw (patrz punkt 4.4.4).
4.6. Wybieranie odpowiedniego typu
dla kolumny
Aby jak najbardziej wydajnie korzysta z pamici, naley we wszystkich przypadkach
stara si stosowa typ, ktry bdzie jak najbardziej dokadny. Jeli na przykad w kolum-
nie liczb cakowitych bd przechowywane wartoci z zakresu od ` do 99999, najlep-
szym wyborem bdzie typ MlD1UM1NT UNS1ONlD. Ze wszystkich typw, ktre reprezentuj
wszystkie wymagane wartoci, zajmuje najmniej pamici.
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych 153
Powszechnym problemem jest dokadne przedstawianie wartoci walutowych. W MySQL
naley do tego uywa typu DlC1MA|, za pomoc ktrego wartoci zapisywane s w for-
mie acucha. Dziki temu nie traci si na dokadnoci (mimo to obliczenia z wartociami
DlC1MA| mog by wci wykonywane przy uyciu operacji dziaajcych na liczbach
z podwjn precyzj). Jeli dokadno nie jest zbyt wana, by moe wystarczajco
dobrym typem bdzie DOUB|l.
Aby uzyska wiksz dokadno, mona zawsze przeksztaci warto na typ stao-
przecinkowy, przechowywany w B1O1NT. Pozwoli to wykonywa wszystkie obliczenia
na liczbach cakowitych i tylko w razie potrzeby przeksztaca wynik z powrotem na
wartoci zmiennoprzecinkowe.
4.7. Wykorzystywanie typw kolumn
z innych mechanizmw baz danych
Aby uatwi uytkownikowi zastosowanie kodu pochodzcego od innych producentw,
moliwe jest odwzorowanie typw kolumn w sposb przedstawiony w poniszej tabeli.
Odwzorowania te upraszczaj operacj importu do MySQL definicji tabel z innych
mechanizmw baz danych:
Typ innych producentw Typ MySQL
BTN/RY/| C'/R/| BTN/RY
C'/R V/RYTN/| V/RC'/R/|
F|J/T4 F|J/T
F|J/T8 OJUB|F
TNT1 TTNYTNT
TNT SM/||TNT
TNT: MFOTUMTNT
TNT4 TNT
TNT8 BTTNT
|JN V/RBTN/RY MFOTUMB|JB
|JN V/RC'/R MFOTUMTFXT
|JN MFOTUMTFXT oc M,SJ| 410|
MTOO|FTNT MFOTUMTNT
V/RBTN/RY/| C'/R/| BTN/RY
Odwzorowanie typw kolumn jest wykonywane podczas tworzenia tabeli, po czym
oryginalne deklaracje typu zostaj usunite. Jeli uytkownik utworzy tabel z typami
stosowanymi przez innych producentw, po czym wyda polecenie DlSCR1Bl PC\YCA
VCDGNK, zostanie przedstawiona struktura tabeli z odpowiadajcymi im typami MySQL.
4 Spis treci
1.8.5. Rozbienoci midzy MySQL a standardem SQL ........................................ 60
1.8.6. Jak MySQL radzi sobie z ograniczeniami ................................................. 67
1.8.7. Znane bdy i projektowe braki w MySQL................................................ 69
Rozdzia 2. Struktura jzyka .............................................................................. 77
2.1. Literay................................................................................................................... 77
2.1.1. acuchy ................................................................................................... 77
2.1.2. Liczby........................................................................................................ 80
2.1.3. Wartoci szesnastkowe .............................................................................. 80
2.1.4. Wartoci logiczne ...................................................................................... 81
2.1.5. Wartoci NULL......................................................................................... 81
2.2. Nazwy baz danych, tabel, indeksw, kolumn i aliasw......................................... 81
2.2.1. Kwalifikatory identyfikatorw .................................................................. 83
2.2.2. Znaczenie wielkoci liter w nazwach identyfikatorw.............................. 83
2.3. Zmienne definiowane przez uytkownika.............................................................. 85
2.4. Zmienne systemowe............................................................................................... 87
2.4.1. Strukturalne zmienne systemowe .............................................................. 89
2.5. Skadnia komentarza .............................................................................................. 91
2.6. Traktowanie sw zastrzeonych w MySQL.......................................................... 92
Rozdzia 3. Obsuga zestaww znakw............................................................... 95
3.1. Oglne informacje o zestawach znakw i sortowaniu ........................................... 95
3.2. Zestawy znakw i porzdki sortowania w MySQL................................................ 96
3.3. Okrelanie domylnego zestawu znakw i sortowania........................................... 98
3.3.1. Zestaw znakw i sortowanie dla serwera................................................... 98
3.3.2. Zestaw znakw i sortowanie dla bazy danych........................................... 99
3.3.3. Zestaw znakw i sortowanie dla tabeli .................................................... 100
3.3.4. Zestaw znakw i sortowanie dla kolumny............................................... 100
3.3.5. Przykady przypisywania zestawu znakw i sortowania ......................... 101
3.3.6. Zestawy znakw i sortowanie dla poczenia .......................................... 102
3.3.7. Zestaw znakw i sortowanie dla acucha znakw.................................. 104
3.3.8. Wykorzystywanie COLLATE w instrukcjach SQL.................................... 105
3.3.9. Priorytet klauzuli COLLATE .................................................................. 106
3.3.10. Operator BINARY................................................................................... 106
3.3.11. Niektre przypadki specjalne, w ktrych trudno okreli sortowanie...... 106
3.3.12. Sortowania musz by odpowiednie dla danego zestawu znakw........... 107
3.3.13. Przykad wpywu porzdku sortowania ................................................... 108
3.4. Operacje, na ktre ma wpyw obsuga zestaww znakw.................................... 109
3.4.1. acuchy wyjciowe ............................................................................... 109
3.4.2. CONVERT()............................................................................................ 110
3.4.3. CAST() .................................................................................................... 110
3.4.4. Instrukcje SHOW .................................................................................... 111
3.5. Obsuga Unicode.................................................................................................. 112
3.6. UTF8 dla metadanych.......................................................................................... 113
3.7. Kompatybilno z innymi systemami zarzdzania baz danych .......................... 115
3.8. Nowy format pliku konfiguracji zestawu znakw................................................ 115
3.9. Narodowe zestawy znakw.................................................................................. 115
3.10. Aktualizacja zestaww znakw z MySQL 4.0..................................................... 116
3.10.1. Zestawy znakw w wersji 4.0 i odpowiadajce im w wersji 4.1 pary
skadajce si z zestawu znakw i sortowania......................................... 117
3.10.2. Przeksztacanie kolumn znakowych wersji 4.0 na format 4.1 ................. 118
3.11. Zestawy znakw i sortowania obsugiwane przez MySQL.................................. 118
3.11.1. Zestawy znakw standardu Unicode ....................................................... 119
3.11.2. Zestawy znakw zachodnioeuropejskich................................................. 120
3.11.3. Zestawy znakw dla Europy Centralnej .................................................. 121
Spis treci 5
3.11.4. Zestawy znakw poudniowoeuropejskich i rodkowowschodnich......... 122
3.11.5. Zestawy znakw regionu batyckiego...................................................... 123
3.11.6. Zestawy znakw dla cyrylicy................................................................... 123
3.11.7. Azjatyckie zestawy znakw..................................................................... 124
Rozdzia 4. Typy kolumn.................................................................................. 125
4.1. Przegld typw dla kolumny................................................................................ 126
4.1.1. Omwienie typw liczbowych ................................................................ 126
4.1.2. Przegld typw zwizanych z dat i czasem............................................ 129
4.1.3. Przegld typw acuchowych ................................................................ 130
4.2. Typy liczbowe...................................................................................................... 132
4.3. Typy zwizane z dat i czasem............................................................................ 135
4.3.1. Typy DATETIME, DATE i TIMESTAMP............................................. 137
4.3.2. Typ TIME................................................................................................ 142
4.3.3. Typ YEAR............................................................................................... 143
4.3.4. Problem roku 2000 a typy zwizane z dat.............................................. 144
4.4. Typy acuchowe ................................................................................................. 144
4.4.1. Typy CHAR i VARCHAR...................................................................... 144
4.4.2. Typy BLOB i TEXT................................................................................ 146
4.4.3. Typ Enum................................................................................................ 147
4.4.4. Typ SET .................................................................................................. 149
4.5. Rozmiar pamici potrzebnej dla typw kolumn................................................... 151
4.6. Wybieranie odpowiedniego typu dla kolumny..................................................... 152
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych ............... 153
Rozdzia 5. Funkcje i operatory........................................................................ 155
5.1. Operatory ............................................................................................................. 156
5.1.1. Nawiasy................................................................................................... 156
5.1.2. Operatory porwnania ............................................................................. 156
5.1.3. Operatory logiczne .................................................................................. 161
5.1.4. Operatory rozrniania wielkoci liter..................................................... 163
5.2. Funkcje kontroli przepywu ................................................................................. 163
5.3. Funkcje acuchowe............................................................................................. 166
5.3.1. Funkcje porwnywania acuchw.......................................................... 176
5.4. Funkcje liczbowe ................................................................................................. 178
5.4.1. Operatory arytmetyczne........................................................................... 178
5.4.2. Funkcje matematyczne ............................................................................ 180
5.5. Funkcje daty i godziny......................................................................................... 186
5.6. Funkcje obsugi wyszukiwania penotekstowego................................................. 202
5.6.1. Boolowskie wyszukiwania penotekstowe............................................... 205
5.6.2. Wyszukiwania penotekstowe z rozwijaniem zapytania .......................... 207
5.6.3. Ograniczenia dla wyszukiwania penotekstowego................................... 208
5.6.4. Modyfikowanie wyszukiwania penotekstowego MySQL ...................... 209
5.6.5. Lista rzeczy do zrobienia dla wyszukiwania penotekstowego................ 211
5.7. Funkcje konwersji typw..................................................................................... 211
5.8. Inne funkcje ......................................................................................................... 214
5.8.1. Funkcje bitowe ........................................................................................ 214
5.8.2. Funkcje szyfrujce................................................................................... 215
5.8.3. Funkcje informacyjne .............................................................................. 219
5.8.4. Funkcje rne .......................................................................................... 223
5.9. Funkcje i modyfikatory do zastosowania z klauzulami GROUP BY................... 226
5.9.1. Funkcje GROUP BY (agregujce)........................................................... 226
5.9.2. Modyfikatory GROUP BY...................................................................... 229
5.9.3. GROUP BY z ukrytymi polami............................................................... 232
6 Spis treci
Rozdzia 6. Skadnia instrukcji SQL .................................................................. 235
6.1. Instrukcje operujce na danych............................................................................ 235
6.1.1. Skadnia instrukcji DELETE................................................................... 235
6.1.2. Skadnia instrukcji DO ............................................................................ 238
6.1.3. Skadnia instrukcji HANDLER............................................................... 238
6.1.4. Skadnia instrukcji INSERT .................................................................... 240
6.1.5. Skadnia instrukcji LOAD DATA INFILE.............................................. 246
6.1.6. Skadnia instrukcji REPLACE................................................................. 255
6.1.7. Skadnia instrukcji SELECT.................................................................... 256
6.1.8. Skadnia podzapyta................................................................................ 265
6.1.9. Skadnia instrukcji TRUNCATE............................................................. 276
6.1.10. Skadnia instrukcji UPDATE................................................................... 276
6.2. Instrukcje definiowania danych ........................................................................... 278
6.2.1. Skadnia instrukcji ALTER DATABASE ............................................... 278
6.2.2. Skadnia instrukcji ALTER TABLE........................................................ 279
6.2.3. Skadnia instrukcji CREATE DATABASE............................................. 285
6.2.4. Skadnia instrukcji CREATE INDEX ..................................................... 285
6.2.5. Skadnia instrukcji CREATE TABLE..................................................... 287
6.2.6. Skadnia instrukcji DROP DATABASE.................................................. 301
6.2.7. Skadnia instrukcji DROP INDEX.......................................................... 302
6.2.8. Skadnia instrukcji DROP TABLE.......................................................... 302
6.2.9. Skadnia instrukcji RENAME TABLE.................................................... 303
6.3. Instrukcje programu MySQL............................................................................... 304
6.3.1. Skadnia instrukcji DESCRIBE
(odczytywanie informacji na temat kolumn) ........................................... 304
6.3.2. Skadnia instrukcji USE........................................................................... 304
6.4. Instrukcje obsugi transakcji i blokowania........................................................... 305
6.4.1. Skadnia instrukcji START TRANSACTION, COMMIT
oraz ROLLBACK.................................................................................... 305
6.4.2. Instrukcje niemoliwe do wycofania ....................................................... 306
6.4.3. Instrukcje wykonujce niejawne zatwierdzenie......................................... 306
6.4.4. Skadnia instrukcji SAVEPOINT i ROLLBACK TO SAVEPOINT....... 307
6.4.5. Skadnia instrukcji LOCK TABLES oraz UNLOCK TABLES .............. 307
6.4.6. Skadnia instrukcji SET TRANSACTION.............................................. 310
6.5. Administracja baz danych .................................................................................. 311
6.5.1. Instrukcje zarzdzajce kontami uytkownikw ....................................... 311
6.5.2. Instrukcje do konserwacji tabel ............................................................... 319
6.5.3. Skadnia instrukcji SET i SHOW ............................................................ 326
6.5.4. Inne instrukcje administracyjne ............................................................... 347
6.6. Instrukcje replikacji.............................................................................................. 352
6.6.1. Instrukcje SQL sterujce serwerem gwnym ......................................... 352
6.6.2. Instrukcje SQL sterujce serwerami podrzdnymi .................................. 354
Rozdzia 7. Rozszerzenia przestrzenne w MySQL............................................... 365
7.1. Wstp ................................................................................................................... 365
7.2. Model geometryczny OpenGIS............................................................................ 366
7.2.1. Hierarchia klas geometrycznych.............................................................. 366
7.2.2. Klasa Geometry ....................................................................................... 368
7.2.3. Klasa Point .............................................................................................. 369
7.2.4. Klasa Curve ............................................................................................. 369
7.2.5. Klasa LineString...................................................................................... 370
7.2.6. Klasa Surface........................................................................................... 370
7.2.7. Klasa Polygon.......................................................................................... 370
7.2.8. Klasa GeometryCollection....................................................................... 371
Spis treci 7
7.2.9. Klasa MultiPoint...................................................................................... 371
7.2.10. Klasa MultiCurve .................................................................................... 372
7.2.11. Klasa MultiLineString............................................................................. 372
7.2.12. Klasa MultiSurface .................................................................................. 372
7.2.13. Klasa MultiPolygon................................................................................. 373
7.3. Obsugiwane formaty danych przestrzennych...................................................... 373
7.3.1. Format tekstowy WKT............................................................................ 374
7.3.2. Format binarny WKB.............................................................................. 374
7.4. Tworzenie bazy danych z rozszerzeniami przestrzennymi................................... 375
7.4.1. Typy danych przestrzennych w MySQL ................................................. 375
7.4.2. Tworzenie wartoci przestrzennych......................................................... 376
7.4.3. Tworzenie kolumn przestrzennych.......................................................... 379
7.4.4. Wypenianie kolumn przestrzennych....................................................... 379
7.4.5. Pobieranie danych przestrzennych........................................................... 381
7.5. Analiza informacji przestrzennych....................................................................... 381
7.5.1. Funkcje konwersji formatw geometrycznych ........................................ 382
7.5.2. Funkcje klasy Geometry.......................................................................... 382
7.5.3. Funkcje tworzce nowe geometrie na podstawie istniejcych................. 388
7.5.4. Funkcje testujce relacje przestrzenne
midzy obiektami geometrycznymi ......................................................... 389
7.5.5. Relacje midzy minimalnymi prostoktami otaczajcymi
dla poszczeglnych geometrii.................................................................. 390
7.5.6. Funkcje sprawdzajce relacje przestrzenne pomidzy geometriami ........ 391
7.6. Optymalizacja analizy przestrzennej.................................................................... 392
7.6.1. Tworzenie indeksw przestrzennych....................................................... 392
7.6.2. Wykorzystanie indeksu przestrzennego................................................... 393
7.7. Zgodno MySQL ze standardem........................................................................ 395
7.7.1. Niezaimplementowane funkcje GIS ........................................................ 395
Rozdzia 8. Procedury i funkcje skadowane ..................................................... 397
8.1. Skadnia procedur skadowanych......................................................................... 398
8.1.1. Utrzymanie procedur skadowanych........................................................ 398
8.1.2. SHOW PROCEDURE STATUS oraz SHOW FUNCTION STATUS.... 401
8.1.3. Instrukcja CALL...................................................................................... 402
8.1.4. Instrukcja zoona BEGIN ... END.......................................................... 402
8.1.5. Instrukcja DECLARE.............................................................................. 402
8.1.6. Zmienne w procedurach skadowanych................................................... 402
8.1.7. Warunki i podprogramy obsugi .............................................................. 403
8.1.8. Kursory.................................................................................................... 405
8.1.9. Konstrukcje sterowania przepywem sterowania..................................... 406
Rozdzia 9. Obsuga bdw w MySQL .............................................................. 409
9.1. Zwracane bdy.................................................................................................... 409
9.2. Komunikaty bdw............................................................................................. 419
Dodatek A Rozwizywanie problemw z zapytaniami ........................................435
A.1. Zagadnienia zwizane z zapytaniami ................................................................... 435
A.1.1. Wielko liter przy wyszukiwaniu........................................................... 435
A.1.2. Problemy z kolumnami typu DATE ........................................................ 436
A.1.3. Problemy z wartociami NULL............................................................... 437
A.1.4. Problemy z synonimami kolumn ............................................................. 438
A.1.5. Bd wycofania dla tabel nietransakcyjnych............................................ 439
A.1.6. Usuwanie wierszy ze zwizanych tabel ................................................... 439
A.1.7. Rozwizywanie problemw z brakujcymi wierszami ............................ 440
A.1.8. Problemy z porwnaniami zmiennoprzecinkowymi................................ 441
8 Spis treci
A.2. Problemy zwizane z optymalizatorem................................................................ 443
A.3. Problemy z definicj tabel.................................................................................... 444
A.3.1. Problemy z instrukcj ALTER TABLE................................................... 444
A.3.2. Jak zmieni porzdek kolumn w tabeli .................................................... 445
A.3.3. Problemy z tabelami tymczasowymi ....................................................... 445
Dodatek B Wyraenia regularne w MySQL........................................................ 447
Skorowidz...................................................................................... 451
Rozdzia 4.
Typy kolumn
W MySQL dostpnych jest wiele typw danych, ktre mona pogrupowa w kilku pod-
stawowych kategoriach, takich jak typy liczbowe, typy zwizane z dat i czasem oraz
typy acuchowe. Na pocztku tego rozdziau przedstawiony zostanie przegld wspo-
mnianych przed chwil typw kolumn, po czym nastpi bardziej szczegowy opis ich
waciwoci z podziaem na poszczeglne kategorie i wreszcie zamieszczone zostanie
podsumowanie informacji dotyczcych wymaga co do rozmiaru pamici potrzebnej
do przechowania danej kolumny. Sam przegld jest z zamierzenia krtki. Dodatkowe
informacje o poszczeglnych typach kolumn, na przykad dopuszczalny format, w kt-
rym mona deklarowa wartoci, zostay uwzgldnione w szczegowych omwieniach.
Od wersji 4.1 MySQL rozpoznaje rozszerzenia do obsugi danych przestrzennych.
Informacje o typach przestrzennych znajduj si w rozdziale 7. tego podrcznika.
W czci opisu typw kolumn zastosowane zostay nastpujce reguy:
/
Wskazuje maksymalny rozmiar wywietlania liczby lub acucha.
Maksymalnym dopuszczalnym rozmiarem wywietlania jest 255.
&
Dotyczy typw zmiennoprzecinkowych i staoprzecinkowych. Okrela liczb
cyfr po kropce dziesitnej. Maksymalna dopuszczalna warto wynosi 30,
ale nie powinna przekracza /.
Nawiasy kwadratowe ( ) identyfikuj opcjonalne fragmenty deklaracji typu.
126 Rozdzia 4. Typy kolumn
4.1. Przegld typw dla kolumny
4.1.1. Omwienie typw liczbowych
Poniej znajduje si przegld liczbowych typw dla kolumn. Bardziej szczegowe
informacje mona znale w podrozdziale 4.2. Wymogi dotyczce rozmiaru pamici
potrzebnej do przechowywania kolumn znajduj si w podrozdziale 4.5.
Jeli dla kolumny liczbowej zostanie okrelony atrybut /lRO|1||, MySQL automatycznie
doda do kolumny atrybut UN1S1ONlD.
Naley uwaa podczas odejmowania dwch wartoci liczbowych, z ktrych jedna ma
typ UN1S1ONlD. Uzyskany wynik bdzie rwnie tego typu! patrz podrozdzia 5.7.
T1NY1NT/) UNS1ONlD /lRO|1||
Bardzo maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od `8
do `/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do bb.
B1T, BOO|, BOO|lAN
To s synonimy T1NY1NT`). Synonim BOO|lAN zosta dodany w MySQL 4.1.0.
Warto zerowa to inaczej fasz. Wartoci niezerowe traktowane s jako prawda.
W przyszoci wprowadzona zostanie pena, zgodna ze standardem SQL
obsuga typu boolowskiego.
SMA||1NT/) UNS1ONlD /lRO|1||
Maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od o/68
do o/6/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do 6bbob.
MlD1UM1NT/) UNS1ONlD /lRO|1||
rednia liczba cakowita. Dla liczb ze znakiem zakres wynosi od 8o88608
do 8o8860/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0
do `6///`b.
1NT/) UNS1ONlD /lRO|1||
Standardowa liczba cakowita. Dla liczb ze znakiem zakres wynosi
od `4/48o648 do `4/48o64/. W przypadku liczb bez znaku zakres
obejmuje wartoci od 0 do 49496/9b.
1NTlOlR/) UNS1ONlD /lRO|1||
Jest to synonim dla typu 1NT.
B1O1NT/) UNS1ONlD /lRO|1||
Dua liczba cakowita. Dla liczb ze znakiem zakres wynosi
od 9oo/0o68b4//b808 do 9oo/0o68b4//b80/. W przypadku liczb
bez znaku zakres obejmuje wartoci od 0 do `8446/440/o/09bb`6`b.
4.1. Przegld typw dla kolumny 127
Oto kilka spraw, o ktrych naley wiedzie odnonie kolumn typu B1O1NT:
Wszystkie obliczenia wykonywane s przy uyciu wartoci typu B1O1NT
lub DOUB|l ze znakiem. Oznacza to, e duych liczb cakowitych bez
znaku, wikszych ni 9oo/0o68b4//b80/ (63 bity), mona uywa tylko
z funkcjami bitowymi! Niezastosowanie si do tej zasady moe doprowadzi
do uzyskania w wyniku liczby, ktrej kilka ostatnich cyfr jest bdnych
z powodu bdw w zaokrglaniu podczas konwersji wartoci B1O1NT
na DOUB|l.
MySQL 4.0 potrafi obsugiwa B1O1NT w nastpujcych przypadkach:
Podczas wykorzystywania liczb cakowitych do przechowywania
duych wartoci bez znaku w kolumnie typu B1O1NT.
W M1NPC\YCAMQN) lub MAXPC\YCAMQN), gdzie PC\YCAMQN odnosi si
do kolumny B1O1NT.
Podczas korzystania z operatorw (midzy innymi , , *), gdy oba
argumenty s liczbami cakowitymi.
Zawsze istnieje moliwo zapisania w kolumnie B1O1NT dokadnej wartoci
liczby cakowitej. Wystarczy zapisa j przy uyciu acucha. W takim
przypadku zostanie dokonana konwersja acucha na liczb; konwersja
nie bdzie wymaga poredniego etapu przeksztacajcego liczb na jej
odpowiednik o podwjnej precyzji.
Podczas korzystania z operatorw , i * stosowana jest arytmetyka
B1O1NT, jeli oba argumenty maj warto liczby cakowitej! To oznacza,
e pomnoenie dwch duych liczb cakowitych (lub wynikw funkcji,
ktra zwraca liczby cakowite) moe spowodowa nieoczekiwane
rezultaty, jeli wynik przekroczy liczb 9oo/0o68b4//b80/.
||OATR) UNS1ONlD /lRO|1||
Liczba zmiennoprzecinkowa. Parametr R oznacza precyzj i moe przyjmowa
warto od 0 do 14 dla liczb zmiennoprzecinkowych o dokadnoci do jednego
znaku i od 25 do 53 dla liczb zmiennoprzecinkowych o dokadnoci do dwch
znakw. To przypomina opisane poniej typy ||OAT i DOUB|l. Typ ||OATR)
ma ten sam zakres, jaki posiadaj odpowiadajce mu typy ||OAT i DOUB|l,
ale w jego przypadku niezdefiniowany jest maksymalny rozmiar wywietlania
i liczba miejsc po przecinku.
Od wersji 3.23 MySQL jest to prawdziwa warto zmiennoprzecinkowa.
W wersjach wczeniejszych liczba typu ||OATR) bya zawsze liczb o dwch
miejscach po przecinku.
Ta skadnia zostaa dodana w celu zachowania zgodnoci ze standardem ODBC.
Stosowanie typu ||OAT moe spowodowa wystpienie pewnych
nieoczekiwanych problemw, poniewa wszystkie obliczenia w MySQL
s wykonywane z podwjn precyzj patrz punkt A.1.7).
||OAT/, &) UNS1ONlD /lRO|1||
128 Rozdzia 4. Typy kolumn
Maa liczba zmiennoprzecinkowa (o dokadnoci do jednego znaku). Liczba
ta moe przyj wartoci: od o408o466lo8 do ``/b494ob`lo8, 0,
i od ``/b494ob`lo8 do o408o466lo8. Jeli podany jest atrybut UN1S1ONlD,
niedozwolone s wartoci ujemne. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ ||OAT bez argumentw
lub typ ||OATR) (gdzie Rjest liczb z zakresu od 0 do 24) oznacza liczb
zmiennoprzecinkow o pojedynczej precyzji.
DOUB|l/, &) UNS1ONlD /lRO|1||
Standardowa liczba zmiennoprzecinkowa (o dokadnoci do dwch
znakw). Liczba ta moe przyj wartoci: od `/9/69o`o486o`b/lo08
do b0/o8b8b0/0`4lo08, 0, i od b0/o8b8b0/0`4lo08
do `/9/69o`o486o`b/lo08. Jeli podany jest atrybut UN1S1ONlD, wartoci
ujemne s niedozwolone. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ DOUB|l
bez argumentw lub ||OATR) (gdzie R jest liczb z zakresu od 25 do 53)
oznacza liczb zmiennoprzecinkow o podwjnej precyzji.
DOUB|l PRlC1S1ON/, &) UNS1ONlD /lRO|1||
RlA|/, &) UNS1ONlD /lRO|1||
S to synonimy DOUB|l. Wyjtek: Jeli dla parametru s;_cce serwera
wczono opcj RlA|_AS_||OAT, synonimem ||OAT jest RlA|, a nie DOUB|l.
DlC1MA|/, &) UNS1ONlD /lRO|1||
Niezapakowana liczba staoprzecinkowa. Zachowanie kolumny tego typu
przypomina kolumn typu CHAR. Niezapakowana oznacza, e liczba jest
przechowywana w postaci acucha przy uyciu jednego znaku na kad cyfr
wartoci. Parametr / definiuje maksymaln liczb cyfr, a & liczb miejsc
po przecinku. W parametrze / nie s brane pod uwag: kropka dziesitna
(odpowiadajca w naszej notacji przecinkowi) i (dla liczb ujemnych) znak ,
cho jest dla nich zarezerwowane miejsce. Wartoci nie maj miejsc
po przecinku lub czci uamkowych, jeli & jest rwne 0. Maksymalny zakres
wartoci typu DlC1MA| jest taki sam, jak dla typu DOUB|l, ale rzeczywisty zakres
danej kolumny DlC1MA| moe by ograniczony przez wybr argumentw / i &.
Jeli podany jest atrybut UN1S1ONlD, wartoci ujemne s niedozwolone.
W przypadku braku argumentu &, domyln wartoci jest 0. Jeli pominity
jest parametr /, domyln wartoci jest 10.
W wersjach poprzedzajcych MySQL 3.23 argument / musi by wystarczajco
duy, by zawiera obszar potrzebny dla znaku i kropki dziesitnej.
DlC/,&) UNS1ONlD /lRO|1||
NUMlR1C/,&) UNS1ONlD /lRO|1||
|1XlD/, &) UNS1ONlD /lRO|1||
S to synonimy typu DlC1MA|.
W MySQL 4.1.0 dodano synonim |1XlD w celu osignicia kompatybilnoci
z innymi serwerami.
4.1. Przegld typw dla kolumny 129
4.1.2. Przegld typw zwizanych z dat i czasem
Poniej znajduje si podsumowanie typw kolumn przeznaczonych dla czasu i daty.
Dodatkowe informacje na ten temat mona znale w podrozdziale 4.3. Wymogi do-
tyczce pamici potrzebnej do przechowywania danych w kolumnach zostay podane
w podrozdziale 4.5.
DATl
Data. Obsugiwany zakres obejmuje daty od ``0000`0`` do `9999`o``.
W MySQL wartoci DATl wywietlane s w formacie `RRRRMMDD`, ale mona
przypisywa wartoci do kolumn DATl przy uyciu acuchw lub liczb.
DATlT1Ml
Kombinacja daty i czasu. Obsugiwany zakres obejmuje wartoci
od ``0000`0` 000000` do `9999`o` ob9b9`. W MySQL wartoci
DATlT1Ml wywietlane s w formacie `RRRRMMDD OOMMSS`, ale mona
przypisywa wartoci do kolumn DATlT1Ml przy uyciu acuchw lub liczb.
T1MlSTAMP/)
Znacznik czasu. Obsugiwany zakres rozpoczyna si od daty ``9/00`0``
i siga roku 0o/.
Kolumna typu T1MlSTAMP przydaje si do rejestracji daty i godziny operacji
wstawiania lub aktualizacji. Pierwszej kolumnie T1MlSTAMP w tabeli
automatycznie przypisywana jest data i czas ostatniej operacji, jeli tylko tych
wartoci nie wprowadzi rcznie uytkownik. Dowolnej kolumnie T1MlSTAMP
mona rwnie przypisa biec dat i godzin, wpisujc do niej warto NU||.
Od MySQL 4.1 wartoci T1MlSTAMP s zwracane w postaci acuchw
w formacie `RRRRMMDD OOMMSS`. Aby uzyska warto w postaci liczby,
naley doda do kolumn tego typu 0. Inne szerokoci wywietlania
znacznika czasu nie s obsugiwane.
W wersjach poprzedzajcych MySQL 4.1 wartoci T1MlSTAMP s wywietlane
w formacie RRRRMMDDOOMMSS, RRMMDDOOMMSS, RRRRMMDD lub RRMMDD w zalenoci
od tego, czy parametr / jest rwny 14 (albo go brak), 12, 8 lub 6. Mona jednak
przypisywa wartoci do kolumn T1MlSTAMP przy uyciu acuchw lub liczb.
Argument / wpywa tylko na sposb wywietlania kolumny T1MlSTAMP, a nie
na jej przechowywanie. Wartoci kolumny s zawsze zapisywane w czterech
bajtach. W MySQL od wersji 4.0.12 pojawia si opcja ne., dziki ktrej
mona zmieni dziaanie serwera, upodabniajc je do MySQL 4.1.
Naley odnotowa, e kolumny T1MlSTAMP/), gdzie /jest rwne 8 lub 14,
s traktowane jako liczby, natomiast reszta kolumn T1MlSTAMP/) jest
traktowana jako acuchy. Jest to rodzaj gwarancji, e uytkownik bdzie
mg wiarygodnie usuwa i przywraca tabele tego typu.
T1Ml
Godzina. Obsugiwany zakres obejmuje wartoci od `8o8b9b9`
do ` 8o8b9b9`. W MySQL wartoci T1Ml wywietlane s w formacie
` OOMMSS`, ale mona przypisa wartoci do kolumn T1Ml przy uyciu
zarwno acuchw, jak i liczb.
130 Rozdzia 4. Typy kolumn
YlAR|4)
Rok w formacie dwu- lub czterocyfrowym. Domylnym formatem jest rok
zapisany za pomoc czterech cyfr. W tym formacie dostpne wartoci nale
do przedziau od `90` do `bb oraz 0. W formacie dwucyfrowym wartoci
dopuszczalne to liczby z zakresu od /0 do 69, ktre reprezentuj daty od roku
1970 do 2069. W MySQL wartoci YlAR wywietlane s w formacie RRRR,
ale mona przypisa wartoci do kolumn YlAR przy uyciu tak acuchw,
jak i liczb. Typ YlAR jest niedostpny dla wersji wczeniejszych ni MySQL 3.22.
4.1.3. Przegld typw acuchowych
Poniej znajduje si przegld typw acuchowych. Dodatkowe informacje mona
znale w podrozdziale 4.4. Wymogi dotyczce pamici potrzebnej do przechowywa-
nia danych w kolumnach zostay podane w podrozdziale 4.5.
W niektrych przypadkach MySQL moe zmieni kolumn typu acuchowego na typ,
ktry bdzie si rni od zadeklarowanego w instrukcji CRlATl TAB|l lub A|TlR TAB|l.
Wicej informacji na ten temat znajduje si w podpunkcie 6.2.5.2.
Od wersji 4.1 w MySQL pojawia si zmiana, ktra wpywa na wiele typw kolumn typu
acuchowego. Definicja kolumn typu znakowego moe zawiera atrybut CHARACTlR
SlT, ktry okrela zestaw znakw i opcjonalnie porzdek sortowania. Dotyczy to typw
CHAR, VARCHAR, rnych typw TlXT oraz lNUM i SlT, na przykad:
CRF/TF T/B|F !
FNUMYCTVQ
YCTVQ|
1 lub 2 bajty w zalenoci od liczby wartoci wyliczenia
(maksymalnie 65 535)
SFTYCTVQ
YCTVQ|
1, 2, 3, 4 lub 8 bajtw w zalenoci od liczby elementw zestawu
(maksymalnie 64)
Typy VARCHAR, B|OB i TlXT maj zmienn dugo. Dla kadego ilo pamici potrzeb-
nej do przechowania wartoci bdzie zalee od faktycznej dugoci wartoci kolumny
(reprezentowanej w ostatniej tabeli przez .), a nie od maksymalnego moliwego roz-
miaru danego typu. Kolumna VARCHAR`0) na przykad moe przechowywa acuch
o maksymalnej dugoci 10 znakw. Faktyczna ilo wymaganej pamici to dugo
acucha (.) plus 1 bajt do zapisania dugoci acucha. Dla acucha `.|cc` parametr
. jest rwny 4, a wymagany rozmiar pamici to 5 bajtw.
Typy B|OB i TlXT wymagaj 1, 2, 3 lub 4 bajtw do zapisu dugoci wartoci kolumny
w zalenoci od maksymalnej moliwej dugoci tego typu (patrz punkt 4.4.2).
Rozmiar obiektu lNUM jest ustalany na podstawie liczby rnych wartoci wyliczenia.
Przy wyliczeniach do 255 moliwych wartoci uywany jest jeden bajt, a przy wyli-
czeniach do 65 535 wartoci uywane s 2 bajty (patrz punkt 4.4.3).
Rozmiar obiektu SlT jest okrelany przez liczb rnych elementw zestawu. Jeli ze-
staw ma rozmiar 0, obiekt zajmuje 0/).8 bajtw, ktr to warto zaokrgla si do
1, 2, 3, 4 lub 8 bajtw. Obiekt SlT moe mie do 64 elementw (patrz punkt 4.4.4).
4.6. Wybieranie odpowiedniego typu
dla kolumny
Aby jak najbardziej wydajnie korzysta z pamici, naley we wszystkich przypadkach
stara si stosowa typ, ktry bdzie jak najbardziej dokadny. Jeli na przykad w kolum-
nie liczb cakowitych bd przechowywane wartoci z zakresu od ` do 99999, najlep-
szym wyborem bdzie typ MlD1UM1NT UNS1ONlD. Ze wszystkich typw, ktre reprezentuj
wszystkie wymagane wartoci, zajmuje najmniej pamici.
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych 153
Powszechnym problemem jest dokadne przedstawianie wartoci walutowych. W MySQL
naley do tego uywa typu DlC1MA|, za pomoc ktrego wartoci zapisywane s w for-
mie acucha. Dziki temu nie traci si na dokadnoci (mimo to obliczenia z wartociami
DlC1MA| mog by wci wykonywane przy uyciu operacji dziaajcych na liczbach
z podwjn precyzj). Jeli dokadno nie jest zbyt wana, by moe wystarczajco
dobrym typem bdzie DOUB|l.
Aby uzyska wiksz dokadno, mona zawsze przeksztaci warto na typ stao-
przecinkowy, przechowywany w B1O1NT. Pozwoli to wykonywa wszystkie obliczenia
na liczbach cakowitych i tylko w razie potrzeby przeksztaca wynik z powrotem na
wartoci zmiennoprzecinkowe.
4.7. Wykorzystywanie typw kolumn
z innych mechanizmw baz danych
Aby uatwi uytkownikowi zastosowanie kodu pochodzcego od innych producentw,
moliwe jest odwzorowanie typw kolumn w sposb przedstawiony w poniszej tabeli.
Odwzorowania te upraszczaj operacj importu do MySQL definicji tabel z innych
mechanizmw baz danych:
Typ innych producentw Typ MySQL
BTN/RY/| C'/R/| BTN/RY
C'/R V/RYTN/| V/RC'/R/|
F|J/T4 F|J/T
F|J/T8 OJUB|F
TNT1 TTNYTNT
TNT SM/||TNT
TNT: MFOTUMTNT
TNT4 TNT
TNT8 BTTNT
|JN V/RBTN/RY MFOTUMB|JB
|JN V/RC'/R MFOTUMTFXT
|JN MFOTUMTFXT oc M,SJ| 410|
MTOO|FTNT MFOTUMTNT
V/RBTN/RY/| C'/R/| BTN/RY
Odwzorowanie typw kolumn jest wykonywane podczas tworzenia tabeli, po czym
oryginalne deklaracje typu zostaj usunite. Jeli uytkownik utworzy tabel z typami
stosowanymi przez innych producentw, po czym wyda polecenie DlSCR1Bl PC\YCA
VCDGNK, zostanie przedstawiona struktura tabeli z odpowiadajcymi im typami MySQL.
4 Spis treci
1.8.5. Rozbienoci midzy MySQL a standardem SQL ........................................ 60
1.8.6. Jak MySQL radzi sobie z ograniczeniami ................................................. 67
1.8.7. Znane bdy i projektowe braki w MySQL................................................ 69
Rozdzia 2. Struktura jzyka .............................................................................. 77
2.1. Literay................................................................................................................... 77
2.1.1. acuchy ................................................................................................... 77
2.1.2. Liczby........................................................................................................ 80
2.1.3. Wartoci szesnastkowe .............................................................................. 80
2.1.4. Wartoci logiczne ...................................................................................... 81
2.1.5. Wartoci NULL......................................................................................... 81
2.2. Nazwy baz danych, tabel, indeksw, kolumn i aliasw......................................... 81
2.2.1. Kwalifikatory identyfikatorw .................................................................. 83
2.2.2. Znaczenie wielkoci liter w nazwach identyfikatorw.............................. 83
2.3. Zmienne definiowane przez uytkownika.............................................................. 85
2.4. Zmienne systemowe............................................................................................... 87
2.4.1. Strukturalne zmienne systemowe .............................................................. 89
2.5. Skadnia komentarza .............................................................................................. 91
2.6. Traktowanie sw zastrzeonych w MySQL.......................................................... 92
Rozdzia 3. Obsuga zestaww znakw............................................................... 95
3.1. Oglne informacje o zestawach znakw i sortowaniu ........................................... 95
3.2. Zestawy znakw i porzdki sortowania w MySQL................................................ 96
3.3. Okrelanie domylnego zestawu znakw i sortowania........................................... 98
3.3.1. Zestaw znakw i sortowanie dla serwera................................................... 98
3.3.2. Zestaw znakw i sortowanie dla bazy danych........................................... 99
3.3.3. Zestaw znakw i sortowanie dla tabeli .................................................... 100
3.3.4. Zestaw znakw i sortowanie dla kolumny............................................... 100
3.3.5. Przykady przypisywania zestawu znakw i sortowania ......................... 101
3.3.6. Zestawy znakw i sortowanie dla poczenia .......................................... 102
3.3.7. Zestaw znakw i sortowanie dla acucha znakw.................................. 104
3.3.8. Wykorzystywanie COLLATE w instrukcjach SQL.................................... 105
3.3.9. Priorytet klauzuli COLLATE .................................................................. 106
3.3.10. Operator BINARY................................................................................... 106
3.3.11. Niektre przypadki specjalne, w ktrych trudno okreli sortowanie...... 106
3.3.12. Sortowania musz by odpowiednie dla danego zestawu znakw........... 107
3.3.13. Przykad wpywu porzdku sortowania ................................................... 108
3.4. Operacje, na ktre ma wpyw obsuga zestaww znakw.................................... 109
3.4.1. acuchy wyjciowe ............................................................................... 109
3.4.2. CONVERT()............................................................................................ 110
3.4.3. CAST() .................................................................................................... 110
3.4.4. Instrukcje SHOW .................................................................................... 111
3.5. Obsuga Unicode.................................................................................................. 112
3.6. UTF8 dla metadanych.......................................................................................... 113
3.7. Kompatybilno z innymi systemami zarzdzania baz danych .......................... 115
3.8. Nowy format pliku konfiguracji zestawu znakw................................................ 115
3.9. Narodowe zestawy znakw.................................................................................. 115
3.10. Aktualizacja zestaww znakw z MySQL 4.0..................................................... 116
3.10.1. Zestawy znakw w wersji 4.0 i odpowiadajce im w wersji 4.1 pary
skadajce si z zestawu znakw i sortowania......................................... 117
3.10.2. Przeksztacanie kolumn znakowych wersji 4.0 na format 4.1 ................. 118
3.11. Zestawy znakw i sortowania obsugiwane przez MySQL.................................. 118
3.11.1. Zestawy znakw standardu Unicode ....................................................... 119
3.11.2. Zestawy znakw zachodnioeuropejskich................................................. 120
3.11.3. Zestawy znakw dla Europy Centralnej .................................................. 121
Spis treci 5
3.11.4. Zestawy znakw poudniowoeuropejskich i rodkowowschodnich......... 122
3.11.5. Zestawy znakw regionu batyckiego...................................................... 123
3.11.6. Zestawy znakw dla cyrylicy................................................................... 123
3.11.7. Azjatyckie zestawy znakw..................................................................... 124
Rozdzia 4. Typy kolumn.................................................................................. 125
4.1. Przegld typw dla kolumny................................................................................ 126
4.1.1. Omwienie typw liczbowych ................................................................ 126
4.1.2. Przegld typw zwizanych z dat i czasem............................................ 129
4.1.3. Przegld typw acuchowych ................................................................ 130
4.2. Typy liczbowe...................................................................................................... 132
4.3. Typy zwizane z dat i czasem............................................................................ 135
4.3.1. Typy DATETIME, DATE i TIMESTAMP............................................. 137
4.3.2. Typ TIME................................................................................................ 142
4.3.3. Typ YEAR............................................................................................... 143
4.3.4. Problem roku 2000 a typy zwizane z dat.............................................. 144
4.4. Typy acuchowe ................................................................................................. 144
4.4.1. Typy CHAR i VARCHAR...................................................................... 144
4.4.2. Typy BLOB i TEXT................................................................................ 146
4.4.3. Typ Enum................................................................................................ 147
4.4.4. Typ SET .................................................................................................. 149
4.5. Rozmiar pamici potrzebnej dla typw kolumn................................................... 151
4.6. Wybieranie odpowiedniego typu dla kolumny..................................................... 152
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych ............... 153
Rozdzia 5. Funkcje i operatory........................................................................ 155
5.1. Operatory ............................................................................................................. 156
5.1.1. Nawiasy................................................................................................... 156
5.1.2. Operatory porwnania ............................................................................. 156
5.1.3. Operatory logiczne .................................................................................. 161
5.1.4. Operatory rozrniania wielkoci liter..................................................... 163
5.2. Funkcje kontroli przepywu ................................................................................. 163
5.3. Funkcje acuchowe............................................................................................. 166
5.3.1. Funkcje porwnywania acuchw.......................................................... 176
5.4. Funkcje liczbowe ................................................................................................. 178
5.4.1. Operatory arytmetyczne........................................................................... 178
5.4.2. Funkcje matematyczne ............................................................................ 180
5.5. Funkcje daty i godziny......................................................................................... 186
5.6. Funkcje obsugi wyszukiwania penotekstowego................................................. 202
5.6.1. Boolowskie wyszukiwania penotekstowe............................................... 205
5.6.2. Wyszukiwania penotekstowe z rozwijaniem zapytania .......................... 207
5.6.3. Ograniczenia dla wyszukiwania penotekstowego................................... 208
5.6.4. Modyfikowanie wyszukiwania penotekstowego MySQL ...................... 209
5.6.5. Lista rzeczy do zrobienia dla wyszukiwania penotekstowego................ 211
5.7. Funkcje konwersji typw..................................................................................... 211
5.8. Inne funkcje ......................................................................................................... 214
5.8.1. Funkcje bitowe ........................................................................................ 214
5.8.2. Funkcje szyfrujce................................................................................... 215
5.8.3. Funkcje informacyjne .............................................................................. 219
5.8.4. Funkcje rne .......................................................................................... 223
5.9. Funkcje i modyfikatory do zastosowania z klauzulami GROUP BY................... 226
5.9.1. Funkcje GROUP BY (agregujce)........................................................... 226
5.9.2. Modyfikatory GROUP BY...................................................................... 229
5.9.3. GROUP BY z ukrytymi polami............................................................... 232
6 Spis treci
Rozdzia 6. Skadnia instrukcji SQL .................................................................. 235
6.1. Instrukcje operujce na danych............................................................................ 235
6.1.1. Skadnia instrukcji DELETE................................................................... 235
6.1.2. Skadnia instrukcji DO ............................................................................ 238
6.1.3. Skadnia instrukcji HANDLER............................................................... 238
6.1.4. Skadnia instrukcji INSERT .................................................................... 240
6.1.5. Skadnia instrukcji LOAD DATA INFILE.............................................. 246
6.1.6. Skadnia instrukcji REPLACE................................................................. 255
6.1.7. Skadnia instrukcji SELECT.................................................................... 256
6.1.8. Skadnia podzapyta................................................................................ 265
6.1.9. Skadnia instrukcji TRUNCATE............................................................. 276
6.1.10. Skadnia instrukcji UPDATE................................................................... 276
6.2. Instrukcje definiowania danych ........................................................................... 278
6.2.1. Skadnia instrukcji ALTER DATABASE ............................................... 278
6.2.2. Skadnia instrukcji ALTER TABLE........................................................ 279
6.2.3. Skadnia instrukcji CREATE DATABASE............................................. 285
6.2.4. Skadnia instrukcji CREATE INDEX ..................................................... 285
6.2.5. Skadnia instrukcji CREATE TABLE..................................................... 287
6.2.6. Skadnia instrukcji DROP DATABASE.................................................. 301
6.2.7. Skadnia instrukcji DROP INDEX.......................................................... 302
6.2.8. Skadnia instrukcji DROP TABLE.......................................................... 302
6.2.9. Skadnia instrukcji RENAME TABLE.................................................... 303
6.3. Instrukcje programu MySQL............................................................................... 304
6.3.1. Skadnia instrukcji DESCRIBE
(odczytywanie informacji na temat kolumn) ........................................... 304
6.3.2. Skadnia instrukcji USE........................................................................... 304
6.4. Instrukcje obsugi transakcji i blokowania........................................................... 305
6.4.1. Skadnia instrukcji START TRANSACTION, COMMIT
oraz ROLLBACK.................................................................................... 305
6.4.2. Instrukcje niemoliwe do wycofania ....................................................... 306
6.4.3. Instrukcje wykonujce niejawne zatwierdzenie......................................... 306
6.4.4. Skadnia instrukcji SAVEPOINT i ROLLBACK TO SAVEPOINT....... 307
6.4.5. Skadnia instrukcji LOCK TABLES oraz UNLOCK TABLES .............. 307
6.4.6. Skadnia instrukcji SET TRANSACTION.............................................. 310
6.5. Administracja baz danych .................................................................................. 311
6.5.1. Instrukcje zarzdzajce kontami uytkownikw ....................................... 311
6.5.2. Instrukcje do konserwacji tabel ............................................................... 319
6.5.3. Skadnia instrukcji SET i SHOW ............................................................ 326
6.5.4. Inne instrukcje administracyjne ............................................................... 347
6.6. Instrukcje replikacji.............................................................................................. 352
6.6.1. Instrukcje SQL sterujce serwerem gwnym ......................................... 352
6.6.2. Instrukcje SQL sterujce serwerami podrzdnymi .................................. 354
Rozdzia 7. Rozszerzenia przestrzenne w MySQL............................................... 365
7.1. Wstp ................................................................................................................... 365
7.2. Model geometryczny OpenGIS............................................................................ 366
7.2.1. Hierarchia klas geometrycznych.............................................................. 366
7.2.2. Klasa Geometry ....................................................................................... 368
7.2.3. Klasa Point .............................................................................................. 369
7.2.4. Klasa Curve ............................................................................................. 369
7.2.5. Klasa LineString...................................................................................... 370
7.2.6. Klasa Surface........................................................................................... 370
7.2.7. Klasa Polygon.......................................................................................... 370
7.2.8. Klasa GeometryCollection....................................................................... 371
Spis treci 7
7.2.9. Klasa MultiPoint...................................................................................... 371
7.2.10. Klasa MultiCurve .................................................................................... 372
7.2.11. Klasa MultiLineString............................................................................. 372
7.2.12. Klasa MultiSurface .................................................................................. 372
7.2.13. Klasa MultiPolygon................................................................................. 373
7.3. Obsugiwane formaty danych przestrzennych...................................................... 373
7.3.1. Format tekstowy WKT............................................................................ 374
7.3.2. Format binarny WKB.............................................................................. 374
7.4. Tworzenie bazy danych z rozszerzeniami przestrzennymi................................... 375
7.4.1. Typy danych przestrzennych w MySQL ................................................. 375
7.4.2. Tworzenie wartoci przestrzennych......................................................... 376
7.4.3. Tworzenie kolumn przestrzennych.......................................................... 379
7.4.4. Wypenianie kolumn przestrzennych....................................................... 379
7.4.5. Pobieranie danych przestrzennych........................................................... 381
7.5. Analiza informacji przestrzennych....................................................................... 381
7.5.1. Funkcje konwersji formatw geometrycznych ........................................ 382
7.5.2. Funkcje klasy Geometry.......................................................................... 382
7.5.3. Funkcje tworzce nowe geometrie na podstawie istniejcych................. 388
7.5.4. Funkcje testujce relacje przestrzenne
midzy obiektami geometrycznymi ......................................................... 389
7.5.5. Relacje midzy minimalnymi prostoktami otaczajcymi
dla poszczeglnych geometrii.................................................................. 390
7.5.6. Funkcje sprawdzajce relacje przestrzenne pomidzy geometriami ........ 391
7.6. Optymalizacja analizy przestrzennej.................................................................... 392
7.6.1. Tworzenie indeksw przestrzennych....................................................... 392
7.6.2. Wykorzystanie indeksu przestrzennego................................................... 393
7.7. Zgodno MySQL ze standardem........................................................................ 395
7.7.1. Niezaimplementowane funkcje GIS ........................................................ 395
Rozdzia 8. Procedury i funkcje skadowane ..................................................... 397
8.1. Skadnia procedur skadowanych......................................................................... 398
8.1.1. Utrzymanie procedur skadowanych........................................................ 398
8.1.2. SHOW PROCEDURE STATUS oraz SHOW FUNCTION STATUS.... 401
8.1.3. Instrukcja CALL...................................................................................... 402
8.1.4. Instrukcja zoona BEGIN ... END.......................................................... 402
8.1.5. Instrukcja DECLARE.............................................................................. 402
8.1.6. Zmienne w procedurach skadowanych................................................... 402
8.1.7. Warunki i podprogramy obsugi .............................................................. 403
8.1.8. Kursory.................................................................................................... 405
8.1.9. Konstrukcje sterowania przepywem sterowania..................................... 406
Rozdzia 9. Obsuga bdw w MySQL .............................................................. 409
9.1. Zwracane bdy.................................................................................................... 409
9.2. Komunikaty bdw............................................................................................. 419
Dodatek A Rozwizywanie problemw z zapytaniami ........................................435
A.1. Zagadnienia zwizane z zapytaniami ................................................................... 435
A.1.1. Wielko liter przy wyszukiwaniu........................................................... 435
A.1.2. Problemy z kolumnami typu DATE ........................................................ 436
A.1.3. Problemy z wartociami NULL............................................................... 437
A.1.4. Problemy z synonimami kolumn ............................................................. 438
A.1.5. Bd wycofania dla tabel nietransakcyjnych............................................ 439
A.1.6. Usuwanie wierszy ze zwizanych tabel ................................................... 439
A.1.7. Rozwizywanie problemw z brakujcymi wierszami ............................ 440
A.1.8. Problemy z porwnaniami zmiennoprzecinkowymi................................ 441
8 Spis treci
A.2. Problemy zwizane z optymalizatorem................................................................ 443
A.3. Problemy z definicj tabel.................................................................................... 444
A.3.1. Problemy z instrukcj ALTER TABLE................................................... 444
A.3.2. Jak zmieni porzdek kolumn w tabeli .................................................... 445
A.3.3. Problemy z tabelami tymczasowymi ....................................................... 445
Dodatek B Wyraenia regularne w MySQL........................................................ 447
Skorowidz...................................................................................... 451
Rozdzia 4.
Typy kolumn
W MySQL dostpnych jest wiele typw danych, ktre mona pogrupowa w kilku pod-
stawowych kategoriach, takich jak typy liczbowe, typy zwizane z dat i czasem oraz
typy acuchowe. Na pocztku tego rozdziau przedstawiony zostanie przegld wspo-
mnianych przed chwil typw kolumn, po czym nastpi bardziej szczegowy opis ich
waciwoci z podziaem na poszczeglne kategorie i wreszcie zamieszczone zostanie
podsumowanie informacji dotyczcych wymaga co do rozmiaru pamici potrzebnej
do przechowania danej kolumny. Sam przegld jest z zamierzenia krtki. Dodatkowe
informacje o poszczeglnych typach kolumn, na przykad dopuszczalny format, w kt-
rym mona deklarowa wartoci, zostay uwzgldnione w szczegowych omwieniach.
Od wersji 4.1 MySQL rozpoznaje rozszerzenia do obsugi danych przestrzennych.
Informacje o typach przestrzennych znajduj si w rozdziale 7. tego podrcznika.
W czci opisu typw kolumn zastosowane zostay nastpujce reguy:
/
Wskazuje maksymalny rozmiar wywietlania liczby lub acucha.
Maksymalnym dopuszczalnym rozmiarem wywietlania jest 255.
&
Dotyczy typw zmiennoprzecinkowych i staoprzecinkowych. Okrela liczb
cyfr po kropce dziesitnej. Maksymalna dopuszczalna warto wynosi 30,
ale nie powinna przekracza /.
Nawiasy kwadratowe ( ) identyfikuj opcjonalne fragmenty deklaracji typu.
126 Rozdzia 4. Typy kolumn
4.1. Przegld typw dla kolumny
4.1.1. Omwienie typw liczbowych
Poniej znajduje si przegld liczbowych typw dla kolumn. Bardziej szczegowe
informacje mona znale w podrozdziale 4.2. Wymogi dotyczce rozmiaru pamici
potrzebnej do przechowywania kolumn znajduj si w podrozdziale 4.5.
Jeli dla kolumny liczbowej zostanie okrelony atrybut /lRO|1||, MySQL automatycznie
doda do kolumny atrybut UN1S1ONlD.
Naley uwaa podczas odejmowania dwch wartoci liczbowych, z ktrych jedna ma
typ UN1S1ONlD. Uzyskany wynik bdzie rwnie tego typu! patrz podrozdzia 5.7.
T1NY1NT/) UNS1ONlD /lRO|1||
Bardzo maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od `8
do `/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do bb.
B1T, BOO|, BOO|lAN
To s synonimy T1NY1NT`). Synonim BOO|lAN zosta dodany w MySQL 4.1.0.
Warto zerowa to inaczej fasz. Wartoci niezerowe traktowane s jako prawda.
W przyszoci wprowadzona zostanie pena, zgodna ze standardem SQL
obsuga typu boolowskiego.
SMA||1NT/) UNS1ONlD /lRO|1||
Maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od o/68
do o/6/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do 6bbob.
MlD1UM1NT/) UNS1ONlD /lRO|1||
rednia liczba cakowita. Dla liczb ze znakiem zakres wynosi od 8o88608
do 8o8860/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0
do `6///`b.
1NT/) UNS1ONlD /lRO|1||
Standardowa liczba cakowita. Dla liczb ze znakiem zakres wynosi
od `4/48o648 do `4/48o64/. W przypadku liczb bez znaku zakres
obejmuje wartoci od 0 do 49496/9b.
1NTlOlR/) UNS1ONlD /lRO|1||
Jest to synonim dla typu 1NT.
B1O1NT/) UNS1ONlD /lRO|1||
Dua liczba cakowita. Dla liczb ze znakiem zakres wynosi
od 9oo/0o68b4//b808 do 9oo/0o68b4//b80/. W przypadku liczb
bez znaku zakres obejmuje wartoci od 0 do `8446/440/o/09bb`6`b.
4.1. Przegld typw dla kolumny 127
Oto kilka spraw, o ktrych naley wiedzie odnonie kolumn typu B1O1NT:
Wszystkie obliczenia wykonywane s przy uyciu wartoci typu B1O1NT
lub DOUB|l ze znakiem. Oznacza to, e duych liczb cakowitych bez
znaku, wikszych ni 9oo/0o68b4//b80/ (63 bity), mona uywa tylko
z funkcjami bitowymi! Niezastosowanie si do tej zasady moe doprowadzi
do uzyskania w wyniku liczby, ktrej kilka ostatnich cyfr jest bdnych
z powodu bdw w zaokrglaniu podczas konwersji wartoci B1O1NT
na DOUB|l.
MySQL 4.0 potrafi obsugiwa B1O1NT w nastpujcych przypadkach:
Podczas wykorzystywania liczb cakowitych do przechowywania
duych wartoci bez znaku w kolumnie typu B1O1NT.
W M1NPC\YCAMQN) lub MAXPC\YCAMQN), gdzie PC\YCAMQN odnosi si
do kolumny B1O1NT.
Podczas korzystania z operatorw (midzy innymi , , *), gdy oba
argumenty s liczbami cakowitymi.
Zawsze istnieje moliwo zapisania w kolumnie B1O1NT dokadnej wartoci
liczby cakowitej. Wystarczy zapisa j przy uyciu acucha. W takim
przypadku zostanie dokonana konwersja acucha na liczb; konwersja
nie bdzie wymaga poredniego etapu przeksztacajcego liczb na jej
odpowiednik o podwjnej precyzji.
Podczas korzystania z operatorw , i * stosowana jest arytmetyka
B1O1NT, jeli oba argumenty maj warto liczby cakowitej! To oznacza,
e pomnoenie dwch duych liczb cakowitych (lub wynikw funkcji,
ktra zwraca liczby cakowite) moe spowodowa nieoczekiwane
rezultaty, jeli wynik przekroczy liczb 9oo/0o68b4//b80/.
||OATR) UNS1ONlD /lRO|1||
Liczba zmiennoprzecinkowa. Parametr R oznacza precyzj i moe przyjmowa
warto od 0 do 14 dla liczb zmiennoprzecinkowych o dokadnoci do jednego
znaku i od 25 do 53 dla liczb zmiennoprzecinkowych o dokadnoci do dwch
znakw. To przypomina opisane poniej typy ||OAT i DOUB|l. Typ ||OATR)
ma ten sam zakres, jaki posiadaj odpowiadajce mu typy ||OAT i DOUB|l,
ale w jego przypadku niezdefiniowany jest maksymalny rozmiar wywietlania
i liczba miejsc po przecinku.
Od wersji 3.23 MySQL jest to prawdziwa warto zmiennoprzecinkowa.
W wersjach wczeniejszych liczba typu ||OATR) bya zawsze liczb o dwch
miejscach po przecinku.
Ta skadnia zostaa dodana w celu zachowania zgodnoci ze standardem ODBC.
Stosowanie typu ||OAT moe spowodowa wystpienie pewnych
nieoczekiwanych problemw, poniewa wszystkie obliczenia w MySQL
s wykonywane z podwjn precyzj patrz punkt A.1.7).
||OAT/, &) UNS1ONlD /lRO|1||
128 Rozdzia 4. Typy kolumn
Maa liczba zmiennoprzecinkowa (o dokadnoci do jednego znaku). Liczba
ta moe przyj wartoci: od o408o466lo8 do ``/b494ob`lo8, 0,
i od ``/b494ob`lo8 do o408o466lo8. Jeli podany jest atrybut UN1S1ONlD,
niedozwolone s wartoci ujemne. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ ||OAT bez argumentw
lub typ ||OATR) (gdzie Rjest liczb z zakresu od 0 do 24) oznacza liczb
zmiennoprzecinkow o pojedynczej precyzji.
DOUB|l/, &) UNS1ONlD /lRO|1||
Standardowa liczba zmiennoprzecinkowa (o dokadnoci do dwch
znakw). Liczba ta moe przyj wartoci: od `/9/69o`o486o`b/lo08
do b0/o8b8b0/0`4lo08, 0, i od b0/o8b8b0/0`4lo08
do `/9/69o`o486o`b/lo08. Jeli podany jest atrybut UN1S1ONlD, wartoci
ujemne s niedozwolone. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ DOUB|l
bez argumentw lub ||OATR) (gdzie R jest liczb z zakresu od 25 do 53)
oznacza liczb zmiennoprzecinkow o podwjnej precyzji.
DOUB|l PRlC1S1ON/, &) UNS1ONlD /lRO|1||
RlA|/, &) UNS1ONlD /lRO|1||
S to synonimy DOUB|l. Wyjtek: Jeli dla parametru s;_cce serwera
wczono opcj RlA|_AS_||OAT, synonimem ||OAT jest RlA|, a nie DOUB|l.
DlC1MA|/, &) UNS1ONlD /lRO|1||
Niezapakowana liczba staoprzecinkowa. Zachowanie kolumny tego typu
przypomina kolumn typu CHAR. Niezapakowana oznacza, e liczba jest
przechowywana w postaci acucha przy uyciu jednego znaku na kad cyfr
wartoci. Parametr / definiuje maksymaln liczb cyfr, a & liczb miejsc
po przecinku. W parametrze / nie s brane pod uwag: kropka dziesitna
(odpowiadajca w naszej notacji przecinkowi) i (dla liczb ujemnych) znak ,
cho jest dla nich zarezerwowane miejsce. Wartoci nie maj miejsc
po przecinku lub czci uamkowych, jeli & jest rwne 0. Maksymalny zakres
wartoci typu DlC1MA| jest taki sam, jak dla typu DOUB|l, ale rzeczywisty zakres
danej kolumny DlC1MA| moe by ograniczony przez wybr argumentw / i &.
Jeli podany jest atrybut UN1S1ONlD, wartoci ujemne s niedozwolone.
W przypadku braku argumentu &, domyln wartoci jest 0. Jeli pominity
jest parametr /, domyln wartoci jest 10.
W wersjach poprzedzajcych MySQL 3.23 argument / musi by wystarczajco
duy, by zawiera obszar potrzebny dla znaku i kropki dziesitnej.
DlC/,&) UNS1ONlD /lRO|1||
NUMlR1C/,&) UNS1ONlD /lRO|1||
|1XlD/, &) UNS1ONlD /lRO|1||
S to synonimy typu DlC1MA|.
W MySQL 4.1.0 dodano synonim |1XlD w celu osignicia kompatybilnoci
z innymi serwerami.
4.1. Przegld typw dla kolumny 129
4.1.2. Przegld typw zwizanych z dat i czasem
Poniej znajduje si podsumowanie typw kolumn przeznaczonych dla czasu i daty.
Dodatkowe informacje na ten temat mona znale w podrozdziale 4.3. Wymogi do-
tyczce pamici potrzebnej do przechowywania danych w kolumnach zostay podane
w podrozdziale 4.5.
DATl
Data. Obsugiwany zakres obejmuje daty od ``0000`0`` do `9999`o``.
W MySQL wartoci DATl wywietlane s w formacie `RRRRMMDD`, ale mona
przypisywa wartoci do kolumn DATl przy uyciu acuchw lub liczb.
DATlT1Ml
Kombinacja daty i czasu. Obsugiwany zakres obejmuje wartoci
od ``0000`0` 000000` do `9999`o` ob9b9`. W MySQL wartoci
DATlT1Ml wywietlane s w formacie `RRRRMMDD OOMMSS`, ale mona
przypisywa wartoci do kolumn DATlT1Ml przy uyciu acuchw lub liczb.
T1MlSTAMP/)
Znacznik czasu. Obsugiwany zakres rozpoczyna si od daty ``9/00`0``
i siga roku 0o/.
Kolumna typu T1MlSTAMP przydaje si do rejestracji daty i godziny operacji
wstawiania lub aktualizacji. Pierwszej kolumnie T1MlSTAMP w tabeli
automatycznie przypisywana jest data i czas ostatniej operacji, jeli tylko tych
wartoci nie wprowadzi rcznie uytkownik. Dowolnej kolumnie T1MlSTAMP
mona rwnie przypisa biec dat i godzin, wpisujc do niej warto NU||.
Od MySQL 4.1 wartoci T1MlSTAMP s zwracane w postaci acuchw
w formacie `RRRRMMDD OOMMSS`. Aby uzyska warto w postaci liczby,
naley doda do kolumn tego typu 0. Inne szerokoci wywietlania
znacznika czasu nie s obsugiwane.
W wersjach poprzedzajcych MySQL 4.1 wartoci T1MlSTAMP s wywietlane
w formacie RRRRMMDDOOMMSS, RRMMDDOOMMSS, RRRRMMDD lub RRMMDD w zalenoci
od tego, czy parametr / jest rwny 14 (albo go brak), 12, 8 lub 6. Mona jednak
przypisywa wartoci do kolumn T1MlSTAMP przy uyciu acuchw lub liczb.
Argument / wpywa tylko na sposb wywietlania kolumny T1MlSTAMP, a nie
na jej przechowywanie. Wartoci kolumny s zawsze zapisywane w czterech
bajtach. W MySQL od wersji 4.0.12 pojawia si opcja ne., dziki ktrej
mona zmieni dziaanie serwera, upodabniajc je do MySQL 4.1.
Naley odnotowa, e kolumny T1MlSTAMP/), gdzie /jest rwne 8 lub 14,
s traktowane jako liczby, natomiast reszta kolumn T1MlSTAMP/) jest
traktowana jako acuchy. Jest to rodzaj gwarancji, e uytkownik bdzie
mg wiarygodnie usuwa i przywraca tabele tego typu.
T1Ml
Godzina. Obsugiwany zakres obejmuje wartoci od `8o8b9b9`
do ` 8o8b9b9`. W MySQL wartoci T1Ml wywietlane s w formacie
` OOMMSS`, ale mona przypisa wartoci do kolumn T1Ml przy uyciu
zarwno acuchw, jak i liczb.
130 Rozdzia 4. Typy kolumn
YlAR|4)
Rok w formacie dwu- lub czterocyfrowym. Domylnym formatem jest rok
zapisany za pomoc czterech cyfr. W tym formacie dostpne wartoci nale
do przedziau od `90` do `bb oraz 0. W formacie dwucyfrowym wartoci
dopuszczalne to liczby z zakresu od /0 do 69, ktre reprezentuj daty od roku
1970 do 2069. W MySQL wartoci YlAR wywietlane s w formacie RRRR,
ale mona przypisa wartoci do kolumn YlAR przy uyciu tak acuchw,
jak i liczb. Typ YlAR jest niedostpny dla wersji wczeniejszych ni MySQL 3.22.
4.1.3. Przegld typw acuchowych
Poniej znajduje si przegld typw acuchowych. Dodatkowe informacje mona
znale w podrozdziale 4.4. Wymogi dotyczce pamici potrzebnej do przechowywa-
nia danych w kolumnach zostay podane w podrozdziale 4.5.
W niektrych przypadkach MySQL moe zmieni kolumn typu acuchowego na typ,
ktry bdzie si rni od zadeklarowanego w instrukcji CRlATl TAB|l lub A|TlR TAB|l.
Wicej informacji na ten temat znajduje si w podpunkcie 6.2.5.2.
Od wersji 4.1 w MySQL pojawia si zmiana, ktra wpywa na wiele typw kolumn typu
acuchowego. Definicja kolumn typu znakowego moe zawiera atrybut CHARACTlR
SlT, ktry okrela zestaw znakw i opcjonalnie porzdek sortowania. Dotyczy to typw
CHAR, VARCHAR, rnych typw TlXT oraz lNUM i SlT, na przykad:
CRF/TF T/B|F !
FNUMYCTVQ
YCTVQ|
1 lub 2 bajty w zalenoci od liczby wartoci wyliczenia
(maksymalnie 65 535)
SFTYCTVQ
YCTVQ|
1, 2, 3, 4 lub 8 bajtw w zalenoci od liczby elementw zestawu
(maksymalnie 64)
Typy VARCHAR, B|OB i TlXT maj zmienn dugo. Dla kadego ilo pamici potrzeb-
nej do przechowania wartoci bdzie zalee od faktycznej dugoci wartoci kolumny
(reprezentowanej w ostatniej tabeli przez .), a nie od maksymalnego moliwego roz-
miaru danego typu. Kolumna VARCHAR`0) na przykad moe przechowywa acuch
o maksymalnej dugoci 10 znakw. Faktyczna ilo wymaganej pamici to dugo
acucha (.) plus 1 bajt do zapisania dugoci acucha. Dla acucha `.|cc` parametr
. jest rwny 4, a wymagany rozmiar pamici to 5 bajtw.
Typy B|OB i TlXT wymagaj 1, 2, 3 lub 4 bajtw do zapisu dugoci wartoci kolumny
w zalenoci od maksymalnej moliwej dugoci tego typu (patrz punkt 4.4.2).
Rozmiar obiektu lNUM jest ustalany na podstawie liczby rnych wartoci wyliczenia.
Przy wyliczeniach do 255 moliwych wartoci uywany jest jeden bajt, a przy wyli-
czeniach do 65 535 wartoci uywane s 2 bajty (patrz punkt 4.4.3).
Rozmiar obiektu SlT jest okrelany przez liczb rnych elementw zestawu. Jeli ze-
staw ma rozmiar 0, obiekt zajmuje 0/).8 bajtw, ktr to warto zaokrgla si do
1, 2, 3, 4 lub 8 bajtw. Obiekt SlT moe mie do 64 elementw (patrz punkt 4.4.4).
4.6. Wybieranie odpowiedniego typu
dla kolumny
Aby jak najbardziej wydajnie korzysta z pamici, naley we wszystkich przypadkach
stara si stosowa typ, ktry bdzie jak najbardziej dokadny. Jeli na przykad w kolum-
nie liczb cakowitych bd przechowywane wartoci z zakresu od ` do 99999, najlep-
szym wyborem bdzie typ MlD1UM1NT UNS1ONlD. Ze wszystkich typw, ktre reprezentuj
wszystkie wymagane wartoci, zajmuje najmniej pamici.
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych 153
Powszechnym problemem jest dokadne przedstawianie wartoci walutowych. W MySQL
naley do tego uywa typu DlC1MA|, za pomoc ktrego wartoci zapisywane s w for-
mie acucha. Dziki temu nie traci si na dokadnoci (mimo to obliczenia z wartociami
DlC1MA| mog by wci wykonywane przy uyciu operacji dziaajcych na liczbach
z podwjn precyzj). Jeli dokadno nie jest zbyt wana, by moe wystarczajco
dobrym typem bdzie DOUB|l.
Aby uzyska wiksz dokadno, mona zawsze przeksztaci warto na typ stao-
przecinkowy, przechowywany w B1O1NT. Pozwoli to wykonywa wszystkie obliczenia
na liczbach cakowitych i tylko w razie potrzeby przeksztaca wynik z powrotem na
wartoci zmiennoprzecinkowe.
4.7. Wykorzystywanie typw kolumn
z innych mechanizmw baz danych
Aby uatwi uytkownikowi zastosowanie kodu pochodzcego od innych producentw,
moliwe jest odwzorowanie typw kolumn w sposb przedstawiony w poniszej tabeli.
Odwzorowania te upraszczaj operacj importu do MySQL definicji tabel z innych
mechanizmw baz danych:
Typ innych producentw Typ MySQL
BTN/RY/| C'/R/| BTN/RY
C'/R V/RYTN/| V/RC'/R/|
F|J/T4 F|J/T
F|J/T8 OJUB|F
TNT1 TTNYTNT
TNT SM/||TNT
TNT: MFOTUMTNT
TNT4 TNT
TNT8 BTTNT
|JN V/RBTN/RY MFOTUMB|JB
|JN V/RC'/R MFOTUMTFXT
|JN MFOTUMTFXT oc M,SJ| 410|
MTOO|FTNT MFOTUMTNT
V/RBTN/RY/| C'/R/| BTN/RY
Odwzorowanie typw kolumn jest wykonywane podczas tworzenia tabeli, po czym
oryginalne deklaracje typu zostaj usunite. Jeli uytkownik utworzy tabel z typami
stosowanymi przez innych producentw, po czym wyda polecenie DlSCR1Bl PC\YCA
VCDGNK, zostanie przedstawiona struktura tabeli z odpowiadajcymi im typami MySQL.
4 Spis treci
1.8.5. Rozbienoci midzy MySQL a standardem SQL ........................................ 60
1.8.6. Jak MySQL radzi sobie z ograniczeniami ................................................. 67
1.8.7. Znane bdy i projektowe braki w MySQL................................................ 69
Rozdzia 2. Struktura jzyka .............................................................................. 77
2.1. Literay................................................................................................................... 77
2.1.1. acuchy ................................................................................................... 77
2.1.2. Liczby........................................................................................................ 80
2.1.3. Wartoci szesnastkowe .............................................................................. 80
2.1.4. Wartoci logiczne ...................................................................................... 81
2.1.5. Wartoci NULL......................................................................................... 81
2.2. Nazwy baz danych, tabel, indeksw, kolumn i aliasw......................................... 81
2.2.1. Kwalifikatory identyfikatorw .................................................................. 83
2.2.2. Znaczenie wielkoci liter w nazwach identyfikatorw.............................. 83
2.3. Zmienne definiowane przez uytkownika.............................................................. 85
2.4. Zmienne systemowe............................................................................................... 87
2.4.1. Strukturalne zmienne systemowe .............................................................. 89
2.5. Skadnia komentarza .............................................................................................. 91
2.6. Traktowanie sw zastrzeonych w MySQL.......................................................... 92
Rozdzia 3. Obsuga zestaww znakw............................................................... 95
3.1. Oglne informacje o zestawach znakw i sortowaniu ........................................... 95
3.2. Zestawy znakw i porzdki sortowania w MySQL................................................ 96
3.3. Okrelanie domylnego zestawu znakw i sortowania........................................... 98
3.3.1. Zestaw znakw i sortowanie dla serwera................................................... 98
3.3.2. Zestaw znakw i sortowanie dla bazy danych........................................... 99
3.3.3. Zestaw znakw i sortowanie dla tabeli .................................................... 100
3.3.4. Zestaw znakw i sortowanie dla kolumny............................................... 100
3.3.5. Przykady przypisywania zestawu znakw i sortowania ......................... 101
3.3.6. Zestawy znakw i sortowanie dla poczenia .......................................... 102
3.3.7. Zestaw znakw i sortowanie dla acucha znakw.................................. 104
3.3.8. Wykorzystywanie COLLATE w instrukcjach SQL.................................... 105
3.3.9. Priorytet klauzuli COLLATE .................................................................. 106
3.3.10. Operator BINARY................................................................................... 106
3.3.11. Niektre przypadki specjalne, w ktrych trudno okreli sortowanie...... 106
3.3.12. Sortowania musz by odpowiednie dla danego zestawu znakw........... 107
3.3.13. Przykad wpywu porzdku sortowania ................................................... 108
3.4. Operacje, na ktre ma wpyw obsuga zestaww znakw.................................... 109
3.4.1. acuchy wyjciowe ............................................................................... 109
3.4.2. CONVERT()............................................................................................ 110
3.4.3. CAST() .................................................................................................... 110
3.4.4. Instrukcje SHOW .................................................................................... 111
3.5. Obsuga Unicode.................................................................................................. 112
3.6. UTF8 dla metadanych.......................................................................................... 113
3.7. Kompatybilno z innymi systemami zarzdzania baz danych .......................... 115
3.8. Nowy format pliku konfiguracji zestawu znakw................................................ 115
3.9. Narodowe zestawy znakw.................................................................................. 115
3.10. Aktualizacja zestaww znakw z MySQL 4.0..................................................... 116
3.10.1. Zestawy znakw w wersji 4.0 i odpowiadajce im w wersji 4.1 pary
skadajce si z zestawu znakw i sortowania......................................... 117
3.10.2. Przeksztacanie kolumn znakowych wersji 4.0 na format 4.1 ................. 118
3.11. Zestawy znakw i sortowania obsugiwane przez MySQL.................................. 118
3.11.1. Zestawy znakw standardu Unicode ....................................................... 119
3.11.2. Zestawy znakw zachodnioeuropejskich................................................. 120
3.11.3. Zestawy znakw dla Europy Centralnej .................................................. 121
Spis treci 5
3.11.4. Zestawy znakw poudniowoeuropejskich i rodkowowschodnich......... 122
3.11.5. Zestawy znakw regionu batyckiego...................................................... 123
3.11.6. Zestawy znakw dla cyrylicy................................................................... 123
3.11.7. Azjatyckie zestawy znakw..................................................................... 124
Rozdzia 4. Typy kolumn.................................................................................. 125
4.1. Przegld typw dla kolumny................................................................................ 126
4.1.1. Omwienie typw liczbowych ................................................................ 126
4.1.2. Przegld typw zwizanych z dat i czasem............................................ 129
4.1.3. Przegld typw acuchowych ................................................................ 130
4.2. Typy liczbowe...................................................................................................... 132
4.3. Typy zwizane z dat i czasem............................................................................ 135
4.3.1. Typy DATETIME, DATE i TIMESTAMP............................................. 137
4.3.2. Typ TIME................................................................................................ 142
4.3.3. Typ YEAR............................................................................................... 143
4.3.4. Problem roku 2000 a typy zwizane z dat.............................................. 144
4.4. Typy acuchowe ................................................................................................. 144
4.4.1. Typy CHAR i VARCHAR...................................................................... 144
4.4.2. Typy BLOB i TEXT................................................................................ 146
4.4.3. Typ Enum................................................................................................ 147
4.4.4. Typ SET .................................................................................................. 149
4.5. Rozmiar pamici potrzebnej dla typw kolumn................................................... 151
4.6. Wybieranie odpowiedniego typu dla kolumny..................................................... 152
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych ............... 153
Rozdzia 5. Funkcje i operatory........................................................................ 155
5.1. Operatory ............................................................................................................. 156
5.1.1. Nawiasy................................................................................................... 156
5.1.2. Operatory porwnania ............................................................................. 156
5.1.3. Operatory logiczne .................................................................................. 161
5.1.4. Operatory rozrniania wielkoci liter..................................................... 163
5.2. Funkcje kontroli przepywu ................................................................................. 163
5.3. Funkcje acuchowe............................................................................................. 166
5.3.1. Funkcje porwnywania acuchw.......................................................... 176
5.4. Funkcje liczbowe ................................................................................................. 178
5.4.1. Operatory arytmetyczne........................................................................... 178
5.4.2. Funkcje matematyczne ............................................................................ 180
5.5. Funkcje daty i godziny......................................................................................... 186
5.6. Funkcje obsugi wyszukiwania penotekstowego................................................. 202
5.6.1. Boolowskie wyszukiwania penotekstowe............................................... 205
5.6.2. Wyszukiwania penotekstowe z rozwijaniem zapytania .......................... 207
5.6.3. Ograniczenia dla wyszukiwania penotekstowego................................... 208
5.6.4. Modyfikowanie wyszukiwania penotekstowego MySQL ...................... 209
5.6.5. Lista rzeczy do zrobienia dla wyszukiwania penotekstowego................ 211
5.7. Funkcje konwersji typw..................................................................................... 211
5.8. Inne funkcje ......................................................................................................... 214
5.8.1. Funkcje bitowe ........................................................................................ 214
5.8.2. Funkcje szyfrujce................................................................................... 215
5.8.3. Funkcje informacyjne .............................................................................. 219
5.8.4. Funkcje rne .......................................................................................... 223
5.9. Funkcje i modyfikatory do zastosowania z klauzulami GROUP BY................... 226
5.9.1. Funkcje GROUP BY (agregujce)........................................................... 226
5.9.2. Modyfikatory GROUP BY...................................................................... 229
5.9.3. GROUP BY z ukrytymi polami............................................................... 232
6 Spis treci
Rozdzia 6. Skadnia instrukcji SQL .................................................................. 235
6.1. Instrukcje operujce na danych............................................................................ 235
6.1.1. Skadnia instrukcji DELETE................................................................... 235
6.1.2. Skadnia instrukcji DO ............................................................................ 238
6.1.3. Skadnia instrukcji HANDLER............................................................... 238
6.1.4. Skadnia instrukcji INSERT .................................................................... 240
6.1.5. Skadnia instrukcji LOAD DATA INFILE.............................................. 246
6.1.6. Skadnia instrukcji REPLACE................................................................. 255
6.1.7. Skadnia instrukcji SELECT.................................................................... 256
6.1.8. Skadnia podzapyta................................................................................ 265
6.1.9. Skadnia instrukcji TRUNCATE............................................................. 276
6.1.10. Skadnia instrukcji UPDATE................................................................... 276
6.2. Instrukcje definiowania danych ........................................................................... 278
6.2.1. Skadnia instrukcji ALTER DATABASE ............................................... 278
6.2.2. Skadnia instrukcji ALTER TABLE........................................................ 279
6.2.3. Skadnia instrukcji CREATE DATABASE............................................. 285
6.2.4. Skadnia instrukcji CREATE INDEX ..................................................... 285
6.2.5. Skadnia instrukcji CREATE TABLE..................................................... 287
6.2.6. Skadnia instrukcji DROP DATABASE.................................................. 301
6.2.7. Skadnia instrukcji DROP INDEX.......................................................... 302
6.2.8. Skadnia instrukcji DROP TABLE.......................................................... 302
6.2.9. Skadnia instrukcji RENAME TABLE.................................................... 303
6.3. Instrukcje programu MySQL............................................................................... 304
6.3.1. Skadnia instrukcji DESCRIBE
(odczytywanie informacji na temat kolumn) ........................................... 304
6.3.2. Skadnia instrukcji USE........................................................................... 304
6.4. Instrukcje obsugi transakcji i blokowania........................................................... 305
6.4.1. Skadnia instrukcji START TRANSACTION, COMMIT
oraz ROLLBACK.................................................................................... 305
6.4.2. Instrukcje niemoliwe do wycofania ....................................................... 306
6.4.3. Instrukcje wykonujce niejawne zatwierdzenie......................................... 306
6.4.4. Skadnia instrukcji SAVEPOINT i ROLLBACK TO SAVEPOINT....... 307
6.4.5. Skadnia instrukcji LOCK TABLES oraz UNLOCK TABLES .............. 307
6.4.6. Skadnia instrukcji SET TRANSACTION.............................................. 310
6.5. Administracja baz danych .................................................................................. 311
6.5.1. Instrukcje zarzdzajce kontami uytkownikw ....................................... 311
6.5.2. Instrukcje do konserwacji tabel ............................................................... 319
6.5.3. Skadnia instrukcji SET i SHOW ............................................................ 326
6.5.4. Inne instrukcje administracyjne ............................................................... 347
6.6. Instrukcje replikacji.............................................................................................. 352
6.6.1. Instrukcje SQL sterujce serwerem gwnym ......................................... 352
6.6.2. Instrukcje SQL sterujce serwerami podrzdnymi .................................. 354
Rozdzia 7. Rozszerzenia przestrzenne w MySQL............................................... 365
7.1. Wstp ................................................................................................................... 365
7.2. Model geometryczny OpenGIS............................................................................ 366
7.2.1. Hierarchia klas geometrycznych.............................................................. 366
7.2.2. Klasa Geometry ....................................................................................... 368
7.2.3. Klasa Point .............................................................................................. 369
7.2.4. Klasa Curve ............................................................................................. 369
7.2.5. Klasa LineString...................................................................................... 370
7.2.6. Klasa Surface........................................................................................... 370
7.2.7. Klasa Polygon.......................................................................................... 370
7.2.8. Klasa GeometryCollection....................................................................... 371
Spis treci 7
7.2.9. Klasa MultiPoint...................................................................................... 371
7.2.10. Klasa MultiCurve .................................................................................... 372
7.2.11. Klasa MultiLineString............................................................................. 372
7.2.12. Klasa MultiSurface .................................................................................. 372
7.2.13. Klasa MultiPolygon................................................................................. 373
7.3. Obsugiwane formaty danych przestrzennych...................................................... 373
7.3.1. Format tekstowy WKT............................................................................ 374
7.3.2. Format binarny WKB.............................................................................. 374
7.4. Tworzenie bazy danych z rozszerzeniami przestrzennymi................................... 375
7.4.1. Typy danych przestrzennych w MySQL ................................................. 375
7.4.2. Tworzenie wartoci przestrzennych......................................................... 376
7.4.3. Tworzenie kolumn przestrzennych.......................................................... 379
7.4.4. Wypenianie kolumn przestrzennych....................................................... 379
7.4.5. Pobieranie danych przestrzennych........................................................... 381
7.5. Analiza informacji przestrzennych....................................................................... 381
7.5.1. Funkcje konwersji formatw geometrycznych ........................................ 382
7.5.2. Funkcje klasy Geometry.......................................................................... 382
7.5.3. Funkcje tworzce nowe geometrie na podstawie istniejcych................. 388
7.5.4. Funkcje testujce relacje przestrzenne
midzy obiektami geometrycznymi ......................................................... 389
7.5.5. Relacje midzy minimalnymi prostoktami otaczajcymi
dla poszczeglnych geometrii.................................................................. 390
7.5.6. Funkcje sprawdzajce relacje przestrzenne pomidzy geometriami ........ 391
7.6. Optymalizacja analizy przestrzennej.................................................................... 392
7.6.1. Tworzenie indeksw przestrzennych....................................................... 392
7.6.2. Wykorzystanie indeksu przestrzennego................................................... 393
7.7. Zgodno MySQL ze standardem........................................................................ 395
7.7.1. Niezaimplementowane funkcje GIS ........................................................ 395
Rozdzia 8. Procedury i funkcje skadowane ..................................................... 397
8.1. Skadnia procedur skadowanych......................................................................... 398
8.1.1. Utrzymanie procedur skadowanych........................................................ 398
8.1.2. SHOW PROCEDURE STATUS oraz SHOW FUNCTION STATUS.... 401
8.1.3. Instrukcja CALL...................................................................................... 402
8.1.4. Instrukcja zoona BEGIN ... END.......................................................... 402
8.1.5. Instrukcja DECLARE.............................................................................. 402
8.1.6. Zmienne w procedurach skadowanych................................................... 402
8.1.7. Warunki i podprogramy obsugi .............................................................. 403
8.1.8. Kursory.................................................................................................... 405
8.1.9. Konstrukcje sterowania przepywem sterowania..................................... 406
Rozdzia 9. Obsuga bdw w MySQL .............................................................. 409
9.1. Zwracane bdy.................................................................................................... 409
9.2. Komunikaty bdw............................................................................................. 419
Dodatek A Rozwizywanie problemw z zapytaniami ........................................435
A.1. Zagadnienia zwizane z zapytaniami ................................................................... 435
A.1.1. Wielko liter przy wyszukiwaniu........................................................... 435
A.1.2. Problemy z kolumnami typu DATE ........................................................ 436
A.1.3. Problemy z wartociami NULL............................................................... 437
A.1.4. Problemy z synonimami kolumn ............................................................. 438
A.1.5. Bd wycofania dla tabel nietransakcyjnych............................................ 439
A.1.6. Usuwanie wierszy ze zwizanych tabel ................................................... 439
A.1.7. Rozwizywanie problemw z brakujcymi wierszami ............................ 440
A.1.8. Problemy z porwnaniami zmiennoprzecinkowymi................................ 441
8 Spis treci
A.2. Problemy zwizane z optymalizatorem................................................................ 443
A.3. Problemy z definicj tabel.................................................................................... 444
A.3.1. Problemy z instrukcj ALTER TABLE................................................... 444
A.3.2. Jak zmieni porzdek kolumn w tabeli .................................................... 445
A.3.3. Problemy z tabelami tymczasowymi ....................................................... 445
Dodatek B Wyraenia regularne w MySQL........................................................ 447
Skorowidz...................................................................................... 451
Rozdzia 4.
Typy kolumn
W MySQL dostpnych jest wiele typw danych, ktre mona pogrupowa w kilku pod-
stawowych kategoriach, takich jak typy liczbowe, typy zwizane z dat i czasem oraz
typy acuchowe. Na pocztku tego rozdziau przedstawiony zostanie przegld wspo-
mnianych przed chwil typw kolumn, po czym nastpi bardziej szczegowy opis ich
waciwoci z podziaem na poszczeglne kategorie i wreszcie zamieszczone zostanie
podsumowanie informacji dotyczcych wymaga co do rozmiaru pamici potrzebnej
do przechowania danej kolumny. Sam przegld jest z zamierzenia krtki. Dodatkowe
informacje o poszczeglnych typach kolumn, na przykad dopuszczalny format, w kt-
rym mona deklarowa wartoci, zostay uwzgldnione w szczegowych omwieniach.
Od wersji 4.1 MySQL rozpoznaje rozszerzenia do obsugi danych przestrzennych.
Informacje o typach przestrzennych znajduj si w rozdziale 7. tego podrcznika.
W czci opisu typw kolumn zastosowane zostay nastpujce reguy:
/
Wskazuje maksymalny rozmiar wywietlania liczby lub acucha.
Maksymalnym dopuszczalnym rozmiarem wywietlania jest 255.
&
Dotyczy typw zmiennoprzecinkowych i staoprzecinkowych. Okrela liczb
cyfr po kropce dziesitnej. Maksymalna dopuszczalna warto wynosi 30,
ale nie powinna przekracza /.
Nawiasy kwadratowe ( ) identyfikuj opcjonalne fragmenty deklaracji typu.
126 Rozdzia 4. Typy kolumn
4.1. Przegld typw dla kolumny
4.1.1. Omwienie typw liczbowych
Poniej znajduje si przegld liczbowych typw dla kolumn. Bardziej szczegowe
informacje mona znale w podrozdziale 4.2. Wymogi dotyczce rozmiaru pamici
potrzebnej do przechowywania kolumn znajduj si w podrozdziale 4.5.
Jeli dla kolumny liczbowej zostanie okrelony atrybut /lRO|1||, MySQL automatycznie
doda do kolumny atrybut UN1S1ONlD.
Naley uwaa podczas odejmowania dwch wartoci liczbowych, z ktrych jedna ma
typ UN1S1ONlD. Uzyskany wynik bdzie rwnie tego typu! patrz podrozdzia 5.7.
T1NY1NT/) UNS1ONlD /lRO|1||
Bardzo maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od `8
do `/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do bb.
B1T, BOO|, BOO|lAN
To s synonimy T1NY1NT`). Synonim BOO|lAN zosta dodany w MySQL 4.1.0.
Warto zerowa to inaczej fasz. Wartoci niezerowe traktowane s jako prawda.
W przyszoci wprowadzona zostanie pena, zgodna ze standardem SQL
obsuga typu boolowskiego.
SMA||1NT/) UNS1ONlD /lRO|1||
Maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od o/68
do o/6/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do 6bbob.
MlD1UM1NT/) UNS1ONlD /lRO|1||
rednia liczba cakowita. Dla liczb ze znakiem zakres wynosi od 8o88608
do 8o8860/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0
do `6///`b.
1NT/) UNS1ONlD /lRO|1||
Standardowa liczba cakowita. Dla liczb ze znakiem zakres wynosi
od `4/48o648 do `4/48o64/. W przypadku liczb bez znaku zakres
obejmuje wartoci od 0 do 49496/9b.
1NTlOlR/) UNS1ONlD /lRO|1||
Jest to synonim dla typu 1NT.
B1O1NT/) UNS1ONlD /lRO|1||
Dua liczba cakowita. Dla liczb ze znakiem zakres wynosi
od 9oo/0o68b4//b808 do 9oo/0o68b4//b80/. W przypadku liczb
bez znaku zakres obejmuje wartoci od 0 do `8446/440/o/09bb`6`b.
4.1. Przegld typw dla kolumny 127
Oto kilka spraw, o ktrych naley wiedzie odnonie kolumn typu B1O1NT:
Wszystkie obliczenia wykonywane s przy uyciu wartoci typu B1O1NT
lub DOUB|l ze znakiem. Oznacza to, e duych liczb cakowitych bez
znaku, wikszych ni 9oo/0o68b4//b80/ (63 bity), mona uywa tylko
z funkcjami bitowymi! Niezastosowanie si do tej zasady moe doprowadzi
do uzyskania w wyniku liczby, ktrej kilka ostatnich cyfr jest bdnych
z powodu bdw w zaokrglaniu podczas konwersji wartoci B1O1NT
na DOUB|l.
MySQL 4.0 potrafi obsugiwa B1O1NT w nastpujcych przypadkach:
Podczas wykorzystywania liczb cakowitych do przechowywania
duych wartoci bez znaku w kolumnie typu B1O1NT.
W M1NPC\YCAMQN) lub MAXPC\YCAMQN), gdzie PC\YCAMQN odnosi si
do kolumny B1O1NT.
Podczas korzystania z operatorw (midzy innymi , , *), gdy oba
argumenty s liczbami cakowitymi.
Zawsze istnieje moliwo zapisania w kolumnie B1O1NT dokadnej wartoci
liczby cakowitej. Wystarczy zapisa j przy uyciu acucha. W takim
przypadku zostanie dokonana konwersja acucha na liczb; konwersja
nie bdzie wymaga poredniego etapu przeksztacajcego liczb na jej
odpowiednik o podwjnej precyzji.
Podczas korzystania z operatorw , i * stosowana jest arytmetyka
B1O1NT, jeli oba argumenty maj warto liczby cakowitej! To oznacza,
e pomnoenie dwch duych liczb cakowitych (lub wynikw funkcji,
ktra zwraca liczby cakowite) moe spowodowa nieoczekiwane
rezultaty, jeli wynik przekroczy liczb 9oo/0o68b4//b80/.
||OATR) UNS1ONlD /lRO|1||
Liczba zmiennoprzecinkowa. Parametr R oznacza precyzj i moe przyjmowa
warto od 0 do 14 dla liczb zmiennoprzecinkowych o dokadnoci do jednego
znaku i od 25 do 53 dla liczb zmiennoprzecinkowych o dokadnoci do dwch
znakw. To przypomina opisane poniej typy ||OAT i DOUB|l. Typ ||OATR)
ma ten sam zakres, jaki posiadaj odpowiadajce mu typy ||OAT i DOUB|l,
ale w jego przypadku niezdefiniowany jest maksymalny rozmiar wywietlania
i liczba miejsc po przecinku.
Od wersji 3.23 MySQL jest to prawdziwa warto zmiennoprzecinkowa.
W wersjach wczeniejszych liczba typu ||OATR) bya zawsze liczb o dwch
miejscach po przecinku.
Ta skadnia zostaa dodana w celu zachowania zgodnoci ze standardem ODBC.
Stosowanie typu ||OAT moe spowodowa wystpienie pewnych
nieoczekiwanych problemw, poniewa wszystkie obliczenia w MySQL
s wykonywane z podwjn precyzj patrz punkt A.1.7).
||OAT/, &) UNS1ONlD /lRO|1||
128 Rozdzia 4. Typy kolumn
Maa liczba zmiennoprzecinkowa (o dokadnoci do jednego znaku). Liczba
ta moe przyj wartoci: od o408o466lo8 do ``/b494ob`lo8, 0,
i od ``/b494ob`lo8 do o408o466lo8. Jeli podany jest atrybut UN1S1ONlD,
niedozwolone s wartoci ujemne. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ ||OAT bez argumentw
lub typ ||OATR) (gdzie Rjest liczb z zakresu od 0 do 24) oznacza liczb
zmiennoprzecinkow o pojedynczej precyzji.
DOUB|l/, &) UNS1ONlD /lRO|1||
Standardowa liczba zmiennoprzecinkowa (o dokadnoci do dwch
znakw). Liczba ta moe przyj wartoci: od `/9/69o`o486o`b/lo08
do b0/o8b8b0/0`4lo08, 0, i od b0/o8b8b0/0`4lo08
do `/9/69o`o486o`b/lo08. Jeli podany jest atrybut UN1S1ONlD, wartoci
ujemne s niedozwolone. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ DOUB|l
bez argumentw lub ||OATR) (gdzie R jest liczb z zakresu od 25 do 53)
oznacza liczb zmiennoprzecinkow o podwjnej precyzji.
DOUB|l PRlC1S1ON/, &) UNS1ONlD /lRO|1||
RlA|/, &) UNS1ONlD /lRO|1||
S to synonimy DOUB|l. Wyjtek: Jeli dla parametru s;_cce serwera
wczono opcj RlA|_AS_||OAT, synonimem ||OAT jest RlA|, a nie DOUB|l.
DlC1MA|/, &) UNS1ONlD /lRO|1||
Niezapakowana liczba staoprzecinkowa. Zachowanie kolumny tego typu
przypomina kolumn typu CHAR. Niezapakowana oznacza, e liczba jest
przechowywana w postaci acucha przy uyciu jednego znaku na kad cyfr
wartoci. Parametr / definiuje maksymaln liczb cyfr, a & liczb miejsc
po przecinku. W parametrze / nie s brane pod uwag: kropka dziesitna
(odpowiadajca w naszej notacji przecinkowi) i (dla liczb ujemnych) znak ,
cho jest dla nich zarezerwowane miejsce. Wartoci nie maj miejsc
po przecinku lub czci uamkowych, jeli & jest rwne 0. Maksymalny zakres
wartoci typu DlC1MA| jest taki sam, jak dla typu DOUB|l, ale rzeczywisty zakres
danej kolumny DlC1MA| moe by ograniczony przez wybr argumentw / i &.
Jeli podany jest atrybut UN1S1ONlD, wartoci ujemne s niedozwolone.
W przypadku braku argumentu &, domyln wartoci jest 0. Jeli pominity
jest parametr /, domyln wartoci jest 10.
W wersjach poprzedzajcych MySQL 3.23 argument / musi by wystarczajco
duy, by zawiera obszar potrzebny dla znaku i kropki dziesitnej.
DlC/,&) UNS1ONlD /lRO|1||
NUMlR1C/,&) UNS1ONlD /lRO|1||
|1XlD/, &) UNS1ONlD /lRO|1||
S to synonimy typu DlC1MA|.
W MySQL 4.1.0 dodano synonim |1XlD w celu osignicia kompatybilnoci
z innymi serwerami.
4.1. Przegld typw dla kolumny 129
4.1.2. Przegld typw zwizanych z dat i czasem
Poniej znajduje si podsumowanie typw kolumn przeznaczonych dla czasu i daty.
Dodatkowe informacje na ten temat mona znale w podrozdziale 4.3. Wymogi do-
tyczce pamici potrzebnej do przechowywania danych w kolumnach zostay podane
w podrozdziale 4.5.
DATl
Data. Obsugiwany zakres obejmuje daty od ``0000`0`` do `9999`o``.
W MySQL wartoci DATl wywietlane s w formacie `RRRRMMDD`, ale mona
przypisywa wartoci do kolumn DATl przy uyciu acuchw lub liczb.
DATlT1Ml
Kombinacja daty i czasu. Obsugiwany zakres obejmuje wartoci
od ``0000`0` 000000` do `9999`o` ob9b9`. W MySQL wartoci
DATlT1Ml wywietlane s w formacie `RRRRMMDD OOMMSS`, ale mona
przypisywa wartoci do kolumn DATlT1Ml przy uyciu acuchw lub liczb.
T1MlSTAMP/)
Znacznik czasu. Obsugiwany zakres rozpoczyna si od daty ``9/00`0``
i siga roku 0o/.
Kolumna typu T1MlSTAMP przydaje si do rejestracji daty i godziny operacji
wstawiania lub aktualizacji. Pierwszej kolumnie T1MlSTAMP w tabeli
automatycznie przypisywana jest data i czas ostatniej operacji, jeli tylko tych
wartoci nie wprowadzi rcznie uytkownik. Dowolnej kolumnie T1MlSTAMP
mona rwnie przypisa biec dat i godzin, wpisujc do niej warto NU||.
Od MySQL 4.1 wartoci T1MlSTAMP s zwracane w postaci acuchw
w formacie `RRRRMMDD OOMMSS`. Aby uzyska warto w postaci liczby,
naley doda do kolumn tego typu 0. Inne szerokoci wywietlania
znacznika czasu nie s obsugiwane.
W wersjach poprzedzajcych MySQL 4.1 wartoci T1MlSTAMP s wywietlane
w formacie RRRRMMDDOOMMSS, RRMMDDOOMMSS, RRRRMMDD lub RRMMDD w zalenoci
od tego, czy parametr / jest rwny 14 (albo go brak), 12, 8 lub 6. Mona jednak
przypisywa wartoci do kolumn T1MlSTAMP przy uyciu acuchw lub liczb.
Argument / wpywa tylko na sposb wywietlania kolumny T1MlSTAMP, a nie
na jej przechowywanie. Wartoci kolumny s zawsze zapisywane w czterech
bajtach. W MySQL od wersji 4.0.12 pojawia si opcja ne., dziki ktrej
mona zmieni dziaanie serwera, upodabniajc je do MySQL 4.1.
Naley odnotowa, e kolumny T1MlSTAMP/), gdzie /jest rwne 8 lub 14,
s traktowane jako liczby, natomiast reszta kolumn T1MlSTAMP/) jest
traktowana jako acuchy. Jest to rodzaj gwarancji, e uytkownik bdzie
mg wiarygodnie usuwa i przywraca tabele tego typu.
T1Ml
Godzina. Obsugiwany zakres obejmuje wartoci od `8o8b9b9`
do ` 8o8b9b9`. W MySQL wartoci T1Ml wywietlane s w formacie
` OOMMSS`, ale mona przypisa wartoci do kolumn T1Ml przy uyciu
zarwno acuchw, jak i liczb.
130 Rozdzia 4. Typy kolumn
YlAR|4)
Rok w formacie dwu- lub czterocyfrowym. Domylnym formatem jest rok
zapisany za pomoc czterech cyfr. W tym formacie dostpne wartoci nale
do przedziau od `90` do `bb oraz 0. W formacie dwucyfrowym wartoci
dopuszczalne to liczby z zakresu od /0 do 69, ktre reprezentuj daty od roku
1970 do 2069. W MySQL wartoci YlAR wywietlane s w formacie RRRR,
ale mona przypisa wartoci do kolumn YlAR przy uyciu tak acuchw,
jak i liczb. Typ YlAR jest niedostpny dla wersji wczeniejszych ni MySQL 3.22.
4.1.3. Przegld typw acuchowych
Poniej znajduje si przegld typw acuchowych. Dodatkowe informacje mona
znale w podrozdziale 4.4. Wymogi dotyczce pamici potrzebnej do przechowywa-
nia danych w kolumnach zostay podane w podrozdziale 4.5.
W niektrych przypadkach MySQL moe zmieni kolumn typu acuchowego na typ,
ktry bdzie si rni od zadeklarowanego w instrukcji CRlATl TAB|l lub A|TlR TAB|l.
Wicej informacji na ten temat znajduje si w podpunkcie 6.2.5.2.
Od wersji 4.1 w MySQL pojawia si zmiana, ktra wpywa na wiele typw kolumn typu
acuchowego. Definicja kolumn typu znakowego moe zawiera atrybut CHARACTlR
SlT, ktry okrela zestaw znakw i opcjonalnie porzdek sortowania. Dotyczy to typw
CHAR, VARCHAR, rnych typw TlXT oraz lNUM i SlT, na przykad:
CRF/TF T/B|F !
FNUMYCTVQ
YCTVQ|
1 lub 2 bajty w zalenoci od liczby wartoci wyliczenia
(maksymalnie 65 535)
SFTYCTVQ
YCTVQ|
1, 2, 3, 4 lub 8 bajtw w zalenoci od liczby elementw zestawu
(maksymalnie 64)
Typy VARCHAR, B|OB i TlXT maj zmienn dugo. Dla kadego ilo pamici potrzeb-
nej do przechowania wartoci bdzie zalee od faktycznej dugoci wartoci kolumny
(reprezentowanej w ostatniej tabeli przez .), a nie od maksymalnego moliwego roz-
miaru danego typu. Kolumna VARCHAR`0) na przykad moe przechowywa acuch
o maksymalnej dugoci 10 znakw. Faktyczna ilo wymaganej pamici to dugo
acucha (.) plus 1 bajt do zapisania dugoci acucha. Dla acucha `.|cc` parametr
. jest rwny 4, a wymagany rozmiar pamici to 5 bajtw.
Typy B|OB i TlXT wymagaj 1, 2, 3 lub 4 bajtw do zapisu dugoci wartoci kolumny
w zalenoci od maksymalnej moliwej dugoci tego typu (patrz punkt 4.4.2).
Rozmiar obiektu lNUM jest ustalany na podstawie liczby rnych wartoci wyliczenia.
Przy wyliczeniach do 255 moliwych wartoci uywany jest jeden bajt, a przy wyli-
czeniach do 65 535 wartoci uywane s 2 bajty (patrz punkt 4.4.3).
Rozmiar obiektu SlT jest okrelany przez liczb rnych elementw zestawu. Jeli ze-
staw ma rozmiar 0, obiekt zajmuje 0/).8 bajtw, ktr to warto zaokrgla si do
1, 2, 3, 4 lub 8 bajtw. Obiekt SlT moe mie do 64 elementw (patrz punkt 4.4.4).
4.6. Wybieranie odpowiedniego typu
dla kolumny
Aby jak najbardziej wydajnie korzysta z pamici, naley we wszystkich przypadkach
stara si stosowa typ, ktry bdzie jak najbardziej dokadny. Jeli na przykad w kolum-
nie liczb cakowitych bd przechowywane wartoci z zakresu od ` do 99999, najlep-
szym wyborem bdzie typ MlD1UM1NT UNS1ONlD. Ze wszystkich typw, ktre reprezentuj
wszystkie wymagane wartoci, zajmuje najmniej pamici.
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych 153
Powszechnym problemem jest dokadne przedstawianie wartoci walutowych. W MySQL
naley do tego uywa typu DlC1MA|, za pomoc ktrego wartoci zapisywane s w for-
mie acucha. Dziki temu nie traci si na dokadnoci (mimo to obliczenia z wartociami
DlC1MA| mog by wci wykonywane przy uyciu operacji dziaajcych na liczbach
z podwjn precyzj). Jeli dokadno nie jest zbyt wana, by moe wystarczajco
dobrym typem bdzie DOUB|l.
Aby uzyska wiksz dokadno, mona zawsze przeksztaci warto na typ stao-
przecinkowy, przechowywany w B1O1NT. Pozwoli to wykonywa wszystkie obliczenia
na liczbach cakowitych i tylko w razie potrzeby przeksztaca wynik z powrotem na
wartoci zmiennoprzecinkowe.
4.7. Wykorzystywanie typw kolumn
z innych mechanizmw baz danych
Aby uatwi uytkownikowi zastosowanie kodu pochodzcego od innych producentw,
moliwe jest odwzorowanie typw kolumn w sposb przedstawiony w poniszej tabeli.
Odwzorowania te upraszczaj operacj importu do MySQL definicji tabel z innych
mechanizmw baz danych:
Typ innych producentw Typ MySQL
BTN/RY/| C'/R/| BTN/RY
C'/R V/RYTN/| V/RC'/R/|
F|J/T4 F|J/T
F|J/T8 OJUB|F
TNT1 TTNYTNT
TNT SM/||TNT
TNT: MFOTUMTNT
TNT4 TNT
TNT8 BTTNT
|JN V/RBTN/RY MFOTUMB|JB
|JN V/RC'/R MFOTUMTFXT
|JN MFOTUMTFXT oc M,SJ| 410|
MTOO|FTNT MFOTUMTNT
V/RBTN/RY/| C'/R/| BTN/RY
Odwzorowanie typw kolumn jest wykonywane podczas tworzenia tabeli, po czym
oryginalne deklaracje typu zostaj usunite. Jeli uytkownik utworzy tabel z typami
stosowanymi przez innych producentw, po czym wyda polecenie DlSCR1Bl PC\YCA
VCDGNK, zostanie przedstawiona struktura tabeli z odpowiadajcymi im typami MySQL.
4 Spis treci
1.8.5. Rozbienoci midzy MySQL a standardem SQL ........................................ 60
1.8.6. Jak MySQL radzi sobie z ograniczeniami ................................................. 67
1.8.7. Znane bdy i projektowe braki w MySQL................................................ 69
Rozdzia 2. Struktura jzyka .............................................................................. 77
2.1. Literay................................................................................................................... 77
2.1.1. acuchy ................................................................................................... 77
2.1.2. Liczby........................................................................................................ 80
2.1.3. Wartoci szesnastkowe .............................................................................. 80
2.1.4. Wartoci logiczne ...................................................................................... 81
2.1.5. Wartoci NULL......................................................................................... 81
2.2. Nazwy baz danych, tabel, indeksw, kolumn i aliasw......................................... 81
2.2.1. Kwalifikatory identyfikatorw .................................................................. 83
2.2.2. Znaczenie wielkoci liter w nazwach identyfikatorw.............................. 83
2.3. Zmienne definiowane przez uytkownika.............................................................. 85
2.4. Zmienne systemowe............................................................................................... 87
2.4.1. Strukturalne zmienne systemowe .............................................................. 89
2.5. Skadnia komentarza .............................................................................................. 91
2.6. Traktowanie sw zastrzeonych w MySQL.......................................................... 92
Rozdzia 3. Obsuga zestaww znakw............................................................... 95
3.1. Oglne informacje o zestawach znakw i sortowaniu ........................................... 95
3.2. Zestawy znakw i porzdki sortowania w MySQL................................................ 96
3.3. Okrelanie domylnego zestawu znakw i sortowania........................................... 98
3.3.1. Zestaw znakw i sortowanie dla serwera................................................... 98
3.3.2. Zestaw znakw i sortowanie dla bazy danych........................................... 99
3.3.3. Zestaw znakw i sortowanie dla tabeli .................................................... 100
3.3.4. Zestaw znakw i sortowanie dla kolumny............................................... 100
3.3.5. Przykady przypisywania zestawu znakw i sortowania ......................... 101
3.3.6. Zestawy znakw i sortowanie dla poczenia .......................................... 102
3.3.7. Zestaw znakw i sortowanie dla acucha znakw.................................. 104
3.3.8. Wykorzystywanie COLLATE w instrukcjach SQL.................................... 105
3.3.9. Priorytet klauzuli COLLATE .................................................................. 106
3.3.10. Operator BINARY................................................................................... 106
3.3.11. Niektre przypadki specjalne, w ktrych trudno okreli sortowanie...... 106
3.3.12. Sortowania musz by odpowiednie dla danego zestawu znakw........... 107
3.3.13. Przykad wpywu porzdku sortowania ................................................... 108
3.4. Operacje, na ktre ma wpyw obsuga zestaww znakw.................................... 109
3.4.1. acuchy wyjciowe ............................................................................... 109
3.4.2. CONVERT()............................................................................................ 110
3.4.3. CAST() .................................................................................................... 110
3.4.4. Instrukcje SHOW .................................................................................... 111
3.5. Obsuga Unicode.................................................................................................. 112
3.6. UTF8 dla metadanych.......................................................................................... 113
3.7. Kompatybilno z innymi systemami zarzdzania baz danych .......................... 115
3.8. Nowy format pliku konfiguracji zestawu znakw................................................ 115
3.9. Narodowe zestawy znakw.................................................................................. 115
3.10. Aktualizacja zestaww znakw z MySQL 4.0..................................................... 116
3.10.1. Zestawy znakw w wersji 4.0 i odpowiadajce im w wersji 4.1 pary
skadajce si z zestawu znakw i sortowania......................................... 117
3.10.2. Przeksztacanie kolumn znakowych wersji 4.0 na format 4.1 ................. 118
3.11. Zestawy znakw i sortowania obsugiwane przez MySQL.................................. 118
3.11.1. Zestawy znakw standardu Unicode ....................................................... 119
3.11.2. Zestawy znakw zachodnioeuropejskich................................................. 120
3.11.3. Zestawy znakw dla Europy Centralnej .................................................. 121
Spis treci 5
3.11.4. Zestawy znakw poudniowoeuropejskich i rodkowowschodnich......... 122
3.11.5. Zestawy znakw regionu batyckiego...................................................... 123
3.11.6. Zestawy znakw dla cyrylicy................................................................... 123
3.11.7. Azjatyckie zestawy znakw..................................................................... 124
Rozdzia 4. Typy kolumn.................................................................................. 125
4.1. Przegld typw dla kolumny................................................................................ 126
4.1.1. Omwienie typw liczbowych ................................................................ 126
4.1.2. Przegld typw zwizanych z dat i czasem............................................ 129
4.1.3. Przegld typw acuchowych ................................................................ 130
4.2. Typy liczbowe...................................................................................................... 132
4.3. Typy zwizane z dat i czasem............................................................................ 135
4.3.1. Typy DATETIME, DATE i TIMESTAMP............................................. 137
4.3.2. Typ TIME................................................................................................ 142
4.3.3. Typ YEAR............................................................................................... 143
4.3.4. Problem roku 2000 a typy zwizane z dat.............................................. 144
4.4. Typy acuchowe ................................................................................................. 144
4.4.1. Typy CHAR i VARCHAR...................................................................... 144
4.4.2. Typy BLOB i TEXT................................................................................ 146
4.4.3. Typ Enum................................................................................................ 147
4.4.4. Typ SET .................................................................................................. 149
4.5. Rozmiar pamici potrzebnej dla typw kolumn................................................... 151
4.6. Wybieranie odpowiedniego typu dla kolumny..................................................... 152
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych ............... 153
Rozdzia 5. Funkcje i operatory........................................................................ 155
5.1. Operatory ............................................................................................................. 156
5.1.1. Nawiasy................................................................................................... 156
5.1.2. Operatory porwnania ............................................................................. 156
5.1.3. Operatory logiczne .................................................................................. 161
5.1.4. Operatory rozrniania wielkoci liter..................................................... 163
5.2. Funkcje kontroli przepywu ................................................................................. 163
5.3. Funkcje acuchowe............................................................................................. 166
5.3.1. Funkcje porwnywania acuchw.......................................................... 176
5.4. Funkcje liczbowe ................................................................................................. 178
5.4.1. Operatory arytmetyczne........................................................................... 178
5.4.2. Funkcje matematyczne ............................................................................ 180
5.5. Funkcje daty i godziny......................................................................................... 186
5.6. Funkcje obsugi wyszukiwania penotekstowego................................................. 202
5.6.1. Boolowskie wyszukiwania penotekstowe............................................... 205
5.6.2. Wyszukiwania penotekstowe z rozwijaniem zapytania .......................... 207
5.6.3. Ograniczenia dla wyszukiwania penotekstowego................................... 208
5.6.4. Modyfikowanie wyszukiwania penotekstowego MySQL ...................... 209
5.6.5. Lista rzeczy do zrobienia dla wyszukiwania penotekstowego................ 211
5.7. Funkcje konwersji typw..................................................................................... 211
5.8. Inne funkcje ......................................................................................................... 214
5.8.1. Funkcje bitowe ........................................................................................ 214
5.8.2. Funkcje szyfrujce................................................................................... 215
5.8.3. Funkcje informacyjne .............................................................................. 219
5.8.4. Funkcje rne .......................................................................................... 223
5.9. Funkcje i modyfikatory do zastosowania z klauzulami GROUP BY................... 226
5.9.1. Funkcje GROUP BY (agregujce)........................................................... 226
5.9.2. Modyfikatory GROUP BY...................................................................... 229
5.9.3. GROUP BY z ukrytymi polami............................................................... 232
6 Spis treci
Rozdzia 6. Skadnia instrukcji SQL .................................................................. 235
6.1. Instrukcje operujce na danych............................................................................ 235
6.1.1. Skadnia instrukcji DELETE................................................................... 235
6.1.2. Skadnia instrukcji DO ............................................................................ 238
6.1.3. Skadnia instrukcji HANDLER............................................................... 238
6.1.4. Skadnia instrukcji INSERT .................................................................... 240
6.1.5. Skadnia instrukcji LOAD DATA INFILE.............................................. 246
6.1.6. Skadnia instrukcji REPLACE................................................................. 255
6.1.7. Skadnia instrukcji SELECT.................................................................... 256
6.1.8. Skadnia podzapyta................................................................................ 265
6.1.9. Skadnia instrukcji TRUNCATE............................................................. 276
6.1.10. Skadnia instrukcji UPDATE................................................................... 276
6.2. Instrukcje definiowania danych ........................................................................... 278
6.2.1. Skadnia instrukcji ALTER DATABASE ............................................... 278
6.2.2. Skadnia instrukcji ALTER TABLE........................................................ 279
6.2.3. Skadnia instrukcji CREATE DATABASE............................................. 285
6.2.4. Skadnia instrukcji CREATE INDEX ..................................................... 285
6.2.5. Skadnia instrukcji CREATE TABLE..................................................... 287
6.2.6. Skadnia instrukcji DROP DATABASE.................................................. 301
6.2.7. Skadnia instrukcji DROP INDEX.......................................................... 302
6.2.8. Skadnia instrukcji DROP TABLE.......................................................... 302
6.2.9. Skadnia instrukcji RENAME TABLE.................................................... 303
6.3. Instrukcje programu MySQL............................................................................... 304
6.3.1. Skadnia instrukcji DESCRIBE
(odczytywanie informacji na temat kolumn) ........................................... 304
6.3.2. Skadnia instrukcji USE........................................................................... 304
6.4. Instrukcje obsugi transakcji i blokowania........................................................... 305
6.4.1. Skadnia instrukcji START TRANSACTION, COMMIT
oraz ROLLBACK.................................................................................... 305
6.4.2. Instrukcje niemoliwe do wycofania ....................................................... 306
6.4.3. Instrukcje wykonujce niejawne zatwierdzenie......................................... 306
6.4.4. Skadnia instrukcji SAVEPOINT i ROLLBACK TO SAVEPOINT....... 307
6.4.5. Skadnia instrukcji LOCK TABLES oraz UNLOCK TABLES .............. 307
6.4.6. Skadnia instrukcji SET TRANSACTION.............................................. 310
6.5. Administracja baz danych .................................................................................. 311
6.5.1. Instrukcje zarzdzajce kontami uytkownikw ....................................... 311
6.5.2. Instrukcje do konserwacji tabel ............................................................... 319
6.5.3. Skadnia instrukcji SET i SHOW ............................................................ 326
6.5.4. Inne instrukcje administracyjne ............................................................... 347
6.6. Instrukcje replikacji.............................................................................................. 352
6.6.1. Instrukcje SQL sterujce serwerem gwnym ......................................... 352
6.6.2. Instrukcje SQL sterujce serwerami podrzdnymi .................................. 354
Rozdzia 7. Rozszerzenia przestrzenne w MySQL............................................... 365
7.1. Wstp ................................................................................................................... 365
7.2. Model geometryczny OpenGIS............................................................................ 366
7.2.1. Hierarchia klas geometrycznych.............................................................. 366
7.2.2. Klasa Geometry ....................................................................................... 368
7.2.3. Klasa Point .............................................................................................. 369
7.2.4. Klasa Curve ............................................................................................. 369
7.2.5. Klasa LineString...................................................................................... 370
7.2.6. Klasa Surface........................................................................................... 370
7.2.7. Klasa Polygon.......................................................................................... 370
7.2.8. Klasa GeometryCollection....................................................................... 371
Spis treci 7
7.2.9. Klasa MultiPoint...................................................................................... 371
7.2.10. Klasa MultiCurve .................................................................................... 372
7.2.11. Klasa MultiLineString............................................................................. 372
7.2.12. Klasa MultiSurface .................................................................................. 372
7.2.13. Klasa MultiPolygon................................................................................. 373
7.3. Obsugiwane formaty danych przestrzennych...................................................... 373
7.3.1. Format tekstowy WKT............................................................................ 374
7.3.2. Format binarny WKB.............................................................................. 374
7.4. Tworzenie bazy danych z rozszerzeniami przestrzennymi................................... 375
7.4.1. Typy danych przestrzennych w MySQL ................................................. 375
7.4.2. Tworzenie wartoci przestrzennych......................................................... 376
7.4.3. Tworzenie kolumn przestrzennych.......................................................... 379
7.4.4. Wypenianie kolumn przestrzennych....................................................... 379
7.4.5. Pobieranie danych przestrzennych........................................................... 381
7.5. Analiza informacji przestrzennych....................................................................... 381
7.5.1. Funkcje konwersji formatw geometrycznych ........................................ 382
7.5.2. Funkcje klasy Geometry.......................................................................... 382
7.5.3. Funkcje tworzce nowe geometrie na podstawie istniejcych................. 388
7.5.4. Funkcje testujce relacje przestrzenne
midzy obiektami geometrycznymi ......................................................... 389
7.5.5. Relacje midzy minimalnymi prostoktami otaczajcymi
dla poszczeglnych geometrii.................................................................. 390
7.5.6. Funkcje sprawdzajce relacje przestrzenne pomidzy geometriami ........ 391
7.6. Optymalizacja analizy przestrzennej.................................................................... 392
7.6.1. Tworzenie indeksw przestrzennych....................................................... 392
7.6.2. Wykorzystanie indeksu przestrzennego................................................... 393
7.7. Zgodno MySQL ze standardem........................................................................ 395
7.7.1. Niezaimplementowane funkcje GIS ........................................................ 395
Rozdzia 8. Procedury i funkcje skadowane ..................................................... 397
8.1. Skadnia procedur skadowanych......................................................................... 398
8.1.1. Utrzymanie procedur skadowanych........................................................ 398
8.1.2. SHOW PROCEDURE STATUS oraz SHOW FUNCTION STATUS.... 401
8.1.3. Instrukcja CALL...................................................................................... 402
8.1.4. Instrukcja zoona BEGIN ... END.......................................................... 402
8.1.5. Instrukcja DECLARE.............................................................................. 402
8.1.6. Zmienne w procedurach skadowanych................................................... 402
8.1.7. Warunki i podprogramy obsugi .............................................................. 403
8.1.8. Kursory.................................................................................................... 405
8.1.9. Konstrukcje sterowania przepywem sterowania..................................... 406
Rozdzia 9. Obsuga bdw w MySQL .............................................................. 409
9.1. Zwracane bdy.................................................................................................... 409
9.2. Komunikaty bdw............................................................................................. 419
Dodatek A Rozwizywanie problemw z zapytaniami ........................................435
A.1. Zagadnienia zwizane z zapytaniami ................................................................... 435
A.1.1. Wielko liter przy wyszukiwaniu........................................................... 435
A.1.2. Problemy z kolumnami typu DATE ........................................................ 436
A.1.3. Problemy z wartociami NULL............................................................... 437
A.1.4. Problemy z synonimami kolumn ............................................................. 438
A.1.5. Bd wycofania dla tabel nietransakcyjnych............................................ 439
A.1.6. Usuwanie wierszy ze zwizanych tabel ................................................... 439
A.1.7. Rozwizywanie problemw z brakujcymi wierszami ............................ 440
A.1.8. Problemy z porwnaniami zmiennoprzecinkowymi................................ 441
8 Spis treci
A.2. Problemy zwizane z optymalizatorem................................................................ 443
A.3. Problemy z definicj tabel.................................................................................... 444
A.3.1. Problemy z instrukcj ALTER TABLE................................................... 444
A.3.2. Jak zmieni porzdek kolumn w tabeli .................................................... 445
A.3.3. Problemy z tabelami tymczasowymi ....................................................... 445
Dodatek B Wyraenia regularne w MySQL........................................................ 447
Skorowidz...................................................................................... 451
Rozdzia 4.
Typy kolumn
W MySQL dostpnych jest wiele typw danych, ktre mona pogrupowa w kilku pod-
stawowych kategoriach, takich jak typy liczbowe, typy zwizane z dat i czasem oraz
typy acuchowe. Na pocztku tego rozdziau przedstawiony zostanie przegld wspo-
mnianych przed chwil typw kolumn, po czym nastpi bardziej szczegowy opis ich
waciwoci z podziaem na poszczeglne kategorie i wreszcie zamieszczone zostanie
podsumowanie informacji dotyczcych wymaga co do rozmiaru pamici potrzebnej
do przechowania danej kolumny. Sam przegld jest z zamierzenia krtki. Dodatkowe
informacje o poszczeglnych typach kolumn, na przykad dopuszczalny format, w kt-
rym mona deklarowa wartoci, zostay uwzgldnione w szczegowych omwieniach.
Od wersji 4.1 MySQL rozpoznaje rozszerzenia do obsugi danych przestrzennych.
Informacje o typach przestrzennych znajduj si w rozdziale 7. tego podrcznika.
W czci opisu typw kolumn zastosowane zostay nastpujce reguy:
/
Wskazuje maksymalny rozmiar wywietlania liczby lub acucha.
Maksymalnym dopuszczalnym rozmiarem wywietlania jest 255.
&
Dotyczy typw zmiennoprzecinkowych i staoprzecinkowych. Okrela liczb
cyfr po kropce dziesitnej. Maksymalna dopuszczalna warto wynosi 30,
ale nie powinna przekracza /.
Nawiasy kwadratowe ( ) identyfikuj opcjonalne fragmenty deklaracji typu.
126 Rozdzia 4. Typy kolumn
4.1. Przegld typw dla kolumny
4.1.1. Omwienie typw liczbowych
Poniej znajduje si przegld liczbowych typw dla kolumn. Bardziej szczegowe
informacje mona znale w podrozdziale 4.2. Wymogi dotyczce rozmiaru pamici
potrzebnej do przechowywania kolumn znajduj si w podrozdziale 4.5.
Jeli dla kolumny liczbowej zostanie okrelony atrybut /lRO|1||, MySQL automatycznie
doda do kolumny atrybut UN1S1ONlD.
Naley uwaa podczas odejmowania dwch wartoci liczbowych, z ktrych jedna ma
typ UN1S1ONlD. Uzyskany wynik bdzie rwnie tego typu! patrz podrozdzia 5.7.
T1NY1NT/) UNS1ONlD /lRO|1||
Bardzo maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od `8
do `/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do bb.
B1T, BOO|, BOO|lAN
To s synonimy T1NY1NT`). Synonim BOO|lAN zosta dodany w MySQL 4.1.0.
Warto zerowa to inaczej fasz. Wartoci niezerowe traktowane s jako prawda.
W przyszoci wprowadzona zostanie pena, zgodna ze standardem SQL
obsuga typu boolowskiego.
SMA||1NT/) UNS1ONlD /lRO|1||
Maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od o/68
do o/6/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do 6bbob.
MlD1UM1NT/) UNS1ONlD /lRO|1||
rednia liczba cakowita. Dla liczb ze znakiem zakres wynosi od 8o88608
do 8o8860/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0
do `6///`b.
1NT/) UNS1ONlD /lRO|1||
Standardowa liczba cakowita. Dla liczb ze znakiem zakres wynosi
od `4/48o648 do `4/48o64/. W przypadku liczb bez znaku zakres
obejmuje wartoci od 0 do 49496/9b.
1NTlOlR/) UNS1ONlD /lRO|1||
Jest to synonim dla typu 1NT.
B1O1NT/) UNS1ONlD /lRO|1||
Dua liczba cakowita. Dla liczb ze znakiem zakres wynosi
od 9oo/0o68b4//b808 do 9oo/0o68b4//b80/. W przypadku liczb
bez znaku zakres obejmuje wartoci od 0 do `8446/440/o/09bb`6`b.
4.1. Przegld typw dla kolumny 127
Oto kilka spraw, o ktrych naley wiedzie odnonie kolumn typu B1O1NT:
Wszystkie obliczenia wykonywane s przy uyciu wartoci typu B1O1NT
lub DOUB|l ze znakiem. Oznacza to, e duych liczb cakowitych bez
znaku, wikszych ni 9oo/0o68b4//b80/ (63 bity), mona uywa tylko
z funkcjami bitowymi! Niezastosowanie si do tej zasady moe doprowadzi
do uzyskania w wyniku liczby, ktrej kilka ostatnich cyfr jest bdnych
z powodu bdw w zaokrglaniu podczas konwersji wartoci B1O1NT
na DOUB|l.
MySQL 4.0 potrafi obsugiwa B1O1NT w nastpujcych przypadkach:
Podczas wykorzystywania liczb cakowitych do przechowywania
duych wartoci bez znaku w kolumnie typu B1O1NT.
W M1NPC\YCAMQN) lub MAXPC\YCAMQN), gdzie PC\YCAMQN odnosi si
do kolumny B1O1NT.
Podczas korzystania z operatorw (midzy innymi , , *), gdy oba
argumenty s liczbami cakowitymi.
Zawsze istnieje moliwo zapisania w kolumnie B1O1NT dokadnej wartoci
liczby cakowitej. Wystarczy zapisa j przy uyciu acucha. W takim
przypadku zostanie dokonana konwersja acucha na liczb; konwersja
nie bdzie wymaga poredniego etapu przeksztacajcego liczb na jej
odpowiednik o podwjnej precyzji.
Podczas korzystania z operatorw , i * stosowana jest arytmetyka
B1O1NT, jeli oba argumenty maj warto liczby cakowitej! To oznacza,
e pomnoenie dwch duych liczb cakowitych (lub wynikw funkcji,
ktra zwraca liczby cakowite) moe spowodowa nieoczekiwane
rezultaty, jeli wynik przekroczy liczb 9oo/0o68b4//b80/.
||OATR) UNS1ONlD /lRO|1||
Liczba zmiennoprzecinkowa. Parametr R oznacza precyzj i moe przyjmowa
warto od 0 do 14 dla liczb zmiennoprzecinkowych o dokadnoci do jednego
znaku i od 25 do 53 dla liczb zmiennoprzecinkowych o dokadnoci do dwch
znakw. To przypomina opisane poniej typy ||OAT i DOUB|l. Typ ||OATR)
ma ten sam zakres, jaki posiadaj odpowiadajce mu typy ||OAT i DOUB|l,
ale w jego przypadku niezdefiniowany jest maksymalny rozmiar wywietlania
i liczba miejsc po przecinku.
Od wersji 3.23 MySQL jest to prawdziwa warto zmiennoprzecinkowa.
W wersjach wczeniejszych liczba typu ||OATR) bya zawsze liczb o dwch
miejscach po przecinku.
Ta skadnia zostaa dodana w celu zachowania zgodnoci ze standardem ODBC.
Stosowanie typu ||OAT moe spowodowa wystpienie pewnych
nieoczekiwanych problemw, poniewa wszystkie obliczenia w MySQL
s wykonywane z podwjn precyzj patrz punkt A.1.7).
||OAT/, &) UNS1ONlD /lRO|1||
128 Rozdzia 4. Typy kolumn
Maa liczba zmiennoprzecinkowa (o dokadnoci do jednego znaku). Liczba
ta moe przyj wartoci: od o408o466lo8 do ``/b494ob`lo8, 0,
i od ``/b494ob`lo8 do o408o466lo8. Jeli podany jest atrybut UN1S1ONlD,
niedozwolone s wartoci ujemne. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ ||OAT bez argumentw
lub typ ||OATR) (gdzie Rjest liczb z zakresu od 0 do 24) oznacza liczb
zmiennoprzecinkow o pojedynczej precyzji.
DOUB|l/, &) UNS1ONlD /lRO|1||
Standardowa liczba zmiennoprzecinkowa (o dokadnoci do dwch
znakw). Liczba ta moe przyj wartoci: od `/9/69o`o486o`b/lo08
do b0/o8b8b0/0`4lo08, 0, i od b0/o8b8b0/0`4lo08
do `/9/69o`o486o`b/lo08. Jeli podany jest atrybut UN1S1ONlD, wartoci
ujemne s niedozwolone. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ DOUB|l
bez argumentw lub ||OATR) (gdzie R jest liczb z zakresu od 25 do 53)
oznacza liczb zmiennoprzecinkow o podwjnej precyzji.
DOUB|l PRlC1S1ON/, &) UNS1ONlD /lRO|1||
RlA|/, &) UNS1ONlD /lRO|1||
S to synonimy DOUB|l. Wyjtek: Jeli dla parametru s;_cce serwera
wczono opcj RlA|_AS_||OAT, synonimem ||OAT jest RlA|, a nie DOUB|l.
DlC1MA|/, &) UNS1ONlD /lRO|1||
Niezapakowana liczba staoprzecinkowa. Zachowanie kolumny tego typu
przypomina kolumn typu CHAR. Niezapakowana oznacza, e liczba jest
przechowywana w postaci acucha przy uyciu jednego znaku na kad cyfr
wartoci. Parametr / definiuje maksymaln liczb cyfr, a & liczb miejsc
po przecinku. W parametrze / nie s brane pod uwag: kropka dziesitna
(odpowiadajca w naszej notacji przecinkowi) i (dla liczb ujemnych) znak ,
cho jest dla nich zarezerwowane miejsce. Wartoci nie maj miejsc
po przecinku lub czci uamkowych, jeli & jest rwne 0. Maksymalny zakres
wartoci typu DlC1MA| jest taki sam, jak dla typu DOUB|l, ale rzeczywisty zakres
danej kolumny DlC1MA| moe by ograniczony przez wybr argumentw / i &.
Jeli podany jest atrybut UN1S1ONlD, wartoci ujemne s niedozwolone.
W przypadku braku argumentu &, domyln wartoci jest 0. Jeli pominity
jest parametr /, domyln wartoci jest 10.
W wersjach poprzedzajcych MySQL 3.23 argument / musi by wystarczajco
duy, by zawiera obszar potrzebny dla znaku i kropki dziesitnej.
DlC/,&) UNS1ONlD /lRO|1||
NUMlR1C/,&) UNS1ONlD /lRO|1||
|1XlD/, &) UNS1ONlD /lRO|1||
S to synonimy typu DlC1MA|.
W MySQL 4.1.0 dodano synonim |1XlD w celu osignicia kompatybilnoci
z innymi serwerami.
4.1. Przegld typw dla kolumny 129
4.1.2. Przegld typw zwizanych z dat i czasem
Poniej znajduje si podsumowanie typw kolumn przeznaczonych dla czasu i daty.
Dodatkowe informacje na ten temat mona znale w podrozdziale 4.3. Wymogi do-
tyczce pamici potrzebnej do przechowywania danych w kolumnach zostay podane
w podrozdziale 4.5.
DATl
Data. Obsugiwany zakres obejmuje daty od ``0000`0`` do `9999`o``.
W MySQL wartoci DATl wywietlane s w formacie `RRRRMMDD`, ale mona
przypisywa wartoci do kolumn DATl przy uyciu acuchw lub liczb.
DATlT1Ml
Kombinacja daty i czasu. Obsugiwany zakres obejmuje wartoci
od ``0000`0` 000000` do `9999`o` ob9b9`. W MySQL wartoci
DATlT1Ml wywietlane s w formacie `RRRRMMDD OOMMSS`, ale mona
przypisywa wartoci do kolumn DATlT1Ml przy uyciu acuchw lub liczb.
T1MlSTAMP/)
Znacznik czasu. Obsugiwany zakres rozpoczyna si od daty ``9/00`0``
i siga roku 0o/.
Kolumna typu T1MlSTAMP przydaje si do rejestracji daty i godziny operacji
wstawiania lub aktualizacji. Pierwszej kolumnie T1MlSTAMP w tabeli
automatycznie przypisywana jest data i czas ostatniej operacji, jeli tylko tych
wartoci nie wprowadzi rcznie uytkownik. Dowolnej kolumnie T1MlSTAMP
mona rwnie przypisa biec dat i godzin, wpisujc do niej warto NU||.
Od MySQL 4.1 wartoci T1MlSTAMP s zwracane w postaci acuchw
w formacie `RRRRMMDD OOMMSS`. Aby uzyska warto w postaci liczby,
naley doda do kolumn tego typu 0. Inne szerokoci wywietlania
znacznika czasu nie s obsugiwane.
W wersjach poprzedzajcych MySQL 4.1 wartoci T1MlSTAMP s wywietlane
w formacie RRRRMMDDOOMMSS, RRMMDDOOMMSS, RRRRMMDD lub RRMMDD w zalenoci
od tego, czy parametr / jest rwny 14 (albo go brak), 12, 8 lub 6. Mona jednak
przypisywa wartoci do kolumn T1MlSTAMP przy uyciu acuchw lub liczb.
Argument / wpywa tylko na sposb wywietlania kolumny T1MlSTAMP, a nie
na jej przechowywanie. Wartoci kolumny s zawsze zapisywane w czterech
bajtach. W MySQL od wersji 4.0.12 pojawia si opcja ne., dziki ktrej
mona zmieni dziaanie serwera, upodabniajc je do MySQL 4.1.
Naley odnotowa, e kolumny T1MlSTAMP/), gdzie /jest rwne 8 lub 14,
s traktowane jako liczby, natomiast reszta kolumn T1MlSTAMP/) jest
traktowana jako acuchy. Jest to rodzaj gwarancji, e uytkownik bdzie
mg wiarygodnie usuwa i przywraca tabele tego typu.
T1Ml
Godzina. Obsugiwany zakres obejmuje wartoci od `8o8b9b9`
do ` 8o8b9b9`. W MySQL wartoci T1Ml wywietlane s w formacie
` OOMMSS`, ale mona przypisa wartoci do kolumn T1Ml przy uyciu
zarwno acuchw, jak i liczb.
130 Rozdzia 4. Typy kolumn
YlAR|4)
Rok w formacie dwu- lub czterocyfrowym. Domylnym formatem jest rok
zapisany za pomoc czterech cyfr. W tym formacie dostpne wartoci nale
do przedziau od `90` do `bb oraz 0. W formacie dwucyfrowym wartoci
dopuszczalne to liczby z zakresu od /0 do 69, ktre reprezentuj daty od roku
1970 do 2069. W MySQL wartoci YlAR wywietlane s w formacie RRRR,
ale mona przypisa wartoci do kolumn YlAR przy uyciu tak acuchw,
jak i liczb. Typ YlAR jest niedostpny dla wersji wczeniejszych ni MySQL 3.22.
4.1.3. Przegld typw acuchowych
Poniej znajduje si przegld typw acuchowych. Dodatkowe informacje mona
znale w podrozdziale 4.4. Wymogi dotyczce pamici potrzebnej do przechowywa-
nia danych w kolumnach zostay podane w podrozdziale 4.5.
W niektrych przypadkach MySQL moe zmieni kolumn typu acuchowego na typ,
ktry bdzie si rni od zadeklarowanego w instrukcji CRlATl TAB|l lub A|TlR TAB|l.
Wicej informacji na ten temat znajduje si w podpunkcie 6.2.5.2.
Od wersji 4.1 w MySQL pojawia si zmiana, ktra wpywa na wiele typw kolumn typu
acuchowego. Definicja kolumn typu znakowego moe zawiera atrybut CHARACTlR
SlT, ktry okrela zestaw znakw i opcjonalnie porzdek sortowania. Dotyczy to typw
CHAR, VARCHAR, rnych typw TlXT oraz lNUM i SlT, na przykad:
CRF/TF T/B|F !
FNUMYCTVQ
YCTVQ|
1 lub 2 bajty w zalenoci od liczby wartoci wyliczenia
(maksymalnie 65 535)
SFTYCTVQ
YCTVQ|
1, 2, 3, 4 lub 8 bajtw w zalenoci od liczby elementw zestawu
(maksymalnie 64)
Typy VARCHAR, B|OB i TlXT maj zmienn dugo. Dla kadego ilo pamici potrzeb-
nej do przechowania wartoci bdzie zalee od faktycznej dugoci wartoci kolumny
(reprezentowanej w ostatniej tabeli przez .), a nie od maksymalnego moliwego roz-
miaru danego typu. Kolumna VARCHAR`0) na przykad moe przechowywa acuch
o maksymalnej dugoci 10 znakw. Faktyczna ilo wymaganej pamici to dugo
acucha (.) plus 1 bajt do zapisania dugoci acucha. Dla acucha `.|cc` parametr
. jest rwny 4, a wymagany rozmiar pamici to 5 bajtw.
Typy B|OB i TlXT wymagaj 1, 2, 3 lub 4 bajtw do zapisu dugoci wartoci kolumny
w zalenoci od maksymalnej moliwej dugoci tego typu (patrz punkt 4.4.2).
Rozmiar obiektu lNUM jest ustalany na podstawie liczby rnych wartoci wyliczenia.
Przy wyliczeniach do 255 moliwych wartoci uywany jest jeden bajt, a przy wyli-
czeniach do 65 535 wartoci uywane s 2 bajty (patrz punkt 4.4.3).
Rozmiar obiektu SlT jest okrelany przez liczb rnych elementw zestawu. Jeli ze-
staw ma rozmiar 0, obiekt zajmuje 0/).8 bajtw, ktr to warto zaokrgla si do
1, 2, 3, 4 lub 8 bajtw. Obiekt SlT moe mie do 64 elementw (patrz punkt 4.4.4).
4.6. Wybieranie odpowiedniego typu
dla kolumny
Aby jak najbardziej wydajnie korzysta z pamici, naley we wszystkich przypadkach
stara si stosowa typ, ktry bdzie jak najbardziej dokadny. Jeli na przykad w kolum-
nie liczb cakowitych bd przechowywane wartoci z zakresu od ` do 99999, najlep-
szym wyborem bdzie typ MlD1UM1NT UNS1ONlD. Ze wszystkich typw, ktre reprezentuj
wszystkie wymagane wartoci, zajmuje najmniej pamici.
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych 153
Powszechnym problemem jest dokadne przedstawianie wartoci walutowych. W MySQL
naley do tego uywa typu DlC1MA|, za pomoc ktrego wartoci zapisywane s w for-
mie acucha. Dziki temu nie traci si na dokadnoci (mimo to obliczenia z wartociami
DlC1MA| mog by wci wykonywane przy uyciu operacji dziaajcych na liczbach
z podwjn precyzj). Jeli dokadno nie jest zbyt wana, by moe wystarczajco
dobrym typem bdzie DOUB|l.
Aby uzyska wiksz dokadno, mona zawsze przeksztaci warto na typ stao-
przecinkowy, przechowywany w B1O1NT. Pozwoli to wykonywa wszystkie obliczenia
na liczbach cakowitych i tylko w razie potrzeby przeksztaca wynik z powrotem na
wartoci zmiennoprzecinkowe.
4.7. Wykorzystywanie typw kolumn
z innych mechanizmw baz danych
Aby uatwi uytkownikowi zastosowanie kodu pochodzcego od innych producentw,
moliwe jest odwzorowanie typw kolumn w sposb przedstawiony w poniszej tabeli.
Odwzorowania te upraszczaj operacj importu do MySQL definicji tabel z innych
mechanizmw baz danych:
Typ innych producentw Typ MySQL
BTN/RY/| C'/R/| BTN/RY
C'/R V/RYTN/| V/RC'/R/|
F|J/T4 F|J/T
F|J/T8 OJUB|F
TNT1 TTNYTNT
TNT SM/||TNT
TNT: MFOTUMTNT
TNT4 TNT
TNT8 BTTNT
|JN V/RBTN/RY MFOTUMB|JB
|JN V/RC'/R MFOTUMTFXT
|JN MFOTUMTFXT oc M,SJ| 410|
MTOO|FTNT MFOTUMTNT
V/RBTN/RY/| C'/R/| BTN/RY
Odwzorowanie typw kolumn jest wykonywane podczas tworzenia tabeli, po czym
oryginalne deklaracje typu zostaj usunite. Jeli uytkownik utworzy tabel z typami
stosowanymi przez innych producentw, po czym wyda polecenie DlSCR1Bl PC\YCA
VCDGNK, zostanie przedstawiona struktura tabeli z odpowiadajcymi im typami MySQL.
4 Spis treci
1.8.5. Rozbienoci midzy MySQL a standardem SQL ........................................ 60
1.8.6. Jak MySQL radzi sobie z ograniczeniami ................................................. 67
1.8.7. Znane bdy i projektowe braki w MySQL................................................ 69
Rozdzia 2. Struktura jzyka .............................................................................. 77
2.1. Literay................................................................................................................... 77
2.1.1. acuchy ................................................................................................... 77
2.1.2. Liczby........................................................................................................ 80
2.1.3. Wartoci szesnastkowe .............................................................................. 80
2.1.4. Wartoci logiczne ...................................................................................... 81
2.1.5. Wartoci NULL......................................................................................... 81
2.2. Nazwy baz danych, tabel, indeksw, kolumn i aliasw......................................... 81
2.2.1. Kwalifikatory identyfikatorw .................................................................. 83
2.2.2. Znaczenie wielkoci liter w nazwach identyfikatorw.............................. 83
2.3. Zmienne definiowane przez uytkownika.............................................................. 85
2.4. Zmienne systemowe............................................................................................... 87
2.4.1. Strukturalne zmienne systemowe .............................................................. 89
2.5. Skadnia komentarza .............................................................................................. 91
2.6. Traktowanie sw zastrzeonych w MySQL.......................................................... 92
Rozdzia 3. Obsuga zestaww znakw............................................................... 95
3.1. Oglne informacje o zestawach znakw i sortowaniu ........................................... 95
3.2. Zestawy znakw i porzdki sortowania w MySQL................................................ 96
3.3. Okrelanie domylnego zestawu znakw i sortowania........................................... 98
3.3.1. Zestaw znakw i sortowanie dla serwera................................................... 98
3.3.2. Zestaw znakw i sortowanie dla bazy danych........................................... 99
3.3.3. Zestaw znakw i sortowanie dla tabeli .................................................... 100
3.3.4. Zestaw znakw i sortowanie dla kolumny............................................... 100
3.3.5. Przykady przypisywania zestawu znakw i sortowania ......................... 101
3.3.6. Zestawy znakw i sortowanie dla poczenia .......................................... 102
3.3.7. Zestaw znakw i sortowanie dla acucha znakw.................................. 104
3.3.8. Wykorzystywanie COLLATE w instrukcjach SQL.................................... 105
3.3.9. Priorytet klauzuli COLLATE .................................................................. 106
3.3.10. Operator BINARY................................................................................... 106
3.3.11. Niektre przypadki specjalne, w ktrych trudno okreli sortowanie...... 106
3.3.12. Sortowania musz by odpowiednie dla danego zestawu znakw........... 107
3.3.13. Przykad wpywu porzdku sortowania ................................................... 108
3.4. Operacje, na ktre ma wpyw obsuga zestaww znakw.................................... 109
3.4.1. acuchy wyjciowe ............................................................................... 109
3.4.2. CONVERT()............................................................................................ 110
3.4.3. CAST() .................................................................................................... 110
3.4.4. Instrukcje SHOW .................................................................................... 111
3.5. Obsuga Unicode.................................................................................................. 112
3.6. UTF8 dla metadanych.......................................................................................... 113
3.7. Kompatybilno z innymi systemami zarzdzania baz danych .......................... 115
3.8. Nowy format pliku konfiguracji zestawu znakw................................................ 115
3.9. Narodowe zestawy znakw.................................................................................. 115
3.10. Aktualizacja zestaww znakw z MySQL 4.0..................................................... 116
3.10.1. Zestawy znakw w wersji 4.0 i odpowiadajce im w wersji 4.1 pary
skadajce si z zestawu znakw i sortowania......................................... 117
3.10.2. Przeksztacanie kolumn znakowych wersji 4.0 na format 4.1 ................. 118
3.11. Zestawy znakw i sortowania obsugiwane przez MySQL.................................. 118
3.11.1. Zestawy znakw standardu Unicode ....................................................... 119
3.11.2. Zestawy znakw zachodnioeuropejskich................................................. 120
3.11.3. Zestawy znakw dla Europy Centralnej .................................................. 121
Spis treci 5
3.11.4. Zestawy znakw poudniowoeuropejskich i rodkowowschodnich......... 122
3.11.5. Zestawy znakw regionu batyckiego...................................................... 123
3.11.6. Zestawy znakw dla cyrylicy................................................................... 123
3.11.7. Azjatyckie zestawy znakw..................................................................... 124
Rozdzia 4. Typy kolumn.................................................................................. 125
4.1. Przegld typw dla kolumny................................................................................ 126
4.1.1. Omwienie typw liczbowych ................................................................ 126
4.1.2. Przegld typw zwizanych z dat i czasem............................................ 129
4.1.3. Przegld typw acuchowych ................................................................ 130
4.2. Typy liczbowe...................................................................................................... 132
4.3. Typy zwizane z dat i czasem............................................................................ 135
4.3.1. Typy DATETIME, DATE i TIMESTAMP............................................. 137
4.3.2. Typ TIME................................................................................................ 142
4.3.3. Typ YEAR............................................................................................... 143
4.3.4. Problem roku 2000 a typy zwizane z dat.............................................. 144
4.4. Typy acuchowe ................................................................................................. 144
4.4.1. Typy CHAR i VARCHAR...................................................................... 144
4.4.2. Typy BLOB i TEXT................................................................................ 146
4.4.3. Typ Enum................................................................................................ 147
4.4.4. Typ SET .................................................................................................. 149
4.5. Rozmiar pamici potrzebnej dla typw kolumn................................................... 151
4.6. Wybieranie odpowiedniego typu dla kolumny..................................................... 152
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych ............... 153
Rozdzia 5. Funkcje i operatory........................................................................ 155
5.1. Operatory ............................................................................................................. 156
5.1.1. Nawiasy................................................................................................... 156
5.1.2. Operatory porwnania ............................................................................. 156
5.1.3. Operatory logiczne .................................................................................. 161
5.1.4. Operatory rozrniania wielkoci liter..................................................... 163
5.2. Funkcje kontroli przepywu ................................................................................. 163
5.3. Funkcje acuchowe............................................................................................. 166
5.3.1. Funkcje porwnywania acuchw.......................................................... 176
5.4. Funkcje liczbowe ................................................................................................. 178
5.4.1. Operatory arytmetyczne........................................................................... 178
5.4.2. Funkcje matematyczne ............................................................................ 180
5.5. Funkcje daty i godziny......................................................................................... 186
5.6. Funkcje obsugi wyszukiwania penotekstowego................................................. 202
5.6.1. Boolowskie wyszukiwania penotekstowe............................................... 205
5.6.2. Wyszukiwania penotekstowe z rozwijaniem zapytania .......................... 207
5.6.3. Ograniczenia dla wyszukiwania penotekstowego................................... 208
5.6.4. Modyfikowanie wyszukiwania penotekstowego MySQL ...................... 209
5.6.5. Lista rzeczy do zrobienia dla wyszukiwania penotekstowego................ 211
5.7. Funkcje konwersji typw..................................................................................... 211
5.8. Inne funkcje ......................................................................................................... 214
5.8.1. Funkcje bitowe ........................................................................................ 214
5.8.2. Funkcje szyfrujce................................................................................... 215
5.8.3. Funkcje informacyjne .............................................................................. 219
5.8.4. Funkcje rne .......................................................................................... 223
5.9. Funkcje i modyfikatory do zastosowania z klauzulami GROUP BY................... 226
5.9.1. Funkcje GROUP BY (agregujce)........................................................... 226
5.9.2. Modyfikatory GROUP BY...................................................................... 229
5.9.3. GROUP BY z ukrytymi polami............................................................... 232
6 Spis treci
Rozdzia 6. Skadnia instrukcji SQL .................................................................. 235
6.1. Instrukcje operujce na danych............................................................................ 235
6.1.1. Skadnia instrukcji DELETE................................................................... 235
6.1.2. Skadnia instrukcji DO ............................................................................ 238
6.1.3. Skadnia instrukcji HANDLER............................................................... 238
6.1.4. Skadnia instrukcji INSERT .................................................................... 240
6.1.5. Skadnia instrukcji LOAD DATA INFILE.............................................. 246
6.1.6. Skadnia instrukcji REPLACE................................................................. 255
6.1.7. Skadnia instrukcji SELECT.................................................................... 256
6.1.8. Skadnia podzapyta................................................................................ 265
6.1.9. Skadnia instrukcji TRUNCATE............................................................. 276
6.1.10. Skadnia instrukcji UPDATE................................................................... 276
6.2. Instrukcje definiowania danych ........................................................................... 278
6.2.1. Skadnia instrukcji ALTER DATABASE ............................................... 278
6.2.2. Skadnia instrukcji ALTER TABLE........................................................ 279
6.2.3. Skadnia instrukcji CREATE DATABASE............................................. 285
6.2.4. Skadnia instrukcji CREATE INDEX ..................................................... 285
6.2.5. Skadnia instrukcji CREATE TABLE..................................................... 287
6.2.6. Skadnia instrukcji DROP DATABASE.................................................. 301
6.2.7. Skadnia instrukcji DROP INDEX.......................................................... 302
6.2.8. Skadnia instrukcji DROP TABLE.......................................................... 302
6.2.9. Skadnia instrukcji RENAME TABLE.................................................... 303
6.3. Instrukcje programu MySQL............................................................................... 304
6.3.1. Skadnia instrukcji DESCRIBE
(odczytywanie informacji na temat kolumn) ........................................... 304
6.3.2. Skadnia instrukcji USE........................................................................... 304
6.4. Instrukcje obsugi transakcji i blokowania........................................................... 305
6.4.1. Skadnia instrukcji START TRANSACTION, COMMIT
oraz ROLLBACK.................................................................................... 305
6.4.2. Instrukcje niemoliwe do wycofania ....................................................... 306
6.4.3. Instrukcje wykonujce niejawne zatwierdzenie......................................... 306
6.4.4. Skadnia instrukcji SAVEPOINT i ROLLBACK TO SAVEPOINT....... 307
6.4.5. Skadnia instrukcji LOCK TABLES oraz UNLOCK TABLES .............. 307
6.4.6. Skadnia instrukcji SET TRANSACTION.............................................. 310
6.5. Administracja baz danych .................................................................................. 311
6.5.1. Instrukcje zarzdzajce kontami uytkownikw ....................................... 311
6.5.2. Instrukcje do konserwacji tabel ............................................................... 319
6.5.3. Skadnia instrukcji SET i SHOW ............................................................ 326
6.5.4. Inne instrukcje administracyjne ............................................................... 347
6.6. Instrukcje replikacji.............................................................................................. 352
6.6.1. Instrukcje SQL sterujce serwerem gwnym ......................................... 352
6.6.2. Instrukcje SQL sterujce serwerami podrzdnymi .................................. 354
Rozdzia 7. Rozszerzenia przestrzenne w MySQL............................................... 365
7.1. Wstp ................................................................................................................... 365
7.2. Model geometryczny OpenGIS............................................................................ 366
7.2.1. Hierarchia klas geometrycznych.............................................................. 366
7.2.2. Klasa Geometry ....................................................................................... 368
7.2.3. Klasa Point .............................................................................................. 369
7.2.4. Klasa Curve ............................................................................................. 369
7.2.5. Klasa LineString...................................................................................... 370
7.2.6. Klasa Surface........................................................................................... 370
7.2.7. Klasa Polygon.......................................................................................... 370
7.2.8. Klasa GeometryCollection....................................................................... 371
Spis treci 7
7.2.9. Klasa MultiPoint...................................................................................... 371
7.2.10. Klasa MultiCurve .................................................................................... 372
7.2.11. Klasa MultiLineString............................................................................. 372
7.2.12. Klasa MultiSurface .................................................................................. 372
7.2.13. Klasa MultiPolygon................................................................................. 373
7.3. Obsugiwane formaty danych przestrzennych...................................................... 373
7.3.1. Format tekstowy WKT............................................................................ 374
7.3.2. Format binarny WKB.............................................................................. 374
7.4. Tworzenie bazy danych z rozszerzeniami przestrzennymi................................... 375
7.4.1. Typy danych przestrzennych w MySQL ................................................. 375
7.4.2. Tworzenie wartoci przestrzennych......................................................... 376
7.4.3. Tworzenie kolumn przestrzennych.......................................................... 379
7.4.4. Wypenianie kolumn przestrzennych....................................................... 379
7.4.5. Pobieranie danych przestrzennych........................................................... 381
7.5. Analiza informacji przestrzennych....................................................................... 381
7.5.1. Funkcje konwersji formatw geometrycznych ........................................ 382
7.5.2. Funkcje klasy Geometry.......................................................................... 382
7.5.3. Funkcje tworzce nowe geometrie na podstawie istniejcych................. 388
7.5.4. Funkcje testujce relacje przestrzenne
midzy obiektami geometrycznymi ......................................................... 389
7.5.5. Relacje midzy minimalnymi prostoktami otaczajcymi
dla poszczeglnych geometrii.................................................................. 390
7.5.6. Funkcje sprawdzajce relacje przestrzenne pomidzy geometriami ........ 391
7.6. Optymalizacja analizy przestrzennej.................................................................... 392
7.6.1. Tworzenie indeksw przestrzennych....................................................... 392
7.6.2. Wykorzystanie indeksu przestrzennego................................................... 393
7.7. Zgodno MySQL ze standardem........................................................................ 395
7.7.1. Niezaimplementowane funkcje GIS ........................................................ 395
Rozdzia 8. Procedury i funkcje skadowane ..................................................... 397
8.1. Skadnia procedur skadowanych......................................................................... 398
8.1.1. Utrzymanie procedur skadowanych........................................................ 398
8.1.2. SHOW PROCEDURE STATUS oraz SHOW FUNCTION STATUS.... 401
8.1.3. Instrukcja CALL...................................................................................... 402
8.1.4. Instrukcja zoona BEGIN ... END.......................................................... 402
8.1.5. Instrukcja DECLARE.............................................................................. 402
8.1.6. Zmienne w procedurach skadowanych................................................... 402
8.1.7. Warunki i podprogramy obsugi .............................................................. 403
8.1.8. Kursory.................................................................................................... 405
8.1.9. Konstrukcje sterowania przepywem sterowania..................................... 406
Rozdzia 9. Obsuga bdw w MySQL .............................................................. 409
9.1. Zwracane bdy.................................................................................................... 409
9.2. Komunikaty bdw............................................................................................. 419
Dodatek A Rozwizywanie problemw z zapytaniami ........................................435
A.1. Zagadnienia zwizane z zapytaniami ................................................................... 435
A.1.1. Wielko liter przy wyszukiwaniu........................................................... 435
A.1.2. Problemy z kolumnami typu DATE ........................................................ 436
A.1.3. Problemy z wartociami NULL............................................................... 437
A.1.4. Problemy z synonimami kolumn ............................................................. 438
A.1.5. Bd wycofania dla tabel nietransakcyjnych............................................ 439
A.1.6. Usuwanie wierszy ze zwizanych tabel ................................................... 439
A.1.7. Rozwizywanie problemw z brakujcymi wierszami ............................ 440
A.1.8. Problemy z porwnaniami zmiennoprzecinkowymi................................ 441
8 Spis treci
A.2. Problemy zwizane z optymalizatorem................................................................ 443
A.3. Problemy z definicj tabel.................................................................................... 444
A.3.1. Problemy z instrukcj ALTER TABLE................................................... 444
A.3.2. Jak zmieni porzdek kolumn w tabeli .................................................... 445
A.3.3. Problemy z tabelami tymczasowymi ....................................................... 445
Dodatek B Wyraenia regularne w MySQL........................................................ 447
Skorowidz...................................................................................... 451
Rozdzia 4.
Typy kolumn
W MySQL dostpnych jest wiele typw danych, ktre mona pogrupowa w kilku pod-
stawowych kategoriach, takich jak typy liczbowe, typy zwizane z dat i czasem oraz
typy acuchowe. Na pocztku tego rozdziau przedstawiony zostanie przegld wspo-
mnianych przed chwil typw kolumn, po czym nastpi bardziej szczegowy opis ich
waciwoci z podziaem na poszczeglne kategorie i wreszcie zamieszczone zostanie
podsumowanie informacji dotyczcych wymaga co do rozmiaru pamici potrzebnej
do przechowania danej kolumny. Sam przegld jest z zamierzenia krtki. Dodatkowe
informacje o poszczeglnych typach kolumn, na przykad dopuszczalny format, w kt-
rym mona deklarowa wartoci, zostay uwzgldnione w szczegowych omwieniach.
Od wersji 4.1 MySQL rozpoznaje rozszerzenia do obsugi danych przestrzennych.
Informacje o typach przestrzennych znajduj si w rozdziale 7. tego podrcznika.
W czci opisu typw kolumn zastosowane zostay nastpujce reguy:
/
Wskazuje maksymalny rozmiar wywietlania liczby lub acucha.
Maksymalnym dopuszczalnym rozmiarem wywietlania jest 255.
&
Dotyczy typw zmiennoprzecinkowych i staoprzecinkowych. Okrela liczb
cyfr po kropce dziesitnej. Maksymalna dopuszczalna warto wynosi 30,
ale nie powinna przekracza /.
Nawiasy kwadratowe ( ) identyfikuj opcjonalne fragmenty deklaracji typu.
126 Rozdzia 4. Typy kolumn
4.1. Przegld typw dla kolumny
4.1.1. Omwienie typw liczbowych
Poniej znajduje si przegld liczbowych typw dla kolumn. Bardziej szczegowe
informacje mona znale w podrozdziale 4.2. Wymogi dotyczce rozmiaru pamici
potrzebnej do przechowywania kolumn znajduj si w podrozdziale 4.5.
Jeli dla kolumny liczbowej zostanie okrelony atrybut /lRO|1||, MySQL automatycznie
doda do kolumny atrybut UN1S1ONlD.
Naley uwaa podczas odejmowania dwch wartoci liczbowych, z ktrych jedna ma
typ UN1S1ONlD. Uzyskany wynik bdzie rwnie tego typu! patrz podrozdzia 5.7.
T1NY1NT/) UNS1ONlD /lRO|1||
Bardzo maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od `8
do `/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do bb.
B1T, BOO|, BOO|lAN
To s synonimy T1NY1NT`). Synonim BOO|lAN zosta dodany w MySQL 4.1.0.
Warto zerowa to inaczej fasz. Wartoci niezerowe traktowane s jako prawda.
W przyszoci wprowadzona zostanie pena, zgodna ze standardem SQL
obsuga typu boolowskiego.
SMA||1NT/) UNS1ONlD /lRO|1||
Maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od o/68
do o/6/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do 6bbob.
MlD1UM1NT/) UNS1ONlD /lRO|1||
rednia liczba cakowita. Dla liczb ze znakiem zakres wynosi od 8o88608
do 8o8860/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0
do `6///`b.
1NT/) UNS1ONlD /lRO|1||
Standardowa liczba cakowita. Dla liczb ze znakiem zakres wynosi
od `4/48o648 do `4/48o64/. W przypadku liczb bez znaku zakres
obejmuje wartoci od 0 do 49496/9b.
1NTlOlR/) UNS1ONlD /lRO|1||
Jest to synonim dla typu 1NT.
B1O1NT/) UNS1ONlD /lRO|1||
Dua liczba cakowita. Dla liczb ze znakiem zakres wynosi
od 9oo/0o68b4//b808 do 9oo/0o68b4//b80/. W przypadku liczb
bez znaku zakres obejmuje wartoci od 0 do `8446/440/o/09bb`6`b.
4.1. Przegld typw dla kolumny 127
Oto kilka spraw, o ktrych naley wiedzie odnonie kolumn typu B1O1NT:
Wszystkie obliczenia wykonywane s przy uyciu wartoci typu B1O1NT
lub DOUB|l ze znakiem. Oznacza to, e duych liczb cakowitych bez
znaku, wikszych ni 9oo/0o68b4//b80/ (63 bity), mona uywa tylko
z funkcjami bitowymi! Niezastosowanie si do tej zasady moe doprowadzi
do uzyskania w wyniku liczby, ktrej kilka ostatnich cyfr jest bdnych
z powodu bdw w zaokrglaniu podczas konwersji wartoci B1O1NT
na DOUB|l.
MySQL 4.0 potrafi obsugiwa B1O1NT w nastpujcych przypadkach:
Podczas wykorzystywania liczb cakowitych do przechowywania
duych wartoci bez znaku w kolumnie typu B1O1NT.
W M1NPC\YCAMQN) lub MAXPC\YCAMQN), gdzie PC\YCAMQN odnosi si
do kolumny B1O1NT.
Podczas korzystania z operatorw (midzy innymi , , *), gdy oba
argumenty s liczbami cakowitymi.
Zawsze istnieje moliwo zapisania w kolumnie B1O1NT dokadnej wartoci
liczby cakowitej. Wystarczy zapisa j przy uyciu acucha. W takim
przypadku zostanie dokonana konwersja acucha na liczb; konwersja
nie bdzie wymaga poredniego etapu przeksztacajcego liczb na jej
odpowiednik o podwjnej precyzji.
Podczas korzystania z operatorw , i * stosowana jest arytmetyka
B1O1NT, jeli oba argumenty maj warto liczby cakowitej! To oznacza,
e pomnoenie dwch duych liczb cakowitych (lub wynikw funkcji,
ktra zwraca liczby cakowite) moe spowodowa nieoczekiwane
rezultaty, jeli wynik przekroczy liczb 9oo/0o68b4//b80/.
||OATR) UNS1ONlD /lRO|1||
Liczba zmiennoprzecinkowa. Parametr R oznacza precyzj i moe przyjmowa
warto od 0 do 14 dla liczb zmiennoprzecinkowych o dokadnoci do jednego
znaku i od 25 do 53 dla liczb zmiennoprzecinkowych o dokadnoci do dwch
znakw. To przypomina opisane poniej typy ||OAT i DOUB|l. Typ ||OATR)
ma ten sam zakres, jaki posiadaj odpowiadajce mu typy ||OAT i DOUB|l,
ale w jego przypadku niezdefiniowany jest maksymalny rozmiar wywietlania
i liczba miejsc po przecinku.
Od wersji 3.23 MySQL jest to prawdziwa warto zmiennoprzecinkowa.
W wersjach wczeniejszych liczba typu ||OATR) bya zawsze liczb o dwch
miejscach po przecinku.
Ta skadnia zostaa dodana w celu zachowania zgodnoci ze standardem ODBC.
Stosowanie typu ||OAT moe spowodowa wystpienie pewnych
nieoczekiwanych problemw, poniewa wszystkie obliczenia w MySQL
s wykonywane z podwjn precyzj patrz punkt A.1.7).
||OAT/, &) UNS1ONlD /lRO|1||
128 Rozdzia 4. Typy kolumn
Maa liczba zmiennoprzecinkowa (o dokadnoci do jednego znaku). Liczba
ta moe przyj wartoci: od o408o466lo8 do ``/b494ob`lo8, 0,
i od ``/b494ob`lo8 do o408o466lo8. Jeli podany jest atrybut UN1S1ONlD,
niedozwolone s wartoci ujemne. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ ||OAT bez argumentw
lub typ ||OATR) (gdzie Rjest liczb z zakresu od 0 do 24) oznacza liczb
zmiennoprzecinkow o pojedynczej precyzji.
DOUB|l/, &) UNS1ONlD /lRO|1||
Standardowa liczba zmiennoprzecinkowa (o dokadnoci do dwch
znakw). Liczba ta moe przyj wartoci: od `/9/69o`o486o`b/lo08
do b0/o8b8b0/0`4lo08, 0, i od b0/o8b8b0/0`4lo08
do `/9/69o`o486o`b/lo08. Jeli podany jest atrybut UN1S1ONlD, wartoci
ujemne s niedozwolone. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ DOUB|l
bez argumentw lub ||OATR) (gdzie R jest liczb z zakresu od 25 do 53)
oznacza liczb zmiennoprzecinkow o podwjnej precyzji.
DOUB|l PRlC1S1ON/, &) UNS1ONlD /lRO|1||
RlA|/, &) UNS1ONlD /lRO|1||
S to synonimy DOUB|l. Wyjtek: Jeli dla parametru s;_cce serwera
wczono opcj RlA|_AS_||OAT, synonimem ||OAT jest RlA|, a nie DOUB|l.
DlC1MA|/, &) UNS1ONlD /lRO|1||
Niezapakowana liczba staoprzecinkowa. Zachowanie kolumny tego typu
przypomina kolumn typu CHAR. Niezapakowana oznacza, e liczba jest
przechowywana w postaci acucha przy uyciu jednego znaku na kad cyfr
wartoci. Parametr / definiuje maksymaln liczb cyfr, a & liczb miejsc
po przecinku. W parametrze / nie s brane pod uwag: kropka dziesitna
(odpowiadajca w naszej notacji przecinkowi) i (dla liczb ujemnych) znak ,
cho jest dla nich zarezerwowane miejsce. Wartoci nie maj miejsc
po przecinku lub czci uamkowych, jeli & jest rwne 0. Maksymalny zakres
wartoci typu DlC1MA| jest taki sam, jak dla typu DOUB|l, ale rzeczywisty zakres
danej kolumny DlC1MA| moe by ograniczony przez wybr argumentw / i &.
Jeli podany jest atrybut UN1S1ONlD, wartoci ujemne s niedozwolone.
W przypadku braku argumentu &, domyln wartoci jest 0. Jeli pominity
jest parametr /, domyln wartoci jest 10.
W wersjach poprzedzajcych MySQL 3.23 argument / musi by wystarczajco
duy, by zawiera obszar potrzebny dla znaku i kropki dziesitnej.
DlC/,&) UNS1ONlD /lRO|1||
NUMlR1C/,&) UNS1ONlD /lRO|1||
|1XlD/, &) UNS1ONlD /lRO|1||
S to synonimy typu DlC1MA|.
W MySQL 4.1.0 dodano synonim |1XlD w celu osignicia kompatybilnoci
z innymi serwerami.
4.1. Przegld typw dla kolumny 129
4.1.2. Przegld typw zwizanych z dat i czasem
Poniej znajduje si podsumowanie typw kolumn przeznaczonych dla czasu i daty.
Dodatkowe informacje na ten temat mona znale w podrozdziale 4.3. Wymogi do-
tyczce pamici potrzebnej do przechowywania danych w kolumnach zostay podane
w podrozdziale 4.5.
DATl
Data. Obsugiwany zakres obejmuje daty od ``0000`0`` do `9999`o``.
W MySQL wartoci DATl wywietlane s w formacie `RRRRMMDD`, ale mona
przypisywa wartoci do kolumn DATl przy uyciu acuchw lub liczb.
DATlT1Ml
Kombinacja daty i czasu. Obsugiwany zakres obejmuje wartoci
od ``0000`0` 000000` do `9999`o` ob9b9`. W MySQL wartoci
DATlT1Ml wywietlane s w formacie `RRRRMMDD OOMMSS`, ale mona
przypisywa wartoci do kolumn DATlT1Ml przy uyciu acuchw lub liczb.
T1MlSTAMP/)
Znacznik czasu. Obsugiwany zakres rozpoczyna si od daty ``9/00`0``
i siga roku 0o/.
Kolumna typu T1MlSTAMP przydaje si do rejestracji daty i godziny operacji
wstawiania lub aktualizacji. Pierwszej kolumnie T1MlSTAMP w tabeli
automatycznie przypisywana jest data i czas ostatniej operacji, jeli tylko tych
wartoci nie wprowadzi rcznie uytkownik. Dowolnej kolumnie T1MlSTAMP
mona rwnie przypisa biec dat i godzin, wpisujc do niej warto NU||.
Od MySQL 4.1 wartoci T1MlSTAMP s zwracane w postaci acuchw
w formacie `RRRRMMDD OOMMSS`. Aby uzyska warto w postaci liczby,
naley doda do kolumn tego typu 0. Inne szerokoci wywietlania
znacznika czasu nie s obsugiwane.
W wersjach poprzedzajcych MySQL 4.1 wartoci T1MlSTAMP s wywietlane
w formacie RRRRMMDDOOMMSS, RRMMDDOOMMSS, RRRRMMDD lub RRMMDD w zalenoci
od tego, czy parametr / jest rwny 14 (albo go brak), 12, 8 lub 6. Mona jednak
przypisywa wartoci do kolumn T1MlSTAMP przy uyciu acuchw lub liczb.
Argument / wpywa tylko na sposb wywietlania kolumny T1MlSTAMP, a nie
na jej przechowywanie. Wartoci kolumny s zawsze zapisywane w czterech
bajtach. W MySQL od wersji 4.0.12 pojawia si opcja ne., dziki ktrej
mona zmieni dziaanie serwera, upodabniajc je do MySQL 4.1.
Naley odnotowa, e kolumny T1MlSTAMP/), gdzie /jest rwne 8 lub 14,
s traktowane jako liczby, natomiast reszta kolumn T1MlSTAMP/) jest
traktowana jako acuchy. Jest to rodzaj gwarancji, e uytkownik bdzie
mg wiarygodnie usuwa i przywraca tabele tego typu.
T1Ml
Godzina. Obsugiwany zakres obejmuje wartoci od `8o8b9b9`
do ` 8o8b9b9`. W MySQL wartoci T1Ml wywietlane s w formacie
` OOMMSS`, ale mona przypisa wartoci do kolumn T1Ml przy uyciu
zarwno acuchw, jak i liczb.
130 Rozdzia 4. Typy kolumn
YlAR|4)
Rok w formacie dwu- lub czterocyfrowym. Domylnym formatem jest rok
zapisany za pomoc czterech cyfr. W tym formacie dostpne wartoci nale
do przedziau od `90` do `bb oraz 0. W formacie dwucyfrowym wartoci
dopuszczalne to liczby z zakresu od /0 do 69, ktre reprezentuj daty od roku
1970 do 2069. W MySQL wartoci YlAR wywietlane s w formacie RRRR,
ale mona przypisa wartoci do kolumn YlAR przy uyciu tak acuchw,
jak i liczb. Typ YlAR jest niedostpny dla wersji wczeniejszych ni MySQL 3.22.
4.1.3. Przegld typw acuchowych
Poniej znajduje si przegld typw acuchowych. Dodatkowe informacje mona
znale w podrozdziale 4.4. Wymogi dotyczce pamici potrzebnej do przechowywa-
nia danych w kolumnach zostay podane w podrozdziale 4.5.
W niektrych przypadkach MySQL moe zmieni kolumn typu acuchowego na typ,
ktry bdzie si rni od zadeklarowanego w instrukcji CRlATl TAB|l lub A|TlR TAB|l.
Wicej informacji na ten temat znajduje si w podpunkcie 6.2.5.2.
Od wersji 4.1 w MySQL pojawia si zmiana, ktra wpywa na wiele typw kolumn typu
acuchowego. Definicja kolumn typu znakowego moe zawiera atrybut CHARACTlR
SlT, ktry okrela zestaw znakw i opcjonalnie porzdek sortowania. Dotyczy to typw
CHAR, VARCHAR, rnych typw TlXT oraz lNUM i SlT, na przykad:
CRF/TF T/B|F !
FNUMYCTVQ
YCTVQ|
1 lub 2 bajty w zalenoci od liczby wartoci wyliczenia
(maksymalnie 65 535)
SFTYCTVQ
YCTVQ|
1, 2, 3, 4 lub 8 bajtw w zalenoci od liczby elementw zestawu
(maksymalnie 64)
Typy VARCHAR, B|OB i TlXT maj zmienn dugo. Dla kadego ilo pamici potrzeb-
nej do przechowania wartoci bdzie zalee od faktycznej dugoci wartoci kolumny
(reprezentowanej w ostatniej tabeli przez .), a nie od maksymalnego moliwego roz-
miaru danego typu. Kolumna VARCHAR`0) na przykad moe przechowywa acuch
o maksymalnej dugoci 10 znakw. Faktyczna ilo wymaganej pamici to dugo
acucha (.) plus 1 bajt do zapisania dugoci acucha. Dla acucha `.|cc` parametr
. jest rwny 4, a wymagany rozmiar pamici to 5 bajtw.
Typy B|OB i TlXT wymagaj 1, 2, 3 lub 4 bajtw do zapisu dugoci wartoci kolumny
w zalenoci od maksymalnej moliwej dugoci tego typu (patrz punkt 4.4.2).
Rozmiar obiektu lNUM jest ustalany na podstawie liczby rnych wartoci wyliczenia.
Przy wyliczeniach do 255 moliwych wartoci uywany jest jeden bajt, a przy wyli-
czeniach do 65 535 wartoci uywane s 2 bajty (patrz punkt 4.4.3).
Rozmiar obiektu SlT jest okrelany przez liczb rnych elementw zestawu. Jeli ze-
staw ma rozmiar 0, obiekt zajmuje 0/).8 bajtw, ktr to warto zaokrgla si do
1, 2, 3, 4 lub 8 bajtw. Obiekt SlT moe mie do 64 elementw (patrz punkt 4.4.4).
4.6. Wybieranie odpowiedniego typu
dla kolumny
Aby jak najbardziej wydajnie korzysta z pamici, naley we wszystkich przypadkach
stara si stosowa typ, ktry bdzie jak najbardziej dokadny. Jeli na przykad w kolum-
nie liczb cakowitych bd przechowywane wartoci z zakresu od ` do 99999, najlep-
szym wyborem bdzie typ MlD1UM1NT UNS1ONlD. Ze wszystkich typw, ktre reprezentuj
wszystkie wymagane wartoci, zajmuje najmniej pamici.
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych 153
Powszechnym problemem jest dokadne przedstawianie wartoci walutowych. W MySQL
naley do tego uywa typu DlC1MA|, za pomoc ktrego wartoci zapisywane s w for-
mie acucha. Dziki temu nie traci si na dokadnoci (mimo to obliczenia z wartociami
DlC1MA| mog by wci wykonywane przy uyciu operacji dziaajcych na liczbach
z podwjn precyzj). Jeli dokadno nie jest zbyt wana, by moe wystarczajco
dobrym typem bdzie DOUB|l.
Aby uzyska wiksz dokadno, mona zawsze przeksztaci warto na typ stao-
przecinkowy, przechowywany w B1O1NT. Pozwoli to wykonywa wszystkie obliczenia
na liczbach cakowitych i tylko w razie potrzeby przeksztaca wynik z powrotem na
wartoci zmiennoprzecinkowe.
4.7. Wykorzystywanie typw kolumn
z innych mechanizmw baz danych
Aby uatwi uytkownikowi zastosowanie kodu pochodzcego od innych producentw,
moliwe jest odwzorowanie typw kolumn w sposb przedstawiony w poniszej tabeli.
Odwzorowania te upraszczaj operacj importu do MySQL definicji tabel z innych
mechanizmw baz danych:
Typ innych producentw Typ MySQL
BTN/RY/| C'/R/| BTN/RY
C'/R V/RYTN/| V/RC'/R/|
F|J/T4 F|J/T
F|J/T8 OJUB|F
TNT1 TTNYTNT
TNT SM/||TNT
TNT: MFOTUMTNT
TNT4 TNT
TNT8 BTTNT
|JN V/RBTN/RY MFOTUMB|JB
|JN V/RC'/R MFOTUMTFXT
|JN MFOTUMTFXT oc M,SJ| 410|
MTOO|FTNT MFOTUMTNT
V/RBTN/RY/| C'/R/| BTN/RY
Odwzorowanie typw kolumn jest wykonywane podczas tworzenia tabeli, po czym
oryginalne deklaracje typu zostaj usunite. Jeli uytkownik utworzy tabel z typami
stosowanymi przez innych producentw, po czym wyda polecenie DlSCR1Bl PC\YCA
VCDGNK, zostanie przedstawiona struktura tabeli z odpowiadajcymi im typami MySQL.
4 Spis treci
1.8.5. Rozbienoci midzy MySQL a standardem SQL ........................................ 60
1.8.6. Jak MySQL radzi sobie z ograniczeniami ................................................. 67
1.8.7. Znane bdy i projektowe braki w MySQL................................................ 69
Rozdzia 2. Struktura jzyka .............................................................................. 77
2.1. Literay................................................................................................................... 77
2.1.1. acuchy ................................................................................................... 77
2.1.2. Liczby........................................................................................................ 80
2.1.3. Wartoci szesnastkowe .............................................................................. 80
2.1.4. Wartoci logiczne ...................................................................................... 81
2.1.5. Wartoci NULL......................................................................................... 81
2.2. Nazwy baz danych, tabel, indeksw, kolumn i aliasw......................................... 81
2.2.1. Kwalifikatory identyfikatorw .................................................................. 83
2.2.2. Znaczenie wielkoci liter w nazwach identyfikatorw.............................. 83
2.3. Zmienne definiowane przez uytkownika.............................................................. 85
2.4. Zmienne systemowe............................................................................................... 87
2.4.1. Strukturalne zmienne systemowe .............................................................. 89
2.5. Skadnia komentarza .............................................................................................. 91
2.6. Traktowanie sw zastrzeonych w MySQL.......................................................... 92
Rozdzia 3. Obsuga zestaww znakw............................................................... 95
3.1. Oglne informacje o zestawach znakw i sortowaniu ........................................... 95
3.2. Zestawy znakw i porzdki sortowania w MySQL................................................ 96
3.3. Okrelanie domylnego zestawu znakw i sortowania........................................... 98
3.3.1. Zestaw znakw i sortowanie dla serwera................................................... 98
3.3.2. Zestaw znakw i sortowanie dla bazy danych........................................... 99
3.3.3. Zestaw znakw i sortowanie dla tabeli .................................................... 100
3.3.4. Zestaw znakw i sortowanie dla kolumny............................................... 100
3.3.5. Przykady przypisywania zestawu znakw i sortowania ......................... 101
3.3.6. Zestawy znakw i sortowanie dla poczenia .......................................... 102
3.3.7. Zestaw znakw i sortowanie dla acucha znakw.................................. 104
3.3.8. Wykorzystywanie COLLATE w instrukcjach SQL.................................... 105
3.3.9. Priorytet klauzuli COLLATE .................................................................. 106
3.3.10. Operator BINARY................................................................................... 106
3.3.11. Niektre przypadki specjalne, w ktrych trudno okreli sortowanie...... 106
3.3.12. Sortowania musz by odpowiednie dla danego zestawu znakw........... 107
3.3.13. Przykad wpywu porzdku sortowania ................................................... 108
3.4. Operacje, na ktre ma wpyw obsuga zestaww znakw.................................... 109
3.4.1. acuchy wyjciowe ............................................................................... 109
3.4.2. CONVERT()............................................................................................ 110
3.4.3. CAST() .................................................................................................... 110
3.4.4. Instrukcje SHOW .................................................................................... 111
3.5. Obsuga Unicode.................................................................................................. 112
3.6. UTF8 dla metadanych.......................................................................................... 113
3.7. Kompatybilno z innymi systemami zarzdzania baz danych .......................... 115
3.8. Nowy format pliku konfiguracji zestawu znakw................................................ 115
3.9. Narodowe zestawy znakw.................................................................................. 115
3.10. Aktualizacja zestaww znakw z MySQL 4.0..................................................... 116
3.10.1. Zestawy znakw w wersji 4.0 i odpowiadajce im w wersji 4.1 pary
skadajce si z zestawu znakw i sortowania......................................... 117
3.10.2. Przeksztacanie kolumn znakowych wersji 4.0 na format 4.1 ................. 118
3.11. Zestawy znakw i sortowania obsugiwane przez MySQL.................................. 118
3.11.1. Zestawy znakw standardu Unicode ....................................................... 119
3.11.2. Zestawy znakw zachodnioeuropejskich................................................. 120
3.11.3. Zestawy znakw dla Europy Centralnej .................................................. 121
Spis treci 5
3.11.4. Zestawy znakw poudniowoeuropejskich i rodkowowschodnich......... 122
3.11.5. Zestawy znakw regionu batyckiego...................................................... 123
3.11.6. Zestawy znakw dla cyrylicy................................................................... 123
3.11.7. Azjatyckie zestawy znakw..................................................................... 124
Rozdzia 4. Typy kolumn.................................................................................. 125
4.1. Przegld typw dla kolumny................................................................................ 126
4.1.1. Omwienie typw liczbowych ................................................................ 126
4.1.2. Przegld typw zwizanych z dat i czasem............................................ 129
4.1.3. Przegld typw acuchowych ................................................................ 130
4.2. Typy liczbowe...................................................................................................... 132
4.3. Typy zwizane z dat i czasem............................................................................ 135
4.3.1. Typy DATETIME, DATE i TIMESTAMP............................................. 137
4.3.2. Typ TIME................................................................................................ 142
4.3.3. Typ YEAR............................................................................................... 143
4.3.4. Problem roku 2000 a typy zwizane z dat.............................................. 144
4.4. Typy acuchowe ................................................................................................. 144
4.4.1. Typy CHAR i VARCHAR...................................................................... 144
4.4.2. Typy BLOB i TEXT................................................................................ 146
4.4.3. Typ Enum................................................................................................ 147
4.4.4. Typ SET .................................................................................................. 149
4.5. Rozmiar pamici potrzebnej dla typw kolumn................................................... 151
4.6. Wybieranie odpowiedniego typu dla kolumny..................................................... 152
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych ............... 153
Rozdzia 5. Funkcje i operatory........................................................................ 155
5.1. Operatory ............................................................................................................. 156
5.1.1. Nawiasy................................................................................................... 156
5.1.2. Operatory porwnania ............................................................................. 156
5.1.3. Operatory logiczne .................................................................................. 161
5.1.4. Operatory rozrniania wielkoci liter..................................................... 163
5.2. Funkcje kontroli przepywu ................................................................................. 163
5.3. Funkcje acuchowe............................................................................................. 166
5.3.1. Funkcje porwnywania acuchw.......................................................... 176
5.4. Funkcje liczbowe ................................................................................................. 178
5.4.1. Operatory arytmetyczne........................................................................... 178
5.4.2. Funkcje matematyczne ............................................................................ 180
5.5. Funkcje daty i godziny......................................................................................... 186
5.6. Funkcje obsugi wyszukiwania penotekstowego................................................. 202
5.6.1. Boolowskie wyszukiwania penotekstowe............................................... 205
5.6.2. Wyszukiwania penotekstowe z rozwijaniem zapytania .......................... 207
5.6.3. Ograniczenia dla wyszukiwania penotekstowego................................... 208
5.6.4. Modyfikowanie wyszukiwania penotekstowego MySQL ...................... 209
5.6.5. Lista rzeczy do zrobienia dla wyszukiwania penotekstowego................ 211
5.7. Funkcje konwersji typw..................................................................................... 211
5.8. Inne funkcje ......................................................................................................... 214
5.8.1. Funkcje bitowe ........................................................................................ 214
5.8.2. Funkcje szyfrujce................................................................................... 215
5.8.3. Funkcje informacyjne .............................................................................. 219
5.8.4. Funkcje rne .......................................................................................... 223
5.9. Funkcje i modyfikatory do zastosowania z klauzulami GROUP BY................... 226
5.9.1. Funkcje GROUP BY (agregujce)........................................................... 226
5.9.2. Modyfikatory GROUP BY...................................................................... 229
5.9.3. GROUP BY z ukrytymi polami............................................................... 232
6 Spis treci
Rozdzia 6. Skadnia instrukcji SQL .................................................................. 235
6.1. Instrukcje operujce na danych............................................................................ 235
6.1.1. Skadnia instrukcji DELETE................................................................... 235
6.1.2. Skadnia instrukcji DO ............................................................................ 238
6.1.3. Skadnia instrukcji HANDLER............................................................... 238
6.1.4. Skadnia instrukcji INSERT .................................................................... 240
6.1.5. Skadnia instrukcji LOAD DATA INFILE.............................................. 246
6.1.6. Skadnia instrukcji REPLACE................................................................. 255
6.1.7. Skadnia instrukcji SELECT.................................................................... 256
6.1.8. Skadnia podzapyta................................................................................ 265
6.1.9. Skadnia instrukcji TRUNCATE............................................................. 276
6.1.10. Skadnia instrukcji UPDATE................................................................... 276
6.2. Instrukcje definiowania danych ........................................................................... 278
6.2.1. Skadnia instrukcji ALTER DATABASE ............................................... 278
6.2.2. Skadnia instrukcji ALTER TABLE........................................................ 279
6.2.3. Skadnia instrukcji CREATE DATABASE............................................. 285
6.2.4. Skadnia instrukcji CREATE INDEX ..................................................... 285
6.2.5. Skadnia instrukcji CREATE TABLE..................................................... 287
6.2.6. Skadnia instrukcji DROP DATABASE.................................................. 301
6.2.7. Skadnia instrukcji DROP INDEX.......................................................... 302
6.2.8. Skadnia instrukcji DROP TABLE.......................................................... 302
6.2.9. Skadnia instrukcji RENAME TABLE.................................................... 303
6.3. Instrukcje programu MySQL............................................................................... 304
6.3.1. Skadnia instrukcji DESCRIBE
(odczytywanie informacji na temat kolumn) ........................................... 304
6.3.2. Skadnia instrukcji USE........................................................................... 304
6.4. Instrukcje obsugi transakcji i blokowania........................................................... 305
6.4.1. Skadnia instrukcji START TRANSACTION, COMMIT
oraz ROLLBACK.................................................................................... 305
6.4.2. Instrukcje niemoliwe do wycofania ....................................................... 306
6.4.3. Instrukcje wykonujce niejawne zatwierdzenie......................................... 306
6.4.4. Skadnia instrukcji SAVEPOINT i ROLLBACK TO SAVEPOINT....... 307
6.4.5. Skadnia instrukcji LOCK TABLES oraz UNLOCK TABLES .............. 307
6.4.6. Skadnia instrukcji SET TRANSACTION.............................................. 310
6.5. Administracja baz danych .................................................................................. 311
6.5.1. Instrukcje zarzdzajce kontami uytkownikw ....................................... 311
6.5.2. Instrukcje do konserwacji tabel ............................................................... 319
6.5.3. Skadnia instrukcji SET i SHOW ............................................................ 326
6.5.4. Inne instrukcje administracyjne ............................................................... 347
6.6. Instrukcje replikacji.............................................................................................. 352
6.6.1. Instrukcje SQL sterujce serwerem gwnym ......................................... 352
6.6.2. Instrukcje SQL sterujce serwerami podrzdnymi .................................. 354
Rozdzia 7. Rozszerzenia przestrzenne w MySQL............................................... 365
7.1. Wstp ................................................................................................................... 365
7.2. Model geometryczny OpenGIS............................................................................ 366
7.2.1. Hierarchia klas geometrycznych.............................................................. 366
7.2.2. Klasa Geometry ....................................................................................... 368
7.2.3. Klasa Point .............................................................................................. 369
7.2.4. Klasa Curve ............................................................................................. 369
7.2.5. Klasa LineString...................................................................................... 370
7.2.6. Klasa Surface........................................................................................... 370
7.2.7. Klasa Polygon.......................................................................................... 370
7.2.8. Klasa GeometryCollection....................................................................... 371
Spis treci 7
7.2.9. Klasa MultiPoint...................................................................................... 371
7.2.10. Klasa MultiCurve .................................................................................... 372
7.2.11. Klasa MultiLineString............................................................................. 372
7.2.12. Klasa MultiSurface .................................................................................. 372
7.2.13. Klasa MultiPolygon................................................................................. 373
7.3. Obsugiwane formaty danych przestrzennych...................................................... 373
7.3.1. Format tekstowy WKT............................................................................ 374
7.3.2. Format binarny WKB.............................................................................. 374
7.4. Tworzenie bazy danych z rozszerzeniami przestrzennymi................................... 375
7.4.1. Typy danych przestrzennych w MySQL ................................................. 375
7.4.2. Tworzenie wartoci przestrzennych......................................................... 376
7.4.3. Tworzenie kolumn przestrzennych.......................................................... 379
7.4.4. Wypenianie kolumn przestrzennych....................................................... 379
7.4.5. Pobieranie danych przestrzennych........................................................... 381
7.5. Analiza informacji przestrzennych....................................................................... 381
7.5.1. Funkcje konwersji formatw geometrycznych ........................................ 382
7.5.2. Funkcje klasy Geometry.......................................................................... 382
7.5.3. Funkcje tworzce nowe geometrie na podstawie istniejcych................. 388
7.5.4. Funkcje testujce relacje przestrzenne
midzy obiektami geometrycznymi ......................................................... 389
7.5.5. Relacje midzy minimalnymi prostoktami otaczajcymi
dla poszczeglnych geometrii.................................................................. 390
7.5.6. Funkcje sprawdzajce relacje przestrzenne pomidzy geometriami ........ 391
7.6. Optymalizacja analizy przestrzennej.................................................................... 392
7.6.1. Tworzenie indeksw przestrzennych....................................................... 392
7.6.2. Wykorzystanie indeksu przestrzennego................................................... 393
7.7. Zgodno MySQL ze standardem........................................................................ 395
7.7.1. Niezaimplementowane funkcje GIS ........................................................ 395
Rozdzia 8. Procedury i funkcje skadowane ..................................................... 397
8.1. Skadnia procedur skadowanych......................................................................... 398
8.1.1. Utrzymanie procedur skadowanych........................................................ 398
8.1.2. SHOW PROCEDURE STATUS oraz SHOW FUNCTION STATUS.... 401
8.1.3. Instrukcja CALL...................................................................................... 402
8.1.4. Instrukcja zoona BEGIN ... END.......................................................... 402
8.1.5. Instrukcja DECLARE.............................................................................. 402
8.1.6. Zmienne w procedurach skadowanych................................................... 402
8.1.7. Warunki i podprogramy obsugi .............................................................. 403
8.1.8. Kursory.................................................................................................... 405
8.1.9. Konstrukcje sterowania przepywem sterowania..................................... 406
Rozdzia 9. Obsuga bdw w MySQL .............................................................. 409
9.1. Zwracane bdy.................................................................................................... 409
9.2. Komunikaty bdw............................................................................................. 419
Dodatek A Rozwizywanie problemw z zapytaniami ........................................435
A.1. Zagadnienia zwizane z zapytaniami ................................................................... 435
A.1.1. Wielko liter przy wyszukiwaniu........................................................... 435
A.1.2. Problemy z kolumnami typu DATE ........................................................ 436
A.1.3. Problemy z wartociami NULL............................................................... 437
A.1.4. Problemy z synonimami kolumn ............................................................. 438
A.1.5. Bd wycofania dla tabel nietransakcyjnych............................................ 439
A.1.6. Usuwanie wierszy ze zwizanych tabel ................................................... 439
A.1.7. Rozwizywanie problemw z brakujcymi wierszami ............................ 440
A.1.8. Problemy z porwnaniami zmiennoprzecinkowymi................................ 441
8 Spis treci
A.2. Problemy zwizane z optymalizatorem................................................................ 443
A.3. Problemy z definicj tabel.................................................................................... 444
A.3.1. Problemy z instrukcj ALTER TABLE................................................... 444
A.3.2. Jak zmieni porzdek kolumn w tabeli .................................................... 445
A.3.3. Problemy z tabelami tymczasowymi ....................................................... 445
Dodatek B Wyraenia regularne w MySQL........................................................ 447
Skorowidz...................................................................................... 451
Rozdzia 4.
Typy kolumn
W MySQL dostpnych jest wiele typw danych, ktre mona pogrupowa w kilku pod-
stawowych kategoriach, takich jak typy liczbowe, typy zwizane z dat i czasem oraz
typy acuchowe. Na pocztku tego rozdziau przedstawiony zostanie przegld wspo-
mnianych przed chwil typw kolumn, po czym nastpi bardziej szczegowy opis ich
waciwoci z podziaem na poszczeglne kategorie i wreszcie zamieszczone zostanie
podsumowanie informacji dotyczcych wymaga co do rozmiaru pamici potrzebnej
do przechowania danej kolumny. Sam przegld jest z zamierzenia krtki. Dodatkowe
informacje o poszczeglnych typach kolumn, na przykad dopuszczalny format, w kt-
rym mona deklarowa wartoci, zostay uwzgldnione w szczegowych omwieniach.
Od wersji 4.1 MySQL rozpoznaje rozszerzenia do obsugi danych przestrzennych.
Informacje o typach przestrzennych znajduj si w rozdziale 7. tego podrcznika.
W czci opisu typw kolumn zastosowane zostay nastpujce reguy:
/
Wskazuje maksymalny rozmiar wywietlania liczby lub acucha.
Maksymalnym dopuszczalnym rozmiarem wywietlania jest 255.
&
Dotyczy typw zmiennoprzecinkowych i staoprzecinkowych. Okrela liczb
cyfr po kropce dziesitnej. Maksymalna dopuszczalna warto wynosi 30,
ale nie powinna przekracza /.
Nawiasy kwadratowe ( ) identyfikuj opcjonalne fragmenty deklaracji typu.
126 Rozdzia 4. Typy kolumn
4.1. Przegld typw dla kolumny
4.1.1. Omwienie typw liczbowych
Poniej znajduje si przegld liczbowych typw dla kolumn. Bardziej szczegowe
informacje mona znale w podrozdziale 4.2. Wymogi dotyczce rozmiaru pamici
potrzebnej do przechowywania kolumn znajduj si w podrozdziale 4.5.
Jeli dla kolumny liczbowej zostanie okrelony atrybut /lRO|1||, MySQL automatycznie
doda do kolumny atrybut UN1S1ONlD.
Naley uwaa podczas odejmowania dwch wartoci liczbowych, z ktrych jedna ma
typ UN1S1ONlD. Uzyskany wynik bdzie rwnie tego typu! patrz podrozdzia 5.7.
T1NY1NT/) UNS1ONlD /lRO|1||
Bardzo maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od `8
do `/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do bb.
B1T, BOO|, BOO|lAN
To s synonimy T1NY1NT`). Synonim BOO|lAN zosta dodany w MySQL 4.1.0.
Warto zerowa to inaczej fasz. Wartoci niezerowe traktowane s jako prawda.
W przyszoci wprowadzona zostanie pena, zgodna ze standardem SQL
obsuga typu boolowskiego.
SMA||1NT/) UNS1ONlD /lRO|1||
Maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od o/68
do o/6/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do 6bbob.
MlD1UM1NT/) UNS1ONlD /lRO|1||
rednia liczba cakowita. Dla liczb ze znakiem zakres wynosi od 8o88608
do 8o8860/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0
do `6///`b.
1NT/) UNS1ONlD /lRO|1||
Standardowa liczba cakowita. Dla liczb ze znakiem zakres wynosi
od `4/48o648 do `4/48o64/. W przypadku liczb bez znaku zakres
obejmuje wartoci od 0 do 49496/9b.
1NTlOlR/) UNS1ONlD /lRO|1||
Jest to synonim dla typu 1NT.
B1O1NT/) UNS1ONlD /lRO|1||
Dua liczba cakowita. Dla liczb ze znakiem zakres wynosi
od 9oo/0o68b4//b808 do 9oo/0o68b4//b80/. W przypadku liczb
bez znaku zakres obejmuje wartoci od 0 do `8446/440/o/09bb`6`b.
4.1. Przegld typw dla kolumny 127
Oto kilka spraw, o ktrych naley wiedzie odnonie kolumn typu B1O1NT:
Wszystkie obliczenia wykonywane s przy uyciu wartoci typu B1O1NT
lub DOUB|l ze znakiem. Oznacza to, e duych liczb cakowitych bez
znaku, wikszych ni 9oo/0o68b4//b80/ (63 bity), mona uywa tylko
z funkcjami bitowymi! Niezastosowanie si do tej zasady moe doprowadzi
do uzyskania w wyniku liczby, ktrej kilka ostatnich cyfr jest bdnych
z powodu bdw w zaokrglaniu podczas konwersji wartoci B1O1NT
na DOUB|l.
MySQL 4.0 potrafi obsugiwa B1O1NT w nastpujcych przypadkach:
Podczas wykorzystywania liczb cakowitych do przechowywania
duych wartoci bez znaku w kolumnie typu B1O1NT.
W M1NPC\YCAMQN) lub MAXPC\YCAMQN), gdzie PC\YCAMQN odnosi si
do kolumny B1O1NT.
Podczas korzystania z operatorw (midzy innymi , , *), gdy oba
argumenty s liczbami cakowitymi.
Zawsze istnieje moliwo zapisania w kolumnie B1O1NT dokadnej wartoci
liczby cakowitej. Wystarczy zapisa j przy uyciu acucha. W takim
przypadku zostanie dokonana konwersja acucha na liczb; konwersja
nie bdzie wymaga poredniego etapu przeksztacajcego liczb na jej
odpowiednik o podwjnej precyzji.
Podczas korzystania z operatorw , i * stosowana jest arytmetyka
B1O1NT, jeli oba argumenty maj warto liczby cakowitej! To oznacza,
e pomnoenie dwch duych liczb cakowitych (lub wynikw funkcji,
ktra zwraca liczby cakowite) moe spowodowa nieoczekiwane
rezultaty, jeli wynik przekroczy liczb 9oo/0o68b4//b80/.
||OATR) UNS1ONlD /lRO|1||
Liczba zmiennoprzecinkowa. Parametr R oznacza precyzj i moe przyjmowa
warto od 0 do 14 dla liczb zmiennoprzecinkowych o dokadnoci do jednego
znaku i od 25 do 53 dla liczb zmiennoprzecinkowych o dokadnoci do dwch
znakw. To przypomina opisane poniej typy ||OAT i DOUB|l. Typ ||OATR)
ma ten sam zakres, jaki posiadaj odpowiadajce mu typy ||OAT i DOUB|l,
ale w jego przypadku niezdefiniowany jest maksymalny rozmiar wywietlania
i liczba miejsc po przecinku.
Od wersji 3.23 MySQL jest to prawdziwa warto zmiennoprzecinkowa.
W wersjach wczeniejszych liczba typu ||OATR) bya zawsze liczb o dwch
miejscach po przecinku.
Ta skadnia zostaa dodana w celu zachowania zgodnoci ze standardem ODBC.
Stosowanie typu ||OAT moe spowodowa wystpienie pewnych
nieoczekiwanych problemw, poniewa wszystkie obliczenia w MySQL
s wykonywane z podwjn precyzj patrz punkt A.1.7).
||OAT/, &) UNS1ONlD /lRO|1||
128 Rozdzia 4. Typy kolumn
Maa liczba zmiennoprzecinkowa (o dokadnoci do jednego znaku). Liczba
ta moe przyj wartoci: od o408o466lo8 do ``/b494ob`lo8, 0,
i od ``/b494ob`lo8 do o408o466lo8. Jeli podany jest atrybut UN1S1ONlD,
niedozwolone s wartoci ujemne. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ ||OAT bez argumentw
lub typ ||OATR) (gdzie Rjest liczb z zakresu od 0 do 24) oznacza liczb
zmiennoprzecinkow o pojedynczej precyzji.
DOUB|l/, &) UNS1ONlD /lRO|1||
Standardowa liczba zmiennoprzecinkowa (o dokadnoci do dwch
znakw). Liczba ta moe przyj wartoci: od `/9/69o`o486o`b/lo08
do b0/o8b8b0/0`4lo08, 0, i od b0/o8b8b0/0`4lo08
do `/9/69o`o486o`b/lo08. Jeli podany jest atrybut UN1S1ONlD, wartoci
ujemne s niedozwolone. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ DOUB|l
bez argumentw lub ||OATR) (gdzie R jest liczb z zakresu od 25 do 53)
oznacza liczb zmiennoprzecinkow o podwjnej precyzji.
DOUB|l PRlC1S1ON/, &) UNS1ONlD /lRO|1||
RlA|/, &) UNS1ONlD /lRO|1||
S to synonimy DOUB|l. Wyjtek: Jeli dla parametru s;_cce serwera
wczono opcj RlA|_AS_||OAT, synonimem ||OAT jest RlA|, a nie DOUB|l.
DlC1MA|/, &) UNS1ONlD /lRO|1||
Niezapakowana liczba staoprzecinkowa. Zachowanie kolumny tego typu
przypomina kolumn typu CHAR. Niezapakowana oznacza, e liczba jest
przechowywana w postaci acucha przy uyciu jednego znaku na kad cyfr
wartoci. Parametr / definiuje maksymaln liczb cyfr, a & liczb miejsc
po przecinku. W parametrze / nie s brane pod uwag: kropka dziesitna
(odpowiadajca w naszej notacji przecinkowi) i (dla liczb ujemnych) znak ,
cho jest dla nich zarezerwowane miejsce. Wartoci nie maj miejsc
po przecinku lub czci uamkowych, jeli & jest rwne 0. Maksymalny zakres
wartoci typu DlC1MA| jest taki sam, jak dla typu DOUB|l, ale rzeczywisty zakres
danej kolumny DlC1MA| moe by ograniczony przez wybr argumentw / i &.
Jeli podany jest atrybut UN1S1ONlD, wartoci ujemne s niedozwolone.
W przypadku braku argumentu &, domyln wartoci jest 0. Jeli pominity
jest parametr /, domyln wartoci jest 10.
W wersjach poprzedzajcych MySQL 3.23 argument / musi by wystarczajco
duy, by zawiera obszar potrzebny dla znaku i kropki dziesitnej.
DlC/,&) UNS1ONlD /lRO|1||
NUMlR1C/,&) UNS1ONlD /lRO|1||
|1XlD/, &) UNS1ONlD /lRO|1||
S to synonimy typu DlC1MA|.
W MySQL 4.1.0 dodano synonim |1XlD w celu osignicia kompatybilnoci
z innymi serwerami.
4.1. Przegld typw dla kolumny 129
4.1.2. Przegld typw zwizanych z dat i czasem
Poniej znajduje si podsumowanie typw kolumn przeznaczonych dla czasu i daty.
Dodatkowe informacje na ten temat mona znale w podrozdziale 4.3. Wymogi do-
tyczce pamici potrzebnej do przechowywania danych w kolumnach zostay podane
w podrozdziale 4.5.
DATl
Data. Obsugiwany zakres obejmuje daty od ``0000`0`` do `9999`o``.
W MySQL wartoci DATl wywietlane s w formacie `RRRRMMDD`, ale mona
przypisywa wartoci do kolumn DATl przy uyciu acuchw lub liczb.
DATlT1Ml
Kombinacja daty i czasu. Obsugiwany zakres obejmuje wartoci
od ``0000`0` 000000` do `9999`o` ob9b9`. W MySQL wartoci
DATlT1Ml wywietlane s w formacie `RRRRMMDD OOMMSS`, ale mona
przypisywa wartoci do kolumn DATlT1Ml przy uyciu acuchw lub liczb.
T1MlSTAMP/)
Znacznik czasu. Obsugiwany zakres rozpoczyna si od daty ``9/00`0``
i siga roku 0o/.
Kolumna typu T1MlSTAMP przydaje si do rejestracji daty i godziny operacji
wstawiania lub aktualizacji. Pierwszej kolumnie T1MlSTAMP w tabeli
automatycznie przypisywana jest data i czas ostatniej operacji, jeli tylko tych
wartoci nie wprowadzi rcznie uytkownik. Dowolnej kolumnie T1MlSTAMP
mona rwnie przypisa biec dat i godzin, wpisujc do niej warto NU||.
Od MySQL 4.1 wartoci T1MlSTAMP s zwracane w postaci acuchw
w formacie `RRRRMMDD OOMMSS`. Aby uzyska warto w postaci liczby,
naley doda do kolumn tego typu 0. Inne szerokoci wywietlania
znacznika czasu nie s obsugiwane.
W wersjach poprzedzajcych MySQL 4.1 wartoci T1MlSTAMP s wywietlane
w formacie RRRRMMDDOOMMSS, RRMMDDOOMMSS, RRRRMMDD lub RRMMDD w zalenoci
od tego, czy parametr / jest rwny 14 (albo go brak), 12, 8 lub 6. Mona jednak
przypisywa wartoci do kolumn T1MlSTAMP przy uyciu acuchw lub liczb.
Argument / wpywa tylko na sposb wywietlania kolumny T1MlSTAMP, a nie
na jej przechowywanie. Wartoci kolumny s zawsze zapisywane w czterech
bajtach. W MySQL od wersji 4.0.12 pojawia si opcja ne., dziki ktrej
mona zmieni dziaanie serwera, upodabniajc je do MySQL 4.1.
Naley odnotowa, e kolumny T1MlSTAMP/), gdzie /jest rwne 8 lub 14,
s traktowane jako liczby, natomiast reszta kolumn T1MlSTAMP/) jest
traktowana jako acuchy. Jest to rodzaj gwarancji, e uytkownik bdzie
mg wiarygodnie usuwa i przywraca tabele tego typu.
T1Ml
Godzina. Obsugiwany zakres obejmuje wartoci od `8o8b9b9`
do ` 8o8b9b9`. W MySQL wartoci T1Ml wywietlane s w formacie
` OOMMSS`, ale mona przypisa wartoci do kolumn T1Ml przy uyciu
zarwno acuchw, jak i liczb.
130 Rozdzia 4. Typy kolumn
YlAR|4)
Rok w formacie dwu- lub czterocyfrowym. Domylnym formatem jest rok
zapisany za pomoc czterech cyfr. W tym formacie dostpne wartoci nale
do przedziau od `90` do `bb oraz 0. W formacie dwucyfrowym wartoci
dopuszczalne to liczby z zakresu od /0 do 69, ktre reprezentuj daty od roku
1970 do 2069. W MySQL wartoci YlAR wywietlane s w formacie RRRR,
ale mona przypisa wartoci do kolumn YlAR przy uyciu tak acuchw,
jak i liczb. Typ YlAR jest niedostpny dla wersji wczeniejszych ni MySQL 3.22.
4.1.3. Przegld typw acuchowych
Poniej znajduje si przegld typw acuchowych. Dodatkowe informacje mona
znale w podrozdziale 4.4. Wymogi dotyczce pamici potrzebnej do przechowywa-
nia danych w kolumnach zostay podane w podrozdziale 4.5.
W niektrych przypadkach MySQL moe zmieni kolumn typu acuchowego na typ,
ktry bdzie si rni od zadeklarowanego w instrukcji CRlATl TAB|l lub A|TlR TAB|l.
Wicej informacji na ten temat znajduje si w podpunkcie 6.2.5.2.
Od wersji 4.1 w MySQL pojawia si zmiana, ktra wpywa na wiele typw kolumn typu
acuchowego. Definicja kolumn typu znakowego moe zawiera atrybut CHARACTlR
SlT, ktry okrela zestaw znakw i opcjonalnie porzdek sortowania. Dotyczy to typw
CHAR, VARCHAR, rnych typw TlXT oraz lNUM i SlT, na przykad:
CRF/TF T/B|F !
FNUMYCTVQ
YCTVQ|
1 lub 2 bajty w zalenoci od liczby wartoci wyliczenia
(maksymalnie 65 535)
SFTYCTVQ
YCTVQ|
1, 2, 3, 4 lub 8 bajtw w zalenoci od liczby elementw zestawu
(maksymalnie 64)
Typy VARCHAR, B|OB i TlXT maj zmienn dugo. Dla kadego ilo pamici potrzeb-
nej do przechowania wartoci bdzie zalee od faktycznej dugoci wartoci kolumny
(reprezentowanej w ostatniej tabeli przez .), a nie od maksymalnego moliwego roz-
miaru danego typu. Kolumna VARCHAR`0) na przykad moe przechowywa acuch
o maksymalnej dugoci 10 znakw. Faktyczna ilo wymaganej pamici to dugo
acucha (.) plus 1 bajt do zapisania dugoci acucha. Dla acucha `.|cc` parametr
. jest rwny 4, a wymagany rozmiar pamici to 5 bajtw.
Typy B|OB i TlXT wymagaj 1, 2, 3 lub 4 bajtw do zapisu dugoci wartoci kolumny
w zalenoci od maksymalnej moliwej dugoci tego typu (patrz punkt 4.4.2).
Rozmiar obiektu lNUM jest ustalany na podstawie liczby rnych wartoci wyliczenia.
Przy wyliczeniach do 255 moliwych wartoci uywany jest jeden bajt, a przy wyli-
czeniach do 65 535 wartoci uywane s 2 bajty (patrz punkt 4.4.3).
Rozmiar obiektu SlT jest okrelany przez liczb rnych elementw zestawu. Jeli ze-
staw ma rozmiar 0, obiekt zajmuje 0/).8 bajtw, ktr to warto zaokrgla si do
1, 2, 3, 4 lub 8 bajtw. Obiekt SlT moe mie do 64 elementw (patrz punkt 4.4.4).
4.6. Wybieranie odpowiedniego typu
dla kolumny
Aby jak najbardziej wydajnie korzysta z pamici, naley we wszystkich przypadkach
stara si stosowa typ, ktry bdzie jak najbardziej dokadny. Jeli na przykad w kolum-
nie liczb cakowitych bd przechowywane wartoci z zakresu od ` do 99999, najlep-
szym wyborem bdzie typ MlD1UM1NT UNS1ONlD. Ze wszystkich typw, ktre reprezentuj
wszystkie wymagane wartoci, zajmuje najmniej pamici.
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych 153
Powszechnym problemem jest dokadne przedstawianie wartoci walutowych. W MySQL
naley do tego uywa typu DlC1MA|, za pomoc ktrego wartoci zapisywane s w for-
mie acucha. Dziki temu nie traci si na dokadnoci (mimo to obliczenia z wartociami
DlC1MA| mog by wci wykonywane przy uyciu operacji dziaajcych na liczbach
z podwjn precyzj). Jeli dokadno nie jest zbyt wana, by moe wystarczajco
dobrym typem bdzie DOUB|l.
Aby uzyska wiksz dokadno, mona zawsze przeksztaci warto na typ stao-
przecinkowy, przechowywany w B1O1NT. Pozwoli to wykonywa wszystkie obliczenia
na liczbach cakowitych i tylko w razie potrzeby przeksztaca wynik z powrotem na
wartoci zmiennoprzecinkowe.
4.7. Wykorzystywanie typw kolumn
z innych mechanizmw baz danych
Aby uatwi uytkownikowi zastosowanie kodu pochodzcego od innych producentw,
moliwe jest odwzorowanie typw kolumn w sposb przedstawiony w poniszej tabeli.
Odwzorowania te upraszczaj operacj importu do MySQL definicji tabel z innych
mechanizmw baz danych:
Typ innych producentw Typ MySQL
BTN/RY/| C'/R/| BTN/RY
C'/R V/RYTN/| V/RC'/R/|
F|J/T4 F|J/T
F|J/T8 OJUB|F
TNT1 TTNYTNT
TNT SM/||TNT
TNT: MFOTUMTNT
TNT4 TNT
TNT8 BTTNT
|JN V/RBTN/RY MFOTUMB|JB
|JN V/RC'/R MFOTUMTFXT
|JN MFOTUMTFXT oc M,SJ| 410|
MTOO|FTNT MFOTUMTNT
V/RBTN/RY/| C'/R/| BTN/RY
Odwzorowanie typw kolumn jest wykonywane podczas tworzenia tabeli, po czym
oryginalne deklaracje typu zostaj usunite. Jeli uytkownik utworzy tabel z typami
stosowanymi przez innych producentw, po czym wyda polecenie DlSCR1Bl PC\YCA
VCDGNK, zostanie przedstawiona struktura tabeli z odpowiadajcymi im typami MySQL.
4 Spis treci
1.8.5. Rozbienoci midzy MySQL a standardem SQL ........................................ 60
1.8.6. Jak MySQL radzi sobie z ograniczeniami ................................................. 67
1.8.7. Znane bdy i projektowe braki w MySQL................................................ 69
Rozdzia 2. Struktura jzyka .............................................................................. 77
2.1. Literay................................................................................................................... 77
2.1.1. acuchy ................................................................................................... 77
2.1.2. Liczby........................................................................................................ 80
2.1.3. Wartoci szesnastkowe .............................................................................. 80
2.1.4. Wartoci logiczne ...................................................................................... 81
2.1.5. Wartoci NULL......................................................................................... 81
2.2. Nazwy baz danych, tabel, indeksw, kolumn i aliasw......................................... 81
2.2.1. Kwalifikatory identyfikatorw .................................................................. 83
2.2.2. Znaczenie wielkoci liter w nazwach identyfikatorw.............................. 83
2.3. Zmienne definiowane przez uytkownika.............................................................. 85
2.4. Zmienne systemowe............................................................................................... 87
2.4.1. Strukturalne zmienne systemowe .............................................................. 89
2.5. Skadnia komentarza .............................................................................................. 91
2.6. Traktowanie sw zastrzeonych w MySQL.......................................................... 92
Rozdzia 3. Obsuga zestaww znakw............................................................... 95
3.1. Oglne informacje o zestawach znakw i sortowaniu ........................................... 95
3.2. Zestawy znakw i porzdki sortowania w MySQL................................................ 96
3.3. Okrelanie domylnego zestawu znakw i sortowania........................................... 98
3.3.1. Zestaw znakw i sortowanie dla serwera................................................... 98
3.3.2. Zestaw znakw i sortowanie dla bazy danych........................................... 99
3.3.3. Zestaw znakw i sortowanie dla tabeli .................................................... 100
3.3.4. Zestaw znakw i sortowanie dla kolumny............................................... 100
3.3.5. Przykady przypisywania zestawu znakw i sortowania ......................... 101
3.3.6. Zestawy znakw i sortowanie dla poczenia .......................................... 102
3.3.7. Zestaw znakw i sortowanie dla acucha znakw.................................. 104
3.3.8. Wykorzystywanie COLLATE w instrukcjach SQL.................................... 105
3.3.9. Priorytet klauzuli COLLATE .................................................................. 106
3.3.10. Operator BINARY................................................................................... 106
3.3.11. Niektre przypadki specjalne, w ktrych trudno okreli sortowanie...... 106
3.3.12. Sortowania musz by odpowiednie dla danego zestawu znakw........... 107
3.3.13. Przykad wpywu porzdku sortowania ................................................... 108
3.4. Operacje, na ktre ma wpyw obsuga zestaww znakw.................................... 109
3.4.1. acuchy wyjciowe ............................................................................... 109
3.4.2. CONVERT()............................................................................................ 110
3.4.3. CAST() .................................................................................................... 110
3.4.4. Instrukcje SHOW .................................................................................... 111
3.5. Obsuga Unicode.................................................................................................. 112
3.6. UTF8 dla metadanych.......................................................................................... 113
3.7. Kompatybilno z innymi systemami zarzdzania baz danych .......................... 115
3.8. Nowy format pliku konfiguracji zestawu znakw................................................ 115
3.9. Narodowe zestawy znakw.................................................................................. 115
3.10. Aktualizacja zestaww znakw z MySQL 4.0..................................................... 116
3.10.1. Zestawy znakw w wersji 4.0 i odpowiadajce im w wersji 4.1 pary
skadajce si z zestawu znakw i sortowania......................................... 117
3.10.2. Przeksztacanie kolumn znakowych wersji 4.0 na format 4.1 ................. 118
3.11. Zestawy znakw i sortowania obsugiwane przez MySQL.................................. 118
3.11.1. Zestawy znakw standardu Unicode ....................................................... 119
3.11.2. Zestawy znakw zachodnioeuropejskich................................................. 120
3.11.3. Zestawy znakw dla Europy Centralnej .................................................. 121
Spis treci 5
3.11.4. Zestawy znakw poudniowoeuropejskich i rodkowowschodnich......... 122
3.11.5. Zestawy znakw regionu batyckiego...................................................... 123
3.11.6. Zestawy znakw dla cyrylicy................................................................... 123
3.11.7. Azjatyckie zestawy znakw..................................................................... 124
Rozdzia 4. Typy kolumn.................................................................................. 125
4.1. Przegld typw dla kolumny................................................................................ 126
4.1.1. Omwienie typw liczbowych ................................................................ 126
4.1.2. Przegld typw zwizanych z dat i czasem............................................ 129
4.1.3. Przegld typw acuchowych ................................................................ 130
4.2. Typy liczbowe...................................................................................................... 132
4.3. Typy zwizane z dat i czasem............................................................................ 135
4.3.1. Typy DATETIME, DATE i TIMESTAMP............................................. 137
4.3.2. Typ TIME................................................................................................ 142
4.3.3. Typ YEAR............................................................................................... 143
4.3.4. Problem roku 2000 a typy zwizane z dat.............................................. 144
4.4. Typy acuchowe ................................................................................................. 144
4.4.1. Typy CHAR i VARCHAR...................................................................... 144
4.4.2. Typy BLOB i TEXT................................................................................ 146
4.4.3. Typ Enum................................................................................................ 147
4.4.4. Typ SET .................................................................................................. 149
4.5. Rozmiar pamici potrzebnej dla typw kolumn................................................... 151
4.6. Wybieranie odpowiedniego typu dla kolumny..................................................... 152
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych ............... 153
Rozdzia 5. Funkcje i operatory........................................................................ 155
5.1. Operatory ............................................................................................................. 156
5.1.1. Nawiasy................................................................................................... 156
5.1.2. Operatory porwnania ............................................................................. 156
5.1.3. Operatory logiczne .................................................................................. 161
5.1.4. Operatory rozrniania wielkoci liter..................................................... 163
5.2. Funkcje kontroli przepywu ................................................................................. 163
5.3. Funkcje acuchowe............................................................................................. 166
5.3.1. Funkcje porwnywania acuchw.......................................................... 176
5.4. Funkcje liczbowe ................................................................................................. 178
5.4.1. Operatory arytmetyczne........................................................................... 178
5.4.2. Funkcje matematyczne ............................................................................ 180
5.5. Funkcje daty i godziny......................................................................................... 186
5.6. Funkcje obsugi wyszukiwania penotekstowego................................................. 202
5.6.1. Boolowskie wyszukiwania penotekstowe............................................... 205
5.6.2. Wyszukiwania penotekstowe z rozwijaniem zapytania .......................... 207
5.6.3. Ograniczenia dla wyszukiwania penotekstowego................................... 208
5.6.4. Modyfikowanie wyszukiwania penotekstowego MySQL ...................... 209
5.6.5. Lista rzeczy do zrobienia dla wyszukiwania penotekstowego................ 211
5.7. Funkcje konwersji typw..................................................................................... 211
5.8. Inne funkcje ......................................................................................................... 214
5.8.1. Funkcje bitowe ........................................................................................ 214
5.8.2. Funkcje szyfrujce................................................................................... 215
5.8.3. Funkcje informacyjne .............................................................................. 219
5.8.4. Funkcje rne .......................................................................................... 223
5.9. Funkcje i modyfikatory do zastosowania z klauzulami GROUP BY................... 226
5.9.1. Funkcje GROUP BY (agregujce)........................................................... 226
5.9.2. Modyfikatory GROUP BY...................................................................... 229
5.9.3. GROUP BY z ukrytymi polami............................................................... 232
6 Spis treci
Rozdzia 6. Skadnia instrukcji SQL .................................................................. 235
6.1. Instrukcje operujce na danych............................................................................ 235
6.1.1. Skadnia instrukcji DELETE................................................................... 235
6.1.2. Skadnia instrukcji DO ............................................................................ 238
6.1.3. Skadnia instrukcji HANDLER............................................................... 238
6.1.4. Skadnia instrukcji INSERT .................................................................... 240
6.1.5. Skadnia instrukcji LOAD DATA INFILE.............................................. 246
6.1.6. Skadnia instrukcji REPLACE................................................................. 255
6.1.7. Skadnia instrukcji SELECT.................................................................... 256
6.1.8. Skadnia podzapyta................................................................................ 265
6.1.9. Skadnia instrukcji TRUNCATE............................................................. 276
6.1.10. Skadnia instrukcji UPDATE................................................................... 276
6.2. Instrukcje definiowania danych ........................................................................... 278
6.2.1. Skadnia instrukcji ALTER DATABASE ............................................... 278
6.2.2. Skadnia instrukcji ALTER TABLE........................................................ 279
6.2.3. Skadnia instrukcji CREATE DATABASE............................................. 285
6.2.4. Skadnia instrukcji CREATE INDEX ..................................................... 285
6.2.5. Skadnia instrukcji CREATE TABLE..................................................... 287
6.2.6. Skadnia instrukcji DROP DATABASE.................................................. 301
6.2.7. Skadnia instrukcji DROP INDEX.......................................................... 302
6.2.8. Skadnia instrukcji DROP TABLE.......................................................... 302
6.2.9. Skadnia instrukcji RENAME TABLE.................................................... 303
6.3. Instrukcje programu MySQL............................................................................... 304
6.3.1. Skadnia instrukcji DESCRIBE
(odczytywanie informacji na temat kolumn) ........................................... 304
6.3.2. Skadnia instrukcji USE........................................................................... 304
6.4. Instrukcje obsugi transakcji i blokowania........................................................... 305
6.4.1. Skadnia instrukcji START TRANSACTION, COMMIT
oraz ROLLBACK.................................................................................... 305
6.4.2. Instrukcje niemoliwe do wycofania ....................................................... 306
6.4.3. Instrukcje wykonujce niejawne zatwierdzenie......................................... 306
6.4.4. Skadnia instrukcji SAVEPOINT i ROLLBACK TO SAVEPOINT....... 307
6.4.5. Skadnia instrukcji LOCK TABLES oraz UNLOCK TABLES .............. 307
6.4.6. Skadnia instrukcji SET TRANSACTION.............................................. 310
6.5. Administracja baz danych .................................................................................. 311
6.5.1. Instrukcje zarzdzajce kontami uytkownikw ....................................... 311
6.5.2. Instrukcje do konserwacji tabel ............................................................... 319
6.5.3. Skadnia instrukcji SET i SHOW ............................................................ 326
6.5.4. Inne instrukcje administracyjne ............................................................... 347
6.6. Instrukcje replikacji.............................................................................................. 352
6.6.1. Instrukcje SQL sterujce serwerem gwnym ......................................... 352
6.6.2. Instrukcje SQL sterujce serwerami podrzdnymi .................................. 354
Rozdzia 7. Rozszerzenia przestrzenne w MySQL............................................... 365
7.1. Wstp ................................................................................................................... 365
7.2. Model geometryczny OpenGIS............................................................................ 366
7.2.1. Hierarchia klas geometrycznych.............................................................. 366
7.2.2. Klasa Geometry ....................................................................................... 368
7.2.3. Klasa Point .............................................................................................. 369
7.2.4. Klasa Curve ............................................................................................. 369
7.2.5. Klasa LineString...................................................................................... 370
7.2.6. Klasa Surface........................................................................................... 370
7.2.7. Klasa Polygon.......................................................................................... 370
7.2.8. Klasa GeometryCollection....................................................................... 371
Spis treci 7
7.2.9. Klasa MultiPoint...................................................................................... 371
7.2.10. Klasa MultiCurve .................................................................................... 372
7.2.11. Klasa MultiLineString............................................................................. 372
7.2.12. Klasa MultiSurface .................................................................................. 372
7.2.13. Klasa MultiPolygon................................................................................. 373
7.3. Obsugiwane formaty danych przestrzennych...................................................... 373
7.3.1. Format tekstowy WKT............................................................................ 374
7.3.2. Format binarny WKB.............................................................................. 374
7.4. Tworzenie bazy danych z rozszerzeniami przestrzennymi................................... 375
7.4.1. Typy danych przestrzennych w MySQL ................................................. 375
7.4.2. Tworzenie wartoci przestrzennych......................................................... 376
7.4.3. Tworzenie kolumn przestrzennych.......................................................... 379
7.4.4. Wypenianie kolumn przestrzennych....................................................... 379
7.4.5. Pobieranie danych przestrzennych........................................................... 381
7.5. Analiza informacji przestrzennych....................................................................... 381
7.5.1. Funkcje konwersji formatw geometrycznych ........................................ 382
7.5.2. Funkcje klasy Geometry.......................................................................... 382
7.5.3. Funkcje tworzce nowe geometrie na podstawie istniejcych................. 388
7.5.4. Funkcje testujce relacje przestrzenne
midzy obiektami geometrycznymi ......................................................... 389
7.5.5. Relacje midzy minimalnymi prostoktami otaczajcymi
dla poszczeglnych geometrii.................................................................. 390
7.5.6. Funkcje sprawdzajce relacje przestrzenne pomidzy geometriami ........ 391
7.6. Optymalizacja analizy przestrzennej.................................................................... 392
7.6.1. Tworzenie indeksw przestrzennych....................................................... 392
7.6.2. Wykorzystanie indeksu przestrzennego................................................... 393
7.7. Zgodno MySQL ze standardem........................................................................ 395
7.7.1. Niezaimplementowane funkcje GIS ........................................................ 395
Rozdzia 8. Procedury i funkcje skadowane ..................................................... 397
8.1. Skadnia procedur skadowanych......................................................................... 398
8.1.1. Utrzymanie procedur skadowanych........................................................ 398
8.1.2. SHOW PROCEDURE STATUS oraz SHOW FUNCTION STATUS.... 401
8.1.3. Instrukcja CALL...................................................................................... 402
8.1.4. Instrukcja zoona BEGIN ... END.......................................................... 402
8.1.5. Instrukcja DECLARE.............................................................................. 402
8.1.6. Zmienne w procedurach skadowanych................................................... 402
8.1.7. Warunki i podprogramy obsugi .............................................................. 403
8.1.8. Kursory.................................................................................................... 405
8.1.9. Konstrukcje sterowania przepywem sterowania..................................... 406
Rozdzia 9. Obsuga bdw w MySQL .............................................................. 409
9.1. Zwracane bdy.................................................................................................... 409
9.2. Komunikaty bdw............................................................................................. 419
Dodatek A Rozwizywanie problemw z zapytaniami ........................................435
A.1. Zagadnienia zwizane z zapytaniami ................................................................... 435
A.1.1. Wielko liter przy wyszukiwaniu........................................................... 435
A.1.2. Problemy z kolumnami typu DATE ........................................................ 436
A.1.3. Problemy z wartociami NULL............................................................... 437
A.1.4. Problemy z synonimami kolumn ............................................................. 438
A.1.5. Bd wycofania dla tabel nietransakcyjnych............................................ 439
A.1.6. Usuwanie wierszy ze zwizanych tabel ................................................... 439
A.1.7. Rozwizywanie problemw z brakujcymi wierszami ............................ 440
A.1.8. Problemy z porwnaniami zmiennoprzecinkowymi................................ 441
8 Spis treci
A.2. Problemy zwizane z optymalizatorem................................................................ 443
A.3. Problemy z definicj tabel.................................................................................... 444
A.3.1. Problemy z instrukcj ALTER TABLE................................................... 444
A.3.2. Jak zmieni porzdek kolumn w tabeli .................................................... 445
A.3.3. Problemy z tabelami tymczasowymi ....................................................... 445
Dodatek B Wyraenia regularne w MySQL........................................................ 447
Skorowidz...................................................................................... 451
Rozdzia 4.
Typy kolumn
W MySQL dostpnych jest wiele typw danych, ktre mona pogrupowa w kilku pod-
stawowych kategoriach, takich jak typy liczbowe, typy zwizane z dat i czasem oraz
typy acuchowe. Na pocztku tego rozdziau przedstawiony zostanie przegld wspo-
mnianych przed chwil typw kolumn, po czym nastpi bardziej szczegowy opis ich
waciwoci z podziaem na poszczeglne kategorie i wreszcie zamieszczone zostanie
podsumowanie informacji dotyczcych wymaga co do rozmiaru pamici potrzebnej
do przechowania danej kolumny. Sam przegld jest z zamierzenia krtki. Dodatkowe
informacje o poszczeglnych typach kolumn, na przykad dopuszczalny format, w kt-
rym mona deklarowa wartoci, zostay uwzgldnione w szczegowych omwieniach.
Od wersji 4.1 MySQL rozpoznaje rozszerzenia do obsugi danych przestrzennych.
Informacje o typach przestrzennych znajduj si w rozdziale 7. tego podrcznika.
W czci opisu typw kolumn zastosowane zostay nastpujce reguy:
/
Wskazuje maksymalny rozmiar wywietlania liczby lub acucha.
Maksymalnym dopuszczalnym rozmiarem wywietlania jest 255.
&
Dotyczy typw zmiennoprzecinkowych i staoprzecinkowych. Okrela liczb
cyfr po kropce dziesitnej. Maksymalna dopuszczalna warto wynosi 30,
ale nie powinna przekracza /.
Nawiasy kwadratowe ( ) identyfikuj opcjonalne fragmenty deklaracji typu.
126 Rozdzia 4. Typy kolumn
4.1. Przegld typw dla kolumny
4.1.1. Omwienie typw liczbowych
Poniej znajduje si przegld liczbowych typw dla kolumn. Bardziej szczegowe
informacje mona znale w podrozdziale 4.2. Wymogi dotyczce rozmiaru pamici
potrzebnej do przechowywania kolumn znajduj si w podrozdziale 4.5.
Jeli dla kolumny liczbowej zostanie okrelony atrybut /lRO|1||, MySQL automatycznie
doda do kolumny atrybut UN1S1ONlD.
Naley uwaa podczas odejmowania dwch wartoci liczbowych, z ktrych jedna ma
typ UN1S1ONlD. Uzyskany wynik bdzie rwnie tego typu! patrz podrozdzia 5.7.
T1NY1NT/) UNS1ONlD /lRO|1||
Bardzo maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od `8
do `/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do bb.
B1T, BOO|, BOO|lAN
To s synonimy T1NY1NT`). Synonim BOO|lAN zosta dodany w MySQL 4.1.0.
Warto zerowa to inaczej fasz. Wartoci niezerowe traktowane s jako prawda.
W przyszoci wprowadzona zostanie pena, zgodna ze standardem SQL
obsuga typu boolowskiego.
SMA||1NT/) UNS1ONlD /lRO|1||
Maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od o/68
do o/6/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do 6bbob.
MlD1UM1NT/) UNS1ONlD /lRO|1||
rednia liczba cakowita. Dla liczb ze znakiem zakres wynosi od 8o88608
do 8o8860/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0
do `6///`b.
1NT/) UNS1ONlD /lRO|1||
Standardowa liczba cakowita. Dla liczb ze znakiem zakres wynosi
od `4/48o648 do `4/48o64/. W przypadku liczb bez znaku zakres
obejmuje wartoci od 0 do 49496/9b.
1NTlOlR/) UNS1ONlD /lRO|1||
Jest to synonim dla typu 1NT.
B1O1NT/) UNS1ONlD /lRO|1||
Dua liczba cakowita. Dla liczb ze znakiem zakres wynosi
od 9oo/0o68b4//b808 do 9oo/0o68b4//b80/. W przypadku liczb
bez znaku zakres obejmuje wartoci od 0 do `8446/440/o/09bb`6`b.
4.1. Przegld typw dla kolumny 127
Oto kilka spraw, o ktrych naley wiedzie odnonie kolumn typu B1O1NT:
Wszystkie obliczenia wykonywane s przy uyciu wartoci typu B1O1NT
lub DOUB|l ze znakiem. Oznacza to, e duych liczb cakowitych bez
znaku, wikszych ni 9oo/0o68b4//b80/ (63 bity), mona uywa tylko
z funkcjami bitowymi! Niezastosowanie si do tej zasady moe doprowadzi
do uzyskania w wyniku liczby, ktrej kilka ostatnich cyfr jest bdnych
z powodu bdw w zaokrglaniu podczas konwersji wartoci B1O1NT
na DOUB|l.
MySQL 4.0 potrafi obsugiwa B1O1NT w nastpujcych przypadkach:
Podczas wykorzystywania liczb cakowitych do przechowywania
duych wartoci bez znaku w kolumnie typu B1O1NT.
W M1NPC\YCAMQN) lub MAXPC\YCAMQN), gdzie PC\YCAMQN odnosi si
do kolumny B1O1NT.
Podczas korzystania z operatorw (midzy innymi , , *), gdy oba
argumenty s liczbami cakowitymi.
Zawsze istnieje moliwo zapisania w kolumnie B1O1NT dokadnej wartoci
liczby cakowitej. Wystarczy zapisa j przy uyciu acucha. W takim
przypadku zostanie dokonana konwersja acucha na liczb; konwersja
nie bdzie wymaga poredniego etapu przeksztacajcego liczb na jej
odpowiednik o podwjnej precyzji.
Podczas korzystania z operatorw , i * stosowana jest arytmetyka
B1O1NT, jeli oba argumenty maj warto liczby cakowitej! To oznacza,
e pomnoenie dwch duych liczb cakowitych (lub wynikw funkcji,
ktra zwraca liczby cakowite) moe spowodowa nieoczekiwane
rezultaty, jeli wynik przekroczy liczb 9oo/0o68b4//b80/.
||OATR) UNS1ONlD /lRO|1||
Liczba zmiennoprzecinkowa. Parametr R oznacza precyzj i moe przyjmowa
warto od 0 do 14 dla liczb zmiennoprzecinkowych o dokadnoci do jednego
znaku i od 25 do 53 dla liczb zmiennoprzecinkowych o dokadnoci do dwch
znakw. To przypomina opisane poniej typy ||OAT i DOUB|l. Typ ||OATR)
ma ten sam zakres, jaki posiadaj odpowiadajce mu typy ||OAT i DOUB|l,
ale w jego przypadku niezdefiniowany jest maksymalny rozmiar wywietlania
i liczba miejsc po przecinku.
Od wersji 3.23 MySQL jest to prawdziwa warto zmiennoprzecinkowa.
W wersjach wczeniejszych liczba typu ||OATR) bya zawsze liczb o dwch
miejscach po przecinku.
Ta skadnia zostaa dodana w celu zachowania zgodnoci ze standardem ODBC.
Stosowanie typu ||OAT moe spowodowa wystpienie pewnych
nieoczekiwanych problemw, poniewa wszystkie obliczenia w MySQL
s wykonywane z podwjn precyzj patrz punkt A.1.7).
||OAT/, &) UNS1ONlD /lRO|1||
128 Rozdzia 4. Typy kolumn
Maa liczba zmiennoprzecinkowa (o dokadnoci do jednego znaku). Liczba
ta moe przyj wartoci: od o408o466lo8 do ``/b494ob`lo8, 0,
i od ``/b494ob`lo8 do o408o466lo8. Jeli podany jest atrybut UN1S1ONlD,
niedozwolone s wartoci ujemne. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ ||OAT bez argumentw
lub typ ||OATR) (gdzie Rjest liczb z zakresu od 0 do 24) oznacza liczb
zmiennoprzecinkow o pojedynczej precyzji.
DOUB|l/, &) UNS1ONlD /lRO|1||
Standardowa liczba zmiennoprzecinkowa (o dokadnoci do dwch
znakw). Liczba ta moe przyj wartoci: od `/9/69o`o486o`b/lo08
do b0/o8b8b0/0`4lo08, 0, i od b0/o8b8b0/0`4lo08
do `/9/69o`o486o`b/lo08. Jeli podany jest atrybut UN1S1ONlD, wartoci
ujemne s niedozwolone. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ DOUB|l
bez argumentw lub ||OATR) (gdzie R jest liczb z zakresu od 25 do 53)
oznacza liczb zmiennoprzecinkow o podwjnej precyzji.
DOUB|l PRlC1S1ON/, &) UNS1ONlD /lRO|1||
RlA|/, &) UNS1ONlD /lRO|1||
S to synonimy DOUB|l. Wyjtek: Jeli dla parametru s;_cce serwera
wczono opcj RlA|_AS_||OAT, synonimem ||OAT jest RlA|, a nie DOUB|l.
DlC1MA|/, &) UNS1ONlD /lRO|1||
Niezapakowana liczba staoprzecinkowa. Zachowanie kolumny tego typu
przypomina kolumn typu CHAR. Niezapakowana oznacza, e liczba jest
przechowywana w postaci acucha przy uyciu jednego znaku na kad cyfr
wartoci. Parametr / definiuje maksymaln liczb cyfr, a & liczb miejsc
po przecinku. W parametrze / nie s brane pod uwag: kropka dziesitna
(odpowiadajca w naszej notacji przecinkowi) i (dla liczb ujemnych) znak ,
cho jest dla nich zarezerwowane miejsce. Wartoci nie maj miejsc
po przecinku lub czci uamkowych, jeli & jest rwne 0. Maksymalny zakres
wartoci typu DlC1MA| jest taki sam, jak dla typu DOUB|l, ale rzeczywisty zakres
danej kolumny DlC1MA| moe by ograniczony przez wybr argumentw / i &.
Jeli podany jest atrybut UN1S1ONlD, wartoci ujemne s niedozwolone.
W przypadku braku argumentu &, domyln wartoci jest 0. Jeli pominity
jest parametr /, domyln wartoci jest 10.
W wersjach poprzedzajcych MySQL 3.23 argument / musi by wystarczajco
duy, by zawiera obszar potrzebny dla znaku i kropki dziesitnej.
DlC/,&) UNS1ONlD /lRO|1||
NUMlR1C/,&) UNS1ONlD /lRO|1||
|1XlD/, &) UNS1ONlD /lRO|1||
S to synonimy typu DlC1MA|.
W MySQL 4.1.0 dodano synonim |1XlD w celu osignicia kompatybilnoci
z innymi serwerami.
4.1. Przegld typw dla kolumny 129
4.1.2. Przegld typw zwizanych z dat i czasem
Poniej znajduje si podsumowanie typw kolumn przeznaczonych dla czasu i daty.
Dodatkowe informacje na ten temat mona znale w podrozdziale 4.3. Wymogi do-
tyczce pamici potrzebnej do przechowywania danych w kolumnach zostay podane
w podrozdziale 4.5.
DATl
Data. Obsugiwany zakres obejmuje daty od ``0000`0`` do `9999`o``.
W MySQL wartoci DATl wywietlane s w formacie `RRRRMMDD`, ale mona
przypisywa wartoci do kolumn DATl przy uyciu acuchw lub liczb.
DATlT1Ml
Kombinacja daty i czasu. Obsugiwany zakres obejmuje wartoci
od ``0000`0` 000000` do `9999`o` ob9b9`. W MySQL wartoci
DATlT1Ml wywietlane s w formacie `RRRRMMDD OOMMSS`, ale mona
przypisywa wartoci do kolumn DATlT1Ml przy uyciu acuchw lub liczb.
T1MlSTAMP/)
Znacznik czasu. Obsugiwany zakres rozpoczyna si od daty ``9/00`0``
i siga roku 0o/.
Kolumna typu T1MlSTAMP przydaje si do rejestracji daty i godziny operacji
wstawiania lub aktualizacji. Pierwszej kolumnie T1MlSTAMP w tabeli
automatycznie przypisywana jest data i czas ostatniej operacji, jeli tylko tych
wartoci nie wprowadzi rcznie uytkownik. Dowolnej kolumnie T1MlSTAMP
mona rwnie przypisa biec dat i godzin, wpisujc do niej warto NU||.
Od MySQL 4.1 wartoci T1MlSTAMP s zwracane w postaci acuchw
w formacie `RRRRMMDD OOMMSS`. Aby uzyska warto w postaci liczby,
naley doda do kolumn tego typu 0. Inne szerokoci wywietlania
znacznika czasu nie s obsugiwane.
W wersjach poprzedzajcych MySQL 4.1 wartoci T1MlSTAMP s wywietlane
w formacie RRRRMMDDOOMMSS, RRMMDDOOMMSS, RRRRMMDD lub RRMMDD w zalenoci
od tego, czy parametr / jest rwny 14 (albo go brak), 12, 8 lub 6. Mona jednak
przypisywa wartoci do kolumn T1MlSTAMP przy uyciu acuchw lub liczb.
Argument / wpywa tylko na sposb wywietlania kolumny T1MlSTAMP, a nie
na jej przechowywanie. Wartoci kolumny s zawsze zapisywane w czterech
bajtach. W MySQL od wersji 4.0.12 pojawia si opcja ne., dziki ktrej
mona zmieni dziaanie serwera, upodabniajc je do MySQL 4.1.
Naley odnotowa, e kolumny T1MlSTAMP/), gdzie /jest rwne 8 lub 14,
s traktowane jako liczby, natomiast reszta kolumn T1MlSTAMP/) jest
traktowana jako acuchy. Jest to rodzaj gwarancji, e uytkownik bdzie
mg wiarygodnie usuwa i przywraca tabele tego typu.
T1Ml
Godzina. Obsugiwany zakres obejmuje wartoci od `8o8b9b9`
do ` 8o8b9b9`. W MySQL wartoci T1Ml wywietlane s w formacie
` OOMMSS`, ale mona przypisa wartoci do kolumn T1Ml przy uyciu
zarwno acuchw, jak i liczb.
130 Rozdzia 4. Typy kolumn
YlAR|4)
Rok w formacie dwu- lub czterocyfrowym. Domylnym formatem jest rok
zapisany za pomoc czterech cyfr. W tym formacie dostpne wartoci nale
do przedziau od `90` do `bb oraz 0. W formacie dwucyfrowym wartoci
dopuszczalne to liczby z zakresu od /0 do 69, ktre reprezentuj daty od roku
1970 do 2069. W MySQL wartoci YlAR wywietlane s w formacie RRRR,
ale mona przypisa wartoci do kolumn YlAR przy uyciu tak acuchw,
jak i liczb. Typ YlAR jest niedostpny dla wersji wczeniejszych ni MySQL 3.22.
4.1.3. Przegld typw acuchowych
Poniej znajduje si przegld typw acuchowych. Dodatkowe informacje mona
znale w podrozdziale 4.4. Wymogi dotyczce pamici potrzebnej do przechowywa-
nia danych w kolumnach zostay podane w podrozdziale 4.5.
W niektrych przypadkach MySQL moe zmieni kolumn typu acuchowego na typ,
ktry bdzie si rni od zadeklarowanego w instrukcji CRlATl TAB|l lub A|TlR TAB|l.
Wicej informacji na ten temat znajduje si w podpunkcie 6.2.5.2.
Od wersji 4.1 w MySQL pojawia si zmiana, ktra wpywa na wiele typw kolumn typu
acuchowego. Definicja kolumn typu znakowego moe zawiera atrybut CHARACTlR
SlT, ktry okrela zestaw znakw i opcjonalnie porzdek sortowania. Dotyczy to typw
CHAR, VARCHAR, rnych typw TlXT oraz lNUM i SlT, na przykad:
CRF/TF T/B|F !
FNUMYCTVQ
YCTVQ|
1 lub 2 bajty w zalenoci od liczby wartoci wyliczenia
(maksymalnie 65 535)
SFTYCTVQ
YCTVQ|
1, 2, 3, 4 lub 8 bajtw w zalenoci od liczby elementw zestawu
(maksymalnie 64)
Typy VARCHAR, B|OB i TlXT maj zmienn dugo. Dla kadego ilo pamici potrzeb-
nej do przechowania wartoci bdzie zalee od faktycznej dugoci wartoci kolumny
(reprezentowanej w ostatniej tabeli przez .), a nie od maksymalnego moliwego roz-
miaru danego typu. Kolumna VARCHAR`0) na przykad moe przechowywa acuch
o maksymalnej dugoci 10 znakw. Faktyczna ilo wymaganej pamici to dugo
acucha (.) plus 1 bajt do zapisania dugoci acucha. Dla acucha `.|cc` parametr
. jest rwny 4, a wymagany rozmiar pamici to 5 bajtw.
Typy B|OB i TlXT wymagaj 1, 2, 3 lub 4 bajtw do zapisu dugoci wartoci kolumny
w zalenoci od maksymalnej moliwej dugoci tego typu (patrz punkt 4.4.2).
Rozmiar obiektu lNUM jest ustalany na podstawie liczby rnych wartoci wyliczenia.
Przy wyliczeniach do 255 moliwych wartoci uywany jest jeden bajt, a przy wyli-
czeniach do 65 535 wartoci uywane s 2 bajty (patrz punkt 4.4.3).
Rozmiar obiektu SlT jest okrelany przez liczb rnych elementw zestawu. Jeli ze-
staw ma rozmiar 0, obiekt zajmuje 0/).8 bajtw, ktr to warto zaokrgla si do
1, 2, 3, 4 lub 8 bajtw. Obiekt SlT moe mie do 64 elementw (patrz punkt 4.4.4).
4.6. Wybieranie odpowiedniego typu
dla kolumny
Aby jak najbardziej wydajnie korzysta z pamici, naley we wszystkich przypadkach
stara si stosowa typ, ktry bdzie jak najbardziej dokadny. Jeli na przykad w kolum-
nie liczb cakowitych bd przechowywane wartoci z zakresu od ` do 99999, najlep-
szym wyborem bdzie typ MlD1UM1NT UNS1ONlD. Ze wszystkich typw, ktre reprezentuj
wszystkie wymagane wartoci, zajmuje najmniej pamici.
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych 153
Powszechnym problemem jest dokadne przedstawianie wartoci walutowych. W MySQL
naley do tego uywa typu DlC1MA|, za pomoc ktrego wartoci zapisywane s w for-
mie acucha. Dziki temu nie traci si na dokadnoci (mimo to obliczenia z wartociami
DlC1MA| mog by wci wykonywane przy uyciu operacji dziaajcych na liczbach
z podwjn precyzj). Jeli dokadno nie jest zbyt wana, by moe wystarczajco
dobrym typem bdzie DOUB|l.
Aby uzyska wiksz dokadno, mona zawsze przeksztaci warto na typ stao-
przecinkowy, przechowywany w B1O1NT. Pozwoli to wykonywa wszystkie obliczenia
na liczbach cakowitych i tylko w razie potrzeby przeksztaca wynik z powrotem na
wartoci zmiennoprzecinkowe.
4.7. Wykorzystywanie typw kolumn
z innych mechanizmw baz danych
Aby uatwi uytkownikowi zastosowanie kodu pochodzcego od innych producentw,
moliwe jest odwzorowanie typw kolumn w sposb przedstawiony w poniszej tabeli.
Odwzorowania te upraszczaj operacj importu do MySQL definicji tabel z innych
mechanizmw baz danych:
Typ innych producentw Typ MySQL
BTN/RY/| C'/R/| BTN/RY
C'/R V/RYTN/| V/RC'/R/|
F|J/T4 F|J/T
F|J/T8 OJUB|F
TNT1 TTNYTNT
TNT SM/||TNT
TNT: MFOTUMTNT
TNT4 TNT
TNT8 BTTNT
|JN V/RBTN/RY MFOTUMB|JB
|JN V/RC'/R MFOTUMTFXT
|JN MFOTUMTFXT oc M,SJ| 410|
MTOO|FTNT MFOTUMTNT
V/RBTN/RY/| C'/R/| BTN/RY
Odwzorowanie typw kolumn jest wykonywane podczas tworzenia tabeli, po czym
oryginalne deklaracje typu zostaj usunite. Jeli uytkownik utworzy tabel z typami
stosowanymi przez innych producentw, po czym wyda polecenie DlSCR1Bl PC\YCA
VCDGNK, zostanie przedstawiona struktura tabeli z odpowiadajcymi im typami MySQL.
4 Spis treci
1.8.5. Rozbienoci midzy MySQL a standardem SQL ........................................ 60
1.8.6. Jak MySQL radzi sobie z ograniczeniami ................................................. 67
1.8.7. Znane bdy i projektowe braki w MySQL................................................ 69
Rozdzia 2. Struktura jzyka .............................................................................. 77
2.1. Literay................................................................................................................... 77
2.1.1. acuchy ................................................................................................... 77
2.1.2. Liczby........................................................................................................ 80
2.1.3. Wartoci szesnastkowe .............................................................................. 80
2.1.4. Wartoci logiczne ...................................................................................... 81
2.1.5. Wartoci NULL......................................................................................... 81
2.2. Nazwy baz danych, tabel, indeksw, kolumn i aliasw......................................... 81
2.2.1. Kwalifikatory identyfikatorw .................................................................. 83
2.2.2. Znaczenie wielkoci liter w nazwach identyfikatorw.............................. 83
2.3. Zmienne definiowane przez uytkownika.............................................................. 85
2.4. Zmienne systemowe............................................................................................... 87
2.4.1. Strukturalne zmienne systemowe .............................................................. 89
2.5. Skadnia komentarza .............................................................................................. 91
2.6. Traktowanie sw zastrzeonych w MySQL.......................................................... 92
Rozdzia 3. Obsuga zestaww znakw............................................................... 95
3.1. Oglne informacje o zestawach znakw i sortowaniu ........................................... 95
3.2. Zestawy znakw i porzdki sortowania w MySQL................................................ 96
3.3. Okrelanie domylnego zestawu znakw i sortowania........................................... 98
3.3.1. Zestaw znakw i sortowanie dla serwera................................................... 98
3.3.2. Zestaw znakw i sortowanie dla bazy danych........................................... 99
3.3.3. Zestaw znakw i sortowanie dla tabeli .................................................... 100
3.3.4. Zestaw znakw i sortowanie dla kolumny............................................... 100
3.3.5. Przykady przypisywania zestawu znakw i sortowania ......................... 101
3.3.6. Zestawy znakw i sortowanie dla poczenia .......................................... 102
3.3.7. Zestaw znakw i sortowanie dla acucha znakw.................................. 104
3.3.8. Wykorzystywanie COLLATE w instrukcjach SQL.................................... 105
3.3.9. Priorytet klauzuli COLLATE .................................................................. 106
3.3.10. Operator BINARY................................................................................... 106
3.3.11. Niektre przypadki specjalne, w ktrych trudno okreli sortowanie...... 106
3.3.12. Sortowania musz by odpowiednie dla danego zestawu znakw........... 107
3.3.13. Przykad wpywu porzdku sortowania ................................................... 108
3.4. Operacje, na ktre ma wpyw obsuga zestaww znakw.................................... 109
3.4.1. acuchy wyjciowe ............................................................................... 109
3.4.2. CONVERT()............................................................................................ 110
3.4.3. CAST() .................................................................................................... 110
3.4.4. Instrukcje SHOW .................................................................................... 111
3.5. Obsuga Unicode.................................................................................................. 112
3.6. UTF8 dla metadanych.......................................................................................... 113
3.7. Kompatybilno z innymi systemami zarzdzania baz danych .......................... 115
3.8. Nowy format pliku konfiguracji zestawu znakw................................................ 115
3.9. Narodowe zestawy znakw.................................................................................. 115
3.10. Aktualizacja zestaww znakw z MySQL 4.0..................................................... 116
3.10.1. Zestawy znakw w wersji 4.0 i odpowiadajce im w wersji 4.1 pary
skadajce si z zestawu znakw i sortowania......................................... 117
3.10.2. Przeksztacanie kolumn znakowych wersji 4.0 na format 4.1 ................. 118
3.11. Zestawy znakw i sortowania obsugiwane przez MySQL.................................. 118
3.11.1. Zestawy znakw standardu Unicode ....................................................... 119
3.11.2. Zestawy znakw zachodnioeuropejskich................................................. 120
3.11.3. Zestawy znakw dla Europy Centralnej .................................................. 121
Spis treci 5
3.11.4. Zestawy znakw poudniowoeuropejskich i rodkowowschodnich......... 122
3.11.5. Zestawy znakw regionu batyckiego...................................................... 123
3.11.6. Zestawy znakw dla cyrylicy................................................................... 123
3.11.7. Azjatyckie zestawy znakw..................................................................... 124
Rozdzia 4. Typy kolumn.................................................................................. 125
4.1. Przegld typw dla kolumny................................................................................ 126
4.1.1. Omwienie typw liczbowych ................................................................ 126
4.1.2. Przegld typw zwizanych z dat i czasem............................................ 129
4.1.3. Przegld typw acuchowych ................................................................ 130
4.2. Typy liczbowe...................................................................................................... 132
4.3. Typy zwizane z dat i czasem............................................................................ 135
4.3.1. Typy DATETIME, DATE i TIMESTAMP............................................. 137
4.3.2. Typ TIME................................................................................................ 142
4.3.3. Typ YEAR............................................................................................... 143
4.3.4. Problem roku 2000 a typy zwizane z dat.............................................. 144
4.4. Typy acuchowe ................................................................................................. 144
4.4.1. Typy CHAR i VARCHAR...................................................................... 144
4.4.2. Typy BLOB i TEXT................................................................................ 146
4.4.3. Typ Enum................................................................................................ 147
4.4.4. Typ SET .................................................................................................. 149
4.5. Rozmiar pamici potrzebnej dla typw kolumn................................................... 151
4.6. Wybieranie odpowiedniego typu dla kolumny..................................................... 152
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych ............... 153
Rozdzia 5. Funkcje i operatory........................................................................ 155
5.1. Operatory ............................................................................................................. 156
5.1.1. Nawiasy................................................................................................... 156
5.1.2. Operatory porwnania ............................................................................. 156
5.1.3. Operatory logiczne .................................................................................. 161
5.1.4. Operatory rozrniania wielkoci liter..................................................... 163
5.2. Funkcje kontroli przepywu ................................................................................. 163
5.3. Funkcje acuchowe............................................................................................. 166
5.3.1. Funkcje porwnywania acuchw.......................................................... 176
5.4. Funkcje liczbowe ................................................................................................. 178
5.4.1. Operatory arytmetyczne........................................................................... 178
5.4.2. Funkcje matematyczne ............................................................................ 180
5.5. Funkcje daty i godziny......................................................................................... 186
5.6. Funkcje obsugi wyszukiwania penotekstowego................................................. 202
5.6.1. Boolowskie wyszukiwania penotekstowe............................................... 205
5.6.2. Wyszukiwania penotekstowe z rozwijaniem zapytania .......................... 207
5.6.3. Ograniczenia dla wyszukiwania penotekstowego................................... 208
5.6.4. Modyfikowanie wyszukiwania penotekstowego MySQL ...................... 209
5.6.5. Lista rzeczy do zrobienia dla wyszukiwania penotekstowego................ 211
5.7. Funkcje konwersji typw..................................................................................... 211
5.8. Inne funkcje ......................................................................................................... 214
5.8.1. Funkcje bitowe ........................................................................................ 214
5.8.2. Funkcje szyfrujce................................................................................... 215
5.8.3. Funkcje informacyjne .............................................................................. 219
5.8.4. Funkcje rne .......................................................................................... 223
5.9. Funkcje i modyfikatory do zastosowania z klauzulami GROUP BY................... 226
5.9.1. Funkcje GROUP BY (agregujce)........................................................... 226
5.9.2. Modyfikatory GROUP BY...................................................................... 229
5.9.3. GROUP BY z ukrytymi polami............................................................... 232
6 Spis treci
Rozdzia 6. Skadnia instrukcji SQL .................................................................. 235
6.1. Instrukcje operujce na danych............................................................................ 235
6.1.1. Skadnia instrukcji DELETE................................................................... 235
6.1.2. Skadnia instrukcji DO ............................................................................ 238
6.1.3. Skadnia instrukcji HANDLER............................................................... 238
6.1.4. Skadnia instrukcji INSERT .................................................................... 240
6.1.5. Skadnia instrukcji LOAD DATA INFILE.............................................. 246
6.1.6. Skadnia instrukcji REPLACE................................................................. 255
6.1.7. Skadnia instrukcji SELECT.................................................................... 256
6.1.8. Skadnia podzapyta................................................................................ 265
6.1.9. Skadnia instrukcji TRUNCATE............................................................. 276
6.1.10. Skadnia instrukcji UPDATE................................................................... 276
6.2. Instrukcje definiowania danych ........................................................................... 278
6.2.1. Skadnia instrukcji ALTER DATABASE ............................................... 278
6.2.2. Skadnia instrukcji ALTER TABLE........................................................ 279
6.2.3. Skadnia instrukcji CREATE DATABASE............................................. 285
6.2.4. Skadnia instrukcji CREATE INDEX ..................................................... 285
6.2.5. Skadnia instrukcji CREATE TABLE..................................................... 287
6.2.6. Skadnia instrukcji DROP DATABASE.................................................. 301
6.2.7. Skadnia instrukcji DROP INDEX.......................................................... 302
6.2.8. Skadnia instrukcji DROP TABLE.......................................................... 302
6.2.9. Skadnia instrukcji RENAME TABLE.................................................... 303
6.3. Instrukcje programu MySQL............................................................................... 304
6.3.1. Skadnia instrukcji DESCRIBE
(odczytywanie informacji na temat kolumn) ........................................... 304
6.3.2. Skadnia instrukcji USE........................................................................... 304
6.4. Instrukcje obsugi transakcji i blokowania........................................................... 305
6.4.1. Skadnia instrukcji START TRANSACTION, COMMIT
oraz ROLLBACK.................................................................................... 305
6.4.2. Instrukcje niemoliwe do wycofania ....................................................... 306
6.4.3. Instrukcje wykonujce niejawne zatwierdzenie......................................... 306
6.4.4. Skadnia instrukcji SAVEPOINT i ROLLBACK TO SAVEPOINT....... 307
6.4.5. Skadnia instrukcji LOCK TABLES oraz UNLOCK TABLES .............. 307
6.4.6. Skadnia instrukcji SET TRANSACTION.............................................. 310
6.5. Administracja baz danych .................................................................................. 311
6.5.1. Instrukcje zarzdzajce kontami uytkownikw ....................................... 311
6.5.2. Instrukcje do konserwacji tabel ............................................................... 319
6.5.3. Skadnia instrukcji SET i SHOW ............................................................ 326
6.5.4. Inne instrukcje administracyjne ............................................................... 347
6.6. Instrukcje replikacji.............................................................................................. 352
6.6.1. Instrukcje SQL sterujce serwerem gwnym ......................................... 352
6.6.2. Instrukcje SQL sterujce serwerami podrzdnymi .................................. 354
Rozdzia 7. Rozszerzenia przestrzenne w MySQL............................................... 365
7.1. Wstp ................................................................................................................... 365
7.2. Model geometryczny OpenGIS............................................................................ 366
7.2.1. Hierarchia klas geometrycznych.............................................................. 366
7.2.2. Klasa Geometry ....................................................................................... 368
7.2.3. Klasa Point .............................................................................................. 369
7.2.4. Klasa Curve ............................................................................................. 369
7.2.5. Klasa LineString...................................................................................... 370
7.2.6. Klasa Surface........................................................................................... 370
7.2.7. Klasa Polygon.......................................................................................... 370
7.2.8. Klasa GeometryCollection....................................................................... 371
Spis treci 7
7.2.9. Klasa MultiPoint...................................................................................... 371
7.2.10. Klasa MultiCurve .................................................................................... 372
7.2.11. Klasa MultiLineString............................................................................. 372
7.2.12. Klasa MultiSurface .................................................................................. 372
7.2.13. Klasa MultiPolygon................................................................................. 373
7.3. Obsugiwane formaty danych przestrzennych...................................................... 373
7.3.1. Format tekstowy WKT............................................................................ 374
7.3.2. Format binarny WKB.............................................................................. 374
7.4. Tworzenie bazy danych z rozszerzeniami przestrzennymi................................... 375
7.4.1. Typy danych przestrzennych w MySQL ................................................. 375
7.4.2. Tworzenie wartoci przestrzennych......................................................... 376
7.4.3. Tworzenie kolumn przestrzennych.......................................................... 379
7.4.4. Wypenianie kolumn przestrzennych....................................................... 379
7.4.5. Pobieranie danych przestrzennych........................................................... 381
7.5. Analiza informacji przestrzennych....................................................................... 381
7.5.1. Funkcje konwersji formatw geometrycznych ........................................ 382
7.5.2. Funkcje klasy Geometry.......................................................................... 382
7.5.3. Funkcje tworzce nowe geometrie na podstawie istniejcych................. 388
7.5.4. Funkcje testujce relacje przestrzenne
midzy obiektami geometrycznymi ......................................................... 389
7.5.5. Relacje midzy minimalnymi prostoktami otaczajcymi
dla poszczeglnych geometrii.................................................................. 390
7.5.6. Funkcje sprawdzajce relacje przestrzenne pomidzy geometriami ........ 391
7.6. Optymalizacja analizy przestrzennej.................................................................... 392
7.6.1. Tworzenie indeksw przestrzennych....................................................... 392
7.6.2. Wykorzystanie indeksu przestrzennego................................................... 393
7.7. Zgodno MySQL ze standardem........................................................................ 395
7.7.1. Niezaimplementowane funkcje GIS ........................................................ 395
Rozdzia 8. Procedury i funkcje skadowane ..................................................... 397
8.1. Skadnia procedur skadowanych......................................................................... 398
8.1.1. Utrzymanie procedur skadowanych........................................................ 398
8.1.2. SHOW PROCEDURE STATUS oraz SHOW FUNCTION STATUS.... 401
8.1.3. Instrukcja CALL...................................................................................... 402
8.1.4. Instrukcja zoona BEGIN ... END.......................................................... 402
8.1.5. Instrukcja DECLARE.............................................................................. 402
8.1.6. Zmienne w procedurach skadowanych................................................... 402
8.1.7. Warunki i podprogramy obsugi .............................................................. 403
8.1.8. Kursory.................................................................................................... 405
8.1.9. Konstrukcje sterowania przepywem sterowania..................................... 406
Rozdzia 9. Obsuga bdw w MySQL .............................................................. 409
9.1. Zwracane bdy.................................................................................................... 409
9.2. Komunikaty bdw............................................................................................. 419
Dodatek A Rozwizywanie problemw z zapytaniami ........................................435
A.1. Zagadnienia zwizane z zapytaniami ................................................................... 435
A.1.1. Wielko liter przy wyszukiwaniu........................................................... 435
A.1.2. Problemy z kolumnami typu DATE ........................................................ 436
A.1.3. Problemy z wartociami NULL............................................................... 437
A.1.4. Problemy z synonimami kolumn ............................................................. 438
A.1.5. Bd wycofania dla tabel nietransakcyjnych............................................ 439
A.1.6. Usuwanie wierszy ze zwizanych tabel ................................................... 439
A.1.7. Rozwizywanie problemw z brakujcymi wierszami ............................ 440
A.1.8. Problemy z porwnaniami zmiennoprzecinkowymi................................ 441
8 Spis treci
A.2. Problemy zwizane z optymalizatorem................................................................ 443
A.3. Problemy z definicj tabel.................................................................................... 444
A.3.1. Problemy z instrukcj ALTER TABLE................................................... 444
A.3.2. Jak zmieni porzdek kolumn w tabeli .................................................... 445
A.3.3. Problemy z tabelami tymczasowymi ....................................................... 445
Dodatek B Wyraenia regularne w MySQL........................................................ 447
Skorowidz...................................................................................... 451
Rozdzia 4.
Typy kolumn
W MySQL dostpnych jest wiele typw danych, ktre mona pogrupowa w kilku pod-
stawowych kategoriach, takich jak typy liczbowe, typy zwizane z dat i czasem oraz
typy acuchowe. Na pocztku tego rozdziau przedstawiony zostanie przegld wspo-
mnianych przed chwil typw kolumn, po czym nastpi bardziej szczegowy opis ich
waciwoci z podziaem na poszczeglne kategorie i wreszcie zamieszczone zostanie
podsumowanie informacji dotyczcych wymaga co do rozmiaru pamici potrzebnej
do przechowania danej kolumny. Sam przegld jest z zamierzenia krtki. Dodatkowe
informacje o poszczeglnych typach kolumn, na przykad dopuszczalny format, w kt-
rym mona deklarowa wartoci, zostay uwzgldnione w szczegowych omwieniach.
Od wersji 4.1 MySQL rozpoznaje rozszerzenia do obsugi danych przestrzennych.
Informacje o typach przestrzennych znajduj si w rozdziale 7. tego podrcznika.
W czci opisu typw kolumn zastosowane zostay nastpujce reguy:
/
Wskazuje maksymalny rozmiar wywietlania liczby lub acucha.
Maksymalnym dopuszczalnym rozmiarem wywietlania jest 255.
&
Dotyczy typw zmiennoprzecinkowych i staoprzecinkowych. Okrela liczb
cyfr po kropce dziesitnej. Maksymalna dopuszczalna warto wynosi 30,
ale nie powinna przekracza /.
Nawiasy kwadratowe ( ) identyfikuj opcjonalne fragmenty deklaracji typu.
126 Rozdzia 4. Typy kolumn
4.1. Przegld typw dla kolumny
4.1.1. Omwienie typw liczbowych
Poniej znajduje si przegld liczbowych typw dla kolumn. Bardziej szczegowe
informacje mona znale w podrozdziale 4.2. Wymogi dotyczce rozmiaru pamici
potrzebnej do przechowywania kolumn znajduj si w podrozdziale 4.5.
Jeli dla kolumny liczbowej zostanie okrelony atrybut /lRO|1||, MySQL automatycznie
doda do kolumny atrybut UN1S1ONlD.
Naley uwaa podczas odejmowania dwch wartoci liczbowych, z ktrych jedna ma
typ UN1S1ONlD. Uzyskany wynik bdzie rwnie tego typu! patrz podrozdzia 5.7.
T1NY1NT/) UNS1ONlD /lRO|1||
Bardzo maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od `8
do `/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do bb.
B1T, BOO|, BOO|lAN
To s synonimy T1NY1NT`). Synonim BOO|lAN zosta dodany w MySQL 4.1.0.
Warto zerowa to inaczej fasz. Wartoci niezerowe traktowane s jako prawda.
W przyszoci wprowadzona zostanie pena, zgodna ze standardem SQL
obsuga typu boolowskiego.
SMA||1NT/) UNS1ONlD /lRO|1||
Maa liczba cakowita. Dla liczb ze znakiem zakres wynosi od o/68
do o/6/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0 do 6bbob.
MlD1UM1NT/) UNS1ONlD /lRO|1||
rednia liczba cakowita. Dla liczb ze znakiem zakres wynosi od 8o88608
do 8o8860/. W przypadku liczb bez znaku zakres obejmuje wartoci od 0
do `6///`b.
1NT/) UNS1ONlD /lRO|1||
Standardowa liczba cakowita. Dla liczb ze znakiem zakres wynosi
od `4/48o648 do `4/48o64/. W przypadku liczb bez znaku zakres
obejmuje wartoci od 0 do 49496/9b.
1NTlOlR/) UNS1ONlD /lRO|1||
Jest to synonim dla typu 1NT.
B1O1NT/) UNS1ONlD /lRO|1||
Dua liczba cakowita. Dla liczb ze znakiem zakres wynosi
od 9oo/0o68b4//b808 do 9oo/0o68b4//b80/. W przypadku liczb
bez znaku zakres obejmuje wartoci od 0 do `8446/440/o/09bb`6`b.
4.1. Przegld typw dla kolumny 127
Oto kilka spraw, o ktrych naley wiedzie odnonie kolumn typu B1O1NT:
Wszystkie obliczenia wykonywane s przy uyciu wartoci typu B1O1NT
lub DOUB|l ze znakiem. Oznacza to, e duych liczb cakowitych bez
znaku, wikszych ni 9oo/0o68b4//b80/ (63 bity), mona uywa tylko
z funkcjami bitowymi! Niezastosowanie si do tej zasady moe doprowadzi
do uzyskania w wyniku liczby, ktrej kilka ostatnich cyfr jest bdnych
z powodu bdw w zaokrglaniu podczas konwersji wartoci B1O1NT
na DOUB|l.
MySQL 4.0 potrafi obsugiwa B1O1NT w nastpujcych przypadkach:
Podczas wykorzystywania liczb cakowitych do przechowywania
duych wartoci bez znaku w kolumnie typu B1O1NT.
W M1NPC\YCAMQN) lub MAXPC\YCAMQN), gdzie PC\YCAMQN odnosi si
do kolumny B1O1NT.
Podczas korzystania z operatorw (midzy innymi , , *), gdy oba
argumenty s liczbami cakowitymi.
Zawsze istnieje moliwo zapisania w kolumnie B1O1NT dokadnej wartoci
liczby cakowitej. Wystarczy zapisa j przy uyciu acucha. W takim
przypadku zostanie dokonana konwersja acucha na liczb; konwersja
nie bdzie wymaga poredniego etapu przeksztacajcego liczb na jej
odpowiednik o podwjnej precyzji.
Podczas korzystania z operatorw , i * stosowana jest arytmetyka
B1O1NT, jeli oba argumenty maj warto liczby cakowitej! To oznacza,
e pomnoenie dwch duych liczb cakowitych (lub wynikw funkcji,
ktra zwraca liczby cakowite) moe spowodowa nieoczekiwane
rezultaty, jeli wynik przekroczy liczb 9oo/0o68b4//b80/.
||OATR) UNS1ONlD /lRO|1||
Liczba zmiennoprzecinkowa. Parametr R oznacza precyzj i moe przyjmowa
warto od 0 do 14 dla liczb zmiennoprzecinkowych o dokadnoci do jednego
znaku i od 25 do 53 dla liczb zmiennoprzecinkowych o dokadnoci do dwch
znakw. To przypomina opisane poniej typy ||OAT i DOUB|l. Typ ||OATR)
ma ten sam zakres, jaki posiadaj odpowiadajce mu typy ||OAT i DOUB|l,
ale w jego przypadku niezdefiniowany jest maksymalny rozmiar wywietlania
i liczba miejsc po przecinku.
Od wersji 3.23 MySQL jest to prawdziwa warto zmiennoprzecinkowa.
W wersjach wczeniejszych liczba typu ||OATR) bya zawsze liczb o dwch
miejscach po przecinku.
Ta skadnia zostaa dodana w celu zachowania zgodnoci ze standardem ODBC.
Stosowanie typu ||OAT moe spowodowa wystpienie pewnych
nieoczekiwanych problemw, poniewa wszystkie obliczenia w MySQL
s wykonywane z podwjn precyzj patrz punkt A.1.7).
||OAT/, &) UNS1ONlD /lRO|1||
128 Rozdzia 4. Typy kolumn
Maa liczba zmiennoprzecinkowa (o dokadnoci do jednego znaku). Liczba
ta moe przyj wartoci: od o408o466lo8 do ``/b494ob`lo8, 0,
i od ``/b494ob`lo8 do o408o466lo8. Jeli podany jest atrybut UN1S1ONlD,
niedozwolone s wartoci ujemne. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ ||OAT bez argumentw
lub typ ||OATR) (gdzie Rjest liczb z zakresu od 0 do 24) oznacza liczb
zmiennoprzecinkow o pojedynczej precyzji.
DOUB|l/, &) UNS1ONlD /lRO|1||
Standardowa liczba zmiennoprzecinkowa (o dokadnoci do dwch
znakw). Liczba ta moe przyj wartoci: od `/9/69o`o486o`b/lo08
do b0/o8b8b0/0`4lo08, 0, i od b0/o8b8b0/0`4lo08
do `/9/69o`o486o`b/lo08. Jeli podany jest atrybut UN1S1ONlD, wartoci
ujemne s niedozwolone. Parametr /definiuje maksymaln szeroko
wywietlanej liczby, a & liczb miejsc po przecinku. Typ DOUB|l
bez argumentw lub ||OATR) (gdzie R jest liczb z zakresu od 25 do 53)
oznacza liczb zmiennoprzecinkow o podwjnej precyzji.
DOUB|l PRlC1S1ON/, &) UNS1ONlD /lRO|1||
RlA|/, &) UNS1ONlD /lRO|1||
S to synonimy DOUB|l. Wyjtek: Jeli dla parametru s;_cce serwera
wczono opcj RlA|_AS_||OAT, synonimem ||OAT jest RlA|, a nie DOUB|l.
DlC1MA|/, &) UNS1ONlD /lRO|1||
Niezapakowana liczba staoprzecinkowa. Zachowanie kolumny tego typu
przypomina kolumn typu CHAR. Niezapakowana oznacza, e liczba jest
przechowywana w postaci acucha przy uyciu jednego znaku na kad cyfr
wartoci. Parametr / definiuje maksymaln liczb cyfr, a & liczb miejsc
po przecinku. W parametrze / nie s brane pod uwag: kropka dziesitna
(odpowiadajca w naszej notacji przecinkowi) i (dla liczb ujemnych) znak ,
cho jest dla nich zarezerwowane miejsce. Wartoci nie maj miejsc
po przecinku lub czci uamkowych, jeli & jest rwne 0. Maksymalny zakres
wartoci typu DlC1MA| jest taki sam, jak dla typu DOUB|l, ale rzeczywisty zakres
danej kolumny DlC1MA| moe by ograniczony przez wybr argumentw / i &.
Jeli podany jest atrybut UN1S1ONlD, wartoci ujemne s niedozwolone.
W przypadku braku argumentu &, domyln wartoci jest 0. Jeli pominity
jest parametr /, domyln wartoci jest 10.
W wersjach poprzedzajcych MySQL 3.23 argument / musi by wystarczajco
duy, by zawiera obszar potrzebny dla znaku i kropki dziesitnej.
DlC/,&) UNS1ONlD /lRO|1||
NUMlR1C/,&) UNS1ONlD /lRO|1||
|1XlD/, &) UNS1ONlD /lRO|1||
S to synonimy typu DlC1MA|.
W MySQL 4.1.0 dodano synonim |1XlD w celu osignicia kompatybilnoci
z innymi serwerami.
4.1. Przegld typw dla kolumny 129
4.1.2. Przegld typw zwizanych z dat i czasem
Poniej znajduje si podsumowanie typw kolumn przeznaczonych dla czasu i daty.
Dodatkowe informacje na ten temat mona znale w podrozdziale 4.3. Wymogi do-
tyczce pamici potrzebnej do przechowywania danych w kolumnach zostay podane
w podrozdziale 4.5.
DATl
Data. Obsugiwany zakres obejmuje daty od ``0000`0`` do `9999`o``.
W MySQL wartoci DATl wywietlane s w formacie `RRRRMMDD`, ale mona
przypisywa wartoci do kolumn DATl przy uyciu acuchw lub liczb.
DATlT1Ml
Kombinacja daty i czasu. Obsugiwany zakres obejmuje wartoci
od ``0000`0` 000000` do `9999`o` ob9b9`. W MySQL wartoci
DATlT1Ml wywietlane s w formacie `RRRRMMDD OOMMSS`, ale mona
przypisywa wartoci do kolumn DATlT1Ml przy uyciu acuchw lub liczb.
T1MlSTAMP/)
Znacznik czasu. Obsugiwany zakres rozpoczyna si od daty ``9/00`0``
i siga roku 0o/.
Kolumna typu T1MlSTAMP przydaje si do rejestracji daty i godziny operacji
wstawiania lub aktualizacji. Pierwszej kolumnie T1MlSTAMP w tabeli
automatycznie przypisywana jest data i czas ostatniej operacji, jeli tylko tych
wartoci nie wprowadzi rcznie uytkownik. Dowolnej kolumnie T1MlSTAMP
mona rwnie przypisa biec dat i godzin, wpisujc do niej warto NU||.
Od MySQL 4.1 wartoci T1MlSTAMP s zwracane w postaci acuchw
w formacie `RRRRMMDD OOMMSS`. Aby uzyska warto w postaci liczby,
naley doda do kolumn tego typu 0. Inne szerokoci wywietlania
znacznika czasu nie s obsugiwane.
W wersjach poprzedzajcych MySQL 4.1 wartoci T1MlSTAMP s wywietlane
w formacie RRRRMMDDOOMMSS, RRMMDDOOMMSS, RRRRMMDD lub RRMMDD w zalenoci
od tego, czy parametr / jest rwny 14 (albo go brak), 12, 8 lub 6. Mona jednak
przypisywa wartoci do kolumn T1MlSTAMP przy uyciu acuchw lub liczb.
Argument / wpywa tylko na sposb wywietlania kolumny T1MlSTAMP, a nie
na jej przechowywanie. Wartoci kolumny s zawsze zapisywane w czterech
bajtach. W MySQL od wersji 4.0.12 pojawia si opcja ne., dziki ktrej
mona zmieni dziaanie serwera, upodabniajc je do MySQL 4.1.
Naley odnotowa, e kolumny T1MlSTAMP/), gdzie /jest rwne 8 lub 14,
s traktowane jako liczby, natomiast reszta kolumn T1MlSTAMP/) jest
traktowana jako acuchy. Jest to rodzaj gwarancji, e uytkownik bdzie
mg wiarygodnie usuwa i przywraca tabele tego typu.
T1Ml
Godzina. Obsugiwany zakres obejmuje wartoci od `8o8b9b9`
do ` 8o8b9b9`. W MySQL wartoci T1Ml wywietlane s w formacie
` OOMMSS`, ale mona przypisa wartoci do kolumn T1Ml przy uyciu
zarwno acuchw, jak i liczb.
130 Rozdzia 4. Typy kolumn
YlAR|4)
Rok w formacie dwu- lub czterocyfrowym. Domylnym formatem jest rok
zapisany za pomoc czterech cyfr. W tym formacie dostpne wartoci nale
do przedziau od `90` do `bb oraz 0. W formacie dwucyfrowym wartoci
dopuszczalne to liczby z zakresu od /0 do 69, ktre reprezentuj daty od roku
1970 do 2069. W MySQL wartoci YlAR wywietlane s w formacie RRRR,
ale mona przypisa wartoci do kolumn YlAR przy uyciu tak acuchw,
jak i liczb. Typ YlAR jest niedostpny dla wersji wczeniejszych ni MySQL 3.22.
4.1.3. Przegld typw acuchowych
Poniej znajduje si przegld typw acuchowych. Dodatkowe informacje mona
znale w podrozdziale 4.4. Wymogi dotyczce pamici potrzebnej do przechowywa-
nia danych w kolumnach zostay podane w podrozdziale 4.5.
W niektrych przypadkach MySQL moe zmieni kolumn typu acuchowego na typ,
ktry bdzie si rni od zadeklarowanego w instrukcji CRlATl TAB|l lub A|TlR TAB|l.
Wicej informacji na ten temat znajduje si w podpunkcie 6.2.5.2.
Od wersji 4.1 w MySQL pojawia si zmiana, ktra wpywa na wiele typw kolumn typu
acuchowego. Definicja kolumn typu znakowego moe zawiera atrybut CHARACTlR
SlT, ktry okrela zestaw znakw i opcjonalnie porzdek sortowania. Dotyczy to typw
CHAR, VARCHAR, rnych typw TlXT oraz lNUM i SlT, na przykad:
CRF/TF T/B|F !
FNUMYCTVQ
YCTVQ|
1 lub 2 bajty w zalenoci od liczby wartoci wyliczenia
(maksymalnie 65 535)
SFTYCTVQ
YCTVQ|
1, 2, 3, 4 lub 8 bajtw w zalenoci od liczby elementw zestawu
(maksymalnie 64)
Typy VARCHAR, B|OB i TlXT maj zmienn dugo. Dla kadego ilo pamici potrzeb-
nej do przechowania wartoci bdzie zalee od faktycznej dugoci wartoci kolumny
(reprezentowanej w ostatniej tabeli przez .), a nie od maksymalnego moliwego roz-
miaru danego typu. Kolumna VARCHAR`0) na przykad moe przechowywa acuch
o maksymalnej dugoci 10 znakw. Faktyczna ilo wymaganej pamici to dugo
acucha (.) plus 1 bajt do zapisania dugoci acucha. Dla acucha `.|cc` parametr
. jest rwny 4, a wymagany rozmiar pamici to 5 bajtw.
Typy B|OB i TlXT wymagaj 1, 2, 3 lub 4 bajtw do zapisu dugoci wartoci kolumny
w zalenoci od maksymalnej moliwej dugoci tego typu (patrz punkt 4.4.2).
Rozmiar obiektu lNUM jest ustalany na podstawie liczby rnych wartoci wyliczenia.
Przy wyliczeniach do 255 moliwych wartoci uywany jest jeden bajt, a przy wyli-
czeniach do 65 535 wartoci uywane s 2 bajty (patrz punkt 4.4.3).
Rozmiar obiektu SlT jest okrelany przez liczb rnych elementw zestawu. Jeli ze-
staw ma rozmiar 0, obiekt zajmuje 0/).8 bajtw, ktr to warto zaokrgla si do
1, 2, 3, 4 lub 8 bajtw. Obiekt SlT moe mie do 64 elementw (patrz punkt 4.4.4).
4.6. Wybieranie odpowiedniego typu
dla kolumny
Aby jak najbardziej wydajnie korzysta z pamici, naley we wszystkich przypadkach
stara si stosowa typ, ktry bdzie jak najbardziej dokadny. Jeli na przykad w kolum-
nie liczb cakowitych bd przechowywane wartoci z zakresu od ` do 99999, najlep-
szym wyborem bdzie typ MlD1UM1NT UNS1ONlD. Ze wszystkich typw, ktre reprezentuj
wszystkie wymagane wartoci, zajmuje najmniej pamici.
4.7. Wykorzystywanie typw kolumn z innych mechanizmw baz danych 153
Powszechnym problemem jest dokadne przedstawianie wartoci walutowych. W MySQL
naley do tego uywa typu DlC1MA|, za pomoc ktrego wartoci zapisywane s w for-
mie acucha. Dziki temu nie traci si na dokadnoci (mimo to obliczenia z wartociami
DlC1MA| mog by wci wykonywane przy uyciu operacji dziaajcych na liczbach
z podwjn precyzj). Jeli dokadno nie jest zbyt wana, by moe wystarczajco
dobrym typem bdzie DOUB|l.
Aby uzyska wiksz dokadno, mona zawsze przeksztaci warto na typ stao-
przecinkowy, przechowywany w B1O1NT. Pozwoli to wykonywa wszystkie obliczenia
na liczbach cakowitych i tylko w razie potrzeby przeksztaca wynik z powrotem na
wartoci zmiennoprzecinkowe.
4.7. Wykorzystywanie typw kolumn
z innych mechanizmw baz danych
Aby uatwi uytkownikowi zastosowanie kodu pochodzcego od innych producentw,
moliwe jest odwzorowanie typw kolumn w sposb przedstawiony w poniszej tabeli.
Odwzorowania te upraszczaj operacj importu do MySQL definicji tabel z innych
mechanizmw baz danych:
Typ innych producentw Typ MySQL
BTN/RY/| C'/R/| BTN/RY
C'/R V/RYTN/| V/RC'/R/|
F|J/T4 F|J/T
F|J/T8 OJUB|F
TNT1 TTNYTNT
TNT SM/||TNT
TNT: MFOTUMTNT
TNT4 TNT
TNT8 BTTNT
|JN V/RBTN/RY MFOTUMB|JB
|JN V/RC'/R MFOTUMTFXT
|JN MFOTUMTFXT oc M,SJ| 410|
MTOO|FTNT MFOTUMTNT
V/RBTN/RY/| C'/R/| BTN/RY
Odwzorowanie typw kolumn jest wykonywane podczas tworzenia tabeli, po czym
oryginalne deklaracje typu zostaj usunite. Jeli uytkownik utworzy tabel z typami
stosowanymi przez innych producentw, po czym wyda polecenie DlSCR1Bl PC\YCA
VCDGNK, zostanie przedstawiona struktura tabeli z odpowiadajcymi im typami MySQL.
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
PRZYKADOWY ROZDZIA PRZYKADOWY ROZDZIA
IDZ DO IDZ DO
ZAMW DRUKOWANY KATALOG ZAMW DRUKOWANY KATALOG
KATALOG KSIEK KATALOG KSIEK
TWJ KOSZYK TWJ KOSZYK
CENNIK I INFORMACJE CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK ZAMW CENNIK
CZYTELNIA CZYTELNIA
FRAGMENTY KSIEK ONLINE FRAGMENTY KSIEK ONLINE
SPIS TRECI SPIS TRECI
DODAJ DO KOSZYKA DODAJ DO KOSZYKA
KATALOG ONLINE KATALOG ONLINE
MySQL. Opis jzyka
Autor: Paul Dubois
Tumaczenie: Pawe Gonera, Anna Zawadzka
ISBN: 83-7361-688-8
Tytu oryginau: MySQL Language Reference
Format: B5, stron: 472
MySQL to najpopularniejsza na wiecie baza danych dostpna na licencji open
source. Dziki swojej wydajnoci, szybkoci dziaania, stabilnoci i rozbudowanym
mechanizmom zabezpiecze jest wykorzystywana niemal do wszystkich zada, do
jakich moe by potrzebna baza danych. Stanowi zaplecze dla wielu aplikacji
korporacyjnych, witryn WWW i sklepw internetowych. Bogactwo funkcji i moliwoci
to ogromna zaleta rodowiska MySQL, jednake zapamitanie skadni, parametrw
i sposobw stosowania wszystkich polece i rozszerze jest praktycznie niemoliwe.
Kady, kto chce biegle posugiwa si t baz, powinien mie pod rk materiay
opisujce stosowany w niej jzyk SQL.
Ksika MySQL. Opis jzyka to najlepsze rdo takich informacji. Stworzona,
zredagowana i sprawdzona przez pracownikw dziaw pomocy i produkcji firmy
MySQL AB publikacja zawiera wszystko, co moe by potrzebne uytkownikowi bazy
danych MySQL. Przedstawia zarwno zagadnienia podstawowe, takie jak: struktura
jzyka, typy danych i zasady konstruowania zapyta, jak i tematy zaawansowane:
transakcje, replikacj oraz administrowanie baz. Szczegowo opisane s rwnie
wszystkie zagadnienia zwizane z zaimplementowanym w niej jzykiem SQL.
Podstawowe informacje o MySQL
Jzyk SQL instrukcje, typy danych, funkcje i operatory
Zapytania
Definiowanie danych
Obsuga transakcji
Zarzdzanie kontami uytkownikw
Konserwacja tabel
Replikacja baz danych
Rozszerzenia MySQL dla systemw GIS
Procedury skadowane
Obsuga bdw
Spis treci
Rozdzia 1. Informacje oglne.............................................................................. 9
1.1. Na temat tego podrcznika....................................................................................... 9
1.1.1. Zasady przyjte w tym podrczniku .......................................................... 10
1.2. Omwienie systemu zarzdzania baz danych MySQL......................................... 12
1.2.1. Historia MySQL........................................................................................ 13
1.2.2. Gwne cechy MySQL.............................................................................. 14
1.2.3. Stabilno MySQL .................................................................................... 17
1.2.4. Jak due mog by tabele MySQL ............................................................ 18
1.2.5. Zgodno z rokiem 2000 ........................................................................... 19
1.3. Omwienie MySQL AB ........................................................................................ 21
1.3.1. Model biznesowy i usugi MySQL AB...................................................... 22
1.3.2. Informacje o kontakcie .............................................................................. 25
1.4. Obsuga techniczna oraz wydawanie licencji MySQL........................................... 26
1.4.1. Obsuga techniczna oferowana przez MySQL AB........................................ 26
1.4.2. Prawa autorskie i licencje .......................................................................... 27
1.4.3. Licencje MySQL ....................................................................................... 28
1.4.4. Logo i znaki towarowe MySQL ................................................................ 30
1.5. Plany rozwoju MySQL .......................................................................................... 32
1.5.1. MySQL 4.0 w skrcie................................................................................ 33
1.5.2. MySQL 4.1 w skrcie................................................................................ 35
1.5.3. MySQL 5.0: nastpna wersja rozwojowa .................................................. 37
1.6. MySQL i przyszo (TODO) ................................................................................ 37
1.6.1. Nowe mechanizmy planowane dla wersji 4.1............................................ 38
1.6.2. Nowe funkcje planowane dla wersji 5.0.................................................... 38
1.6.3. Nowe funkcje planowane dla 5.1............................................................... 39
1.6.4. Nowe funkcje planowane w bliskiej przyszoci ......................................... 40
1.6.5. Nowe funkcje planowane w niezbyt odlegej przyszoci.......................... 43
1.6.6. Nowe funkcje, ktrych wdroenia nie planujemy.......................................... 44
1.7. rda informacji o MySQL .................................................................................. 45
1.7.1. Listy dyskusyjne powicone MySQL ...................................................... 45
1.7.2. Wspomaganie rodowiska MySQL na IRC (Internet Relay Chat)............. 54
1.8. Zgodno MySQL ze standardami ......................................................................... 55
1.8.1. Standardy speniane przez MySQL............................................................ 56
1.8.2. Wybieranie trybw MySQL ...................................................................... 56
1.8.3. Uruchamianie MySQL w trybie ANSI ...................................................... 56
1.8.4. Rozszerzenia MySQL do standardu SQL.................................................. 57