You are on page 1of 750

MySQL. Leksykon kieszonkowy.

II wydanie
Autor: George Reese Tumaczenie: Tomasz mijewski ISBN: 978-83-246-1385-4 Tytu oryginau: MySQL Pocket Reference, 2nd Ed Format: B6, stron: 160 MySQL to jeden z najpopularniejszych systemw zarzdzania bazami danych Rozprowadzany na zasadzie open source, MySQL jest wykorzystywany jako zaplecze bazodanowe setek tysicy serwisw WWW, sklepw internetowych, blogw i galerii. Coraz czciej sigaj po niego take twrcy rozbudowanych aplikacji korporacyjnych, poszukujcy stabilnej, bezpiecznej i wydajnej platformy do przechowywania danych. W najnowszej wersji, oznaczonej symbolem 5.0, dodano wiele od dawna oczekiwanych funkcji, w tym procedury skadowane, wyzwalacze, kursory i widoki. Poprawiono take mechanizmy skadowania danych. Jeli jeste administratorem lub programist baz danych, ksika MySQL. Leksykon kieszonkowy. II wydanie bdzie dla Ciebie nieocenion pomoc. W skondensowanej formie przedstawiono w niej wszystkie najistotniejsze zagadnienia zwizane z instalacj i konfiguracj tego systemu, a take z zarzdzaniem nim i wykorzystywaniem go. Znajdziesz tu omwienie typw danych, polece jzyka SQL, funkcji i rodzajw tabel. Przeczytasz take o replikacji, procedurach skadowanych, narzdziach dostpnych z wiersza polece i wyzwalaczach.
Pobieranie i instalacja MySQL Replikacja danych Narzdzia wiersza polece Typy danych Polecenia SQL Operatory Procedury skadowane

Dziki tej ksice Twoja praca z MySQL stanie si szybsza i efektywniejsza Wydawnictwo Helion ul. Kociuszki 1c 44-100 Gliwice tel. 032 230 98 63 e-mail: helion@helion.pl

Spis treci

Wstp ............................................................................................5 MySQL 5 ........................................................................................7


Widoki Trygery Procedury skadowane Kursory Nowe mechanizmy skadowania danych Zdarzenia bazy danych 7 7 7 8 8 9

1. Instalacja ..................................................................................... 10
Pobieranie MySQL Konfiguracja Uruchomienie Ustawianie hasa gwnego Replikacja 10 11 14 15 15

2. Narzdzia wiersza polece ........................................................ 18 3. Typy danych ................................................................................22


Liczby acuchy 23 29

4. SQL .............................................................................................. 41
Rozrnianie wielkoci liter Literay Identyfikatory Komentarze Instrukcje Zasady dotyczce transakcji 41 42 43 45 46 106

5. Operatory .................................................................................. 108


Priorytety operatorw Operatory arytmetyczne Operatory porwnania Operatory logiczne 108 109 109 111

6. Funkcje .......................................................................................113
Funkcje agregujce Funkcje oglnego przeznaczenia 113 115

7. Rodzaje tabel ............................................................................ 137 8. Procedury i funkcje skadowane .............................................. 138


Parametry Logika Kursory Obsuga zdarze i warunki 138 139 143 144

9. Trygery ...................................................................................... 146 Skorowidz ................................................................................. 147

MySQL. Leksykon kieszonkowy

Rozdzia 3. Typy danych


We wszystkich typach danych nawiasami kwadratowymi ([]) oznaczane s fragmenty opcjonalne. Poniszy przykad pokazuje sposb prezentacji typu BIGINT, opisanego dalej w tym rozdziale:
BIGINT[(wielko_pokazywana)]

Oznacza to, e sowo BIGINT moe wystpi samodzielnie lub z pokazywan wartoci. Uycie kursywy wskazuje, e nie naley wpisywa sowa wielko_pokazywana, ale poda wasn warto. Oto przykady uycia:
BIGINT BIGINT(20)

Poza typem BIGINT take wiele innych typw danych MySQL uwzgldnia deklaracj rozmiaru wywietlania. Jeli nie powiedziano inaczej, musi to by liczba od 1 do 255. W wersjach MySQL starszych ni wersja 5, baza danych w niektrych przypadkach zmieniaa podany typ kolumny, nie informujc o tym uytkownika. Obecnie takie podmiany nie maj ju miejsca.
VARCHAR -> CHAR

Jeli podana kolumna VARCHAR ma rozmiar mniejszy od czterech znakw, jest przeksztacana w kolumn CHAR.
CHAR -> VARCHAR

Jeli tabela zawiera co najmniej jedn kolumn o zmiennej dugoci, wszystkie kolumny typu CHAR dusze ni trzy znaki s zamieniane na VARCHAR.

Rozmiar wywietlania TIMESTAMP Rozmiar wywietlania pl TIMESTAMP musi by zawsze wielkoci parzyst od 2 do 14. Rozmiar rwny 0 lub wikszy od 14 powoduje przyjcie 14. Wszelkie liczby nieparzyste s zamieniane na nastpn liczb parzyst.

22

MySQL. Leksykon kieszonkowy

Liczby
MySQL obsuguje liczbowe typy danych zgodne z ANSI SQL 2. Typy te dzielimy na cakowitoliczbowe, dziesitne i zmiennoprzecinkowe. W ramach tych grup dzielimy typy dalej, wedug zajmowanej przez nie pamici. W przypadku typw liczbowych mona poda rozmiar wywietlania, ktry wpywa na sposb pokazywania przez MySQL wynikw. Rozmiar ten nie ma adnego zwizku z wielkoci pamici zajmowanej przez dany typ. Dodatkowo w przypadku liczb zmiennoprzecinkowych i dziesitnych mona poda liczb cyfr znajdujcych si za kropk dziesitn. Wtedy liczba cyfr powinna nalee do zakresu od 0 do 30, czyli by co najmniej o dwa mniejsza od rozmiaru wywietlania. Jeli warunek ten nie zostanie dotrzymany, MySQL automatycznie zmieni liczb cyfr tak, aby bya mniejsza o dwa od rozmiaru wywietlania. Przykadowo, MySQL automatycznie zmieni FLOAT(6,5) na FLOAT(7,5). Prba wstawienia do kolumny wartoci przekraczajcej dopuszczalny zakres tej kolumny powoduje obcicie tej wartoci do najmniejszej (dla liczb ujemnych) lub najwikszej (dla liczb dodatnich) wartoci dla danej kolumny dopuszczalnej. Jeli takie obcicie jest robione podczas wykonywania instrukcji ALTER TABLE, LOAD DATA INFILE, UPDATE lub wielowierszowej instrukcji INSERT, MySQL pokazuje ostrzeenie. Wyjtkiem jest korzystanie z MySQL w wersji 5 lub nowszej w trybie penej zgodnoci ze standardem SQL, gdy wtedy w przypadku instrukcji INSERT i UPDATE zgaszany jest bd. Atrybutu AUTO_INCREMENT mona uy do co najwyej jednej kolumny cakowitoliczbowej w tabeli. Atrybut UNSIGNED moe by czony z dowolnym liczbowym typem danych. Uycie tego atrybutu powoduje, e do kolumny nie mona wpisywa liczb ujemnych. Atrybut ZEROFILL nakazuje wypenienie kolumny od lewej

Rozdzia 3. Typy danych

23

strony zerami podczas wywietlania jej wartoci. O liczbie tych zer decyduje szeroko wywietlania danej kolumny.

BIGINT
BIGINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Najwikszy z typw cakowitoliczbowych, pozwalajcy zapisywa liczby od 9 223 372 036 854 775 808 do 9 223 372 036 854 775 807 (jeli bez znaku, to od 0 do 18 446 744 073 709 551 615). Z uwagi na sposb realizacji dziaa na liczbach tego typu, naley unika operacji na liczbach BIGINT bez znaku wikszych ni 9 223 372 036 854 775 807, gdy moe to zaowocowa nieprawidowymi wynikami.

BIT
BIT[(bity)]

Rozmiar w pamici w przyblieniu bity bitw+7 lub 8 bitw Opis W wersjach MySQL 5.0.3 i starszych, pola typu BIT dziaay tak samo, jak TINYINT(1). Omawiany typ pola pozwala przechowywa ustalon liczb bitw. Jeli podana zostanie wielko bitw mniejsza od dozwolonej, MySQL wypeni zerami bity od lewej strony.
24 | MySQL. Leksykon kieszonkowy

DEC
Synonim typu DECIMAL.

DECIMAL
DECIMAL[(dokadno, [skala])] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici rnie Opis Pozwala zapisywa liczby zmiennoprzecinkowe w sytuacjach, kiedy istotna jest dokadno na przykad przy operowaniu kwotami pienidzy. Stosujc typ DECIMAL, trzeba poda dwa jego parametry, dokadno i skal. Dokadno to liczba znaczcych cyfr, za skala to liczba znaczcych cyfr po kropce dziesitnej. Przykadowo, kolumna SALDO typu DECIMAL(9,2) pozwoliaby zapisywa liczby dziewiciocyfrowe, przy czym na prawo od kropki dziesitnej mogyby by dwie cyfry. Zakres dopuszczalnych liczb to w takiej sytuacji od 9 999 999,99 do 9 999 999,99. Jeli podana zostanie liczba zawierajca wicej cyfr po przecinku, ni przewiduje to definicja, liczba zostanie zaokrglona. Wartoci spoza zakresu DECIMAL s obcinane tak, aby si w nim zmieciy. W wersjach MySQL starszych ni 5, wartoci DECIMAL nie byy zapisywane jako liczby zmiennoprzecinkowe, lecz jako acuchy znakw. Na kad cyfr zuywany by jeden znak w przypadku skali wikszej od 0, poza tym jeden dodatkowy znak zuywany jest w przypadku liczb ujemnych. Jeli skala wynosi 0, liczby nie maj czci uamkowej. SQL zgodnie z norm ANSI pozwala pomija dokadno i (lub) skal. Jeli brak dokadnoci, przyjmowane jest ustawienie

Rozdzia 3. Typy danych

25

domylne charakterystyczne dla implementacji. Jeli brak skali, przyjmowane jest zero. W MySQL domylna warto dokadnoci to 10.

DOUBLE
DOUBLE[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Liczba zmiennoprzecinkowa podwjnej precyzji. Ten typ danych pozwala zapisywa due wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 1,7976931348623157E+308 do 2,2250738585072014E308, 0 oraz wartoci dodatnie od 2,2250738585072014E308 do 1,7976931348623157E+308.

DOUBLE PRECISION
Synonim DOUBLE.

FLOAT
FLOAT[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 4 bajty

26

MySQL. Leksykon kieszonkowy

Opis Liczba zmiennoprzecinkowa pojedynczej precyzji. Ten typ danych pozwala zapisywa mae wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 3,402823466E+38 do 1,175494351E38, 0 oraz wartoci dodatnie od 1,175494351E38 do 3,402823466E+38.

INT
INT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 4 bajty Opis Podstawowy rodzaj liczb cakowitych od 2 147 483 648 do 2 147 483 647 (lub od 0 do 4 294 967 295 w przypadku liczb bez znaku).

INTEGER
Synonim INT.

MEDIUMINT
MEDIUMINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

27

Opis Liczby cakowite od 8 388 608 do 8 388 607 (lub od 0 do 16 777 215 w przypadku liczb bez znaku).

NUMERIC
Synonim DECIMAL.

REAL
Synonim DOUBLE.

SMALLINT
SMALLINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 2 bajty Opis Liczby cakowite z zakresu od 32 768 do 32 767 (od 0 do 65 535 w przypadku liczb bez znaku).

TINYINT
TINYINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 1 bajt

28

MySQL. Leksykon kieszonkowy

Opis Liczby cakowite od 128 do 127 (od 0 do 255 w przypadku liczb bez znaku).

acuchy
MySQL obsuguje dwie kategorie acuchw: acuchy tekstowe oraz acuchy binarne. Obie kategorie maj swoje specyficzne typy do obsugi rnych wielkoci pl i rnych sposobw porwnywania wartoci. W zalenoci od sposobu porwnywania, mona uwzgldnia bd nie wielko liter, mona te porwnywa dane binarnie (bajt po bajcie). Kiedy nazwa typu tekstowego (jak CHAR, VARCHAR i inne) zostanie oznaczona sowem kluczowym BINARY, kolumna pozostaje kolumn tekstow, ale dane s porwnywane ze sob binarnie.

BINARY
BINARY(rozmiar)

Rozmiar wedug rozmiar, w zakresie od 0 do 255 Rozmiar w pamici


rozmiar bajtw

Opis Typ danych BINARY to binarny odpowiednik typu CHAR. Podstawowa rnica midzy tymi dwoma typami polega na tym, e pole typu BINARY zawiera dane binarne, wielko tych danych jest mierzona nie w znakach, lecz w bajtach. acuchy zawierajce

Rozdzia 3. Typy danych

29

mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie znakami 0x00 (wersja MySQL 5.0.5 i nowsze) lub spacjami (wersje starsze).

BLOB
Binarny odpowiednik typu TEXT.

CHAR
CHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar wedug rozmiar, do 255 Rozmiar w pamici zaleny od rozmiaru i od uytego zestawu znakw Opis Pole tekstowe ustalonej dugoci. acuchy zawierajce mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie spacjami. Podczas pobierania danych z bazy te dodatkowe spacje s usuwane. Pola CHAR(0) zostay zachowane w celu zapewnienia zgodnoci ze starymi systemami, w ktrych w kolumnach nie s zapisywane adne wartoci.

CHARACTER
Synonim CHAR.

30

MySQL. Leksykon kieszonkowy

CHARACTER VARYING
Synonim VARCHAR.

LONGBLOB
Binarny odpowiednik LONGTEXT.

LONGTEXT
LONGTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 4 294 295 Rozmiar w pamici Dugo wartoci+4 bajty Opis Typ pozwala zapisywa due wartoci tekstowe. Teoretyczne ograniczenie rozmiaru tekstu to ponad 4 GB, ale praktycznymi ograniczeniami s ograniczenia protokou komunikacyjnego MySQL oraz ilo pamici przeznaczonej na komunikacj na serwerze i na stacji klienckiej.

MEDIUMBLOB
Binarna posta MEDIUMTEXT.

MEDIUMTEXT
MEDIUMTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozdzia 3. Typy danych

31

Rozmiar 0 do 16 777 215 Rozmiar w pamici Dugo wartoci+3 bajty Opis Typ pozwala zapisywa redniej wielkoci wartoci tekstowe.

NCHAR
Synonim CHAR.

NATIONAL CHAR
Synonim CHAR.

NATIONAL CHARACTER
Synonim CHAR.

NATIONAL VARCHAR
Synonim VARCHAR.

TEXT
TEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 65 535

32

MySQL. Leksykon kieszonkowy

Rozmiar w pamici Dugo wartoci tekstowej+2 bajty Opis Typ pozwala zapisywa typowe wartoci tekstowe.

TINYBLOB
Binarny odpowiednik TINYTEXT.

TINYTEXT
TINYTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 255 Rozmiar w pamici Dugo wartoci tekstowej+1 bajt Opis Pozwala zapisywa krtkie dane tekstowe.

VARBINARY
VARBINARY(rozmiar)

Rozmiar Wedug parametru rozmiar

Rozdzia 3. Typy danych

33

Rozmiar w pamici
rozmiar bajtw

Opis Jest to binarna odmiana typu VARCHAR. Podstawowa rnica polega na tym, e zapisywane s dane binarne, a rozmiar pola mierzony jest w bajtach, nie w znakach. Wielkoci typu VARBINARY, w przeciwiestwie do wartoci typu BINARY, nie s niczym dopeniane.

VARCHAR
VARCHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar Wskazana przez rozmiar warto z zakresu do 65 532 (od 1 do 255 w wersjach wczeniejszych ni MySQL 5); rozmiar wskazuje rzeczywist wielko kolumny i jest ograniczony przez dopuszczaln wielko wiersza w znakach; to, ile miejsca faktycznie bdzie potrzebne, zaley zatem od zestawu znakw uytego w danej kolumnie Rozmiar w pamici Zaley od liczby znakw wskazanych jako rozmiar oraz od liczby bajtw potrzebnych do zapisu poszczeglnych znakw w uytym mechanizmie kodowania znakw Opis Pozwala zapisywa wartoci tekstowe zmiennej dugoci. W wersjach poprzedzajcych MySQL 5 z wartoci VARCHAR usuwane s spacje kocowe; wersja MySQL 5 i nowsze standardowo nie usuwaj spacji kocowych.

34

MySQL. Leksykon kieszonkowy

Daty
Typy datowe MySQL s wyjtkowo elastycznym narzdziem, pozwalajcym zapisywa wszelki informacje dzienne. MySQL jest bardzo tolerancyjny i zakada, e to aplikacja, a nie baza danych, ma sprawdza poprawno tych danych. MySQL sprawdza jedynie, czy miesic nie wykracza poza zakres 0 12 i czy dzie nie wykracza poza zakres 0 31. Wobec tego z punktu widzenia MySQL 31 lutego 2001 roku jest poprawn dat. Bardziej przydatn wartoci jest data 0 lutego 2001 roku; cyfra zero moe zastpowa t cz daty, ktrej dokadnie nie znamy. MySQL 5 jest jednak ju baz danych nieco bardziej restrykcyjn co do wartoci, jakie mona zapisywa w polach datowych. Wprawdzie MySQL dopuszcza do du swobod formatw wejciowych dat, to naley stara si w aplikacjach daty formatowa zgodnie z formatem wewntrznym MySQL w celu uniknicia nieporozumie. MySQL zawsze zakada, e rok jest pierwszym elementem po lewej stronie daty. Jeli w operacji SQL podana zostanie nieprawidowa warto daty, MySQL wstawi w jej miejsce zero. MySQL w kontekcie liczb cakowitych automatycznie konwertuje daty i czas na liczby cakowite.

DATE
DATE

Format
YYYY-MM-DD (2001-01-01)

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

35

Opis Data kalendarza gregoriaskiego z zakresu od 1 stycznia 1000 roku ('1000-01-01') do 31 grudnia 9999 roku ('9999-12-31').

DATETIME
DATETIME

Format
YYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 8 bajtw Opis Zapisuje czas z zakresu od 00:00:00 1 stycznia 1000 roku ('100001-01 00:00:00') do 23:59:59 31 grudnia 9999 ('9999-12-31 23:59:59') wedug kalendarza gregoriaskiego.

TIME
TIME

Format
hh:mm:ss (06:00:00)

Rozmiar w pamici 3 bajty Opis Zapisuje czas od pnocy ('00:00:00') do sekundy przed pnoc ('23:59:59').
36 | MySQL. Leksykon kieszonkowy

TIMESTAMP
TIMESTAMP[(rozmiar_wywietlania)]

Format
YYYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 4 bajty Opis Zapis chwili z dokadnoci do sekundy od pnocy 1 stycznia 1970 roku do minuty przed pnoc 31 grudnia 2037 roku. Podstawowym zastosowaniem tego typu jest rejestracja modyfikacji tabel. Przy wstawianiu do takiej kolumny wartoci NULL wstawiane s aktualna data i czas. W przypadku modyfikowania jakiejkolwiek wartoci w wierszu z kolumn TIMESTAMP pierwsza kolumna tego typu zostanie zaktualizowana biec dat i czasem. Format danych TIMESTAMP znany z wczeniejszych wersji MySQL, do 4.1 wcznie, w wersji 5.1 nie jest ju obsugiwany.

YEAR
YEAR[(rozmiar)]

Format
YYYY (2001)

Rozmiar w pamici 1 bajt

Rozdzia 3. Typy danych

37

Opis Pozwala zapisa rok z kalendarza gregoriaskiego. Parametr rozmiar umoliwia zapisywanie roku dwu- lub czterocyfrowo. Zakres YEAR(4) rozciga si od 1900 do 2155, dla YEAR(2) od 1970 do 2069. Domylnie przyjmowane jest YEAR(4).

Typy zoone
Zoone typy danych MySQL, ENUM i SET, s po prostu specjalnymi przypadkami typw acuchowych. Opisujemy je osobno, gdy s bardziej zoone pojciowo i stanowi wprowadzenie do typw danych SQL3, ktre by moe MySQL bdzie obsugiwa w przyszoci.

ENUM
ENUM(warto1, warto2, ...)

Rozmiar w pamici 1 255 elementw: 1 bajt 255 65 535 elementw: 2 bajty Opis Typ danych ENUM pozwala zapisywa jeden z wielu zdefiniowanych wczeniej acuchw. Przy tworzeniu kolumny typu ENUM podaje si list dopuszczalnych jej wartoci. Dane mog by do tej kolumny wstawiane i aktualizowane jedynie z tej listy; kada prba wstawienia wartoci spoza niej powoduje wstawienie pustego acucha.

38

MySQL. Leksykon kieszonkowy

Do listy dopuszczalnych wartoci mona si odwoywa przez indeks, przy czym pierwszy element otrzymuje numer 0. Na przykad:
SELECT COLID FROM TBL WHERE COLENUM = 0;

Jeli COLID jest kolumn z kluczem gwnym, a COLENUM kolumn typu ENUM, taka instrukcja SQL spowoduje pobranie kluczy gwnych wszystkich wierszy, dla ktrych COLENUM jest pierwsz wartoci z listy. Analogicznie, sortowanie wzgldem kolumn ENUM powoduje sortowanie wedug indeksu, nie acucha. Najwiksza moliwa liczba elementw kolumny ENUM to 65 535.

SET
SET(warto1, warto2, ...)

Rozmiar w pamici 1 8 elementw: 1 bajt 9 16 elementw: 2 bajty 17 24 elementy: 3 bajty 25 32 elementy: 4 bajty 33 64 elementy: 8 bajtw Opis Lista wartoci wybieranych z okrelonego wczeniej zbioru. Pole moe zawiera dowoln liczb acuchw wskazanych w instrukcji SET, szczeglnie moe nie zawiera adnej takiej wartoci. SET jest podobny do ENUM, ale kade pole moe zawiera wicej ni jedn z podanych wartoci. Dane typu SET nie s jednak zapisywane za pomoc indeksw, ale w zoonej mapie bitowej. Jeli dany jest zbir SET, zawierajcy elementy: Mandarynka, Pomidor,
Rozdzia 3. Typy danych | 39

Gruszka i Banan, kady z tych elementw jest reprezentowany jako

wczony bit w bajcie, jak to pokazano w tabeli 3.1.


Tabela 3.1. Reprezentacja zbioru elementw w MySQL
Element
Mandarynka Pomidor Gruszka Banan

Warto dziesitna
1 2 4 8

Zapis bitowy
0001 0010 0100 1000

W powyszym przykadzie zapisanie jednoczenie wartoci Mandarynka i Gruszka wymaga uycia wartoci 5 (bitowo 0101). W kolumnie SET mona zapisa najwyej 64 wartoci. Wprawdzie t sam warto mona w jednym wyraeniu SQL wpisa wielokrotnie, ale w bazie danych warto ta zostanie zapisana raz.

40

MySQL. Leksykon kieszonkowy

4. SQL .............................................................................................. 41
Rozrnianie wielkoci liter Literay Identyfikatory Komentarze Instrukcje Zasady dotyczce transakcji 41 42 43 45 46 106

5. Operatory .................................................................................. 108


Priorytety operatorw Operatory arytmetyczne Operatory porwnania Operatory logiczne 108 109 109 111

6. Funkcje .......................................................................................113
Funkcje agregujce Funkcje oglnego przeznaczenia 113 115

7. Rodzaje tabel ............................................................................ 137 8. Procedury i funkcje skadowane .............................................. 138


Parametry Logika Kursory Obsuga zdarze i warunki 138 139 143 144

9. Trygery ...................................................................................... 146 Skorowidz ................................................................................. 147

MySQL. Leksykon kieszonkowy

Rozdzia 3. Typy danych


We wszystkich typach danych nawiasami kwadratowymi ([]) oznaczane s fragmenty opcjonalne. Poniszy przykad pokazuje sposb prezentacji typu BIGINT, opisanego dalej w tym rozdziale:
BIGINT[(wielko_pokazywana)]

Oznacza to, e sowo BIGINT moe wystpi samodzielnie lub z pokazywan wartoci. Uycie kursywy wskazuje, e nie naley wpisywa sowa wielko_pokazywana, ale poda wasn warto. Oto przykady uycia:
BIGINT BIGINT(20)

Poza typem BIGINT take wiele innych typw danych MySQL uwzgldnia deklaracj rozmiaru wywietlania. Jeli nie powiedziano inaczej, musi to by liczba od 1 do 255. W wersjach MySQL starszych ni wersja 5, baza danych w niektrych przypadkach zmieniaa podany typ kolumny, nie informujc o tym uytkownika. Obecnie takie podmiany nie maj ju miejsca.
VARCHAR -> CHAR

Jeli podana kolumna VARCHAR ma rozmiar mniejszy od czterech znakw, jest przeksztacana w kolumn CHAR.
CHAR -> VARCHAR

Jeli tabela zawiera co najmniej jedn kolumn o zmiennej dugoci, wszystkie kolumny typu CHAR dusze ni trzy znaki s zamieniane na VARCHAR.

Rozmiar wywietlania TIMESTAMP Rozmiar wywietlania pl TIMESTAMP musi by zawsze wielkoci parzyst od 2 do 14. Rozmiar rwny 0 lub wikszy od 14 powoduje przyjcie 14. Wszelkie liczby nieparzyste s zamieniane na nastpn liczb parzyst.

22

MySQL. Leksykon kieszonkowy

Liczby
MySQL obsuguje liczbowe typy danych zgodne z ANSI SQL 2. Typy te dzielimy na cakowitoliczbowe, dziesitne i zmiennoprzecinkowe. W ramach tych grup dzielimy typy dalej, wedug zajmowanej przez nie pamici. W przypadku typw liczbowych mona poda rozmiar wywietlania, ktry wpywa na sposb pokazywania przez MySQL wynikw. Rozmiar ten nie ma adnego zwizku z wielkoci pamici zajmowanej przez dany typ. Dodatkowo w przypadku liczb zmiennoprzecinkowych i dziesitnych mona poda liczb cyfr znajdujcych si za kropk dziesitn. Wtedy liczba cyfr powinna nalee do zakresu od 0 do 30, czyli by co najmniej o dwa mniejsza od rozmiaru wywietlania. Jeli warunek ten nie zostanie dotrzymany, MySQL automatycznie zmieni liczb cyfr tak, aby bya mniejsza o dwa od rozmiaru wywietlania. Przykadowo, MySQL automatycznie zmieni FLOAT(6,5) na FLOAT(7,5). Prba wstawienia do kolumny wartoci przekraczajcej dopuszczalny zakres tej kolumny powoduje obcicie tej wartoci do najmniejszej (dla liczb ujemnych) lub najwikszej (dla liczb dodatnich) wartoci dla danej kolumny dopuszczalnej. Jeli takie obcicie jest robione podczas wykonywania instrukcji ALTER TABLE, LOAD DATA INFILE, UPDATE lub wielowierszowej instrukcji INSERT, MySQL pokazuje ostrzeenie. Wyjtkiem jest korzystanie z MySQL w wersji 5 lub nowszej w trybie penej zgodnoci ze standardem SQL, gdy wtedy w przypadku instrukcji INSERT i UPDATE zgaszany jest bd. Atrybutu AUTO_INCREMENT mona uy do co najwyej jednej kolumny cakowitoliczbowej w tabeli. Atrybut UNSIGNED moe by czony z dowolnym liczbowym typem danych. Uycie tego atrybutu powoduje, e do kolumny nie mona wpisywa liczb ujemnych. Atrybut ZEROFILL nakazuje wypenienie kolumny od lewej

Rozdzia 3. Typy danych

23

strony zerami podczas wywietlania jej wartoci. O liczbie tych zer decyduje szeroko wywietlania danej kolumny.

BIGINT
BIGINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Najwikszy z typw cakowitoliczbowych, pozwalajcy zapisywa liczby od 9 223 372 036 854 775 808 do 9 223 372 036 854 775 807 (jeli bez znaku, to od 0 do 18 446 744 073 709 551 615). Z uwagi na sposb realizacji dziaa na liczbach tego typu, naley unika operacji na liczbach BIGINT bez znaku wikszych ni 9 223 372 036 854 775 807, gdy moe to zaowocowa nieprawidowymi wynikami.

BIT
BIT[(bity)]

Rozmiar w pamici w przyblieniu bity bitw+7 lub 8 bitw Opis W wersjach MySQL 5.0.3 i starszych, pola typu BIT dziaay tak samo, jak TINYINT(1). Omawiany typ pola pozwala przechowywa ustalon liczb bitw. Jeli podana zostanie wielko bitw mniejsza od dozwolonej, MySQL wypeni zerami bity od lewej strony.
24 | MySQL. Leksykon kieszonkowy

DEC
Synonim typu DECIMAL.

DECIMAL
DECIMAL[(dokadno, [skala])] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici rnie Opis Pozwala zapisywa liczby zmiennoprzecinkowe w sytuacjach, kiedy istotna jest dokadno na przykad przy operowaniu kwotami pienidzy. Stosujc typ DECIMAL, trzeba poda dwa jego parametry, dokadno i skal. Dokadno to liczba znaczcych cyfr, za skala to liczba znaczcych cyfr po kropce dziesitnej. Przykadowo, kolumna SALDO typu DECIMAL(9,2) pozwoliaby zapisywa liczby dziewiciocyfrowe, przy czym na prawo od kropki dziesitnej mogyby by dwie cyfry. Zakres dopuszczalnych liczb to w takiej sytuacji od 9 999 999,99 do 9 999 999,99. Jeli podana zostanie liczba zawierajca wicej cyfr po przecinku, ni przewiduje to definicja, liczba zostanie zaokrglona. Wartoci spoza zakresu DECIMAL s obcinane tak, aby si w nim zmieciy. W wersjach MySQL starszych ni 5, wartoci DECIMAL nie byy zapisywane jako liczby zmiennoprzecinkowe, lecz jako acuchy znakw. Na kad cyfr zuywany by jeden znak w przypadku skali wikszej od 0, poza tym jeden dodatkowy znak zuywany jest w przypadku liczb ujemnych. Jeli skala wynosi 0, liczby nie maj czci uamkowej. SQL zgodnie z norm ANSI pozwala pomija dokadno i (lub) skal. Jeli brak dokadnoci, przyjmowane jest ustawienie

Rozdzia 3. Typy danych

25

domylne charakterystyczne dla implementacji. Jeli brak skali, przyjmowane jest zero. W MySQL domylna warto dokadnoci to 10.

DOUBLE
DOUBLE[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Liczba zmiennoprzecinkowa podwjnej precyzji. Ten typ danych pozwala zapisywa due wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 1,7976931348623157E+308 do 2,2250738585072014E308, 0 oraz wartoci dodatnie od 2,2250738585072014E308 do 1,7976931348623157E+308.

DOUBLE PRECISION
Synonim DOUBLE.

FLOAT
FLOAT[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 4 bajty

26

MySQL. Leksykon kieszonkowy

Opis Liczba zmiennoprzecinkowa pojedynczej precyzji. Ten typ danych pozwala zapisywa mae wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 3,402823466E+38 do 1,175494351E38, 0 oraz wartoci dodatnie od 1,175494351E38 do 3,402823466E+38.

INT
INT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 4 bajty Opis Podstawowy rodzaj liczb cakowitych od 2 147 483 648 do 2 147 483 647 (lub od 0 do 4 294 967 295 w przypadku liczb bez znaku).

INTEGER
Synonim INT.

MEDIUMINT
MEDIUMINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

27

Opis Liczby cakowite od 8 388 608 do 8 388 607 (lub od 0 do 16 777 215 w przypadku liczb bez znaku).

NUMERIC
Synonim DECIMAL.

REAL
Synonim DOUBLE.

SMALLINT
SMALLINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 2 bajty Opis Liczby cakowite z zakresu od 32 768 do 32 767 (od 0 do 65 535 w przypadku liczb bez znaku).

TINYINT
TINYINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 1 bajt

28

MySQL. Leksykon kieszonkowy

Opis Liczby cakowite od 128 do 127 (od 0 do 255 w przypadku liczb bez znaku).

acuchy
MySQL obsuguje dwie kategorie acuchw: acuchy tekstowe oraz acuchy binarne. Obie kategorie maj swoje specyficzne typy do obsugi rnych wielkoci pl i rnych sposobw porwnywania wartoci. W zalenoci od sposobu porwnywania, mona uwzgldnia bd nie wielko liter, mona te porwnywa dane binarnie (bajt po bajcie). Kiedy nazwa typu tekstowego (jak CHAR, VARCHAR i inne) zostanie oznaczona sowem kluczowym BINARY, kolumna pozostaje kolumn tekstow, ale dane s porwnywane ze sob binarnie.

BINARY
BINARY(rozmiar)

Rozmiar wedug rozmiar, w zakresie od 0 do 255 Rozmiar w pamici


rozmiar bajtw

Opis Typ danych BINARY to binarny odpowiednik typu CHAR. Podstawowa rnica midzy tymi dwoma typami polega na tym, e pole typu BINARY zawiera dane binarne, wielko tych danych jest mierzona nie w znakach, lecz w bajtach. acuchy zawierajce

Rozdzia 3. Typy danych

29

mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie znakami 0x00 (wersja MySQL 5.0.5 i nowsze) lub spacjami (wersje starsze).

BLOB
Binarny odpowiednik typu TEXT.

CHAR
CHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar wedug rozmiar, do 255 Rozmiar w pamici zaleny od rozmiaru i od uytego zestawu znakw Opis Pole tekstowe ustalonej dugoci. acuchy zawierajce mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie spacjami. Podczas pobierania danych z bazy te dodatkowe spacje s usuwane. Pola CHAR(0) zostay zachowane w celu zapewnienia zgodnoci ze starymi systemami, w ktrych w kolumnach nie s zapisywane adne wartoci.

CHARACTER
Synonim CHAR.

30

MySQL. Leksykon kieszonkowy

CHARACTER VARYING
Synonim VARCHAR.

LONGBLOB
Binarny odpowiednik LONGTEXT.

LONGTEXT
LONGTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 4 294 295 Rozmiar w pamici Dugo wartoci+4 bajty Opis Typ pozwala zapisywa due wartoci tekstowe. Teoretyczne ograniczenie rozmiaru tekstu to ponad 4 GB, ale praktycznymi ograniczeniami s ograniczenia protokou komunikacyjnego MySQL oraz ilo pamici przeznaczonej na komunikacj na serwerze i na stacji klienckiej.

MEDIUMBLOB
Binarna posta MEDIUMTEXT.

MEDIUMTEXT
MEDIUMTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozdzia 3. Typy danych

31

Rozmiar 0 do 16 777 215 Rozmiar w pamici Dugo wartoci+3 bajty Opis Typ pozwala zapisywa redniej wielkoci wartoci tekstowe.

NCHAR
Synonim CHAR.

NATIONAL CHAR
Synonim CHAR.

NATIONAL CHARACTER
Synonim CHAR.

NATIONAL VARCHAR
Synonim VARCHAR.

TEXT
TEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 65 535

32

MySQL. Leksykon kieszonkowy

Rozmiar w pamici Dugo wartoci tekstowej+2 bajty Opis Typ pozwala zapisywa typowe wartoci tekstowe.

TINYBLOB
Binarny odpowiednik TINYTEXT.

TINYTEXT
TINYTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 255 Rozmiar w pamici Dugo wartoci tekstowej+1 bajt Opis Pozwala zapisywa krtkie dane tekstowe.

VARBINARY
VARBINARY(rozmiar)

Rozmiar Wedug parametru rozmiar

Rozdzia 3. Typy danych

33

Rozmiar w pamici
rozmiar bajtw

Opis Jest to binarna odmiana typu VARCHAR. Podstawowa rnica polega na tym, e zapisywane s dane binarne, a rozmiar pola mierzony jest w bajtach, nie w znakach. Wielkoci typu VARBINARY, w przeciwiestwie do wartoci typu BINARY, nie s niczym dopeniane.

VARCHAR
VARCHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar Wskazana przez rozmiar warto z zakresu do 65 532 (od 1 do 255 w wersjach wczeniejszych ni MySQL 5); rozmiar wskazuje rzeczywist wielko kolumny i jest ograniczony przez dopuszczaln wielko wiersza w znakach; to, ile miejsca faktycznie bdzie potrzebne, zaley zatem od zestawu znakw uytego w danej kolumnie Rozmiar w pamici Zaley od liczby znakw wskazanych jako rozmiar oraz od liczby bajtw potrzebnych do zapisu poszczeglnych znakw w uytym mechanizmie kodowania znakw Opis Pozwala zapisywa wartoci tekstowe zmiennej dugoci. W wersjach poprzedzajcych MySQL 5 z wartoci VARCHAR usuwane s spacje kocowe; wersja MySQL 5 i nowsze standardowo nie usuwaj spacji kocowych.

34

MySQL. Leksykon kieszonkowy

Daty
Typy datowe MySQL s wyjtkowo elastycznym narzdziem, pozwalajcym zapisywa wszelki informacje dzienne. MySQL jest bardzo tolerancyjny i zakada, e to aplikacja, a nie baza danych, ma sprawdza poprawno tych danych. MySQL sprawdza jedynie, czy miesic nie wykracza poza zakres 0 12 i czy dzie nie wykracza poza zakres 0 31. Wobec tego z punktu widzenia MySQL 31 lutego 2001 roku jest poprawn dat. Bardziej przydatn wartoci jest data 0 lutego 2001 roku; cyfra zero moe zastpowa t cz daty, ktrej dokadnie nie znamy. MySQL 5 jest jednak ju baz danych nieco bardziej restrykcyjn co do wartoci, jakie mona zapisywa w polach datowych. Wprawdzie MySQL dopuszcza do du swobod formatw wejciowych dat, to naley stara si w aplikacjach daty formatowa zgodnie z formatem wewntrznym MySQL w celu uniknicia nieporozumie. MySQL zawsze zakada, e rok jest pierwszym elementem po lewej stronie daty. Jeli w operacji SQL podana zostanie nieprawidowa warto daty, MySQL wstawi w jej miejsce zero. MySQL w kontekcie liczb cakowitych automatycznie konwertuje daty i czas na liczby cakowite.

DATE
DATE

Format
YYYY-MM-DD (2001-01-01)

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

35

Opis Data kalendarza gregoriaskiego z zakresu od 1 stycznia 1000 roku ('1000-01-01') do 31 grudnia 9999 roku ('9999-12-31').

DATETIME
DATETIME

Format
YYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 8 bajtw Opis Zapisuje czas z zakresu od 00:00:00 1 stycznia 1000 roku ('100001-01 00:00:00') do 23:59:59 31 grudnia 9999 ('9999-12-31 23:59:59') wedug kalendarza gregoriaskiego.

TIME
TIME

Format
hh:mm:ss (06:00:00)

Rozmiar w pamici 3 bajty Opis Zapisuje czas od pnocy ('00:00:00') do sekundy przed pnoc ('23:59:59').
36 | MySQL. Leksykon kieszonkowy

TIMESTAMP
TIMESTAMP[(rozmiar_wywietlania)]

Format
YYYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 4 bajty Opis Zapis chwili z dokadnoci do sekundy od pnocy 1 stycznia 1970 roku do minuty przed pnoc 31 grudnia 2037 roku. Podstawowym zastosowaniem tego typu jest rejestracja modyfikacji tabel. Przy wstawianiu do takiej kolumny wartoci NULL wstawiane s aktualna data i czas. W przypadku modyfikowania jakiejkolwiek wartoci w wierszu z kolumn TIMESTAMP pierwsza kolumna tego typu zostanie zaktualizowana biec dat i czasem. Format danych TIMESTAMP znany z wczeniejszych wersji MySQL, do 4.1 wcznie, w wersji 5.1 nie jest ju obsugiwany.

YEAR
YEAR[(rozmiar)]

Format
YYYY (2001)

Rozmiar w pamici 1 bajt

Rozdzia 3. Typy danych

37

Opis Pozwala zapisa rok z kalendarza gregoriaskiego. Parametr rozmiar umoliwia zapisywanie roku dwu- lub czterocyfrowo. Zakres YEAR(4) rozciga si od 1900 do 2155, dla YEAR(2) od 1970 do 2069. Domylnie przyjmowane jest YEAR(4).

Typy zoone
Zoone typy danych MySQL, ENUM i SET, s po prostu specjalnymi przypadkami typw acuchowych. Opisujemy je osobno, gdy s bardziej zoone pojciowo i stanowi wprowadzenie do typw danych SQL3, ktre by moe MySQL bdzie obsugiwa w przyszoci.

ENUM
ENUM(warto1, warto2, ...)

Rozmiar w pamici 1 255 elementw: 1 bajt 255 65 535 elementw: 2 bajty Opis Typ danych ENUM pozwala zapisywa jeden z wielu zdefiniowanych wczeniej acuchw. Przy tworzeniu kolumny typu ENUM podaje si list dopuszczalnych jej wartoci. Dane mog by do tej kolumny wstawiane i aktualizowane jedynie z tej listy; kada prba wstawienia wartoci spoza niej powoduje wstawienie pustego acucha.

38

MySQL. Leksykon kieszonkowy

Do listy dopuszczalnych wartoci mona si odwoywa przez indeks, przy czym pierwszy element otrzymuje numer 0. Na przykad:
SELECT COLID FROM TBL WHERE COLENUM = 0;

Jeli COLID jest kolumn z kluczem gwnym, a COLENUM kolumn typu ENUM, taka instrukcja SQL spowoduje pobranie kluczy gwnych wszystkich wierszy, dla ktrych COLENUM jest pierwsz wartoci z listy. Analogicznie, sortowanie wzgldem kolumn ENUM powoduje sortowanie wedug indeksu, nie acucha. Najwiksza moliwa liczba elementw kolumny ENUM to 65 535.

SET
SET(warto1, warto2, ...)

Rozmiar w pamici 1 8 elementw: 1 bajt 9 16 elementw: 2 bajty 17 24 elementy: 3 bajty 25 32 elementy: 4 bajty 33 64 elementy: 8 bajtw Opis Lista wartoci wybieranych z okrelonego wczeniej zbioru. Pole moe zawiera dowoln liczb acuchw wskazanych w instrukcji SET, szczeglnie moe nie zawiera adnej takiej wartoci. SET jest podobny do ENUM, ale kade pole moe zawiera wicej ni jedn z podanych wartoci. Dane typu SET nie s jednak zapisywane za pomoc indeksw, ale w zoonej mapie bitowej. Jeli dany jest zbir SET, zawierajcy elementy: Mandarynka, Pomidor,
Rozdzia 3. Typy danych | 39

Gruszka i Banan, kady z tych elementw jest reprezentowany jako

wczony bit w bajcie, jak to pokazano w tabeli 3.1.


Tabela 3.1. Reprezentacja zbioru elementw w MySQL
Element
Mandarynka Pomidor Gruszka Banan

Warto dziesitna
1 2 4 8

Zapis bitowy
0001 0010 0100 1000

W powyszym przykadzie zapisanie jednoczenie wartoci Mandarynka i Gruszka wymaga uycia wartoci 5 (bitowo 0101). W kolumnie SET mona zapisa najwyej 64 wartoci. Wprawdzie t sam warto mona w jednym wyraeniu SQL wpisa wielokrotnie, ale w bazie danych warto ta zostanie zapisana raz.

40

MySQL. Leksykon kieszonkowy

4. SQL .............................................................................................. 41
Rozrnianie wielkoci liter Literay Identyfikatory Komentarze Instrukcje Zasady dotyczce transakcji 41 42 43 45 46 106

5. Operatory .................................................................................. 108


Priorytety operatorw Operatory arytmetyczne Operatory porwnania Operatory logiczne 108 109 109 111

6. Funkcje .......................................................................................113
Funkcje agregujce Funkcje oglnego przeznaczenia 113 115

7. Rodzaje tabel ............................................................................ 137 8. Procedury i funkcje skadowane .............................................. 138


Parametry Logika Kursory Obsuga zdarze i warunki 138 139 143 144

9. Trygery ...................................................................................... 146 Skorowidz ................................................................................. 147

MySQL. Leksykon kieszonkowy

Rozdzia 3. Typy danych


We wszystkich typach danych nawiasami kwadratowymi ([]) oznaczane s fragmenty opcjonalne. Poniszy przykad pokazuje sposb prezentacji typu BIGINT, opisanego dalej w tym rozdziale:
BIGINT[(wielko_pokazywana)]

Oznacza to, e sowo BIGINT moe wystpi samodzielnie lub z pokazywan wartoci. Uycie kursywy wskazuje, e nie naley wpisywa sowa wielko_pokazywana, ale poda wasn warto. Oto przykady uycia:
BIGINT BIGINT(20)

Poza typem BIGINT take wiele innych typw danych MySQL uwzgldnia deklaracj rozmiaru wywietlania. Jeli nie powiedziano inaczej, musi to by liczba od 1 do 255. W wersjach MySQL starszych ni wersja 5, baza danych w niektrych przypadkach zmieniaa podany typ kolumny, nie informujc o tym uytkownika. Obecnie takie podmiany nie maj ju miejsca.
VARCHAR -> CHAR

Jeli podana kolumna VARCHAR ma rozmiar mniejszy od czterech znakw, jest przeksztacana w kolumn CHAR.
CHAR -> VARCHAR

Jeli tabela zawiera co najmniej jedn kolumn o zmiennej dugoci, wszystkie kolumny typu CHAR dusze ni trzy znaki s zamieniane na VARCHAR.

Rozmiar wywietlania TIMESTAMP Rozmiar wywietlania pl TIMESTAMP musi by zawsze wielkoci parzyst od 2 do 14. Rozmiar rwny 0 lub wikszy od 14 powoduje przyjcie 14. Wszelkie liczby nieparzyste s zamieniane na nastpn liczb parzyst.

22

MySQL. Leksykon kieszonkowy

Liczby
MySQL obsuguje liczbowe typy danych zgodne z ANSI SQL 2. Typy te dzielimy na cakowitoliczbowe, dziesitne i zmiennoprzecinkowe. W ramach tych grup dzielimy typy dalej, wedug zajmowanej przez nie pamici. W przypadku typw liczbowych mona poda rozmiar wywietlania, ktry wpywa na sposb pokazywania przez MySQL wynikw. Rozmiar ten nie ma adnego zwizku z wielkoci pamici zajmowanej przez dany typ. Dodatkowo w przypadku liczb zmiennoprzecinkowych i dziesitnych mona poda liczb cyfr znajdujcych si za kropk dziesitn. Wtedy liczba cyfr powinna nalee do zakresu od 0 do 30, czyli by co najmniej o dwa mniejsza od rozmiaru wywietlania. Jeli warunek ten nie zostanie dotrzymany, MySQL automatycznie zmieni liczb cyfr tak, aby bya mniejsza o dwa od rozmiaru wywietlania. Przykadowo, MySQL automatycznie zmieni FLOAT(6,5) na FLOAT(7,5). Prba wstawienia do kolumny wartoci przekraczajcej dopuszczalny zakres tej kolumny powoduje obcicie tej wartoci do najmniejszej (dla liczb ujemnych) lub najwikszej (dla liczb dodatnich) wartoci dla danej kolumny dopuszczalnej. Jeli takie obcicie jest robione podczas wykonywania instrukcji ALTER TABLE, LOAD DATA INFILE, UPDATE lub wielowierszowej instrukcji INSERT, MySQL pokazuje ostrzeenie. Wyjtkiem jest korzystanie z MySQL w wersji 5 lub nowszej w trybie penej zgodnoci ze standardem SQL, gdy wtedy w przypadku instrukcji INSERT i UPDATE zgaszany jest bd. Atrybutu AUTO_INCREMENT mona uy do co najwyej jednej kolumny cakowitoliczbowej w tabeli. Atrybut UNSIGNED moe by czony z dowolnym liczbowym typem danych. Uycie tego atrybutu powoduje, e do kolumny nie mona wpisywa liczb ujemnych. Atrybut ZEROFILL nakazuje wypenienie kolumny od lewej

Rozdzia 3. Typy danych

23

strony zerami podczas wywietlania jej wartoci. O liczbie tych zer decyduje szeroko wywietlania danej kolumny.

BIGINT
BIGINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Najwikszy z typw cakowitoliczbowych, pozwalajcy zapisywa liczby od 9 223 372 036 854 775 808 do 9 223 372 036 854 775 807 (jeli bez znaku, to od 0 do 18 446 744 073 709 551 615). Z uwagi na sposb realizacji dziaa na liczbach tego typu, naley unika operacji na liczbach BIGINT bez znaku wikszych ni 9 223 372 036 854 775 807, gdy moe to zaowocowa nieprawidowymi wynikami.

BIT
BIT[(bity)]

Rozmiar w pamici w przyblieniu bity bitw+7 lub 8 bitw Opis W wersjach MySQL 5.0.3 i starszych, pola typu BIT dziaay tak samo, jak TINYINT(1). Omawiany typ pola pozwala przechowywa ustalon liczb bitw. Jeli podana zostanie wielko bitw mniejsza od dozwolonej, MySQL wypeni zerami bity od lewej strony.
24 | MySQL. Leksykon kieszonkowy

DEC
Synonim typu DECIMAL.

DECIMAL
DECIMAL[(dokadno, [skala])] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici rnie Opis Pozwala zapisywa liczby zmiennoprzecinkowe w sytuacjach, kiedy istotna jest dokadno na przykad przy operowaniu kwotami pienidzy. Stosujc typ DECIMAL, trzeba poda dwa jego parametry, dokadno i skal. Dokadno to liczba znaczcych cyfr, za skala to liczba znaczcych cyfr po kropce dziesitnej. Przykadowo, kolumna SALDO typu DECIMAL(9,2) pozwoliaby zapisywa liczby dziewiciocyfrowe, przy czym na prawo od kropki dziesitnej mogyby by dwie cyfry. Zakres dopuszczalnych liczb to w takiej sytuacji od 9 999 999,99 do 9 999 999,99. Jeli podana zostanie liczba zawierajca wicej cyfr po przecinku, ni przewiduje to definicja, liczba zostanie zaokrglona. Wartoci spoza zakresu DECIMAL s obcinane tak, aby si w nim zmieciy. W wersjach MySQL starszych ni 5, wartoci DECIMAL nie byy zapisywane jako liczby zmiennoprzecinkowe, lecz jako acuchy znakw. Na kad cyfr zuywany by jeden znak w przypadku skali wikszej od 0, poza tym jeden dodatkowy znak zuywany jest w przypadku liczb ujemnych. Jeli skala wynosi 0, liczby nie maj czci uamkowej. SQL zgodnie z norm ANSI pozwala pomija dokadno i (lub) skal. Jeli brak dokadnoci, przyjmowane jest ustawienie

Rozdzia 3. Typy danych

25

domylne charakterystyczne dla implementacji. Jeli brak skali, przyjmowane jest zero. W MySQL domylna warto dokadnoci to 10.

DOUBLE
DOUBLE[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Liczba zmiennoprzecinkowa podwjnej precyzji. Ten typ danych pozwala zapisywa due wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 1,7976931348623157E+308 do 2,2250738585072014E308, 0 oraz wartoci dodatnie od 2,2250738585072014E308 do 1,7976931348623157E+308.

DOUBLE PRECISION
Synonim DOUBLE.

FLOAT
FLOAT[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 4 bajty

26

MySQL. Leksykon kieszonkowy

Opis Liczba zmiennoprzecinkowa pojedynczej precyzji. Ten typ danych pozwala zapisywa mae wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 3,402823466E+38 do 1,175494351E38, 0 oraz wartoci dodatnie od 1,175494351E38 do 3,402823466E+38.

INT
INT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 4 bajty Opis Podstawowy rodzaj liczb cakowitych od 2 147 483 648 do 2 147 483 647 (lub od 0 do 4 294 967 295 w przypadku liczb bez znaku).

INTEGER
Synonim INT.

MEDIUMINT
MEDIUMINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

27

Opis Liczby cakowite od 8 388 608 do 8 388 607 (lub od 0 do 16 777 215 w przypadku liczb bez znaku).

NUMERIC
Synonim DECIMAL.

REAL
Synonim DOUBLE.

SMALLINT
SMALLINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 2 bajty Opis Liczby cakowite z zakresu od 32 768 do 32 767 (od 0 do 65 535 w przypadku liczb bez znaku).

TINYINT
TINYINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 1 bajt

28

MySQL. Leksykon kieszonkowy

Opis Liczby cakowite od 128 do 127 (od 0 do 255 w przypadku liczb bez znaku).

acuchy
MySQL obsuguje dwie kategorie acuchw: acuchy tekstowe oraz acuchy binarne. Obie kategorie maj swoje specyficzne typy do obsugi rnych wielkoci pl i rnych sposobw porwnywania wartoci. W zalenoci od sposobu porwnywania, mona uwzgldnia bd nie wielko liter, mona te porwnywa dane binarnie (bajt po bajcie). Kiedy nazwa typu tekstowego (jak CHAR, VARCHAR i inne) zostanie oznaczona sowem kluczowym BINARY, kolumna pozostaje kolumn tekstow, ale dane s porwnywane ze sob binarnie.

BINARY
BINARY(rozmiar)

Rozmiar wedug rozmiar, w zakresie od 0 do 255 Rozmiar w pamici


rozmiar bajtw

Opis Typ danych BINARY to binarny odpowiednik typu CHAR. Podstawowa rnica midzy tymi dwoma typami polega na tym, e pole typu BINARY zawiera dane binarne, wielko tych danych jest mierzona nie w znakach, lecz w bajtach. acuchy zawierajce

Rozdzia 3. Typy danych

29

mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie znakami 0x00 (wersja MySQL 5.0.5 i nowsze) lub spacjami (wersje starsze).

BLOB
Binarny odpowiednik typu TEXT.

CHAR
CHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar wedug rozmiar, do 255 Rozmiar w pamici zaleny od rozmiaru i od uytego zestawu znakw Opis Pole tekstowe ustalonej dugoci. acuchy zawierajce mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie spacjami. Podczas pobierania danych z bazy te dodatkowe spacje s usuwane. Pola CHAR(0) zostay zachowane w celu zapewnienia zgodnoci ze starymi systemami, w ktrych w kolumnach nie s zapisywane adne wartoci.

CHARACTER
Synonim CHAR.

30

MySQL. Leksykon kieszonkowy

CHARACTER VARYING
Synonim VARCHAR.

LONGBLOB
Binarny odpowiednik LONGTEXT.

LONGTEXT
LONGTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 4 294 295 Rozmiar w pamici Dugo wartoci+4 bajty Opis Typ pozwala zapisywa due wartoci tekstowe. Teoretyczne ograniczenie rozmiaru tekstu to ponad 4 GB, ale praktycznymi ograniczeniami s ograniczenia protokou komunikacyjnego MySQL oraz ilo pamici przeznaczonej na komunikacj na serwerze i na stacji klienckiej.

MEDIUMBLOB
Binarna posta MEDIUMTEXT.

MEDIUMTEXT
MEDIUMTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozdzia 3. Typy danych

31

Rozmiar 0 do 16 777 215 Rozmiar w pamici Dugo wartoci+3 bajty Opis Typ pozwala zapisywa redniej wielkoci wartoci tekstowe.

NCHAR
Synonim CHAR.

NATIONAL CHAR
Synonim CHAR.

NATIONAL CHARACTER
Synonim CHAR.

NATIONAL VARCHAR
Synonim VARCHAR.

TEXT
TEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 65 535

32

MySQL. Leksykon kieszonkowy

Rozmiar w pamici Dugo wartoci tekstowej+2 bajty Opis Typ pozwala zapisywa typowe wartoci tekstowe.

TINYBLOB
Binarny odpowiednik TINYTEXT.

TINYTEXT
TINYTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 255 Rozmiar w pamici Dugo wartoci tekstowej+1 bajt Opis Pozwala zapisywa krtkie dane tekstowe.

VARBINARY
VARBINARY(rozmiar)

Rozmiar Wedug parametru rozmiar

Rozdzia 3. Typy danych

33

Rozmiar w pamici
rozmiar bajtw

Opis Jest to binarna odmiana typu VARCHAR. Podstawowa rnica polega na tym, e zapisywane s dane binarne, a rozmiar pola mierzony jest w bajtach, nie w znakach. Wielkoci typu VARBINARY, w przeciwiestwie do wartoci typu BINARY, nie s niczym dopeniane.

VARCHAR
VARCHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar Wskazana przez rozmiar warto z zakresu do 65 532 (od 1 do 255 w wersjach wczeniejszych ni MySQL 5); rozmiar wskazuje rzeczywist wielko kolumny i jest ograniczony przez dopuszczaln wielko wiersza w znakach; to, ile miejsca faktycznie bdzie potrzebne, zaley zatem od zestawu znakw uytego w danej kolumnie Rozmiar w pamici Zaley od liczby znakw wskazanych jako rozmiar oraz od liczby bajtw potrzebnych do zapisu poszczeglnych znakw w uytym mechanizmie kodowania znakw Opis Pozwala zapisywa wartoci tekstowe zmiennej dugoci. W wersjach poprzedzajcych MySQL 5 z wartoci VARCHAR usuwane s spacje kocowe; wersja MySQL 5 i nowsze standardowo nie usuwaj spacji kocowych.

34

MySQL. Leksykon kieszonkowy

Daty
Typy datowe MySQL s wyjtkowo elastycznym narzdziem, pozwalajcym zapisywa wszelki informacje dzienne. MySQL jest bardzo tolerancyjny i zakada, e to aplikacja, a nie baza danych, ma sprawdza poprawno tych danych. MySQL sprawdza jedynie, czy miesic nie wykracza poza zakres 0 12 i czy dzie nie wykracza poza zakres 0 31. Wobec tego z punktu widzenia MySQL 31 lutego 2001 roku jest poprawn dat. Bardziej przydatn wartoci jest data 0 lutego 2001 roku; cyfra zero moe zastpowa t cz daty, ktrej dokadnie nie znamy. MySQL 5 jest jednak ju baz danych nieco bardziej restrykcyjn co do wartoci, jakie mona zapisywa w polach datowych. Wprawdzie MySQL dopuszcza do du swobod formatw wejciowych dat, to naley stara si w aplikacjach daty formatowa zgodnie z formatem wewntrznym MySQL w celu uniknicia nieporozumie. MySQL zawsze zakada, e rok jest pierwszym elementem po lewej stronie daty. Jeli w operacji SQL podana zostanie nieprawidowa warto daty, MySQL wstawi w jej miejsce zero. MySQL w kontekcie liczb cakowitych automatycznie konwertuje daty i czas na liczby cakowite.

DATE
DATE

Format
YYYY-MM-DD (2001-01-01)

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

35

Opis Data kalendarza gregoriaskiego z zakresu od 1 stycznia 1000 roku ('1000-01-01') do 31 grudnia 9999 roku ('9999-12-31').

DATETIME
DATETIME

Format
YYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 8 bajtw Opis Zapisuje czas z zakresu od 00:00:00 1 stycznia 1000 roku ('100001-01 00:00:00') do 23:59:59 31 grudnia 9999 ('9999-12-31 23:59:59') wedug kalendarza gregoriaskiego.

TIME
TIME

Format
hh:mm:ss (06:00:00)

Rozmiar w pamici 3 bajty Opis Zapisuje czas od pnocy ('00:00:00') do sekundy przed pnoc ('23:59:59').
36 | MySQL. Leksykon kieszonkowy

TIMESTAMP
TIMESTAMP[(rozmiar_wywietlania)]

Format
YYYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 4 bajty Opis Zapis chwili z dokadnoci do sekundy od pnocy 1 stycznia 1970 roku do minuty przed pnoc 31 grudnia 2037 roku. Podstawowym zastosowaniem tego typu jest rejestracja modyfikacji tabel. Przy wstawianiu do takiej kolumny wartoci NULL wstawiane s aktualna data i czas. W przypadku modyfikowania jakiejkolwiek wartoci w wierszu z kolumn TIMESTAMP pierwsza kolumna tego typu zostanie zaktualizowana biec dat i czasem. Format danych TIMESTAMP znany z wczeniejszych wersji MySQL, do 4.1 wcznie, w wersji 5.1 nie jest ju obsugiwany.

YEAR
YEAR[(rozmiar)]

Format
YYYY (2001)

Rozmiar w pamici 1 bajt

Rozdzia 3. Typy danych

37

Opis Pozwala zapisa rok z kalendarza gregoriaskiego. Parametr rozmiar umoliwia zapisywanie roku dwu- lub czterocyfrowo. Zakres YEAR(4) rozciga si od 1900 do 2155, dla YEAR(2) od 1970 do 2069. Domylnie przyjmowane jest YEAR(4).

Typy zoone
Zoone typy danych MySQL, ENUM i SET, s po prostu specjalnymi przypadkami typw acuchowych. Opisujemy je osobno, gdy s bardziej zoone pojciowo i stanowi wprowadzenie do typw danych SQL3, ktre by moe MySQL bdzie obsugiwa w przyszoci.

ENUM
ENUM(warto1, warto2, ...)

Rozmiar w pamici 1 255 elementw: 1 bajt 255 65 535 elementw: 2 bajty Opis Typ danych ENUM pozwala zapisywa jeden z wielu zdefiniowanych wczeniej acuchw. Przy tworzeniu kolumny typu ENUM podaje si list dopuszczalnych jej wartoci. Dane mog by do tej kolumny wstawiane i aktualizowane jedynie z tej listy; kada prba wstawienia wartoci spoza niej powoduje wstawienie pustego acucha.

38

MySQL. Leksykon kieszonkowy

Do listy dopuszczalnych wartoci mona si odwoywa przez indeks, przy czym pierwszy element otrzymuje numer 0. Na przykad:
SELECT COLID FROM TBL WHERE COLENUM = 0;

Jeli COLID jest kolumn z kluczem gwnym, a COLENUM kolumn typu ENUM, taka instrukcja SQL spowoduje pobranie kluczy gwnych wszystkich wierszy, dla ktrych COLENUM jest pierwsz wartoci z listy. Analogicznie, sortowanie wzgldem kolumn ENUM powoduje sortowanie wedug indeksu, nie acucha. Najwiksza moliwa liczba elementw kolumny ENUM to 65 535.

SET
SET(warto1, warto2, ...)

Rozmiar w pamici 1 8 elementw: 1 bajt 9 16 elementw: 2 bajty 17 24 elementy: 3 bajty 25 32 elementy: 4 bajty 33 64 elementy: 8 bajtw Opis Lista wartoci wybieranych z okrelonego wczeniej zbioru. Pole moe zawiera dowoln liczb acuchw wskazanych w instrukcji SET, szczeglnie moe nie zawiera adnej takiej wartoci. SET jest podobny do ENUM, ale kade pole moe zawiera wicej ni jedn z podanych wartoci. Dane typu SET nie s jednak zapisywane za pomoc indeksw, ale w zoonej mapie bitowej. Jeli dany jest zbir SET, zawierajcy elementy: Mandarynka, Pomidor,
Rozdzia 3. Typy danych | 39

Gruszka i Banan, kady z tych elementw jest reprezentowany jako

wczony bit w bajcie, jak to pokazano w tabeli 3.1.


Tabela 3.1. Reprezentacja zbioru elementw w MySQL
Element
Mandarynka Pomidor Gruszka Banan

Warto dziesitna
1 2 4 8

Zapis bitowy
0001 0010 0100 1000

W powyszym przykadzie zapisanie jednoczenie wartoci Mandarynka i Gruszka wymaga uycia wartoci 5 (bitowo 0101). W kolumnie SET mona zapisa najwyej 64 wartoci. Wprawdzie t sam warto mona w jednym wyraeniu SQL wpisa wielokrotnie, ale w bazie danych warto ta zostanie zapisana raz.

40

MySQL. Leksykon kieszonkowy

4. SQL .............................................................................................. 41
Rozrnianie wielkoci liter Literay Identyfikatory Komentarze Instrukcje Zasady dotyczce transakcji 41 42 43 45 46 106

5. Operatory .................................................................................. 108


Priorytety operatorw Operatory arytmetyczne Operatory porwnania Operatory logiczne 108 109 109 111

6. Funkcje .......................................................................................113
Funkcje agregujce Funkcje oglnego przeznaczenia 113 115

7. Rodzaje tabel ............................................................................ 137 8. Procedury i funkcje skadowane .............................................. 138


Parametry Logika Kursory Obsuga zdarze i warunki 138 139 143 144

9. Trygery ...................................................................................... 146 Skorowidz ................................................................................. 147

MySQL. Leksykon kieszonkowy

Rozdzia 3. Typy danych


We wszystkich typach danych nawiasami kwadratowymi ([]) oznaczane s fragmenty opcjonalne. Poniszy przykad pokazuje sposb prezentacji typu BIGINT, opisanego dalej w tym rozdziale:
BIGINT[(wielko_pokazywana)]

Oznacza to, e sowo BIGINT moe wystpi samodzielnie lub z pokazywan wartoci. Uycie kursywy wskazuje, e nie naley wpisywa sowa wielko_pokazywana, ale poda wasn warto. Oto przykady uycia:
BIGINT BIGINT(20)

Poza typem BIGINT take wiele innych typw danych MySQL uwzgldnia deklaracj rozmiaru wywietlania. Jeli nie powiedziano inaczej, musi to by liczba od 1 do 255. W wersjach MySQL starszych ni wersja 5, baza danych w niektrych przypadkach zmieniaa podany typ kolumny, nie informujc o tym uytkownika. Obecnie takie podmiany nie maj ju miejsca.
VARCHAR -> CHAR

Jeli podana kolumna VARCHAR ma rozmiar mniejszy od czterech znakw, jest przeksztacana w kolumn CHAR.
CHAR -> VARCHAR

Jeli tabela zawiera co najmniej jedn kolumn o zmiennej dugoci, wszystkie kolumny typu CHAR dusze ni trzy znaki s zamieniane na VARCHAR.

Rozmiar wywietlania TIMESTAMP Rozmiar wywietlania pl TIMESTAMP musi by zawsze wielkoci parzyst od 2 do 14. Rozmiar rwny 0 lub wikszy od 14 powoduje przyjcie 14. Wszelkie liczby nieparzyste s zamieniane na nastpn liczb parzyst.

22

MySQL. Leksykon kieszonkowy

Liczby
MySQL obsuguje liczbowe typy danych zgodne z ANSI SQL 2. Typy te dzielimy na cakowitoliczbowe, dziesitne i zmiennoprzecinkowe. W ramach tych grup dzielimy typy dalej, wedug zajmowanej przez nie pamici. W przypadku typw liczbowych mona poda rozmiar wywietlania, ktry wpywa na sposb pokazywania przez MySQL wynikw. Rozmiar ten nie ma adnego zwizku z wielkoci pamici zajmowanej przez dany typ. Dodatkowo w przypadku liczb zmiennoprzecinkowych i dziesitnych mona poda liczb cyfr znajdujcych si za kropk dziesitn. Wtedy liczba cyfr powinna nalee do zakresu od 0 do 30, czyli by co najmniej o dwa mniejsza od rozmiaru wywietlania. Jeli warunek ten nie zostanie dotrzymany, MySQL automatycznie zmieni liczb cyfr tak, aby bya mniejsza o dwa od rozmiaru wywietlania. Przykadowo, MySQL automatycznie zmieni FLOAT(6,5) na FLOAT(7,5). Prba wstawienia do kolumny wartoci przekraczajcej dopuszczalny zakres tej kolumny powoduje obcicie tej wartoci do najmniejszej (dla liczb ujemnych) lub najwikszej (dla liczb dodatnich) wartoci dla danej kolumny dopuszczalnej. Jeli takie obcicie jest robione podczas wykonywania instrukcji ALTER TABLE, LOAD DATA INFILE, UPDATE lub wielowierszowej instrukcji INSERT, MySQL pokazuje ostrzeenie. Wyjtkiem jest korzystanie z MySQL w wersji 5 lub nowszej w trybie penej zgodnoci ze standardem SQL, gdy wtedy w przypadku instrukcji INSERT i UPDATE zgaszany jest bd. Atrybutu AUTO_INCREMENT mona uy do co najwyej jednej kolumny cakowitoliczbowej w tabeli. Atrybut UNSIGNED moe by czony z dowolnym liczbowym typem danych. Uycie tego atrybutu powoduje, e do kolumny nie mona wpisywa liczb ujemnych. Atrybut ZEROFILL nakazuje wypenienie kolumny od lewej

Rozdzia 3. Typy danych

23

strony zerami podczas wywietlania jej wartoci. O liczbie tych zer decyduje szeroko wywietlania danej kolumny.

BIGINT
BIGINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Najwikszy z typw cakowitoliczbowych, pozwalajcy zapisywa liczby od 9 223 372 036 854 775 808 do 9 223 372 036 854 775 807 (jeli bez znaku, to od 0 do 18 446 744 073 709 551 615). Z uwagi na sposb realizacji dziaa na liczbach tego typu, naley unika operacji na liczbach BIGINT bez znaku wikszych ni 9 223 372 036 854 775 807, gdy moe to zaowocowa nieprawidowymi wynikami.

BIT
BIT[(bity)]

Rozmiar w pamici w przyblieniu bity bitw+7 lub 8 bitw Opis W wersjach MySQL 5.0.3 i starszych, pola typu BIT dziaay tak samo, jak TINYINT(1). Omawiany typ pola pozwala przechowywa ustalon liczb bitw. Jeli podana zostanie wielko bitw mniejsza od dozwolonej, MySQL wypeni zerami bity od lewej strony.
24 | MySQL. Leksykon kieszonkowy

DEC
Synonim typu DECIMAL.

DECIMAL
DECIMAL[(dokadno, [skala])] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici rnie Opis Pozwala zapisywa liczby zmiennoprzecinkowe w sytuacjach, kiedy istotna jest dokadno na przykad przy operowaniu kwotami pienidzy. Stosujc typ DECIMAL, trzeba poda dwa jego parametry, dokadno i skal. Dokadno to liczba znaczcych cyfr, za skala to liczba znaczcych cyfr po kropce dziesitnej. Przykadowo, kolumna SALDO typu DECIMAL(9,2) pozwoliaby zapisywa liczby dziewiciocyfrowe, przy czym na prawo od kropki dziesitnej mogyby by dwie cyfry. Zakres dopuszczalnych liczb to w takiej sytuacji od 9 999 999,99 do 9 999 999,99. Jeli podana zostanie liczba zawierajca wicej cyfr po przecinku, ni przewiduje to definicja, liczba zostanie zaokrglona. Wartoci spoza zakresu DECIMAL s obcinane tak, aby si w nim zmieciy. W wersjach MySQL starszych ni 5, wartoci DECIMAL nie byy zapisywane jako liczby zmiennoprzecinkowe, lecz jako acuchy znakw. Na kad cyfr zuywany by jeden znak w przypadku skali wikszej od 0, poza tym jeden dodatkowy znak zuywany jest w przypadku liczb ujemnych. Jeli skala wynosi 0, liczby nie maj czci uamkowej. SQL zgodnie z norm ANSI pozwala pomija dokadno i (lub) skal. Jeli brak dokadnoci, przyjmowane jest ustawienie

Rozdzia 3. Typy danych

25

domylne charakterystyczne dla implementacji. Jeli brak skali, przyjmowane jest zero. W MySQL domylna warto dokadnoci to 10.

DOUBLE
DOUBLE[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Liczba zmiennoprzecinkowa podwjnej precyzji. Ten typ danych pozwala zapisywa due wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 1,7976931348623157E+308 do 2,2250738585072014E308, 0 oraz wartoci dodatnie od 2,2250738585072014E308 do 1,7976931348623157E+308.

DOUBLE PRECISION
Synonim DOUBLE.

FLOAT
FLOAT[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 4 bajty

26

MySQL. Leksykon kieszonkowy

Opis Liczba zmiennoprzecinkowa pojedynczej precyzji. Ten typ danych pozwala zapisywa mae wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 3,402823466E+38 do 1,175494351E38, 0 oraz wartoci dodatnie od 1,175494351E38 do 3,402823466E+38.

INT
INT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 4 bajty Opis Podstawowy rodzaj liczb cakowitych od 2 147 483 648 do 2 147 483 647 (lub od 0 do 4 294 967 295 w przypadku liczb bez znaku).

INTEGER
Synonim INT.

MEDIUMINT
MEDIUMINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

27

Opis Liczby cakowite od 8 388 608 do 8 388 607 (lub od 0 do 16 777 215 w przypadku liczb bez znaku).

NUMERIC
Synonim DECIMAL.

REAL
Synonim DOUBLE.

SMALLINT
SMALLINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 2 bajty Opis Liczby cakowite z zakresu od 32 768 do 32 767 (od 0 do 65 535 w przypadku liczb bez znaku).

TINYINT
TINYINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 1 bajt

28

MySQL. Leksykon kieszonkowy

Opis Liczby cakowite od 128 do 127 (od 0 do 255 w przypadku liczb bez znaku).

acuchy
MySQL obsuguje dwie kategorie acuchw: acuchy tekstowe oraz acuchy binarne. Obie kategorie maj swoje specyficzne typy do obsugi rnych wielkoci pl i rnych sposobw porwnywania wartoci. W zalenoci od sposobu porwnywania, mona uwzgldnia bd nie wielko liter, mona te porwnywa dane binarnie (bajt po bajcie). Kiedy nazwa typu tekstowego (jak CHAR, VARCHAR i inne) zostanie oznaczona sowem kluczowym BINARY, kolumna pozostaje kolumn tekstow, ale dane s porwnywane ze sob binarnie.

BINARY
BINARY(rozmiar)

Rozmiar wedug rozmiar, w zakresie od 0 do 255 Rozmiar w pamici


rozmiar bajtw

Opis Typ danych BINARY to binarny odpowiednik typu CHAR. Podstawowa rnica midzy tymi dwoma typami polega na tym, e pole typu BINARY zawiera dane binarne, wielko tych danych jest mierzona nie w znakach, lecz w bajtach. acuchy zawierajce

Rozdzia 3. Typy danych

29

mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie znakami 0x00 (wersja MySQL 5.0.5 i nowsze) lub spacjami (wersje starsze).

BLOB
Binarny odpowiednik typu TEXT.

CHAR
CHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar wedug rozmiar, do 255 Rozmiar w pamici zaleny od rozmiaru i od uytego zestawu znakw Opis Pole tekstowe ustalonej dugoci. acuchy zawierajce mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie spacjami. Podczas pobierania danych z bazy te dodatkowe spacje s usuwane. Pola CHAR(0) zostay zachowane w celu zapewnienia zgodnoci ze starymi systemami, w ktrych w kolumnach nie s zapisywane adne wartoci.

CHARACTER
Synonim CHAR.

30

MySQL. Leksykon kieszonkowy

CHARACTER VARYING
Synonim VARCHAR.

LONGBLOB
Binarny odpowiednik LONGTEXT.

LONGTEXT
LONGTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 4 294 295 Rozmiar w pamici Dugo wartoci+4 bajty Opis Typ pozwala zapisywa due wartoci tekstowe. Teoretyczne ograniczenie rozmiaru tekstu to ponad 4 GB, ale praktycznymi ograniczeniami s ograniczenia protokou komunikacyjnego MySQL oraz ilo pamici przeznaczonej na komunikacj na serwerze i na stacji klienckiej.

MEDIUMBLOB
Binarna posta MEDIUMTEXT.

MEDIUMTEXT
MEDIUMTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozdzia 3. Typy danych

31

Rozmiar 0 do 16 777 215 Rozmiar w pamici Dugo wartoci+3 bajty Opis Typ pozwala zapisywa redniej wielkoci wartoci tekstowe.

NCHAR
Synonim CHAR.

NATIONAL CHAR
Synonim CHAR.

NATIONAL CHARACTER
Synonim CHAR.

NATIONAL VARCHAR
Synonim VARCHAR.

TEXT
TEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 65 535

32

MySQL. Leksykon kieszonkowy

Rozmiar w pamici Dugo wartoci tekstowej+2 bajty Opis Typ pozwala zapisywa typowe wartoci tekstowe.

TINYBLOB
Binarny odpowiednik TINYTEXT.

TINYTEXT
TINYTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 255 Rozmiar w pamici Dugo wartoci tekstowej+1 bajt Opis Pozwala zapisywa krtkie dane tekstowe.

VARBINARY
VARBINARY(rozmiar)

Rozmiar Wedug parametru rozmiar

Rozdzia 3. Typy danych

33

Rozmiar w pamici
rozmiar bajtw

Opis Jest to binarna odmiana typu VARCHAR. Podstawowa rnica polega na tym, e zapisywane s dane binarne, a rozmiar pola mierzony jest w bajtach, nie w znakach. Wielkoci typu VARBINARY, w przeciwiestwie do wartoci typu BINARY, nie s niczym dopeniane.

VARCHAR
VARCHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar Wskazana przez rozmiar warto z zakresu do 65 532 (od 1 do 255 w wersjach wczeniejszych ni MySQL 5); rozmiar wskazuje rzeczywist wielko kolumny i jest ograniczony przez dopuszczaln wielko wiersza w znakach; to, ile miejsca faktycznie bdzie potrzebne, zaley zatem od zestawu znakw uytego w danej kolumnie Rozmiar w pamici Zaley od liczby znakw wskazanych jako rozmiar oraz od liczby bajtw potrzebnych do zapisu poszczeglnych znakw w uytym mechanizmie kodowania znakw Opis Pozwala zapisywa wartoci tekstowe zmiennej dugoci. W wersjach poprzedzajcych MySQL 5 z wartoci VARCHAR usuwane s spacje kocowe; wersja MySQL 5 i nowsze standardowo nie usuwaj spacji kocowych.

34

MySQL. Leksykon kieszonkowy

Daty
Typy datowe MySQL s wyjtkowo elastycznym narzdziem, pozwalajcym zapisywa wszelki informacje dzienne. MySQL jest bardzo tolerancyjny i zakada, e to aplikacja, a nie baza danych, ma sprawdza poprawno tych danych. MySQL sprawdza jedynie, czy miesic nie wykracza poza zakres 0 12 i czy dzie nie wykracza poza zakres 0 31. Wobec tego z punktu widzenia MySQL 31 lutego 2001 roku jest poprawn dat. Bardziej przydatn wartoci jest data 0 lutego 2001 roku; cyfra zero moe zastpowa t cz daty, ktrej dokadnie nie znamy. MySQL 5 jest jednak ju baz danych nieco bardziej restrykcyjn co do wartoci, jakie mona zapisywa w polach datowych. Wprawdzie MySQL dopuszcza do du swobod formatw wejciowych dat, to naley stara si w aplikacjach daty formatowa zgodnie z formatem wewntrznym MySQL w celu uniknicia nieporozumie. MySQL zawsze zakada, e rok jest pierwszym elementem po lewej stronie daty. Jeli w operacji SQL podana zostanie nieprawidowa warto daty, MySQL wstawi w jej miejsce zero. MySQL w kontekcie liczb cakowitych automatycznie konwertuje daty i czas na liczby cakowite.

DATE
DATE

Format
YYYY-MM-DD (2001-01-01)

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

35

Opis Data kalendarza gregoriaskiego z zakresu od 1 stycznia 1000 roku ('1000-01-01') do 31 grudnia 9999 roku ('9999-12-31').

DATETIME
DATETIME

Format
YYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 8 bajtw Opis Zapisuje czas z zakresu od 00:00:00 1 stycznia 1000 roku ('100001-01 00:00:00') do 23:59:59 31 grudnia 9999 ('9999-12-31 23:59:59') wedug kalendarza gregoriaskiego.

TIME
TIME

Format
hh:mm:ss (06:00:00)

Rozmiar w pamici 3 bajty Opis Zapisuje czas od pnocy ('00:00:00') do sekundy przed pnoc ('23:59:59').
36 | MySQL. Leksykon kieszonkowy

TIMESTAMP
TIMESTAMP[(rozmiar_wywietlania)]

Format
YYYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 4 bajty Opis Zapis chwili z dokadnoci do sekundy od pnocy 1 stycznia 1970 roku do minuty przed pnoc 31 grudnia 2037 roku. Podstawowym zastosowaniem tego typu jest rejestracja modyfikacji tabel. Przy wstawianiu do takiej kolumny wartoci NULL wstawiane s aktualna data i czas. W przypadku modyfikowania jakiejkolwiek wartoci w wierszu z kolumn TIMESTAMP pierwsza kolumna tego typu zostanie zaktualizowana biec dat i czasem. Format danych TIMESTAMP znany z wczeniejszych wersji MySQL, do 4.1 wcznie, w wersji 5.1 nie jest ju obsugiwany.

YEAR
YEAR[(rozmiar)]

Format
YYYY (2001)

Rozmiar w pamici 1 bajt

Rozdzia 3. Typy danych

37

Opis Pozwala zapisa rok z kalendarza gregoriaskiego. Parametr rozmiar umoliwia zapisywanie roku dwu- lub czterocyfrowo. Zakres YEAR(4) rozciga si od 1900 do 2155, dla YEAR(2) od 1970 do 2069. Domylnie przyjmowane jest YEAR(4).

Typy zoone
Zoone typy danych MySQL, ENUM i SET, s po prostu specjalnymi przypadkami typw acuchowych. Opisujemy je osobno, gdy s bardziej zoone pojciowo i stanowi wprowadzenie do typw danych SQL3, ktre by moe MySQL bdzie obsugiwa w przyszoci.

ENUM
ENUM(warto1, warto2, ...)

Rozmiar w pamici 1 255 elementw: 1 bajt 255 65 535 elementw: 2 bajty Opis Typ danych ENUM pozwala zapisywa jeden z wielu zdefiniowanych wczeniej acuchw. Przy tworzeniu kolumny typu ENUM podaje si list dopuszczalnych jej wartoci. Dane mog by do tej kolumny wstawiane i aktualizowane jedynie z tej listy; kada prba wstawienia wartoci spoza niej powoduje wstawienie pustego acucha.

38

MySQL. Leksykon kieszonkowy

Do listy dopuszczalnych wartoci mona si odwoywa przez indeks, przy czym pierwszy element otrzymuje numer 0. Na przykad:
SELECT COLID FROM TBL WHERE COLENUM = 0;

Jeli COLID jest kolumn z kluczem gwnym, a COLENUM kolumn typu ENUM, taka instrukcja SQL spowoduje pobranie kluczy gwnych wszystkich wierszy, dla ktrych COLENUM jest pierwsz wartoci z listy. Analogicznie, sortowanie wzgldem kolumn ENUM powoduje sortowanie wedug indeksu, nie acucha. Najwiksza moliwa liczba elementw kolumny ENUM to 65 535.

SET
SET(warto1, warto2, ...)

Rozmiar w pamici 1 8 elementw: 1 bajt 9 16 elementw: 2 bajty 17 24 elementy: 3 bajty 25 32 elementy: 4 bajty 33 64 elementy: 8 bajtw Opis Lista wartoci wybieranych z okrelonego wczeniej zbioru. Pole moe zawiera dowoln liczb acuchw wskazanych w instrukcji SET, szczeglnie moe nie zawiera adnej takiej wartoci. SET jest podobny do ENUM, ale kade pole moe zawiera wicej ni jedn z podanych wartoci. Dane typu SET nie s jednak zapisywane za pomoc indeksw, ale w zoonej mapie bitowej. Jeli dany jest zbir SET, zawierajcy elementy: Mandarynka, Pomidor,
Rozdzia 3. Typy danych | 39

Gruszka i Banan, kady z tych elementw jest reprezentowany jako

wczony bit w bajcie, jak to pokazano w tabeli 3.1.


Tabela 3.1. Reprezentacja zbioru elementw w MySQL
Element
Mandarynka Pomidor Gruszka Banan

Warto dziesitna
1 2 4 8

Zapis bitowy
0001 0010 0100 1000

W powyszym przykadzie zapisanie jednoczenie wartoci Mandarynka i Gruszka wymaga uycia wartoci 5 (bitowo 0101). W kolumnie SET mona zapisa najwyej 64 wartoci. Wprawdzie t sam warto mona w jednym wyraeniu SQL wpisa wielokrotnie, ale w bazie danych warto ta zostanie zapisana raz.

40

MySQL. Leksykon kieszonkowy

4. SQL .............................................................................................. 41
Rozrnianie wielkoci liter Literay Identyfikatory Komentarze Instrukcje Zasady dotyczce transakcji 41 42 43 45 46 106

5. Operatory .................................................................................. 108


Priorytety operatorw Operatory arytmetyczne Operatory porwnania Operatory logiczne 108 109 109 111

6. Funkcje .......................................................................................113
Funkcje agregujce Funkcje oglnego przeznaczenia 113 115

7. Rodzaje tabel ............................................................................ 137 8. Procedury i funkcje skadowane .............................................. 138


Parametry Logika Kursory Obsuga zdarze i warunki 138 139 143 144

9. Trygery ...................................................................................... 146 Skorowidz ................................................................................. 147

MySQL. Leksykon kieszonkowy

Rozdzia 3. Typy danych


We wszystkich typach danych nawiasami kwadratowymi ([]) oznaczane s fragmenty opcjonalne. Poniszy przykad pokazuje sposb prezentacji typu BIGINT, opisanego dalej w tym rozdziale:
BIGINT[(wielko_pokazywana)]

Oznacza to, e sowo BIGINT moe wystpi samodzielnie lub z pokazywan wartoci. Uycie kursywy wskazuje, e nie naley wpisywa sowa wielko_pokazywana, ale poda wasn warto. Oto przykady uycia:
BIGINT BIGINT(20)

Poza typem BIGINT take wiele innych typw danych MySQL uwzgldnia deklaracj rozmiaru wywietlania. Jeli nie powiedziano inaczej, musi to by liczba od 1 do 255. W wersjach MySQL starszych ni wersja 5, baza danych w niektrych przypadkach zmieniaa podany typ kolumny, nie informujc o tym uytkownika. Obecnie takie podmiany nie maj ju miejsca.
VARCHAR -> CHAR

Jeli podana kolumna VARCHAR ma rozmiar mniejszy od czterech znakw, jest przeksztacana w kolumn CHAR.
CHAR -> VARCHAR

Jeli tabela zawiera co najmniej jedn kolumn o zmiennej dugoci, wszystkie kolumny typu CHAR dusze ni trzy znaki s zamieniane na VARCHAR.

Rozmiar wywietlania TIMESTAMP Rozmiar wywietlania pl TIMESTAMP musi by zawsze wielkoci parzyst od 2 do 14. Rozmiar rwny 0 lub wikszy od 14 powoduje przyjcie 14. Wszelkie liczby nieparzyste s zamieniane na nastpn liczb parzyst.

22

MySQL. Leksykon kieszonkowy

Liczby
MySQL obsuguje liczbowe typy danych zgodne z ANSI SQL 2. Typy te dzielimy na cakowitoliczbowe, dziesitne i zmiennoprzecinkowe. W ramach tych grup dzielimy typy dalej, wedug zajmowanej przez nie pamici. W przypadku typw liczbowych mona poda rozmiar wywietlania, ktry wpywa na sposb pokazywania przez MySQL wynikw. Rozmiar ten nie ma adnego zwizku z wielkoci pamici zajmowanej przez dany typ. Dodatkowo w przypadku liczb zmiennoprzecinkowych i dziesitnych mona poda liczb cyfr znajdujcych si za kropk dziesitn. Wtedy liczba cyfr powinna nalee do zakresu od 0 do 30, czyli by co najmniej o dwa mniejsza od rozmiaru wywietlania. Jeli warunek ten nie zostanie dotrzymany, MySQL automatycznie zmieni liczb cyfr tak, aby bya mniejsza o dwa od rozmiaru wywietlania. Przykadowo, MySQL automatycznie zmieni FLOAT(6,5) na FLOAT(7,5). Prba wstawienia do kolumny wartoci przekraczajcej dopuszczalny zakres tej kolumny powoduje obcicie tej wartoci do najmniejszej (dla liczb ujemnych) lub najwikszej (dla liczb dodatnich) wartoci dla danej kolumny dopuszczalnej. Jeli takie obcicie jest robione podczas wykonywania instrukcji ALTER TABLE, LOAD DATA INFILE, UPDATE lub wielowierszowej instrukcji INSERT, MySQL pokazuje ostrzeenie. Wyjtkiem jest korzystanie z MySQL w wersji 5 lub nowszej w trybie penej zgodnoci ze standardem SQL, gdy wtedy w przypadku instrukcji INSERT i UPDATE zgaszany jest bd. Atrybutu AUTO_INCREMENT mona uy do co najwyej jednej kolumny cakowitoliczbowej w tabeli. Atrybut UNSIGNED moe by czony z dowolnym liczbowym typem danych. Uycie tego atrybutu powoduje, e do kolumny nie mona wpisywa liczb ujemnych. Atrybut ZEROFILL nakazuje wypenienie kolumny od lewej

Rozdzia 3. Typy danych

23

strony zerami podczas wywietlania jej wartoci. O liczbie tych zer decyduje szeroko wywietlania danej kolumny.

BIGINT
BIGINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Najwikszy z typw cakowitoliczbowych, pozwalajcy zapisywa liczby od 9 223 372 036 854 775 808 do 9 223 372 036 854 775 807 (jeli bez znaku, to od 0 do 18 446 744 073 709 551 615). Z uwagi na sposb realizacji dziaa na liczbach tego typu, naley unika operacji na liczbach BIGINT bez znaku wikszych ni 9 223 372 036 854 775 807, gdy moe to zaowocowa nieprawidowymi wynikami.

BIT
BIT[(bity)]

Rozmiar w pamici w przyblieniu bity bitw+7 lub 8 bitw Opis W wersjach MySQL 5.0.3 i starszych, pola typu BIT dziaay tak samo, jak TINYINT(1). Omawiany typ pola pozwala przechowywa ustalon liczb bitw. Jeli podana zostanie wielko bitw mniejsza od dozwolonej, MySQL wypeni zerami bity od lewej strony.
24 | MySQL. Leksykon kieszonkowy

DEC
Synonim typu DECIMAL.

DECIMAL
DECIMAL[(dokadno, [skala])] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici rnie Opis Pozwala zapisywa liczby zmiennoprzecinkowe w sytuacjach, kiedy istotna jest dokadno na przykad przy operowaniu kwotami pienidzy. Stosujc typ DECIMAL, trzeba poda dwa jego parametry, dokadno i skal. Dokadno to liczba znaczcych cyfr, za skala to liczba znaczcych cyfr po kropce dziesitnej. Przykadowo, kolumna SALDO typu DECIMAL(9,2) pozwoliaby zapisywa liczby dziewiciocyfrowe, przy czym na prawo od kropki dziesitnej mogyby by dwie cyfry. Zakres dopuszczalnych liczb to w takiej sytuacji od 9 999 999,99 do 9 999 999,99. Jeli podana zostanie liczba zawierajca wicej cyfr po przecinku, ni przewiduje to definicja, liczba zostanie zaokrglona. Wartoci spoza zakresu DECIMAL s obcinane tak, aby si w nim zmieciy. W wersjach MySQL starszych ni 5, wartoci DECIMAL nie byy zapisywane jako liczby zmiennoprzecinkowe, lecz jako acuchy znakw. Na kad cyfr zuywany by jeden znak w przypadku skali wikszej od 0, poza tym jeden dodatkowy znak zuywany jest w przypadku liczb ujemnych. Jeli skala wynosi 0, liczby nie maj czci uamkowej. SQL zgodnie z norm ANSI pozwala pomija dokadno i (lub) skal. Jeli brak dokadnoci, przyjmowane jest ustawienie

Rozdzia 3. Typy danych

25

domylne charakterystyczne dla implementacji. Jeli brak skali, przyjmowane jest zero. W MySQL domylna warto dokadnoci to 10.

DOUBLE
DOUBLE[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Liczba zmiennoprzecinkowa podwjnej precyzji. Ten typ danych pozwala zapisywa due wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 1,7976931348623157E+308 do 2,2250738585072014E308, 0 oraz wartoci dodatnie od 2,2250738585072014E308 do 1,7976931348623157E+308.

DOUBLE PRECISION
Synonim DOUBLE.

FLOAT
FLOAT[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 4 bajty

26

MySQL. Leksykon kieszonkowy

Opis Liczba zmiennoprzecinkowa pojedynczej precyzji. Ten typ danych pozwala zapisywa mae wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 3,402823466E+38 do 1,175494351E38, 0 oraz wartoci dodatnie od 1,175494351E38 do 3,402823466E+38.

INT
INT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 4 bajty Opis Podstawowy rodzaj liczb cakowitych od 2 147 483 648 do 2 147 483 647 (lub od 0 do 4 294 967 295 w przypadku liczb bez znaku).

INTEGER
Synonim INT.

MEDIUMINT
MEDIUMINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

27

Opis Liczby cakowite od 8 388 608 do 8 388 607 (lub od 0 do 16 777 215 w przypadku liczb bez znaku).

NUMERIC
Synonim DECIMAL.

REAL
Synonim DOUBLE.

SMALLINT
SMALLINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 2 bajty Opis Liczby cakowite z zakresu od 32 768 do 32 767 (od 0 do 65 535 w przypadku liczb bez znaku).

TINYINT
TINYINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 1 bajt

28

MySQL. Leksykon kieszonkowy

Opis Liczby cakowite od 128 do 127 (od 0 do 255 w przypadku liczb bez znaku).

acuchy
MySQL obsuguje dwie kategorie acuchw: acuchy tekstowe oraz acuchy binarne. Obie kategorie maj swoje specyficzne typy do obsugi rnych wielkoci pl i rnych sposobw porwnywania wartoci. W zalenoci od sposobu porwnywania, mona uwzgldnia bd nie wielko liter, mona te porwnywa dane binarnie (bajt po bajcie). Kiedy nazwa typu tekstowego (jak CHAR, VARCHAR i inne) zostanie oznaczona sowem kluczowym BINARY, kolumna pozostaje kolumn tekstow, ale dane s porwnywane ze sob binarnie.

BINARY
BINARY(rozmiar)

Rozmiar wedug rozmiar, w zakresie od 0 do 255 Rozmiar w pamici


rozmiar bajtw

Opis Typ danych BINARY to binarny odpowiednik typu CHAR. Podstawowa rnica midzy tymi dwoma typami polega na tym, e pole typu BINARY zawiera dane binarne, wielko tych danych jest mierzona nie w znakach, lecz w bajtach. acuchy zawierajce

Rozdzia 3. Typy danych

29

mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie znakami 0x00 (wersja MySQL 5.0.5 i nowsze) lub spacjami (wersje starsze).

BLOB
Binarny odpowiednik typu TEXT.

CHAR
CHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar wedug rozmiar, do 255 Rozmiar w pamici zaleny od rozmiaru i od uytego zestawu znakw Opis Pole tekstowe ustalonej dugoci. acuchy zawierajce mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie spacjami. Podczas pobierania danych z bazy te dodatkowe spacje s usuwane. Pola CHAR(0) zostay zachowane w celu zapewnienia zgodnoci ze starymi systemami, w ktrych w kolumnach nie s zapisywane adne wartoci.

CHARACTER
Synonim CHAR.

30

MySQL. Leksykon kieszonkowy

CHARACTER VARYING
Synonim VARCHAR.

LONGBLOB
Binarny odpowiednik LONGTEXT.

LONGTEXT
LONGTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 4 294 295 Rozmiar w pamici Dugo wartoci+4 bajty Opis Typ pozwala zapisywa due wartoci tekstowe. Teoretyczne ograniczenie rozmiaru tekstu to ponad 4 GB, ale praktycznymi ograniczeniami s ograniczenia protokou komunikacyjnego MySQL oraz ilo pamici przeznaczonej na komunikacj na serwerze i na stacji klienckiej.

MEDIUMBLOB
Binarna posta MEDIUMTEXT.

MEDIUMTEXT
MEDIUMTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozdzia 3. Typy danych

31

Rozmiar 0 do 16 777 215 Rozmiar w pamici Dugo wartoci+3 bajty Opis Typ pozwala zapisywa redniej wielkoci wartoci tekstowe.

NCHAR
Synonim CHAR.

NATIONAL CHAR
Synonim CHAR.

NATIONAL CHARACTER
Synonim CHAR.

NATIONAL VARCHAR
Synonim VARCHAR.

TEXT
TEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 65 535

32

MySQL. Leksykon kieszonkowy

Rozmiar w pamici Dugo wartoci tekstowej+2 bajty Opis Typ pozwala zapisywa typowe wartoci tekstowe.

TINYBLOB
Binarny odpowiednik TINYTEXT.

TINYTEXT
TINYTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 255 Rozmiar w pamici Dugo wartoci tekstowej+1 bajt Opis Pozwala zapisywa krtkie dane tekstowe.

VARBINARY
VARBINARY(rozmiar)

Rozmiar Wedug parametru rozmiar

Rozdzia 3. Typy danych

33

Rozmiar w pamici
rozmiar bajtw

Opis Jest to binarna odmiana typu VARCHAR. Podstawowa rnica polega na tym, e zapisywane s dane binarne, a rozmiar pola mierzony jest w bajtach, nie w znakach. Wielkoci typu VARBINARY, w przeciwiestwie do wartoci typu BINARY, nie s niczym dopeniane.

VARCHAR
VARCHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar Wskazana przez rozmiar warto z zakresu do 65 532 (od 1 do 255 w wersjach wczeniejszych ni MySQL 5); rozmiar wskazuje rzeczywist wielko kolumny i jest ograniczony przez dopuszczaln wielko wiersza w znakach; to, ile miejsca faktycznie bdzie potrzebne, zaley zatem od zestawu znakw uytego w danej kolumnie Rozmiar w pamici Zaley od liczby znakw wskazanych jako rozmiar oraz od liczby bajtw potrzebnych do zapisu poszczeglnych znakw w uytym mechanizmie kodowania znakw Opis Pozwala zapisywa wartoci tekstowe zmiennej dugoci. W wersjach poprzedzajcych MySQL 5 z wartoci VARCHAR usuwane s spacje kocowe; wersja MySQL 5 i nowsze standardowo nie usuwaj spacji kocowych.

34

MySQL. Leksykon kieszonkowy

Daty
Typy datowe MySQL s wyjtkowo elastycznym narzdziem, pozwalajcym zapisywa wszelki informacje dzienne. MySQL jest bardzo tolerancyjny i zakada, e to aplikacja, a nie baza danych, ma sprawdza poprawno tych danych. MySQL sprawdza jedynie, czy miesic nie wykracza poza zakres 0 12 i czy dzie nie wykracza poza zakres 0 31. Wobec tego z punktu widzenia MySQL 31 lutego 2001 roku jest poprawn dat. Bardziej przydatn wartoci jest data 0 lutego 2001 roku; cyfra zero moe zastpowa t cz daty, ktrej dokadnie nie znamy. MySQL 5 jest jednak ju baz danych nieco bardziej restrykcyjn co do wartoci, jakie mona zapisywa w polach datowych. Wprawdzie MySQL dopuszcza do du swobod formatw wejciowych dat, to naley stara si w aplikacjach daty formatowa zgodnie z formatem wewntrznym MySQL w celu uniknicia nieporozumie. MySQL zawsze zakada, e rok jest pierwszym elementem po lewej stronie daty. Jeli w operacji SQL podana zostanie nieprawidowa warto daty, MySQL wstawi w jej miejsce zero. MySQL w kontekcie liczb cakowitych automatycznie konwertuje daty i czas na liczby cakowite.

DATE
DATE

Format
YYYY-MM-DD (2001-01-01)

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

35

Opis Data kalendarza gregoriaskiego z zakresu od 1 stycznia 1000 roku ('1000-01-01') do 31 grudnia 9999 roku ('9999-12-31').

DATETIME
DATETIME

Format
YYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 8 bajtw Opis Zapisuje czas z zakresu od 00:00:00 1 stycznia 1000 roku ('100001-01 00:00:00') do 23:59:59 31 grudnia 9999 ('9999-12-31 23:59:59') wedug kalendarza gregoriaskiego.

TIME
TIME

Format
hh:mm:ss (06:00:00)

Rozmiar w pamici 3 bajty Opis Zapisuje czas od pnocy ('00:00:00') do sekundy przed pnoc ('23:59:59').
36 | MySQL. Leksykon kieszonkowy

TIMESTAMP
TIMESTAMP[(rozmiar_wywietlania)]

Format
YYYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 4 bajty Opis Zapis chwili z dokadnoci do sekundy od pnocy 1 stycznia 1970 roku do minuty przed pnoc 31 grudnia 2037 roku. Podstawowym zastosowaniem tego typu jest rejestracja modyfikacji tabel. Przy wstawianiu do takiej kolumny wartoci NULL wstawiane s aktualna data i czas. W przypadku modyfikowania jakiejkolwiek wartoci w wierszu z kolumn TIMESTAMP pierwsza kolumna tego typu zostanie zaktualizowana biec dat i czasem. Format danych TIMESTAMP znany z wczeniejszych wersji MySQL, do 4.1 wcznie, w wersji 5.1 nie jest ju obsugiwany.

YEAR
YEAR[(rozmiar)]

Format
YYYY (2001)

Rozmiar w pamici 1 bajt

Rozdzia 3. Typy danych

37

Opis Pozwala zapisa rok z kalendarza gregoriaskiego. Parametr rozmiar umoliwia zapisywanie roku dwu- lub czterocyfrowo. Zakres YEAR(4) rozciga si od 1900 do 2155, dla YEAR(2) od 1970 do 2069. Domylnie przyjmowane jest YEAR(4).

Typy zoone
Zoone typy danych MySQL, ENUM i SET, s po prostu specjalnymi przypadkami typw acuchowych. Opisujemy je osobno, gdy s bardziej zoone pojciowo i stanowi wprowadzenie do typw danych SQL3, ktre by moe MySQL bdzie obsugiwa w przyszoci.

ENUM
ENUM(warto1, warto2, ...)

Rozmiar w pamici 1 255 elementw: 1 bajt 255 65 535 elementw: 2 bajty Opis Typ danych ENUM pozwala zapisywa jeden z wielu zdefiniowanych wczeniej acuchw. Przy tworzeniu kolumny typu ENUM podaje si list dopuszczalnych jej wartoci. Dane mog by do tej kolumny wstawiane i aktualizowane jedynie z tej listy; kada prba wstawienia wartoci spoza niej powoduje wstawienie pustego acucha.

38

MySQL. Leksykon kieszonkowy

Do listy dopuszczalnych wartoci mona si odwoywa przez indeks, przy czym pierwszy element otrzymuje numer 0. Na przykad:
SELECT COLID FROM TBL WHERE COLENUM = 0;

Jeli COLID jest kolumn z kluczem gwnym, a COLENUM kolumn typu ENUM, taka instrukcja SQL spowoduje pobranie kluczy gwnych wszystkich wierszy, dla ktrych COLENUM jest pierwsz wartoci z listy. Analogicznie, sortowanie wzgldem kolumn ENUM powoduje sortowanie wedug indeksu, nie acucha. Najwiksza moliwa liczba elementw kolumny ENUM to 65 535.

SET
SET(warto1, warto2, ...)

Rozmiar w pamici 1 8 elementw: 1 bajt 9 16 elementw: 2 bajty 17 24 elementy: 3 bajty 25 32 elementy: 4 bajty 33 64 elementy: 8 bajtw Opis Lista wartoci wybieranych z okrelonego wczeniej zbioru. Pole moe zawiera dowoln liczb acuchw wskazanych w instrukcji SET, szczeglnie moe nie zawiera adnej takiej wartoci. SET jest podobny do ENUM, ale kade pole moe zawiera wicej ni jedn z podanych wartoci. Dane typu SET nie s jednak zapisywane za pomoc indeksw, ale w zoonej mapie bitowej. Jeli dany jest zbir SET, zawierajcy elementy: Mandarynka, Pomidor,
Rozdzia 3. Typy danych | 39

Gruszka i Banan, kady z tych elementw jest reprezentowany jako

wczony bit w bajcie, jak to pokazano w tabeli 3.1.


Tabela 3.1. Reprezentacja zbioru elementw w MySQL
Element
Mandarynka Pomidor Gruszka Banan

Warto dziesitna
1 2 4 8

Zapis bitowy
0001 0010 0100 1000

W powyszym przykadzie zapisanie jednoczenie wartoci Mandarynka i Gruszka wymaga uycia wartoci 5 (bitowo 0101). W kolumnie SET mona zapisa najwyej 64 wartoci. Wprawdzie t sam warto mona w jednym wyraeniu SQL wpisa wielokrotnie, ale w bazie danych warto ta zostanie zapisana raz.

40

MySQL. Leksykon kieszonkowy

4. SQL .............................................................................................. 41
Rozrnianie wielkoci liter Literay Identyfikatory Komentarze Instrukcje Zasady dotyczce transakcji 41 42 43 45 46 106

5. Operatory .................................................................................. 108


Priorytety operatorw Operatory arytmetyczne Operatory porwnania Operatory logiczne 108 109 109 111

6. Funkcje .......................................................................................113
Funkcje agregujce Funkcje oglnego przeznaczenia 113 115

7. Rodzaje tabel ............................................................................ 137 8. Procedury i funkcje skadowane .............................................. 138


Parametry Logika Kursory Obsuga zdarze i warunki 138 139 143 144

9. Trygery ...................................................................................... 146 Skorowidz ................................................................................. 147

MySQL. Leksykon kieszonkowy

Rozdzia 3. Typy danych


We wszystkich typach danych nawiasami kwadratowymi ([]) oznaczane s fragmenty opcjonalne. Poniszy przykad pokazuje sposb prezentacji typu BIGINT, opisanego dalej w tym rozdziale:
BIGINT[(wielko_pokazywana)]

Oznacza to, e sowo BIGINT moe wystpi samodzielnie lub z pokazywan wartoci. Uycie kursywy wskazuje, e nie naley wpisywa sowa wielko_pokazywana, ale poda wasn warto. Oto przykady uycia:
BIGINT BIGINT(20)

Poza typem BIGINT take wiele innych typw danych MySQL uwzgldnia deklaracj rozmiaru wywietlania. Jeli nie powiedziano inaczej, musi to by liczba od 1 do 255. W wersjach MySQL starszych ni wersja 5, baza danych w niektrych przypadkach zmieniaa podany typ kolumny, nie informujc o tym uytkownika. Obecnie takie podmiany nie maj ju miejsca.
VARCHAR -> CHAR

Jeli podana kolumna VARCHAR ma rozmiar mniejszy od czterech znakw, jest przeksztacana w kolumn CHAR.
CHAR -> VARCHAR

Jeli tabela zawiera co najmniej jedn kolumn o zmiennej dugoci, wszystkie kolumny typu CHAR dusze ni trzy znaki s zamieniane na VARCHAR.

Rozmiar wywietlania TIMESTAMP Rozmiar wywietlania pl TIMESTAMP musi by zawsze wielkoci parzyst od 2 do 14. Rozmiar rwny 0 lub wikszy od 14 powoduje przyjcie 14. Wszelkie liczby nieparzyste s zamieniane na nastpn liczb parzyst.

22

MySQL. Leksykon kieszonkowy

Liczby
MySQL obsuguje liczbowe typy danych zgodne z ANSI SQL 2. Typy te dzielimy na cakowitoliczbowe, dziesitne i zmiennoprzecinkowe. W ramach tych grup dzielimy typy dalej, wedug zajmowanej przez nie pamici. W przypadku typw liczbowych mona poda rozmiar wywietlania, ktry wpywa na sposb pokazywania przez MySQL wynikw. Rozmiar ten nie ma adnego zwizku z wielkoci pamici zajmowanej przez dany typ. Dodatkowo w przypadku liczb zmiennoprzecinkowych i dziesitnych mona poda liczb cyfr znajdujcych si za kropk dziesitn. Wtedy liczba cyfr powinna nalee do zakresu od 0 do 30, czyli by co najmniej o dwa mniejsza od rozmiaru wywietlania. Jeli warunek ten nie zostanie dotrzymany, MySQL automatycznie zmieni liczb cyfr tak, aby bya mniejsza o dwa od rozmiaru wywietlania. Przykadowo, MySQL automatycznie zmieni FLOAT(6,5) na FLOAT(7,5). Prba wstawienia do kolumny wartoci przekraczajcej dopuszczalny zakres tej kolumny powoduje obcicie tej wartoci do najmniejszej (dla liczb ujemnych) lub najwikszej (dla liczb dodatnich) wartoci dla danej kolumny dopuszczalnej. Jeli takie obcicie jest robione podczas wykonywania instrukcji ALTER TABLE, LOAD DATA INFILE, UPDATE lub wielowierszowej instrukcji INSERT, MySQL pokazuje ostrzeenie. Wyjtkiem jest korzystanie z MySQL w wersji 5 lub nowszej w trybie penej zgodnoci ze standardem SQL, gdy wtedy w przypadku instrukcji INSERT i UPDATE zgaszany jest bd. Atrybutu AUTO_INCREMENT mona uy do co najwyej jednej kolumny cakowitoliczbowej w tabeli. Atrybut UNSIGNED moe by czony z dowolnym liczbowym typem danych. Uycie tego atrybutu powoduje, e do kolumny nie mona wpisywa liczb ujemnych. Atrybut ZEROFILL nakazuje wypenienie kolumny od lewej

Rozdzia 3. Typy danych

23

strony zerami podczas wywietlania jej wartoci. O liczbie tych zer decyduje szeroko wywietlania danej kolumny.

BIGINT
BIGINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Najwikszy z typw cakowitoliczbowych, pozwalajcy zapisywa liczby od 9 223 372 036 854 775 808 do 9 223 372 036 854 775 807 (jeli bez znaku, to od 0 do 18 446 744 073 709 551 615). Z uwagi na sposb realizacji dziaa na liczbach tego typu, naley unika operacji na liczbach BIGINT bez znaku wikszych ni 9 223 372 036 854 775 807, gdy moe to zaowocowa nieprawidowymi wynikami.

BIT
BIT[(bity)]

Rozmiar w pamici w przyblieniu bity bitw+7 lub 8 bitw Opis W wersjach MySQL 5.0.3 i starszych, pola typu BIT dziaay tak samo, jak TINYINT(1). Omawiany typ pola pozwala przechowywa ustalon liczb bitw. Jeli podana zostanie wielko bitw mniejsza od dozwolonej, MySQL wypeni zerami bity od lewej strony.
24 | MySQL. Leksykon kieszonkowy

DEC
Synonim typu DECIMAL.

DECIMAL
DECIMAL[(dokadno, [skala])] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici rnie Opis Pozwala zapisywa liczby zmiennoprzecinkowe w sytuacjach, kiedy istotna jest dokadno na przykad przy operowaniu kwotami pienidzy. Stosujc typ DECIMAL, trzeba poda dwa jego parametry, dokadno i skal. Dokadno to liczba znaczcych cyfr, za skala to liczba znaczcych cyfr po kropce dziesitnej. Przykadowo, kolumna SALDO typu DECIMAL(9,2) pozwoliaby zapisywa liczby dziewiciocyfrowe, przy czym na prawo od kropki dziesitnej mogyby by dwie cyfry. Zakres dopuszczalnych liczb to w takiej sytuacji od 9 999 999,99 do 9 999 999,99. Jeli podana zostanie liczba zawierajca wicej cyfr po przecinku, ni przewiduje to definicja, liczba zostanie zaokrglona. Wartoci spoza zakresu DECIMAL s obcinane tak, aby si w nim zmieciy. W wersjach MySQL starszych ni 5, wartoci DECIMAL nie byy zapisywane jako liczby zmiennoprzecinkowe, lecz jako acuchy znakw. Na kad cyfr zuywany by jeden znak w przypadku skali wikszej od 0, poza tym jeden dodatkowy znak zuywany jest w przypadku liczb ujemnych. Jeli skala wynosi 0, liczby nie maj czci uamkowej. SQL zgodnie z norm ANSI pozwala pomija dokadno i (lub) skal. Jeli brak dokadnoci, przyjmowane jest ustawienie

Rozdzia 3. Typy danych

25

domylne charakterystyczne dla implementacji. Jeli brak skali, przyjmowane jest zero. W MySQL domylna warto dokadnoci to 10.

DOUBLE
DOUBLE[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Liczba zmiennoprzecinkowa podwjnej precyzji. Ten typ danych pozwala zapisywa due wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 1,7976931348623157E+308 do 2,2250738585072014E308, 0 oraz wartoci dodatnie od 2,2250738585072014E308 do 1,7976931348623157E+308.

DOUBLE PRECISION
Synonim DOUBLE.

FLOAT
FLOAT[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 4 bajty

26

MySQL. Leksykon kieszonkowy

Opis Liczba zmiennoprzecinkowa pojedynczej precyzji. Ten typ danych pozwala zapisywa mae wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 3,402823466E+38 do 1,175494351E38, 0 oraz wartoci dodatnie od 1,175494351E38 do 3,402823466E+38.

INT
INT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 4 bajty Opis Podstawowy rodzaj liczb cakowitych od 2 147 483 648 do 2 147 483 647 (lub od 0 do 4 294 967 295 w przypadku liczb bez znaku).

INTEGER
Synonim INT.

MEDIUMINT
MEDIUMINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

27

Opis Liczby cakowite od 8 388 608 do 8 388 607 (lub od 0 do 16 777 215 w przypadku liczb bez znaku).

NUMERIC
Synonim DECIMAL.

REAL
Synonim DOUBLE.

SMALLINT
SMALLINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 2 bajty Opis Liczby cakowite z zakresu od 32 768 do 32 767 (od 0 do 65 535 w przypadku liczb bez znaku).

TINYINT
TINYINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 1 bajt

28

MySQL. Leksykon kieszonkowy

Opis Liczby cakowite od 128 do 127 (od 0 do 255 w przypadku liczb bez znaku).

acuchy
MySQL obsuguje dwie kategorie acuchw: acuchy tekstowe oraz acuchy binarne. Obie kategorie maj swoje specyficzne typy do obsugi rnych wielkoci pl i rnych sposobw porwnywania wartoci. W zalenoci od sposobu porwnywania, mona uwzgldnia bd nie wielko liter, mona te porwnywa dane binarnie (bajt po bajcie). Kiedy nazwa typu tekstowego (jak CHAR, VARCHAR i inne) zostanie oznaczona sowem kluczowym BINARY, kolumna pozostaje kolumn tekstow, ale dane s porwnywane ze sob binarnie.

BINARY
BINARY(rozmiar)

Rozmiar wedug rozmiar, w zakresie od 0 do 255 Rozmiar w pamici


rozmiar bajtw

Opis Typ danych BINARY to binarny odpowiednik typu CHAR. Podstawowa rnica midzy tymi dwoma typami polega na tym, e pole typu BINARY zawiera dane binarne, wielko tych danych jest mierzona nie w znakach, lecz w bajtach. acuchy zawierajce

Rozdzia 3. Typy danych

29

mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie znakami 0x00 (wersja MySQL 5.0.5 i nowsze) lub spacjami (wersje starsze).

BLOB
Binarny odpowiednik typu TEXT.

CHAR
CHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar wedug rozmiar, do 255 Rozmiar w pamici zaleny od rozmiaru i od uytego zestawu znakw Opis Pole tekstowe ustalonej dugoci. acuchy zawierajce mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie spacjami. Podczas pobierania danych z bazy te dodatkowe spacje s usuwane. Pola CHAR(0) zostay zachowane w celu zapewnienia zgodnoci ze starymi systemami, w ktrych w kolumnach nie s zapisywane adne wartoci.

CHARACTER
Synonim CHAR.

30

MySQL. Leksykon kieszonkowy

CHARACTER VARYING
Synonim VARCHAR.

LONGBLOB
Binarny odpowiednik LONGTEXT.

LONGTEXT
LONGTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 4 294 295 Rozmiar w pamici Dugo wartoci+4 bajty Opis Typ pozwala zapisywa due wartoci tekstowe. Teoretyczne ograniczenie rozmiaru tekstu to ponad 4 GB, ale praktycznymi ograniczeniami s ograniczenia protokou komunikacyjnego MySQL oraz ilo pamici przeznaczonej na komunikacj na serwerze i na stacji klienckiej.

MEDIUMBLOB
Binarna posta MEDIUMTEXT.

MEDIUMTEXT
MEDIUMTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozdzia 3. Typy danych

31

Rozmiar 0 do 16 777 215 Rozmiar w pamici Dugo wartoci+3 bajty Opis Typ pozwala zapisywa redniej wielkoci wartoci tekstowe.

NCHAR
Synonim CHAR.

NATIONAL CHAR
Synonim CHAR.

NATIONAL CHARACTER
Synonim CHAR.

NATIONAL VARCHAR
Synonim VARCHAR.

TEXT
TEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 65 535

32

MySQL. Leksykon kieszonkowy

Rozmiar w pamici Dugo wartoci tekstowej+2 bajty Opis Typ pozwala zapisywa typowe wartoci tekstowe.

TINYBLOB
Binarny odpowiednik TINYTEXT.

TINYTEXT
TINYTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 255 Rozmiar w pamici Dugo wartoci tekstowej+1 bajt Opis Pozwala zapisywa krtkie dane tekstowe.

VARBINARY
VARBINARY(rozmiar)

Rozmiar Wedug parametru rozmiar

Rozdzia 3. Typy danych

33

Rozmiar w pamici
rozmiar bajtw

Opis Jest to binarna odmiana typu VARCHAR. Podstawowa rnica polega na tym, e zapisywane s dane binarne, a rozmiar pola mierzony jest w bajtach, nie w znakach. Wielkoci typu VARBINARY, w przeciwiestwie do wartoci typu BINARY, nie s niczym dopeniane.

VARCHAR
VARCHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar Wskazana przez rozmiar warto z zakresu do 65 532 (od 1 do 255 w wersjach wczeniejszych ni MySQL 5); rozmiar wskazuje rzeczywist wielko kolumny i jest ograniczony przez dopuszczaln wielko wiersza w znakach; to, ile miejsca faktycznie bdzie potrzebne, zaley zatem od zestawu znakw uytego w danej kolumnie Rozmiar w pamici Zaley od liczby znakw wskazanych jako rozmiar oraz od liczby bajtw potrzebnych do zapisu poszczeglnych znakw w uytym mechanizmie kodowania znakw Opis Pozwala zapisywa wartoci tekstowe zmiennej dugoci. W wersjach poprzedzajcych MySQL 5 z wartoci VARCHAR usuwane s spacje kocowe; wersja MySQL 5 i nowsze standardowo nie usuwaj spacji kocowych.

34

MySQL. Leksykon kieszonkowy

Daty
Typy datowe MySQL s wyjtkowo elastycznym narzdziem, pozwalajcym zapisywa wszelki informacje dzienne. MySQL jest bardzo tolerancyjny i zakada, e to aplikacja, a nie baza danych, ma sprawdza poprawno tych danych. MySQL sprawdza jedynie, czy miesic nie wykracza poza zakres 0 12 i czy dzie nie wykracza poza zakres 0 31. Wobec tego z punktu widzenia MySQL 31 lutego 2001 roku jest poprawn dat. Bardziej przydatn wartoci jest data 0 lutego 2001 roku; cyfra zero moe zastpowa t cz daty, ktrej dokadnie nie znamy. MySQL 5 jest jednak ju baz danych nieco bardziej restrykcyjn co do wartoci, jakie mona zapisywa w polach datowych. Wprawdzie MySQL dopuszcza do du swobod formatw wejciowych dat, to naley stara si w aplikacjach daty formatowa zgodnie z formatem wewntrznym MySQL w celu uniknicia nieporozumie. MySQL zawsze zakada, e rok jest pierwszym elementem po lewej stronie daty. Jeli w operacji SQL podana zostanie nieprawidowa warto daty, MySQL wstawi w jej miejsce zero. MySQL w kontekcie liczb cakowitych automatycznie konwertuje daty i czas na liczby cakowite.

DATE
DATE

Format
YYYY-MM-DD (2001-01-01)

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

35

Opis Data kalendarza gregoriaskiego z zakresu od 1 stycznia 1000 roku ('1000-01-01') do 31 grudnia 9999 roku ('9999-12-31').

DATETIME
DATETIME

Format
YYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 8 bajtw Opis Zapisuje czas z zakresu od 00:00:00 1 stycznia 1000 roku ('100001-01 00:00:00') do 23:59:59 31 grudnia 9999 ('9999-12-31 23:59:59') wedug kalendarza gregoriaskiego.

TIME
TIME

Format
hh:mm:ss (06:00:00)

Rozmiar w pamici 3 bajty Opis Zapisuje czas od pnocy ('00:00:00') do sekundy przed pnoc ('23:59:59').
36 | MySQL. Leksykon kieszonkowy

TIMESTAMP
TIMESTAMP[(rozmiar_wywietlania)]

Format
YYYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 4 bajty Opis Zapis chwili z dokadnoci do sekundy od pnocy 1 stycznia 1970 roku do minuty przed pnoc 31 grudnia 2037 roku. Podstawowym zastosowaniem tego typu jest rejestracja modyfikacji tabel. Przy wstawianiu do takiej kolumny wartoci NULL wstawiane s aktualna data i czas. W przypadku modyfikowania jakiejkolwiek wartoci w wierszu z kolumn TIMESTAMP pierwsza kolumna tego typu zostanie zaktualizowana biec dat i czasem. Format danych TIMESTAMP znany z wczeniejszych wersji MySQL, do 4.1 wcznie, w wersji 5.1 nie jest ju obsugiwany.

YEAR
YEAR[(rozmiar)]

Format
YYYY (2001)

Rozmiar w pamici 1 bajt

Rozdzia 3. Typy danych

37

Opis Pozwala zapisa rok z kalendarza gregoriaskiego. Parametr rozmiar umoliwia zapisywanie roku dwu- lub czterocyfrowo. Zakres YEAR(4) rozciga si od 1900 do 2155, dla YEAR(2) od 1970 do 2069. Domylnie przyjmowane jest YEAR(4).

Typy zoone
Zoone typy danych MySQL, ENUM i SET, s po prostu specjalnymi przypadkami typw acuchowych. Opisujemy je osobno, gdy s bardziej zoone pojciowo i stanowi wprowadzenie do typw danych SQL3, ktre by moe MySQL bdzie obsugiwa w przyszoci.

ENUM
ENUM(warto1, warto2, ...)

Rozmiar w pamici 1 255 elementw: 1 bajt 255 65 535 elementw: 2 bajty Opis Typ danych ENUM pozwala zapisywa jeden z wielu zdefiniowanych wczeniej acuchw. Przy tworzeniu kolumny typu ENUM podaje si list dopuszczalnych jej wartoci. Dane mog by do tej kolumny wstawiane i aktualizowane jedynie z tej listy; kada prba wstawienia wartoci spoza niej powoduje wstawienie pustego acucha.

38

MySQL. Leksykon kieszonkowy

Do listy dopuszczalnych wartoci mona si odwoywa przez indeks, przy czym pierwszy element otrzymuje numer 0. Na przykad:
SELECT COLID FROM TBL WHERE COLENUM = 0;

Jeli COLID jest kolumn z kluczem gwnym, a COLENUM kolumn typu ENUM, taka instrukcja SQL spowoduje pobranie kluczy gwnych wszystkich wierszy, dla ktrych COLENUM jest pierwsz wartoci z listy. Analogicznie, sortowanie wzgldem kolumn ENUM powoduje sortowanie wedug indeksu, nie acucha. Najwiksza moliwa liczba elementw kolumny ENUM to 65 535.

SET
SET(warto1, warto2, ...)

Rozmiar w pamici 1 8 elementw: 1 bajt 9 16 elementw: 2 bajty 17 24 elementy: 3 bajty 25 32 elementy: 4 bajty 33 64 elementy: 8 bajtw Opis Lista wartoci wybieranych z okrelonego wczeniej zbioru. Pole moe zawiera dowoln liczb acuchw wskazanych w instrukcji SET, szczeglnie moe nie zawiera adnej takiej wartoci. SET jest podobny do ENUM, ale kade pole moe zawiera wicej ni jedn z podanych wartoci. Dane typu SET nie s jednak zapisywane za pomoc indeksw, ale w zoonej mapie bitowej. Jeli dany jest zbir SET, zawierajcy elementy: Mandarynka, Pomidor,
Rozdzia 3. Typy danych | 39

Gruszka i Banan, kady z tych elementw jest reprezentowany jako

wczony bit w bajcie, jak to pokazano w tabeli 3.1.


Tabela 3.1. Reprezentacja zbioru elementw w MySQL
Element
Mandarynka Pomidor Gruszka Banan

Warto dziesitna
1 2 4 8

Zapis bitowy
0001 0010 0100 1000

W powyszym przykadzie zapisanie jednoczenie wartoci Mandarynka i Gruszka wymaga uycia wartoci 5 (bitowo 0101). W kolumnie SET mona zapisa najwyej 64 wartoci. Wprawdzie t sam warto mona w jednym wyraeniu SQL wpisa wielokrotnie, ale w bazie danych warto ta zostanie zapisana raz.

40

MySQL. Leksykon kieszonkowy

4. SQL .............................................................................................. 41
Rozrnianie wielkoci liter Literay Identyfikatory Komentarze Instrukcje Zasady dotyczce transakcji 41 42 43 45 46 106

5. Operatory .................................................................................. 108


Priorytety operatorw Operatory arytmetyczne Operatory porwnania Operatory logiczne 108 109 109 111

6. Funkcje .......................................................................................113
Funkcje agregujce Funkcje oglnego przeznaczenia 113 115

7. Rodzaje tabel ............................................................................ 137 8. Procedury i funkcje skadowane .............................................. 138


Parametry Logika Kursory Obsuga zdarze i warunki 138 139 143 144

9. Trygery ...................................................................................... 146 Skorowidz ................................................................................. 147

MySQL. Leksykon kieszonkowy

Rozdzia 3. Typy danych


We wszystkich typach danych nawiasami kwadratowymi ([]) oznaczane s fragmenty opcjonalne. Poniszy przykad pokazuje sposb prezentacji typu BIGINT, opisanego dalej w tym rozdziale:
BIGINT[(wielko_pokazywana)]

Oznacza to, e sowo BIGINT moe wystpi samodzielnie lub z pokazywan wartoci. Uycie kursywy wskazuje, e nie naley wpisywa sowa wielko_pokazywana, ale poda wasn warto. Oto przykady uycia:
BIGINT BIGINT(20)

Poza typem BIGINT take wiele innych typw danych MySQL uwzgldnia deklaracj rozmiaru wywietlania. Jeli nie powiedziano inaczej, musi to by liczba od 1 do 255. W wersjach MySQL starszych ni wersja 5, baza danych w niektrych przypadkach zmieniaa podany typ kolumny, nie informujc o tym uytkownika. Obecnie takie podmiany nie maj ju miejsca.
VARCHAR -> CHAR

Jeli podana kolumna VARCHAR ma rozmiar mniejszy od czterech znakw, jest przeksztacana w kolumn CHAR.
CHAR -> VARCHAR

Jeli tabela zawiera co najmniej jedn kolumn o zmiennej dugoci, wszystkie kolumny typu CHAR dusze ni trzy znaki s zamieniane na VARCHAR.

Rozmiar wywietlania TIMESTAMP Rozmiar wywietlania pl TIMESTAMP musi by zawsze wielkoci parzyst od 2 do 14. Rozmiar rwny 0 lub wikszy od 14 powoduje przyjcie 14. Wszelkie liczby nieparzyste s zamieniane na nastpn liczb parzyst.

22

MySQL. Leksykon kieszonkowy

Liczby
MySQL obsuguje liczbowe typy danych zgodne z ANSI SQL 2. Typy te dzielimy na cakowitoliczbowe, dziesitne i zmiennoprzecinkowe. W ramach tych grup dzielimy typy dalej, wedug zajmowanej przez nie pamici. W przypadku typw liczbowych mona poda rozmiar wywietlania, ktry wpywa na sposb pokazywania przez MySQL wynikw. Rozmiar ten nie ma adnego zwizku z wielkoci pamici zajmowanej przez dany typ. Dodatkowo w przypadku liczb zmiennoprzecinkowych i dziesitnych mona poda liczb cyfr znajdujcych si za kropk dziesitn. Wtedy liczba cyfr powinna nalee do zakresu od 0 do 30, czyli by co najmniej o dwa mniejsza od rozmiaru wywietlania. Jeli warunek ten nie zostanie dotrzymany, MySQL automatycznie zmieni liczb cyfr tak, aby bya mniejsza o dwa od rozmiaru wywietlania. Przykadowo, MySQL automatycznie zmieni FLOAT(6,5) na FLOAT(7,5). Prba wstawienia do kolumny wartoci przekraczajcej dopuszczalny zakres tej kolumny powoduje obcicie tej wartoci do najmniejszej (dla liczb ujemnych) lub najwikszej (dla liczb dodatnich) wartoci dla danej kolumny dopuszczalnej. Jeli takie obcicie jest robione podczas wykonywania instrukcji ALTER TABLE, LOAD DATA INFILE, UPDATE lub wielowierszowej instrukcji INSERT, MySQL pokazuje ostrzeenie. Wyjtkiem jest korzystanie z MySQL w wersji 5 lub nowszej w trybie penej zgodnoci ze standardem SQL, gdy wtedy w przypadku instrukcji INSERT i UPDATE zgaszany jest bd. Atrybutu AUTO_INCREMENT mona uy do co najwyej jednej kolumny cakowitoliczbowej w tabeli. Atrybut UNSIGNED moe by czony z dowolnym liczbowym typem danych. Uycie tego atrybutu powoduje, e do kolumny nie mona wpisywa liczb ujemnych. Atrybut ZEROFILL nakazuje wypenienie kolumny od lewej

Rozdzia 3. Typy danych

23

strony zerami podczas wywietlania jej wartoci. O liczbie tych zer decyduje szeroko wywietlania danej kolumny.

BIGINT
BIGINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Najwikszy z typw cakowitoliczbowych, pozwalajcy zapisywa liczby od 9 223 372 036 854 775 808 do 9 223 372 036 854 775 807 (jeli bez znaku, to od 0 do 18 446 744 073 709 551 615). Z uwagi na sposb realizacji dziaa na liczbach tego typu, naley unika operacji na liczbach BIGINT bez znaku wikszych ni 9 223 372 036 854 775 807, gdy moe to zaowocowa nieprawidowymi wynikami.

BIT
BIT[(bity)]

Rozmiar w pamici w przyblieniu bity bitw+7 lub 8 bitw Opis W wersjach MySQL 5.0.3 i starszych, pola typu BIT dziaay tak samo, jak TINYINT(1). Omawiany typ pola pozwala przechowywa ustalon liczb bitw. Jeli podana zostanie wielko bitw mniejsza od dozwolonej, MySQL wypeni zerami bity od lewej strony.
24 | MySQL. Leksykon kieszonkowy

DEC
Synonim typu DECIMAL.

DECIMAL
DECIMAL[(dokadno, [skala])] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici rnie Opis Pozwala zapisywa liczby zmiennoprzecinkowe w sytuacjach, kiedy istotna jest dokadno na przykad przy operowaniu kwotami pienidzy. Stosujc typ DECIMAL, trzeba poda dwa jego parametry, dokadno i skal. Dokadno to liczba znaczcych cyfr, za skala to liczba znaczcych cyfr po kropce dziesitnej. Przykadowo, kolumna SALDO typu DECIMAL(9,2) pozwoliaby zapisywa liczby dziewiciocyfrowe, przy czym na prawo od kropki dziesitnej mogyby by dwie cyfry. Zakres dopuszczalnych liczb to w takiej sytuacji od 9 999 999,99 do 9 999 999,99. Jeli podana zostanie liczba zawierajca wicej cyfr po przecinku, ni przewiduje to definicja, liczba zostanie zaokrglona. Wartoci spoza zakresu DECIMAL s obcinane tak, aby si w nim zmieciy. W wersjach MySQL starszych ni 5, wartoci DECIMAL nie byy zapisywane jako liczby zmiennoprzecinkowe, lecz jako acuchy znakw. Na kad cyfr zuywany by jeden znak w przypadku skali wikszej od 0, poza tym jeden dodatkowy znak zuywany jest w przypadku liczb ujemnych. Jeli skala wynosi 0, liczby nie maj czci uamkowej. SQL zgodnie z norm ANSI pozwala pomija dokadno i (lub) skal. Jeli brak dokadnoci, przyjmowane jest ustawienie

Rozdzia 3. Typy danych

25

domylne charakterystyczne dla implementacji. Jeli brak skali, przyjmowane jest zero. W MySQL domylna warto dokadnoci to 10.

DOUBLE
DOUBLE[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Liczba zmiennoprzecinkowa podwjnej precyzji. Ten typ danych pozwala zapisywa due wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 1,7976931348623157E+308 do 2,2250738585072014E308, 0 oraz wartoci dodatnie od 2,2250738585072014E308 do 1,7976931348623157E+308.

DOUBLE PRECISION
Synonim DOUBLE.

FLOAT
FLOAT[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 4 bajty

26

MySQL. Leksykon kieszonkowy

Opis Liczba zmiennoprzecinkowa pojedynczej precyzji. Ten typ danych pozwala zapisywa mae wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 3,402823466E+38 do 1,175494351E38, 0 oraz wartoci dodatnie od 1,175494351E38 do 3,402823466E+38.

INT
INT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 4 bajty Opis Podstawowy rodzaj liczb cakowitych od 2 147 483 648 do 2 147 483 647 (lub od 0 do 4 294 967 295 w przypadku liczb bez znaku).

INTEGER
Synonim INT.

MEDIUMINT
MEDIUMINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

27

Opis Liczby cakowite od 8 388 608 do 8 388 607 (lub od 0 do 16 777 215 w przypadku liczb bez znaku).

NUMERIC
Synonim DECIMAL.

REAL
Synonim DOUBLE.

SMALLINT
SMALLINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 2 bajty Opis Liczby cakowite z zakresu od 32 768 do 32 767 (od 0 do 65 535 w przypadku liczb bez znaku).

TINYINT
TINYINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 1 bajt

28

MySQL. Leksykon kieszonkowy

Opis Liczby cakowite od 128 do 127 (od 0 do 255 w przypadku liczb bez znaku).

acuchy
MySQL obsuguje dwie kategorie acuchw: acuchy tekstowe oraz acuchy binarne. Obie kategorie maj swoje specyficzne typy do obsugi rnych wielkoci pl i rnych sposobw porwnywania wartoci. W zalenoci od sposobu porwnywania, mona uwzgldnia bd nie wielko liter, mona te porwnywa dane binarnie (bajt po bajcie). Kiedy nazwa typu tekstowego (jak CHAR, VARCHAR i inne) zostanie oznaczona sowem kluczowym BINARY, kolumna pozostaje kolumn tekstow, ale dane s porwnywane ze sob binarnie.

BINARY
BINARY(rozmiar)

Rozmiar wedug rozmiar, w zakresie od 0 do 255 Rozmiar w pamici


rozmiar bajtw

Opis Typ danych BINARY to binarny odpowiednik typu CHAR. Podstawowa rnica midzy tymi dwoma typami polega na tym, e pole typu BINARY zawiera dane binarne, wielko tych danych jest mierzona nie w znakach, lecz w bajtach. acuchy zawierajce

Rozdzia 3. Typy danych

29

mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie znakami 0x00 (wersja MySQL 5.0.5 i nowsze) lub spacjami (wersje starsze).

BLOB
Binarny odpowiednik typu TEXT.

CHAR
CHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar wedug rozmiar, do 255 Rozmiar w pamici zaleny od rozmiaru i od uytego zestawu znakw Opis Pole tekstowe ustalonej dugoci. acuchy zawierajce mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie spacjami. Podczas pobierania danych z bazy te dodatkowe spacje s usuwane. Pola CHAR(0) zostay zachowane w celu zapewnienia zgodnoci ze starymi systemami, w ktrych w kolumnach nie s zapisywane adne wartoci.

CHARACTER
Synonim CHAR.

30

MySQL. Leksykon kieszonkowy

CHARACTER VARYING
Synonim VARCHAR.

LONGBLOB
Binarny odpowiednik LONGTEXT.

LONGTEXT
LONGTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 4 294 295 Rozmiar w pamici Dugo wartoci+4 bajty Opis Typ pozwala zapisywa due wartoci tekstowe. Teoretyczne ograniczenie rozmiaru tekstu to ponad 4 GB, ale praktycznymi ograniczeniami s ograniczenia protokou komunikacyjnego MySQL oraz ilo pamici przeznaczonej na komunikacj na serwerze i na stacji klienckiej.

MEDIUMBLOB
Binarna posta MEDIUMTEXT.

MEDIUMTEXT
MEDIUMTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozdzia 3. Typy danych

31

Rozmiar 0 do 16 777 215 Rozmiar w pamici Dugo wartoci+3 bajty Opis Typ pozwala zapisywa redniej wielkoci wartoci tekstowe.

NCHAR
Synonim CHAR.

NATIONAL CHAR
Synonim CHAR.

NATIONAL CHARACTER
Synonim CHAR.

NATIONAL VARCHAR
Synonim VARCHAR.

TEXT
TEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 65 535

32

MySQL. Leksykon kieszonkowy

Rozmiar w pamici Dugo wartoci tekstowej+2 bajty Opis Typ pozwala zapisywa typowe wartoci tekstowe.

TINYBLOB
Binarny odpowiednik TINYTEXT.

TINYTEXT
TINYTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 255 Rozmiar w pamici Dugo wartoci tekstowej+1 bajt Opis Pozwala zapisywa krtkie dane tekstowe.

VARBINARY
VARBINARY(rozmiar)

Rozmiar Wedug parametru rozmiar

Rozdzia 3. Typy danych

33

Rozmiar w pamici
rozmiar bajtw

Opis Jest to binarna odmiana typu VARCHAR. Podstawowa rnica polega na tym, e zapisywane s dane binarne, a rozmiar pola mierzony jest w bajtach, nie w znakach. Wielkoci typu VARBINARY, w przeciwiestwie do wartoci typu BINARY, nie s niczym dopeniane.

VARCHAR
VARCHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar Wskazana przez rozmiar warto z zakresu do 65 532 (od 1 do 255 w wersjach wczeniejszych ni MySQL 5); rozmiar wskazuje rzeczywist wielko kolumny i jest ograniczony przez dopuszczaln wielko wiersza w znakach; to, ile miejsca faktycznie bdzie potrzebne, zaley zatem od zestawu znakw uytego w danej kolumnie Rozmiar w pamici Zaley od liczby znakw wskazanych jako rozmiar oraz od liczby bajtw potrzebnych do zapisu poszczeglnych znakw w uytym mechanizmie kodowania znakw Opis Pozwala zapisywa wartoci tekstowe zmiennej dugoci. W wersjach poprzedzajcych MySQL 5 z wartoci VARCHAR usuwane s spacje kocowe; wersja MySQL 5 i nowsze standardowo nie usuwaj spacji kocowych.

34

MySQL. Leksykon kieszonkowy

Daty
Typy datowe MySQL s wyjtkowo elastycznym narzdziem, pozwalajcym zapisywa wszelki informacje dzienne. MySQL jest bardzo tolerancyjny i zakada, e to aplikacja, a nie baza danych, ma sprawdza poprawno tych danych. MySQL sprawdza jedynie, czy miesic nie wykracza poza zakres 0 12 i czy dzie nie wykracza poza zakres 0 31. Wobec tego z punktu widzenia MySQL 31 lutego 2001 roku jest poprawn dat. Bardziej przydatn wartoci jest data 0 lutego 2001 roku; cyfra zero moe zastpowa t cz daty, ktrej dokadnie nie znamy. MySQL 5 jest jednak ju baz danych nieco bardziej restrykcyjn co do wartoci, jakie mona zapisywa w polach datowych. Wprawdzie MySQL dopuszcza do du swobod formatw wejciowych dat, to naley stara si w aplikacjach daty formatowa zgodnie z formatem wewntrznym MySQL w celu uniknicia nieporozumie. MySQL zawsze zakada, e rok jest pierwszym elementem po lewej stronie daty. Jeli w operacji SQL podana zostanie nieprawidowa warto daty, MySQL wstawi w jej miejsce zero. MySQL w kontekcie liczb cakowitych automatycznie konwertuje daty i czas na liczby cakowite.

DATE
DATE

Format
YYYY-MM-DD (2001-01-01)

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

35

Opis Data kalendarza gregoriaskiego z zakresu od 1 stycznia 1000 roku ('1000-01-01') do 31 grudnia 9999 roku ('9999-12-31').

DATETIME
DATETIME

Format
YYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 8 bajtw Opis Zapisuje czas z zakresu od 00:00:00 1 stycznia 1000 roku ('100001-01 00:00:00') do 23:59:59 31 grudnia 9999 ('9999-12-31 23:59:59') wedug kalendarza gregoriaskiego.

TIME
TIME

Format
hh:mm:ss (06:00:00)

Rozmiar w pamici 3 bajty Opis Zapisuje czas od pnocy ('00:00:00') do sekundy przed pnoc ('23:59:59').
36 | MySQL. Leksykon kieszonkowy

TIMESTAMP
TIMESTAMP[(rozmiar_wywietlania)]

Format
YYYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 4 bajty Opis Zapis chwili z dokadnoci do sekundy od pnocy 1 stycznia 1970 roku do minuty przed pnoc 31 grudnia 2037 roku. Podstawowym zastosowaniem tego typu jest rejestracja modyfikacji tabel. Przy wstawianiu do takiej kolumny wartoci NULL wstawiane s aktualna data i czas. W przypadku modyfikowania jakiejkolwiek wartoci w wierszu z kolumn TIMESTAMP pierwsza kolumna tego typu zostanie zaktualizowana biec dat i czasem. Format danych TIMESTAMP znany z wczeniejszych wersji MySQL, do 4.1 wcznie, w wersji 5.1 nie jest ju obsugiwany.

YEAR
YEAR[(rozmiar)]

Format
YYYY (2001)

Rozmiar w pamici 1 bajt

Rozdzia 3. Typy danych

37

Opis Pozwala zapisa rok z kalendarza gregoriaskiego. Parametr rozmiar umoliwia zapisywanie roku dwu- lub czterocyfrowo. Zakres YEAR(4) rozciga si od 1900 do 2155, dla YEAR(2) od 1970 do 2069. Domylnie przyjmowane jest YEAR(4).

Typy zoone
Zoone typy danych MySQL, ENUM i SET, s po prostu specjalnymi przypadkami typw acuchowych. Opisujemy je osobno, gdy s bardziej zoone pojciowo i stanowi wprowadzenie do typw danych SQL3, ktre by moe MySQL bdzie obsugiwa w przyszoci.

ENUM
ENUM(warto1, warto2, ...)

Rozmiar w pamici 1 255 elementw: 1 bajt 255 65 535 elementw: 2 bajty Opis Typ danych ENUM pozwala zapisywa jeden z wielu zdefiniowanych wczeniej acuchw. Przy tworzeniu kolumny typu ENUM podaje si list dopuszczalnych jej wartoci. Dane mog by do tej kolumny wstawiane i aktualizowane jedynie z tej listy; kada prba wstawienia wartoci spoza niej powoduje wstawienie pustego acucha.

38

MySQL. Leksykon kieszonkowy

Do listy dopuszczalnych wartoci mona si odwoywa przez indeks, przy czym pierwszy element otrzymuje numer 0. Na przykad:
SELECT COLID FROM TBL WHERE COLENUM = 0;

Jeli COLID jest kolumn z kluczem gwnym, a COLENUM kolumn typu ENUM, taka instrukcja SQL spowoduje pobranie kluczy gwnych wszystkich wierszy, dla ktrych COLENUM jest pierwsz wartoci z listy. Analogicznie, sortowanie wzgldem kolumn ENUM powoduje sortowanie wedug indeksu, nie acucha. Najwiksza moliwa liczba elementw kolumny ENUM to 65 535.

SET
SET(warto1, warto2, ...)

Rozmiar w pamici 1 8 elementw: 1 bajt 9 16 elementw: 2 bajty 17 24 elementy: 3 bajty 25 32 elementy: 4 bajty 33 64 elementy: 8 bajtw Opis Lista wartoci wybieranych z okrelonego wczeniej zbioru. Pole moe zawiera dowoln liczb acuchw wskazanych w instrukcji SET, szczeglnie moe nie zawiera adnej takiej wartoci. SET jest podobny do ENUM, ale kade pole moe zawiera wicej ni jedn z podanych wartoci. Dane typu SET nie s jednak zapisywane za pomoc indeksw, ale w zoonej mapie bitowej. Jeli dany jest zbir SET, zawierajcy elementy: Mandarynka, Pomidor,
Rozdzia 3. Typy danych | 39

Gruszka i Banan, kady z tych elementw jest reprezentowany jako

wczony bit w bajcie, jak to pokazano w tabeli 3.1.


Tabela 3.1. Reprezentacja zbioru elementw w MySQL
Element
Mandarynka Pomidor Gruszka Banan

Warto dziesitna
1 2 4 8

Zapis bitowy
0001 0010 0100 1000

W powyszym przykadzie zapisanie jednoczenie wartoci Mandarynka i Gruszka wymaga uycia wartoci 5 (bitowo 0101). W kolumnie SET mona zapisa najwyej 64 wartoci. Wprawdzie t sam warto mona w jednym wyraeniu SQL wpisa wielokrotnie, ale w bazie danych warto ta zostanie zapisana raz.

40

MySQL. Leksykon kieszonkowy

4. SQL .............................................................................................. 41
Rozrnianie wielkoci liter Literay Identyfikatory Komentarze Instrukcje Zasady dotyczce transakcji 41 42 43 45 46 106

5. Operatory .................................................................................. 108


Priorytety operatorw Operatory arytmetyczne Operatory porwnania Operatory logiczne 108 109 109 111

6. Funkcje .......................................................................................113
Funkcje agregujce Funkcje oglnego przeznaczenia 113 115

7. Rodzaje tabel ............................................................................ 137 8. Procedury i funkcje skadowane .............................................. 138


Parametry Logika Kursory Obsuga zdarze i warunki 138 139 143 144

9. Trygery ...................................................................................... 146 Skorowidz ................................................................................. 147

MySQL. Leksykon kieszonkowy

Rozdzia 3. Typy danych


We wszystkich typach danych nawiasami kwadratowymi ([]) oznaczane s fragmenty opcjonalne. Poniszy przykad pokazuje sposb prezentacji typu BIGINT, opisanego dalej w tym rozdziale:
BIGINT[(wielko_pokazywana)]

Oznacza to, e sowo BIGINT moe wystpi samodzielnie lub z pokazywan wartoci. Uycie kursywy wskazuje, e nie naley wpisywa sowa wielko_pokazywana, ale poda wasn warto. Oto przykady uycia:
BIGINT BIGINT(20)

Poza typem BIGINT take wiele innych typw danych MySQL uwzgldnia deklaracj rozmiaru wywietlania. Jeli nie powiedziano inaczej, musi to by liczba od 1 do 255. W wersjach MySQL starszych ni wersja 5, baza danych w niektrych przypadkach zmieniaa podany typ kolumny, nie informujc o tym uytkownika. Obecnie takie podmiany nie maj ju miejsca.
VARCHAR -> CHAR

Jeli podana kolumna VARCHAR ma rozmiar mniejszy od czterech znakw, jest przeksztacana w kolumn CHAR.
CHAR -> VARCHAR

Jeli tabela zawiera co najmniej jedn kolumn o zmiennej dugoci, wszystkie kolumny typu CHAR dusze ni trzy znaki s zamieniane na VARCHAR.

Rozmiar wywietlania TIMESTAMP Rozmiar wywietlania pl TIMESTAMP musi by zawsze wielkoci parzyst od 2 do 14. Rozmiar rwny 0 lub wikszy od 14 powoduje przyjcie 14. Wszelkie liczby nieparzyste s zamieniane na nastpn liczb parzyst.

22

MySQL. Leksykon kieszonkowy

Liczby
MySQL obsuguje liczbowe typy danych zgodne z ANSI SQL 2. Typy te dzielimy na cakowitoliczbowe, dziesitne i zmiennoprzecinkowe. W ramach tych grup dzielimy typy dalej, wedug zajmowanej przez nie pamici. W przypadku typw liczbowych mona poda rozmiar wywietlania, ktry wpywa na sposb pokazywania przez MySQL wynikw. Rozmiar ten nie ma adnego zwizku z wielkoci pamici zajmowanej przez dany typ. Dodatkowo w przypadku liczb zmiennoprzecinkowych i dziesitnych mona poda liczb cyfr znajdujcych si za kropk dziesitn. Wtedy liczba cyfr powinna nalee do zakresu od 0 do 30, czyli by co najmniej o dwa mniejsza od rozmiaru wywietlania. Jeli warunek ten nie zostanie dotrzymany, MySQL automatycznie zmieni liczb cyfr tak, aby bya mniejsza o dwa od rozmiaru wywietlania. Przykadowo, MySQL automatycznie zmieni FLOAT(6,5) na FLOAT(7,5). Prba wstawienia do kolumny wartoci przekraczajcej dopuszczalny zakres tej kolumny powoduje obcicie tej wartoci do najmniejszej (dla liczb ujemnych) lub najwikszej (dla liczb dodatnich) wartoci dla danej kolumny dopuszczalnej. Jeli takie obcicie jest robione podczas wykonywania instrukcji ALTER TABLE, LOAD DATA INFILE, UPDATE lub wielowierszowej instrukcji INSERT, MySQL pokazuje ostrzeenie. Wyjtkiem jest korzystanie z MySQL w wersji 5 lub nowszej w trybie penej zgodnoci ze standardem SQL, gdy wtedy w przypadku instrukcji INSERT i UPDATE zgaszany jest bd. Atrybutu AUTO_INCREMENT mona uy do co najwyej jednej kolumny cakowitoliczbowej w tabeli. Atrybut UNSIGNED moe by czony z dowolnym liczbowym typem danych. Uycie tego atrybutu powoduje, e do kolumny nie mona wpisywa liczb ujemnych. Atrybut ZEROFILL nakazuje wypenienie kolumny od lewej

Rozdzia 3. Typy danych

23

strony zerami podczas wywietlania jej wartoci. O liczbie tych zer decyduje szeroko wywietlania danej kolumny.

BIGINT
BIGINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Najwikszy z typw cakowitoliczbowych, pozwalajcy zapisywa liczby od 9 223 372 036 854 775 808 do 9 223 372 036 854 775 807 (jeli bez znaku, to od 0 do 18 446 744 073 709 551 615). Z uwagi na sposb realizacji dziaa na liczbach tego typu, naley unika operacji na liczbach BIGINT bez znaku wikszych ni 9 223 372 036 854 775 807, gdy moe to zaowocowa nieprawidowymi wynikami.

BIT
BIT[(bity)]

Rozmiar w pamici w przyblieniu bity bitw+7 lub 8 bitw Opis W wersjach MySQL 5.0.3 i starszych, pola typu BIT dziaay tak samo, jak TINYINT(1). Omawiany typ pola pozwala przechowywa ustalon liczb bitw. Jeli podana zostanie wielko bitw mniejsza od dozwolonej, MySQL wypeni zerami bity od lewej strony.
24 | MySQL. Leksykon kieszonkowy

DEC
Synonim typu DECIMAL.

DECIMAL
DECIMAL[(dokadno, [skala])] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici rnie Opis Pozwala zapisywa liczby zmiennoprzecinkowe w sytuacjach, kiedy istotna jest dokadno na przykad przy operowaniu kwotami pienidzy. Stosujc typ DECIMAL, trzeba poda dwa jego parametry, dokadno i skal. Dokadno to liczba znaczcych cyfr, za skala to liczba znaczcych cyfr po kropce dziesitnej. Przykadowo, kolumna SALDO typu DECIMAL(9,2) pozwoliaby zapisywa liczby dziewiciocyfrowe, przy czym na prawo od kropki dziesitnej mogyby by dwie cyfry. Zakres dopuszczalnych liczb to w takiej sytuacji od 9 999 999,99 do 9 999 999,99. Jeli podana zostanie liczba zawierajca wicej cyfr po przecinku, ni przewiduje to definicja, liczba zostanie zaokrglona. Wartoci spoza zakresu DECIMAL s obcinane tak, aby si w nim zmieciy. W wersjach MySQL starszych ni 5, wartoci DECIMAL nie byy zapisywane jako liczby zmiennoprzecinkowe, lecz jako acuchy znakw. Na kad cyfr zuywany by jeden znak w przypadku skali wikszej od 0, poza tym jeden dodatkowy znak zuywany jest w przypadku liczb ujemnych. Jeli skala wynosi 0, liczby nie maj czci uamkowej. SQL zgodnie z norm ANSI pozwala pomija dokadno i (lub) skal. Jeli brak dokadnoci, przyjmowane jest ustawienie

Rozdzia 3. Typy danych

25

domylne charakterystyczne dla implementacji. Jeli brak skali, przyjmowane jest zero. W MySQL domylna warto dokadnoci to 10.

DOUBLE
DOUBLE[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Liczba zmiennoprzecinkowa podwjnej precyzji. Ten typ danych pozwala zapisywa due wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 1,7976931348623157E+308 do 2,2250738585072014E308, 0 oraz wartoci dodatnie od 2,2250738585072014E308 do 1,7976931348623157E+308.

DOUBLE PRECISION
Synonim DOUBLE.

FLOAT
FLOAT[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 4 bajty

26

MySQL. Leksykon kieszonkowy

Opis Liczba zmiennoprzecinkowa pojedynczej precyzji. Ten typ danych pozwala zapisywa mae wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 3,402823466E+38 do 1,175494351E38, 0 oraz wartoci dodatnie od 1,175494351E38 do 3,402823466E+38.

INT
INT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 4 bajty Opis Podstawowy rodzaj liczb cakowitych od 2 147 483 648 do 2 147 483 647 (lub od 0 do 4 294 967 295 w przypadku liczb bez znaku).

INTEGER
Synonim INT.

MEDIUMINT
MEDIUMINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

27

Opis Liczby cakowite od 8 388 608 do 8 388 607 (lub od 0 do 16 777 215 w przypadku liczb bez znaku).

NUMERIC
Synonim DECIMAL.

REAL
Synonim DOUBLE.

SMALLINT
SMALLINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 2 bajty Opis Liczby cakowite z zakresu od 32 768 do 32 767 (od 0 do 65 535 w przypadku liczb bez znaku).

TINYINT
TINYINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 1 bajt

28

MySQL. Leksykon kieszonkowy

Opis Liczby cakowite od 128 do 127 (od 0 do 255 w przypadku liczb bez znaku).

acuchy
MySQL obsuguje dwie kategorie acuchw: acuchy tekstowe oraz acuchy binarne. Obie kategorie maj swoje specyficzne typy do obsugi rnych wielkoci pl i rnych sposobw porwnywania wartoci. W zalenoci od sposobu porwnywania, mona uwzgldnia bd nie wielko liter, mona te porwnywa dane binarnie (bajt po bajcie). Kiedy nazwa typu tekstowego (jak CHAR, VARCHAR i inne) zostanie oznaczona sowem kluczowym BINARY, kolumna pozostaje kolumn tekstow, ale dane s porwnywane ze sob binarnie.

BINARY
BINARY(rozmiar)

Rozmiar wedug rozmiar, w zakresie od 0 do 255 Rozmiar w pamici


rozmiar bajtw

Opis Typ danych BINARY to binarny odpowiednik typu CHAR. Podstawowa rnica midzy tymi dwoma typami polega na tym, e pole typu BINARY zawiera dane binarne, wielko tych danych jest mierzona nie w znakach, lecz w bajtach. acuchy zawierajce

Rozdzia 3. Typy danych

29

mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie znakami 0x00 (wersja MySQL 5.0.5 i nowsze) lub spacjami (wersje starsze).

BLOB
Binarny odpowiednik typu TEXT.

CHAR
CHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar wedug rozmiar, do 255 Rozmiar w pamici zaleny od rozmiaru i od uytego zestawu znakw Opis Pole tekstowe ustalonej dugoci. acuchy zawierajce mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie spacjami. Podczas pobierania danych z bazy te dodatkowe spacje s usuwane. Pola CHAR(0) zostay zachowane w celu zapewnienia zgodnoci ze starymi systemami, w ktrych w kolumnach nie s zapisywane adne wartoci.

CHARACTER
Synonim CHAR.

30

MySQL. Leksykon kieszonkowy

CHARACTER VARYING
Synonim VARCHAR.

LONGBLOB
Binarny odpowiednik LONGTEXT.

LONGTEXT
LONGTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 4 294 295 Rozmiar w pamici Dugo wartoci+4 bajty Opis Typ pozwala zapisywa due wartoci tekstowe. Teoretyczne ograniczenie rozmiaru tekstu to ponad 4 GB, ale praktycznymi ograniczeniami s ograniczenia protokou komunikacyjnego MySQL oraz ilo pamici przeznaczonej na komunikacj na serwerze i na stacji klienckiej.

MEDIUMBLOB
Binarna posta MEDIUMTEXT.

MEDIUMTEXT
MEDIUMTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozdzia 3. Typy danych

31

Rozmiar 0 do 16 777 215 Rozmiar w pamici Dugo wartoci+3 bajty Opis Typ pozwala zapisywa redniej wielkoci wartoci tekstowe.

NCHAR
Synonim CHAR.

NATIONAL CHAR
Synonim CHAR.

NATIONAL CHARACTER
Synonim CHAR.

NATIONAL VARCHAR
Synonim VARCHAR.

TEXT
TEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 65 535

32

MySQL. Leksykon kieszonkowy

Rozmiar w pamici Dugo wartoci tekstowej+2 bajty Opis Typ pozwala zapisywa typowe wartoci tekstowe.

TINYBLOB
Binarny odpowiednik TINYTEXT.

TINYTEXT
TINYTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 255 Rozmiar w pamici Dugo wartoci tekstowej+1 bajt Opis Pozwala zapisywa krtkie dane tekstowe.

VARBINARY
VARBINARY(rozmiar)

Rozmiar Wedug parametru rozmiar

Rozdzia 3. Typy danych

33

Rozmiar w pamici
rozmiar bajtw

Opis Jest to binarna odmiana typu VARCHAR. Podstawowa rnica polega na tym, e zapisywane s dane binarne, a rozmiar pola mierzony jest w bajtach, nie w znakach. Wielkoci typu VARBINARY, w przeciwiestwie do wartoci typu BINARY, nie s niczym dopeniane.

VARCHAR
VARCHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar Wskazana przez rozmiar warto z zakresu do 65 532 (od 1 do 255 w wersjach wczeniejszych ni MySQL 5); rozmiar wskazuje rzeczywist wielko kolumny i jest ograniczony przez dopuszczaln wielko wiersza w znakach; to, ile miejsca faktycznie bdzie potrzebne, zaley zatem od zestawu znakw uytego w danej kolumnie Rozmiar w pamici Zaley od liczby znakw wskazanych jako rozmiar oraz od liczby bajtw potrzebnych do zapisu poszczeglnych znakw w uytym mechanizmie kodowania znakw Opis Pozwala zapisywa wartoci tekstowe zmiennej dugoci. W wersjach poprzedzajcych MySQL 5 z wartoci VARCHAR usuwane s spacje kocowe; wersja MySQL 5 i nowsze standardowo nie usuwaj spacji kocowych.

34

MySQL. Leksykon kieszonkowy

Daty
Typy datowe MySQL s wyjtkowo elastycznym narzdziem, pozwalajcym zapisywa wszelki informacje dzienne. MySQL jest bardzo tolerancyjny i zakada, e to aplikacja, a nie baza danych, ma sprawdza poprawno tych danych. MySQL sprawdza jedynie, czy miesic nie wykracza poza zakres 0 12 i czy dzie nie wykracza poza zakres 0 31. Wobec tego z punktu widzenia MySQL 31 lutego 2001 roku jest poprawn dat. Bardziej przydatn wartoci jest data 0 lutego 2001 roku; cyfra zero moe zastpowa t cz daty, ktrej dokadnie nie znamy. MySQL 5 jest jednak ju baz danych nieco bardziej restrykcyjn co do wartoci, jakie mona zapisywa w polach datowych. Wprawdzie MySQL dopuszcza do du swobod formatw wejciowych dat, to naley stara si w aplikacjach daty formatowa zgodnie z formatem wewntrznym MySQL w celu uniknicia nieporozumie. MySQL zawsze zakada, e rok jest pierwszym elementem po lewej stronie daty. Jeli w operacji SQL podana zostanie nieprawidowa warto daty, MySQL wstawi w jej miejsce zero. MySQL w kontekcie liczb cakowitych automatycznie konwertuje daty i czas na liczby cakowite.

DATE
DATE

Format
YYYY-MM-DD (2001-01-01)

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

35

Opis Data kalendarza gregoriaskiego z zakresu od 1 stycznia 1000 roku ('1000-01-01') do 31 grudnia 9999 roku ('9999-12-31').

DATETIME
DATETIME

Format
YYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 8 bajtw Opis Zapisuje czas z zakresu od 00:00:00 1 stycznia 1000 roku ('100001-01 00:00:00') do 23:59:59 31 grudnia 9999 ('9999-12-31 23:59:59') wedug kalendarza gregoriaskiego.

TIME
TIME

Format
hh:mm:ss (06:00:00)

Rozmiar w pamici 3 bajty Opis Zapisuje czas od pnocy ('00:00:00') do sekundy przed pnoc ('23:59:59').
36 | MySQL. Leksykon kieszonkowy

TIMESTAMP
TIMESTAMP[(rozmiar_wywietlania)]

Format
YYYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 4 bajty Opis Zapis chwili z dokadnoci do sekundy od pnocy 1 stycznia 1970 roku do minuty przed pnoc 31 grudnia 2037 roku. Podstawowym zastosowaniem tego typu jest rejestracja modyfikacji tabel. Przy wstawianiu do takiej kolumny wartoci NULL wstawiane s aktualna data i czas. W przypadku modyfikowania jakiejkolwiek wartoci w wierszu z kolumn TIMESTAMP pierwsza kolumna tego typu zostanie zaktualizowana biec dat i czasem. Format danych TIMESTAMP znany z wczeniejszych wersji MySQL, do 4.1 wcznie, w wersji 5.1 nie jest ju obsugiwany.

YEAR
YEAR[(rozmiar)]

Format
YYYY (2001)

Rozmiar w pamici 1 bajt

Rozdzia 3. Typy danych

37

Opis Pozwala zapisa rok z kalendarza gregoriaskiego. Parametr rozmiar umoliwia zapisywanie roku dwu- lub czterocyfrowo. Zakres YEAR(4) rozciga si od 1900 do 2155, dla YEAR(2) od 1970 do 2069. Domylnie przyjmowane jest YEAR(4).

Typy zoone
Zoone typy danych MySQL, ENUM i SET, s po prostu specjalnymi przypadkami typw acuchowych. Opisujemy je osobno, gdy s bardziej zoone pojciowo i stanowi wprowadzenie do typw danych SQL3, ktre by moe MySQL bdzie obsugiwa w przyszoci.

ENUM
ENUM(warto1, warto2, ...)

Rozmiar w pamici 1 255 elementw: 1 bajt 255 65 535 elementw: 2 bajty Opis Typ danych ENUM pozwala zapisywa jeden z wielu zdefiniowanych wczeniej acuchw. Przy tworzeniu kolumny typu ENUM podaje si list dopuszczalnych jej wartoci. Dane mog by do tej kolumny wstawiane i aktualizowane jedynie z tej listy; kada prba wstawienia wartoci spoza niej powoduje wstawienie pustego acucha.

38

MySQL. Leksykon kieszonkowy

Do listy dopuszczalnych wartoci mona si odwoywa przez indeks, przy czym pierwszy element otrzymuje numer 0. Na przykad:
SELECT COLID FROM TBL WHERE COLENUM = 0;

Jeli COLID jest kolumn z kluczem gwnym, a COLENUM kolumn typu ENUM, taka instrukcja SQL spowoduje pobranie kluczy gwnych wszystkich wierszy, dla ktrych COLENUM jest pierwsz wartoci z listy. Analogicznie, sortowanie wzgldem kolumn ENUM powoduje sortowanie wedug indeksu, nie acucha. Najwiksza moliwa liczba elementw kolumny ENUM to 65 535.

SET
SET(warto1, warto2, ...)

Rozmiar w pamici 1 8 elementw: 1 bajt 9 16 elementw: 2 bajty 17 24 elementy: 3 bajty 25 32 elementy: 4 bajty 33 64 elementy: 8 bajtw Opis Lista wartoci wybieranych z okrelonego wczeniej zbioru. Pole moe zawiera dowoln liczb acuchw wskazanych w instrukcji SET, szczeglnie moe nie zawiera adnej takiej wartoci. SET jest podobny do ENUM, ale kade pole moe zawiera wicej ni jedn z podanych wartoci. Dane typu SET nie s jednak zapisywane za pomoc indeksw, ale w zoonej mapie bitowej. Jeli dany jest zbir SET, zawierajcy elementy: Mandarynka, Pomidor,
Rozdzia 3. Typy danych | 39

Gruszka i Banan, kady z tych elementw jest reprezentowany jako

wczony bit w bajcie, jak to pokazano w tabeli 3.1.


Tabela 3.1. Reprezentacja zbioru elementw w MySQL
Element
Mandarynka Pomidor Gruszka Banan

Warto dziesitna
1 2 4 8

Zapis bitowy
0001 0010 0100 1000

W powyszym przykadzie zapisanie jednoczenie wartoci Mandarynka i Gruszka wymaga uycia wartoci 5 (bitowo 0101). W kolumnie SET mona zapisa najwyej 64 wartoci. Wprawdzie t sam warto mona w jednym wyraeniu SQL wpisa wielokrotnie, ale w bazie danych warto ta zostanie zapisana raz.

40

MySQL. Leksykon kieszonkowy

4. SQL .............................................................................................. 41
Rozrnianie wielkoci liter Literay Identyfikatory Komentarze Instrukcje Zasady dotyczce transakcji 41 42 43 45 46 106

5. Operatory .................................................................................. 108


Priorytety operatorw Operatory arytmetyczne Operatory porwnania Operatory logiczne 108 109 109 111

6. Funkcje .......................................................................................113
Funkcje agregujce Funkcje oglnego przeznaczenia 113 115

7. Rodzaje tabel ............................................................................ 137 8. Procedury i funkcje skadowane .............................................. 138


Parametry Logika Kursory Obsuga zdarze i warunki 138 139 143 144

9. Trygery ...................................................................................... 146 Skorowidz ................................................................................. 147

MySQL. Leksykon kieszonkowy

Rozdzia 3. Typy danych


We wszystkich typach danych nawiasami kwadratowymi ([]) oznaczane s fragmenty opcjonalne. Poniszy przykad pokazuje sposb prezentacji typu BIGINT, opisanego dalej w tym rozdziale:
BIGINT[(wielko_pokazywana)]

Oznacza to, e sowo BIGINT moe wystpi samodzielnie lub z pokazywan wartoci. Uycie kursywy wskazuje, e nie naley wpisywa sowa wielko_pokazywana, ale poda wasn warto. Oto przykady uycia:
BIGINT BIGINT(20)

Poza typem BIGINT take wiele innych typw danych MySQL uwzgldnia deklaracj rozmiaru wywietlania. Jeli nie powiedziano inaczej, musi to by liczba od 1 do 255. W wersjach MySQL starszych ni wersja 5, baza danych w niektrych przypadkach zmieniaa podany typ kolumny, nie informujc o tym uytkownika. Obecnie takie podmiany nie maj ju miejsca.
VARCHAR -> CHAR

Jeli podana kolumna VARCHAR ma rozmiar mniejszy od czterech znakw, jest przeksztacana w kolumn CHAR.
CHAR -> VARCHAR

Jeli tabela zawiera co najmniej jedn kolumn o zmiennej dugoci, wszystkie kolumny typu CHAR dusze ni trzy znaki s zamieniane na VARCHAR.

Rozmiar wywietlania TIMESTAMP Rozmiar wywietlania pl TIMESTAMP musi by zawsze wielkoci parzyst od 2 do 14. Rozmiar rwny 0 lub wikszy od 14 powoduje przyjcie 14. Wszelkie liczby nieparzyste s zamieniane na nastpn liczb parzyst.

22

MySQL. Leksykon kieszonkowy

Liczby
MySQL obsuguje liczbowe typy danych zgodne z ANSI SQL 2. Typy te dzielimy na cakowitoliczbowe, dziesitne i zmiennoprzecinkowe. W ramach tych grup dzielimy typy dalej, wedug zajmowanej przez nie pamici. W przypadku typw liczbowych mona poda rozmiar wywietlania, ktry wpywa na sposb pokazywania przez MySQL wynikw. Rozmiar ten nie ma adnego zwizku z wielkoci pamici zajmowanej przez dany typ. Dodatkowo w przypadku liczb zmiennoprzecinkowych i dziesitnych mona poda liczb cyfr znajdujcych si za kropk dziesitn. Wtedy liczba cyfr powinna nalee do zakresu od 0 do 30, czyli by co najmniej o dwa mniejsza od rozmiaru wywietlania. Jeli warunek ten nie zostanie dotrzymany, MySQL automatycznie zmieni liczb cyfr tak, aby bya mniejsza o dwa od rozmiaru wywietlania. Przykadowo, MySQL automatycznie zmieni FLOAT(6,5) na FLOAT(7,5). Prba wstawienia do kolumny wartoci przekraczajcej dopuszczalny zakres tej kolumny powoduje obcicie tej wartoci do najmniejszej (dla liczb ujemnych) lub najwikszej (dla liczb dodatnich) wartoci dla danej kolumny dopuszczalnej. Jeli takie obcicie jest robione podczas wykonywania instrukcji ALTER TABLE, LOAD DATA INFILE, UPDATE lub wielowierszowej instrukcji INSERT, MySQL pokazuje ostrzeenie. Wyjtkiem jest korzystanie z MySQL w wersji 5 lub nowszej w trybie penej zgodnoci ze standardem SQL, gdy wtedy w przypadku instrukcji INSERT i UPDATE zgaszany jest bd. Atrybutu AUTO_INCREMENT mona uy do co najwyej jednej kolumny cakowitoliczbowej w tabeli. Atrybut UNSIGNED moe by czony z dowolnym liczbowym typem danych. Uycie tego atrybutu powoduje, e do kolumny nie mona wpisywa liczb ujemnych. Atrybut ZEROFILL nakazuje wypenienie kolumny od lewej

Rozdzia 3. Typy danych

23

strony zerami podczas wywietlania jej wartoci. O liczbie tych zer decyduje szeroko wywietlania danej kolumny.

BIGINT
BIGINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Najwikszy z typw cakowitoliczbowych, pozwalajcy zapisywa liczby od 9 223 372 036 854 775 808 do 9 223 372 036 854 775 807 (jeli bez znaku, to od 0 do 18 446 744 073 709 551 615). Z uwagi na sposb realizacji dziaa na liczbach tego typu, naley unika operacji na liczbach BIGINT bez znaku wikszych ni 9 223 372 036 854 775 807, gdy moe to zaowocowa nieprawidowymi wynikami.

BIT
BIT[(bity)]

Rozmiar w pamici w przyblieniu bity bitw+7 lub 8 bitw Opis W wersjach MySQL 5.0.3 i starszych, pola typu BIT dziaay tak samo, jak TINYINT(1). Omawiany typ pola pozwala przechowywa ustalon liczb bitw. Jeli podana zostanie wielko bitw mniejsza od dozwolonej, MySQL wypeni zerami bity od lewej strony.
24 | MySQL. Leksykon kieszonkowy

DEC
Synonim typu DECIMAL.

DECIMAL
DECIMAL[(dokadno, [skala])] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici rnie Opis Pozwala zapisywa liczby zmiennoprzecinkowe w sytuacjach, kiedy istotna jest dokadno na przykad przy operowaniu kwotami pienidzy. Stosujc typ DECIMAL, trzeba poda dwa jego parametry, dokadno i skal. Dokadno to liczba znaczcych cyfr, za skala to liczba znaczcych cyfr po kropce dziesitnej. Przykadowo, kolumna SALDO typu DECIMAL(9,2) pozwoliaby zapisywa liczby dziewiciocyfrowe, przy czym na prawo od kropki dziesitnej mogyby by dwie cyfry. Zakres dopuszczalnych liczb to w takiej sytuacji od 9 999 999,99 do 9 999 999,99. Jeli podana zostanie liczba zawierajca wicej cyfr po przecinku, ni przewiduje to definicja, liczba zostanie zaokrglona. Wartoci spoza zakresu DECIMAL s obcinane tak, aby si w nim zmieciy. W wersjach MySQL starszych ni 5, wartoci DECIMAL nie byy zapisywane jako liczby zmiennoprzecinkowe, lecz jako acuchy znakw. Na kad cyfr zuywany by jeden znak w przypadku skali wikszej od 0, poza tym jeden dodatkowy znak zuywany jest w przypadku liczb ujemnych. Jeli skala wynosi 0, liczby nie maj czci uamkowej. SQL zgodnie z norm ANSI pozwala pomija dokadno i (lub) skal. Jeli brak dokadnoci, przyjmowane jest ustawienie

Rozdzia 3. Typy danych

25

domylne charakterystyczne dla implementacji. Jeli brak skali, przyjmowane jest zero. W MySQL domylna warto dokadnoci to 10.

DOUBLE
DOUBLE[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Liczba zmiennoprzecinkowa podwjnej precyzji. Ten typ danych pozwala zapisywa due wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 1,7976931348623157E+308 do 2,2250738585072014E308, 0 oraz wartoci dodatnie od 2,2250738585072014E308 do 1,7976931348623157E+308.

DOUBLE PRECISION
Synonim DOUBLE.

FLOAT
FLOAT[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 4 bajty

26

MySQL. Leksykon kieszonkowy

Opis Liczba zmiennoprzecinkowa pojedynczej precyzji. Ten typ danych pozwala zapisywa mae wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 3,402823466E+38 do 1,175494351E38, 0 oraz wartoci dodatnie od 1,175494351E38 do 3,402823466E+38.

INT
INT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 4 bajty Opis Podstawowy rodzaj liczb cakowitych od 2 147 483 648 do 2 147 483 647 (lub od 0 do 4 294 967 295 w przypadku liczb bez znaku).

INTEGER
Synonim INT.

MEDIUMINT
MEDIUMINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

27

Opis Liczby cakowite od 8 388 608 do 8 388 607 (lub od 0 do 16 777 215 w przypadku liczb bez znaku).

NUMERIC
Synonim DECIMAL.

REAL
Synonim DOUBLE.

SMALLINT
SMALLINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 2 bajty Opis Liczby cakowite z zakresu od 32 768 do 32 767 (od 0 do 65 535 w przypadku liczb bez znaku).

TINYINT
TINYINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 1 bajt

28

MySQL. Leksykon kieszonkowy

Opis Liczby cakowite od 128 do 127 (od 0 do 255 w przypadku liczb bez znaku).

acuchy
MySQL obsuguje dwie kategorie acuchw: acuchy tekstowe oraz acuchy binarne. Obie kategorie maj swoje specyficzne typy do obsugi rnych wielkoci pl i rnych sposobw porwnywania wartoci. W zalenoci od sposobu porwnywania, mona uwzgldnia bd nie wielko liter, mona te porwnywa dane binarnie (bajt po bajcie). Kiedy nazwa typu tekstowego (jak CHAR, VARCHAR i inne) zostanie oznaczona sowem kluczowym BINARY, kolumna pozostaje kolumn tekstow, ale dane s porwnywane ze sob binarnie.

BINARY
BINARY(rozmiar)

Rozmiar wedug rozmiar, w zakresie od 0 do 255 Rozmiar w pamici


rozmiar bajtw

Opis Typ danych BINARY to binarny odpowiednik typu CHAR. Podstawowa rnica midzy tymi dwoma typami polega na tym, e pole typu BINARY zawiera dane binarne, wielko tych danych jest mierzona nie w znakach, lecz w bajtach. acuchy zawierajce

Rozdzia 3. Typy danych

29

mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie znakami 0x00 (wersja MySQL 5.0.5 i nowsze) lub spacjami (wersje starsze).

BLOB
Binarny odpowiednik typu TEXT.

CHAR
CHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar wedug rozmiar, do 255 Rozmiar w pamici zaleny od rozmiaru i od uytego zestawu znakw Opis Pole tekstowe ustalonej dugoci. acuchy zawierajce mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie spacjami. Podczas pobierania danych z bazy te dodatkowe spacje s usuwane. Pola CHAR(0) zostay zachowane w celu zapewnienia zgodnoci ze starymi systemami, w ktrych w kolumnach nie s zapisywane adne wartoci.

CHARACTER
Synonim CHAR.

30

MySQL. Leksykon kieszonkowy

CHARACTER VARYING
Synonim VARCHAR.

LONGBLOB
Binarny odpowiednik LONGTEXT.

LONGTEXT
LONGTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 4 294 295 Rozmiar w pamici Dugo wartoci+4 bajty Opis Typ pozwala zapisywa due wartoci tekstowe. Teoretyczne ograniczenie rozmiaru tekstu to ponad 4 GB, ale praktycznymi ograniczeniami s ograniczenia protokou komunikacyjnego MySQL oraz ilo pamici przeznaczonej na komunikacj na serwerze i na stacji klienckiej.

MEDIUMBLOB
Binarna posta MEDIUMTEXT.

MEDIUMTEXT
MEDIUMTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozdzia 3. Typy danych

31

Rozmiar 0 do 16 777 215 Rozmiar w pamici Dugo wartoci+3 bajty Opis Typ pozwala zapisywa redniej wielkoci wartoci tekstowe.

NCHAR
Synonim CHAR.

NATIONAL CHAR
Synonim CHAR.

NATIONAL CHARACTER
Synonim CHAR.

NATIONAL VARCHAR
Synonim VARCHAR.

TEXT
TEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 65 535

32

MySQL. Leksykon kieszonkowy

Rozmiar w pamici Dugo wartoci tekstowej+2 bajty Opis Typ pozwala zapisywa typowe wartoci tekstowe.

TINYBLOB
Binarny odpowiednik TINYTEXT.

TINYTEXT
TINYTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 255 Rozmiar w pamici Dugo wartoci tekstowej+1 bajt Opis Pozwala zapisywa krtkie dane tekstowe.

VARBINARY
VARBINARY(rozmiar)

Rozmiar Wedug parametru rozmiar

Rozdzia 3. Typy danych

33

Rozmiar w pamici
rozmiar bajtw

Opis Jest to binarna odmiana typu VARCHAR. Podstawowa rnica polega na tym, e zapisywane s dane binarne, a rozmiar pola mierzony jest w bajtach, nie w znakach. Wielkoci typu VARBINARY, w przeciwiestwie do wartoci typu BINARY, nie s niczym dopeniane.

VARCHAR
VARCHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar Wskazana przez rozmiar warto z zakresu do 65 532 (od 1 do 255 w wersjach wczeniejszych ni MySQL 5); rozmiar wskazuje rzeczywist wielko kolumny i jest ograniczony przez dopuszczaln wielko wiersza w znakach; to, ile miejsca faktycznie bdzie potrzebne, zaley zatem od zestawu znakw uytego w danej kolumnie Rozmiar w pamici Zaley od liczby znakw wskazanych jako rozmiar oraz od liczby bajtw potrzebnych do zapisu poszczeglnych znakw w uytym mechanizmie kodowania znakw Opis Pozwala zapisywa wartoci tekstowe zmiennej dugoci. W wersjach poprzedzajcych MySQL 5 z wartoci VARCHAR usuwane s spacje kocowe; wersja MySQL 5 i nowsze standardowo nie usuwaj spacji kocowych.

34

MySQL. Leksykon kieszonkowy

Daty
Typy datowe MySQL s wyjtkowo elastycznym narzdziem, pozwalajcym zapisywa wszelki informacje dzienne. MySQL jest bardzo tolerancyjny i zakada, e to aplikacja, a nie baza danych, ma sprawdza poprawno tych danych. MySQL sprawdza jedynie, czy miesic nie wykracza poza zakres 0 12 i czy dzie nie wykracza poza zakres 0 31. Wobec tego z punktu widzenia MySQL 31 lutego 2001 roku jest poprawn dat. Bardziej przydatn wartoci jest data 0 lutego 2001 roku; cyfra zero moe zastpowa t cz daty, ktrej dokadnie nie znamy. MySQL 5 jest jednak ju baz danych nieco bardziej restrykcyjn co do wartoci, jakie mona zapisywa w polach datowych. Wprawdzie MySQL dopuszcza do du swobod formatw wejciowych dat, to naley stara si w aplikacjach daty formatowa zgodnie z formatem wewntrznym MySQL w celu uniknicia nieporozumie. MySQL zawsze zakada, e rok jest pierwszym elementem po lewej stronie daty. Jeli w operacji SQL podana zostanie nieprawidowa warto daty, MySQL wstawi w jej miejsce zero. MySQL w kontekcie liczb cakowitych automatycznie konwertuje daty i czas na liczby cakowite.

DATE
DATE

Format
YYYY-MM-DD (2001-01-01)

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

35

Opis Data kalendarza gregoriaskiego z zakresu od 1 stycznia 1000 roku ('1000-01-01') do 31 grudnia 9999 roku ('9999-12-31').

DATETIME
DATETIME

Format
YYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 8 bajtw Opis Zapisuje czas z zakresu od 00:00:00 1 stycznia 1000 roku ('100001-01 00:00:00') do 23:59:59 31 grudnia 9999 ('9999-12-31 23:59:59') wedug kalendarza gregoriaskiego.

TIME
TIME

Format
hh:mm:ss (06:00:00)

Rozmiar w pamici 3 bajty Opis Zapisuje czas od pnocy ('00:00:00') do sekundy przed pnoc ('23:59:59').
36 | MySQL. Leksykon kieszonkowy

TIMESTAMP
TIMESTAMP[(rozmiar_wywietlania)]

Format
YYYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 4 bajty Opis Zapis chwili z dokadnoci do sekundy od pnocy 1 stycznia 1970 roku do minuty przed pnoc 31 grudnia 2037 roku. Podstawowym zastosowaniem tego typu jest rejestracja modyfikacji tabel. Przy wstawianiu do takiej kolumny wartoci NULL wstawiane s aktualna data i czas. W przypadku modyfikowania jakiejkolwiek wartoci w wierszu z kolumn TIMESTAMP pierwsza kolumna tego typu zostanie zaktualizowana biec dat i czasem. Format danych TIMESTAMP znany z wczeniejszych wersji MySQL, do 4.1 wcznie, w wersji 5.1 nie jest ju obsugiwany.

YEAR
YEAR[(rozmiar)]

Format
YYYY (2001)

Rozmiar w pamici 1 bajt

Rozdzia 3. Typy danych

37

Opis Pozwala zapisa rok z kalendarza gregoriaskiego. Parametr rozmiar umoliwia zapisywanie roku dwu- lub czterocyfrowo. Zakres YEAR(4) rozciga si od 1900 do 2155, dla YEAR(2) od 1970 do 2069. Domylnie przyjmowane jest YEAR(4).

Typy zoone
Zoone typy danych MySQL, ENUM i SET, s po prostu specjalnymi przypadkami typw acuchowych. Opisujemy je osobno, gdy s bardziej zoone pojciowo i stanowi wprowadzenie do typw danych SQL3, ktre by moe MySQL bdzie obsugiwa w przyszoci.

ENUM
ENUM(warto1, warto2, ...)

Rozmiar w pamici 1 255 elementw: 1 bajt 255 65 535 elementw: 2 bajty Opis Typ danych ENUM pozwala zapisywa jeden z wielu zdefiniowanych wczeniej acuchw. Przy tworzeniu kolumny typu ENUM podaje si list dopuszczalnych jej wartoci. Dane mog by do tej kolumny wstawiane i aktualizowane jedynie z tej listy; kada prba wstawienia wartoci spoza niej powoduje wstawienie pustego acucha.

38

MySQL. Leksykon kieszonkowy

Do listy dopuszczalnych wartoci mona si odwoywa przez indeks, przy czym pierwszy element otrzymuje numer 0. Na przykad:
SELECT COLID FROM TBL WHERE COLENUM = 0;

Jeli COLID jest kolumn z kluczem gwnym, a COLENUM kolumn typu ENUM, taka instrukcja SQL spowoduje pobranie kluczy gwnych wszystkich wierszy, dla ktrych COLENUM jest pierwsz wartoci z listy. Analogicznie, sortowanie wzgldem kolumn ENUM powoduje sortowanie wedug indeksu, nie acucha. Najwiksza moliwa liczba elementw kolumny ENUM to 65 535.

SET
SET(warto1, warto2, ...)

Rozmiar w pamici 1 8 elementw: 1 bajt 9 16 elementw: 2 bajty 17 24 elementy: 3 bajty 25 32 elementy: 4 bajty 33 64 elementy: 8 bajtw Opis Lista wartoci wybieranych z okrelonego wczeniej zbioru. Pole moe zawiera dowoln liczb acuchw wskazanych w instrukcji SET, szczeglnie moe nie zawiera adnej takiej wartoci. SET jest podobny do ENUM, ale kade pole moe zawiera wicej ni jedn z podanych wartoci. Dane typu SET nie s jednak zapisywane za pomoc indeksw, ale w zoonej mapie bitowej. Jeli dany jest zbir SET, zawierajcy elementy: Mandarynka, Pomidor,
Rozdzia 3. Typy danych | 39

Gruszka i Banan, kady z tych elementw jest reprezentowany jako

wczony bit w bajcie, jak to pokazano w tabeli 3.1.


Tabela 3.1. Reprezentacja zbioru elementw w MySQL
Element
Mandarynka Pomidor Gruszka Banan

Warto dziesitna
1 2 4 8

Zapis bitowy
0001 0010 0100 1000

W powyszym przykadzie zapisanie jednoczenie wartoci Mandarynka i Gruszka wymaga uycia wartoci 5 (bitowo 0101). W kolumnie SET mona zapisa najwyej 64 wartoci. Wprawdzie t sam warto mona w jednym wyraeniu SQL wpisa wielokrotnie, ale w bazie danych warto ta zostanie zapisana raz.

40

MySQL. Leksykon kieszonkowy

4. SQL .............................................................................................. 41
Rozrnianie wielkoci liter Literay Identyfikatory Komentarze Instrukcje Zasady dotyczce transakcji 41 42 43 45 46 106

5. Operatory .................................................................................. 108


Priorytety operatorw Operatory arytmetyczne Operatory porwnania Operatory logiczne 108 109 109 111

6. Funkcje .......................................................................................113
Funkcje agregujce Funkcje oglnego przeznaczenia 113 115

7. Rodzaje tabel ............................................................................ 137 8. Procedury i funkcje skadowane .............................................. 138


Parametry Logika Kursory Obsuga zdarze i warunki 138 139 143 144

9. Trygery ...................................................................................... 146 Skorowidz ................................................................................. 147

MySQL. Leksykon kieszonkowy

Rozdzia 3. Typy danych


We wszystkich typach danych nawiasami kwadratowymi ([]) oznaczane s fragmenty opcjonalne. Poniszy przykad pokazuje sposb prezentacji typu BIGINT, opisanego dalej w tym rozdziale:
BIGINT[(wielko_pokazywana)]

Oznacza to, e sowo BIGINT moe wystpi samodzielnie lub z pokazywan wartoci. Uycie kursywy wskazuje, e nie naley wpisywa sowa wielko_pokazywana, ale poda wasn warto. Oto przykady uycia:
BIGINT BIGINT(20)

Poza typem BIGINT take wiele innych typw danych MySQL uwzgldnia deklaracj rozmiaru wywietlania. Jeli nie powiedziano inaczej, musi to by liczba od 1 do 255. W wersjach MySQL starszych ni wersja 5, baza danych w niektrych przypadkach zmieniaa podany typ kolumny, nie informujc o tym uytkownika. Obecnie takie podmiany nie maj ju miejsca.
VARCHAR -> CHAR

Jeli podana kolumna VARCHAR ma rozmiar mniejszy od czterech znakw, jest przeksztacana w kolumn CHAR.
CHAR -> VARCHAR

Jeli tabela zawiera co najmniej jedn kolumn o zmiennej dugoci, wszystkie kolumny typu CHAR dusze ni trzy znaki s zamieniane na VARCHAR.

Rozmiar wywietlania TIMESTAMP Rozmiar wywietlania pl TIMESTAMP musi by zawsze wielkoci parzyst od 2 do 14. Rozmiar rwny 0 lub wikszy od 14 powoduje przyjcie 14. Wszelkie liczby nieparzyste s zamieniane na nastpn liczb parzyst.

22

MySQL. Leksykon kieszonkowy

Liczby
MySQL obsuguje liczbowe typy danych zgodne z ANSI SQL 2. Typy te dzielimy na cakowitoliczbowe, dziesitne i zmiennoprzecinkowe. W ramach tych grup dzielimy typy dalej, wedug zajmowanej przez nie pamici. W przypadku typw liczbowych mona poda rozmiar wywietlania, ktry wpywa na sposb pokazywania przez MySQL wynikw. Rozmiar ten nie ma adnego zwizku z wielkoci pamici zajmowanej przez dany typ. Dodatkowo w przypadku liczb zmiennoprzecinkowych i dziesitnych mona poda liczb cyfr znajdujcych si za kropk dziesitn. Wtedy liczba cyfr powinna nalee do zakresu od 0 do 30, czyli by co najmniej o dwa mniejsza od rozmiaru wywietlania. Jeli warunek ten nie zostanie dotrzymany, MySQL automatycznie zmieni liczb cyfr tak, aby bya mniejsza o dwa od rozmiaru wywietlania. Przykadowo, MySQL automatycznie zmieni FLOAT(6,5) na FLOAT(7,5). Prba wstawienia do kolumny wartoci przekraczajcej dopuszczalny zakres tej kolumny powoduje obcicie tej wartoci do najmniejszej (dla liczb ujemnych) lub najwikszej (dla liczb dodatnich) wartoci dla danej kolumny dopuszczalnej. Jeli takie obcicie jest robione podczas wykonywania instrukcji ALTER TABLE, LOAD DATA INFILE, UPDATE lub wielowierszowej instrukcji INSERT, MySQL pokazuje ostrzeenie. Wyjtkiem jest korzystanie z MySQL w wersji 5 lub nowszej w trybie penej zgodnoci ze standardem SQL, gdy wtedy w przypadku instrukcji INSERT i UPDATE zgaszany jest bd. Atrybutu AUTO_INCREMENT mona uy do co najwyej jednej kolumny cakowitoliczbowej w tabeli. Atrybut UNSIGNED moe by czony z dowolnym liczbowym typem danych. Uycie tego atrybutu powoduje, e do kolumny nie mona wpisywa liczb ujemnych. Atrybut ZEROFILL nakazuje wypenienie kolumny od lewej

Rozdzia 3. Typy danych

23

strony zerami podczas wywietlania jej wartoci. O liczbie tych zer decyduje szeroko wywietlania danej kolumny.

BIGINT
BIGINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Najwikszy z typw cakowitoliczbowych, pozwalajcy zapisywa liczby od 9 223 372 036 854 775 808 do 9 223 372 036 854 775 807 (jeli bez znaku, to od 0 do 18 446 744 073 709 551 615). Z uwagi na sposb realizacji dziaa na liczbach tego typu, naley unika operacji na liczbach BIGINT bez znaku wikszych ni 9 223 372 036 854 775 807, gdy moe to zaowocowa nieprawidowymi wynikami.

BIT
BIT[(bity)]

Rozmiar w pamici w przyblieniu bity bitw+7 lub 8 bitw Opis W wersjach MySQL 5.0.3 i starszych, pola typu BIT dziaay tak samo, jak TINYINT(1). Omawiany typ pola pozwala przechowywa ustalon liczb bitw. Jeli podana zostanie wielko bitw mniejsza od dozwolonej, MySQL wypeni zerami bity od lewej strony.
24 | MySQL. Leksykon kieszonkowy

DEC
Synonim typu DECIMAL.

DECIMAL
DECIMAL[(dokadno, [skala])] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici rnie Opis Pozwala zapisywa liczby zmiennoprzecinkowe w sytuacjach, kiedy istotna jest dokadno na przykad przy operowaniu kwotami pienidzy. Stosujc typ DECIMAL, trzeba poda dwa jego parametry, dokadno i skal. Dokadno to liczba znaczcych cyfr, za skala to liczba znaczcych cyfr po kropce dziesitnej. Przykadowo, kolumna SALDO typu DECIMAL(9,2) pozwoliaby zapisywa liczby dziewiciocyfrowe, przy czym na prawo od kropki dziesitnej mogyby by dwie cyfry. Zakres dopuszczalnych liczb to w takiej sytuacji od 9 999 999,99 do 9 999 999,99. Jeli podana zostanie liczba zawierajca wicej cyfr po przecinku, ni przewiduje to definicja, liczba zostanie zaokrglona. Wartoci spoza zakresu DECIMAL s obcinane tak, aby si w nim zmieciy. W wersjach MySQL starszych ni 5, wartoci DECIMAL nie byy zapisywane jako liczby zmiennoprzecinkowe, lecz jako acuchy znakw. Na kad cyfr zuywany by jeden znak w przypadku skali wikszej od 0, poza tym jeden dodatkowy znak zuywany jest w przypadku liczb ujemnych. Jeli skala wynosi 0, liczby nie maj czci uamkowej. SQL zgodnie z norm ANSI pozwala pomija dokadno i (lub) skal. Jeli brak dokadnoci, przyjmowane jest ustawienie

Rozdzia 3. Typy danych

25

domylne charakterystyczne dla implementacji. Jeli brak skali, przyjmowane jest zero. W MySQL domylna warto dokadnoci to 10.

DOUBLE
DOUBLE[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Liczba zmiennoprzecinkowa podwjnej precyzji. Ten typ danych pozwala zapisywa due wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 1,7976931348623157E+308 do 2,2250738585072014E308, 0 oraz wartoci dodatnie od 2,2250738585072014E308 do 1,7976931348623157E+308.

DOUBLE PRECISION
Synonim DOUBLE.

FLOAT
FLOAT[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 4 bajty

26

MySQL. Leksykon kieszonkowy

Opis Liczba zmiennoprzecinkowa pojedynczej precyzji. Ten typ danych pozwala zapisywa mae wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 3,402823466E+38 do 1,175494351E38, 0 oraz wartoci dodatnie od 1,175494351E38 do 3,402823466E+38.

INT
INT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 4 bajty Opis Podstawowy rodzaj liczb cakowitych od 2 147 483 648 do 2 147 483 647 (lub od 0 do 4 294 967 295 w przypadku liczb bez znaku).

INTEGER
Synonim INT.

MEDIUMINT
MEDIUMINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

27

Opis Liczby cakowite od 8 388 608 do 8 388 607 (lub od 0 do 16 777 215 w przypadku liczb bez znaku).

NUMERIC
Synonim DECIMAL.

REAL
Synonim DOUBLE.

SMALLINT
SMALLINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 2 bajty Opis Liczby cakowite z zakresu od 32 768 do 32 767 (od 0 do 65 535 w przypadku liczb bez znaku).

TINYINT
TINYINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 1 bajt

28

MySQL. Leksykon kieszonkowy

Opis Liczby cakowite od 128 do 127 (od 0 do 255 w przypadku liczb bez znaku).

acuchy
MySQL obsuguje dwie kategorie acuchw: acuchy tekstowe oraz acuchy binarne. Obie kategorie maj swoje specyficzne typy do obsugi rnych wielkoci pl i rnych sposobw porwnywania wartoci. W zalenoci od sposobu porwnywania, mona uwzgldnia bd nie wielko liter, mona te porwnywa dane binarnie (bajt po bajcie). Kiedy nazwa typu tekstowego (jak CHAR, VARCHAR i inne) zostanie oznaczona sowem kluczowym BINARY, kolumna pozostaje kolumn tekstow, ale dane s porwnywane ze sob binarnie.

BINARY
BINARY(rozmiar)

Rozmiar wedug rozmiar, w zakresie od 0 do 255 Rozmiar w pamici


rozmiar bajtw

Opis Typ danych BINARY to binarny odpowiednik typu CHAR. Podstawowa rnica midzy tymi dwoma typami polega na tym, e pole typu BINARY zawiera dane binarne, wielko tych danych jest mierzona nie w znakach, lecz w bajtach. acuchy zawierajce

Rozdzia 3. Typy danych

29

mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie znakami 0x00 (wersja MySQL 5.0.5 i nowsze) lub spacjami (wersje starsze).

BLOB
Binarny odpowiednik typu TEXT.

CHAR
CHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar wedug rozmiar, do 255 Rozmiar w pamici zaleny od rozmiaru i od uytego zestawu znakw Opis Pole tekstowe ustalonej dugoci. acuchy zawierajce mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie spacjami. Podczas pobierania danych z bazy te dodatkowe spacje s usuwane. Pola CHAR(0) zostay zachowane w celu zapewnienia zgodnoci ze starymi systemami, w ktrych w kolumnach nie s zapisywane adne wartoci.

CHARACTER
Synonim CHAR.

30

MySQL. Leksykon kieszonkowy

CHARACTER VARYING
Synonim VARCHAR.

LONGBLOB
Binarny odpowiednik LONGTEXT.

LONGTEXT
LONGTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 4 294 295 Rozmiar w pamici Dugo wartoci+4 bajty Opis Typ pozwala zapisywa due wartoci tekstowe. Teoretyczne ograniczenie rozmiaru tekstu to ponad 4 GB, ale praktycznymi ograniczeniami s ograniczenia protokou komunikacyjnego MySQL oraz ilo pamici przeznaczonej na komunikacj na serwerze i na stacji klienckiej.

MEDIUMBLOB
Binarna posta MEDIUMTEXT.

MEDIUMTEXT
MEDIUMTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozdzia 3. Typy danych

31

Rozmiar 0 do 16 777 215 Rozmiar w pamici Dugo wartoci+3 bajty Opis Typ pozwala zapisywa redniej wielkoci wartoci tekstowe.

NCHAR
Synonim CHAR.

NATIONAL CHAR
Synonim CHAR.

NATIONAL CHARACTER
Synonim CHAR.

NATIONAL VARCHAR
Synonim VARCHAR.

TEXT
TEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 65 535

32

MySQL. Leksykon kieszonkowy

Rozmiar w pamici Dugo wartoci tekstowej+2 bajty Opis Typ pozwala zapisywa typowe wartoci tekstowe.

TINYBLOB
Binarny odpowiednik TINYTEXT.

TINYTEXT
TINYTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 255 Rozmiar w pamici Dugo wartoci tekstowej+1 bajt Opis Pozwala zapisywa krtkie dane tekstowe.

VARBINARY
VARBINARY(rozmiar)

Rozmiar Wedug parametru rozmiar

Rozdzia 3. Typy danych

33

Rozmiar w pamici
rozmiar bajtw

Opis Jest to binarna odmiana typu VARCHAR. Podstawowa rnica polega na tym, e zapisywane s dane binarne, a rozmiar pola mierzony jest w bajtach, nie w znakach. Wielkoci typu VARBINARY, w przeciwiestwie do wartoci typu BINARY, nie s niczym dopeniane.

VARCHAR
VARCHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar Wskazana przez rozmiar warto z zakresu do 65 532 (od 1 do 255 w wersjach wczeniejszych ni MySQL 5); rozmiar wskazuje rzeczywist wielko kolumny i jest ograniczony przez dopuszczaln wielko wiersza w znakach; to, ile miejsca faktycznie bdzie potrzebne, zaley zatem od zestawu znakw uytego w danej kolumnie Rozmiar w pamici Zaley od liczby znakw wskazanych jako rozmiar oraz od liczby bajtw potrzebnych do zapisu poszczeglnych znakw w uytym mechanizmie kodowania znakw Opis Pozwala zapisywa wartoci tekstowe zmiennej dugoci. W wersjach poprzedzajcych MySQL 5 z wartoci VARCHAR usuwane s spacje kocowe; wersja MySQL 5 i nowsze standardowo nie usuwaj spacji kocowych.

34

MySQL. Leksykon kieszonkowy

Daty
Typy datowe MySQL s wyjtkowo elastycznym narzdziem, pozwalajcym zapisywa wszelki informacje dzienne. MySQL jest bardzo tolerancyjny i zakada, e to aplikacja, a nie baza danych, ma sprawdza poprawno tych danych. MySQL sprawdza jedynie, czy miesic nie wykracza poza zakres 0 12 i czy dzie nie wykracza poza zakres 0 31. Wobec tego z punktu widzenia MySQL 31 lutego 2001 roku jest poprawn dat. Bardziej przydatn wartoci jest data 0 lutego 2001 roku; cyfra zero moe zastpowa t cz daty, ktrej dokadnie nie znamy. MySQL 5 jest jednak ju baz danych nieco bardziej restrykcyjn co do wartoci, jakie mona zapisywa w polach datowych. Wprawdzie MySQL dopuszcza do du swobod formatw wejciowych dat, to naley stara si w aplikacjach daty formatowa zgodnie z formatem wewntrznym MySQL w celu uniknicia nieporozumie. MySQL zawsze zakada, e rok jest pierwszym elementem po lewej stronie daty. Jeli w operacji SQL podana zostanie nieprawidowa warto daty, MySQL wstawi w jej miejsce zero. MySQL w kontekcie liczb cakowitych automatycznie konwertuje daty i czas na liczby cakowite.

DATE
DATE

Format
YYYY-MM-DD (2001-01-01)

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

35

Opis Data kalendarza gregoriaskiego z zakresu od 1 stycznia 1000 roku ('1000-01-01') do 31 grudnia 9999 roku ('9999-12-31').

DATETIME
DATETIME

Format
YYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 8 bajtw Opis Zapisuje czas z zakresu od 00:00:00 1 stycznia 1000 roku ('100001-01 00:00:00') do 23:59:59 31 grudnia 9999 ('9999-12-31 23:59:59') wedug kalendarza gregoriaskiego.

TIME
TIME

Format
hh:mm:ss (06:00:00)

Rozmiar w pamici 3 bajty Opis Zapisuje czas od pnocy ('00:00:00') do sekundy przed pnoc ('23:59:59').
36 | MySQL. Leksykon kieszonkowy

TIMESTAMP
TIMESTAMP[(rozmiar_wywietlania)]

Format
YYYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 4 bajty Opis Zapis chwili z dokadnoci do sekundy od pnocy 1 stycznia 1970 roku do minuty przed pnoc 31 grudnia 2037 roku. Podstawowym zastosowaniem tego typu jest rejestracja modyfikacji tabel. Przy wstawianiu do takiej kolumny wartoci NULL wstawiane s aktualna data i czas. W przypadku modyfikowania jakiejkolwiek wartoci w wierszu z kolumn TIMESTAMP pierwsza kolumna tego typu zostanie zaktualizowana biec dat i czasem. Format danych TIMESTAMP znany z wczeniejszych wersji MySQL, do 4.1 wcznie, w wersji 5.1 nie jest ju obsugiwany.

YEAR
YEAR[(rozmiar)]

Format
YYYY (2001)

Rozmiar w pamici 1 bajt

Rozdzia 3. Typy danych

37

Opis Pozwala zapisa rok z kalendarza gregoriaskiego. Parametr rozmiar umoliwia zapisywanie roku dwu- lub czterocyfrowo. Zakres YEAR(4) rozciga si od 1900 do 2155, dla YEAR(2) od 1970 do 2069. Domylnie przyjmowane jest YEAR(4).

Typy zoone
Zoone typy danych MySQL, ENUM i SET, s po prostu specjalnymi przypadkami typw acuchowych. Opisujemy je osobno, gdy s bardziej zoone pojciowo i stanowi wprowadzenie do typw danych SQL3, ktre by moe MySQL bdzie obsugiwa w przyszoci.

ENUM
ENUM(warto1, warto2, ...)

Rozmiar w pamici 1 255 elementw: 1 bajt 255 65 535 elementw: 2 bajty Opis Typ danych ENUM pozwala zapisywa jeden z wielu zdefiniowanych wczeniej acuchw. Przy tworzeniu kolumny typu ENUM podaje si list dopuszczalnych jej wartoci. Dane mog by do tej kolumny wstawiane i aktualizowane jedynie z tej listy; kada prba wstawienia wartoci spoza niej powoduje wstawienie pustego acucha.

38

MySQL. Leksykon kieszonkowy

Do listy dopuszczalnych wartoci mona si odwoywa przez indeks, przy czym pierwszy element otrzymuje numer 0. Na przykad:
SELECT COLID FROM TBL WHERE COLENUM = 0;

Jeli COLID jest kolumn z kluczem gwnym, a COLENUM kolumn typu ENUM, taka instrukcja SQL spowoduje pobranie kluczy gwnych wszystkich wierszy, dla ktrych COLENUM jest pierwsz wartoci z listy. Analogicznie, sortowanie wzgldem kolumn ENUM powoduje sortowanie wedug indeksu, nie acucha. Najwiksza moliwa liczba elementw kolumny ENUM to 65 535.

SET
SET(warto1, warto2, ...)

Rozmiar w pamici 1 8 elementw: 1 bajt 9 16 elementw: 2 bajty 17 24 elementy: 3 bajty 25 32 elementy: 4 bajty 33 64 elementy: 8 bajtw Opis Lista wartoci wybieranych z okrelonego wczeniej zbioru. Pole moe zawiera dowoln liczb acuchw wskazanych w instrukcji SET, szczeglnie moe nie zawiera adnej takiej wartoci. SET jest podobny do ENUM, ale kade pole moe zawiera wicej ni jedn z podanych wartoci. Dane typu SET nie s jednak zapisywane za pomoc indeksw, ale w zoonej mapie bitowej. Jeli dany jest zbir SET, zawierajcy elementy: Mandarynka, Pomidor,
Rozdzia 3. Typy danych | 39

Gruszka i Banan, kady z tych elementw jest reprezentowany jako

wczony bit w bajcie, jak to pokazano w tabeli 3.1.


Tabela 3.1. Reprezentacja zbioru elementw w MySQL
Element
Mandarynka Pomidor Gruszka Banan

Warto dziesitna
1 2 4 8

Zapis bitowy
0001 0010 0100 1000

W powyszym przykadzie zapisanie jednoczenie wartoci Mandarynka i Gruszka wymaga uycia wartoci 5 (bitowo 0101). W kolumnie SET mona zapisa najwyej 64 wartoci. Wprawdzie t sam warto mona w jednym wyraeniu SQL wpisa wielokrotnie, ale w bazie danych warto ta zostanie zapisana raz.

40

MySQL. Leksykon kieszonkowy

MySQL. Leksykon kieszonkowy. II wydanie


Autor: George Reese Tumaczenie: Tomasz mijewski ISBN: 978-83-246-1385-4 Tytu oryginau: MySQL Pocket Reference, 2nd Ed Format: B6, stron: 160 MySQL to jeden z najpopularniejszych systemw zarzdzania bazami danych Rozprowadzany na zasadzie open source, MySQL jest wykorzystywany jako zaplecze bazodanowe setek tysicy serwisw WWW, sklepw internetowych, blogw i galerii. Coraz czciej sigaj po niego take twrcy rozbudowanych aplikacji korporacyjnych, poszukujcy stabilnej, bezpiecznej i wydajnej platformy do przechowywania danych. W najnowszej wersji, oznaczonej symbolem 5.0, dodano wiele od dawna oczekiwanych funkcji, w tym procedury skadowane, wyzwalacze, kursory i widoki. Poprawiono take mechanizmy skadowania danych. Jeli jeste administratorem lub programist baz danych, ksika MySQL. Leksykon kieszonkowy. II wydanie bdzie dla Ciebie nieocenion pomoc. W skondensowanej formie przedstawiono w niej wszystkie najistotniejsze zagadnienia zwizane z instalacj i konfiguracj tego systemu, a take z zarzdzaniem nim i wykorzystywaniem go. Znajdziesz tu omwienie typw danych, polece jzyka SQL, funkcji i rodzajw tabel. Przeczytasz take o replikacji, procedurach skadowanych, narzdziach dostpnych z wiersza polece i wyzwalaczach.
Pobieranie i instalacja MySQL Replikacja danych Narzdzia wiersza polece Typy danych Polecenia SQL Operatory Procedury skadowane

Dziki tej ksice Twoja praca z MySQL stanie si szybsza i efektywniejsza Wydawnictwo Helion ul. Kociuszki 1c 44-100 Gliwice tel. 032 230 98 63 e-mail: helion@helion.pl

Spis treci

Wstp ............................................................................................5 MySQL 5 ........................................................................................7


Widoki Trygery Procedury skadowane Kursory Nowe mechanizmy skadowania danych Zdarzenia bazy danych 7 7 7 8 8 9

1. Instalacja ..................................................................................... 10
Pobieranie MySQL Konfiguracja Uruchomienie Ustawianie hasa gwnego Replikacja 10 11 14 15 15

2. Narzdzia wiersza polece ........................................................ 18 3. Typy danych ................................................................................22


Liczby acuchy 23 29

4. SQL .............................................................................................. 41
Rozrnianie wielkoci liter Literay Identyfikatory Komentarze Instrukcje Zasady dotyczce transakcji 41 42 43 45 46 106

5. Operatory .................................................................................. 108


Priorytety operatorw Operatory arytmetyczne Operatory porwnania Operatory logiczne 108 109 109 111

6. Funkcje .......................................................................................113
Funkcje agregujce Funkcje oglnego przeznaczenia 113 115

7. Rodzaje tabel ............................................................................ 137 8. Procedury i funkcje skadowane .............................................. 138


Parametry Logika Kursory Obsuga zdarze i warunki 138 139 143 144

9. Trygery ...................................................................................... 146 Skorowidz ................................................................................. 147

MySQL. Leksykon kieszonkowy

Rozdzia 3. Typy danych


We wszystkich typach danych nawiasami kwadratowymi ([]) oznaczane s fragmenty opcjonalne. Poniszy przykad pokazuje sposb prezentacji typu BIGINT, opisanego dalej w tym rozdziale:
BIGINT[(wielko_pokazywana)]

Oznacza to, e sowo BIGINT moe wystpi samodzielnie lub z pokazywan wartoci. Uycie kursywy wskazuje, e nie naley wpisywa sowa wielko_pokazywana, ale poda wasn warto. Oto przykady uycia:
BIGINT BIGINT(20)

Poza typem BIGINT take wiele innych typw danych MySQL uwzgldnia deklaracj rozmiaru wywietlania. Jeli nie powiedziano inaczej, musi to by liczba od 1 do 255. W wersjach MySQL starszych ni wersja 5, baza danych w niektrych przypadkach zmieniaa podany typ kolumny, nie informujc o tym uytkownika. Obecnie takie podmiany nie maj ju miejsca.
VARCHAR -> CHAR

Jeli podana kolumna VARCHAR ma rozmiar mniejszy od czterech znakw, jest przeksztacana w kolumn CHAR.
CHAR -> VARCHAR

Jeli tabela zawiera co najmniej jedn kolumn o zmiennej dugoci, wszystkie kolumny typu CHAR dusze ni trzy znaki s zamieniane na VARCHAR.

Rozmiar wywietlania TIMESTAMP Rozmiar wywietlania pl TIMESTAMP musi by zawsze wielkoci parzyst od 2 do 14. Rozmiar rwny 0 lub wikszy od 14 powoduje przyjcie 14. Wszelkie liczby nieparzyste s zamieniane na nastpn liczb parzyst.

22

MySQL. Leksykon kieszonkowy

Liczby
MySQL obsuguje liczbowe typy danych zgodne z ANSI SQL 2. Typy te dzielimy na cakowitoliczbowe, dziesitne i zmiennoprzecinkowe. W ramach tych grup dzielimy typy dalej, wedug zajmowanej przez nie pamici. W przypadku typw liczbowych mona poda rozmiar wywietlania, ktry wpywa na sposb pokazywania przez MySQL wynikw. Rozmiar ten nie ma adnego zwizku z wielkoci pamici zajmowanej przez dany typ. Dodatkowo w przypadku liczb zmiennoprzecinkowych i dziesitnych mona poda liczb cyfr znajdujcych si za kropk dziesitn. Wtedy liczba cyfr powinna nalee do zakresu od 0 do 30, czyli by co najmniej o dwa mniejsza od rozmiaru wywietlania. Jeli warunek ten nie zostanie dotrzymany, MySQL automatycznie zmieni liczb cyfr tak, aby bya mniejsza o dwa od rozmiaru wywietlania. Przykadowo, MySQL automatycznie zmieni FLOAT(6,5) na FLOAT(7,5). Prba wstawienia do kolumny wartoci przekraczajcej dopuszczalny zakres tej kolumny powoduje obcicie tej wartoci do najmniejszej (dla liczb ujemnych) lub najwikszej (dla liczb dodatnich) wartoci dla danej kolumny dopuszczalnej. Jeli takie obcicie jest robione podczas wykonywania instrukcji ALTER TABLE, LOAD DATA INFILE, UPDATE lub wielowierszowej instrukcji INSERT, MySQL pokazuje ostrzeenie. Wyjtkiem jest korzystanie z MySQL w wersji 5 lub nowszej w trybie penej zgodnoci ze standardem SQL, gdy wtedy w przypadku instrukcji INSERT i UPDATE zgaszany jest bd. Atrybutu AUTO_INCREMENT mona uy do co najwyej jednej kolumny cakowitoliczbowej w tabeli. Atrybut UNSIGNED moe by czony z dowolnym liczbowym typem danych. Uycie tego atrybutu powoduje, e do kolumny nie mona wpisywa liczb ujemnych. Atrybut ZEROFILL nakazuje wypenienie kolumny od lewej

Rozdzia 3. Typy danych

23

strony zerami podczas wywietlania jej wartoci. O liczbie tych zer decyduje szeroko wywietlania danej kolumny.

BIGINT
BIGINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Najwikszy z typw cakowitoliczbowych, pozwalajcy zapisywa liczby od 9 223 372 036 854 775 808 do 9 223 372 036 854 775 807 (jeli bez znaku, to od 0 do 18 446 744 073 709 551 615). Z uwagi na sposb realizacji dziaa na liczbach tego typu, naley unika operacji na liczbach BIGINT bez znaku wikszych ni 9 223 372 036 854 775 807, gdy moe to zaowocowa nieprawidowymi wynikami.

BIT
BIT[(bity)]

Rozmiar w pamici w przyblieniu bity bitw+7 lub 8 bitw Opis W wersjach MySQL 5.0.3 i starszych, pola typu BIT dziaay tak samo, jak TINYINT(1). Omawiany typ pola pozwala przechowywa ustalon liczb bitw. Jeli podana zostanie wielko bitw mniejsza od dozwolonej, MySQL wypeni zerami bity od lewej strony.
24 | MySQL. Leksykon kieszonkowy

DEC
Synonim typu DECIMAL.

DECIMAL
DECIMAL[(dokadno, [skala])] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici rnie Opis Pozwala zapisywa liczby zmiennoprzecinkowe w sytuacjach, kiedy istotna jest dokadno na przykad przy operowaniu kwotami pienidzy. Stosujc typ DECIMAL, trzeba poda dwa jego parametry, dokadno i skal. Dokadno to liczba znaczcych cyfr, za skala to liczba znaczcych cyfr po kropce dziesitnej. Przykadowo, kolumna SALDO typu DECIMAL(9,2) pozwoliaby zapisywa liczby dziewiciocyfrowe, przy czym na prawo od kropki dziesitnej mogyby by dwie cyfry. Zakres dopuszczalnych liczb to w takiej sytuacji od 9 999 999,99 do 9 999 999,99. Jeli podana zostanie liczba zawierajca wicej cyfr po przecinku, ni przewiduje to definicja, liczba zostanie zaokrglona. Wartoci spoza zakresu DECIMAL s obcinane tak, aby si w nim zmieciy. W wersjach MySQL starszych ni 5, wartoci DECIMAL nie byy zapisywane jako liczby zmiennoprzecinkowe, lecz jako acuchy znakw. Na kad cyfr zuywany by jeden znak w przypadku skali wikszej od 0, poza tym jeden dodatkowy znak zuywany jest w przypadku liczb ujemnych. Jeli skala wynosi 0, liczby nie maj czci uamkowej. SQL zgodnie z norm ANSI pozwala pomija dokadno i (lub) skal. Jeli brak dokadnoci, przyjmowane jest ustawienie

Rozdzia 3. Typy danych

25

domylne charakterystyczne dla implementacji. Jeli brak skali, przyjmowane jest zero. W MySQL domylna warto dokadnoci to 10.

DOUBLE
DOUBLE[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Liczba zmiennoprzecinkowa podwjnej precyzji. Ten typ danych pozwala zapisywa due wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 1,7976931348623157E+308 do 2,2250738585072014E308, 0 oraz wartoci dodatnie od 2,2250738585072014E308 do 1,7976931348623157E+308.

DOUBLE PRECISION
Synonim DOUBLE.

FLOAT
FLOAT[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 4 bajty

26

MySQL. Leksykon kieszonkowy

Opis Liczba zmiennoprzecinkowa pojedynczej precyzji. Ten typ danych pozwala zapisywa mae wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 3,402823466E+38 do 1,175494351E38, 0 oraz wartoci dodatnie od 1,175494351E38 do 3,402823466E+38.

INT
INT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 4 bajty Opis Podstawowy rodzaj liczb cakowitych od 2 147 483 648 do 2 147 483 647 (lub od 0 do 4 294 967 295 w przypadku liczb bez znaku).

INTEGER
Synonim INT.

MEDIUMINT
MEDIUMINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

27

Opis Liczby cakowite od 8 388 608 do 8 388 607 (lub od 0 do 16 777 215 w przypadku liczb bez znaku).

NUMERIC
Synonim DECIMAL.

REAL
Synonim DOUBLE.

SMALLINT
SMALLINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 2 bajty Opis Liczby cakowite z zakresu od 32 768 do 32 767 (od 0 do 65 535 w przypadku liczb bez znaku).

TINYINT
TINYINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 1 bajt

28

MySQL. Leksykon kieszonkowy

Opis Liczby cakowite od 128 do 127 (od 0 do 255 w przypadku liczb bez znaku).

acuchy
MySQL obsuguje dwie kategorie acuchw: acuchy tekstowe oraz acuchy binarne. Obie kategorie maj swoje specyficzne typy do obsugi rnych wielkoci pl i rnych sposobw porwnywania wartoci. W zalenoci od sposobu porwnywania, mona uwzgldnia bd nie wielko liter, mona te porwnywa dane binarnie (bajt po bajcie). Kiedy nazwa typu tekstowego (jak CHAR, VARCHAR i inne) zostanie oznaczona sowem kluczowym BINARY, kolumna pozostaje kolumn tekstow, ale dane s porwnywane ze sob binarnie.

BINARY
BINARY(rozmiar)

Rozmiar wedug rozmiar, w zakresie od 0 do 255 Rozmiar w pamici


rozmiar bajtw

Opis Typ danych BINARY to binarny odpowiednik typu CHAR. Podstawowa rnica midzy tymi dwoma typami polega na tym, e pole typu BINARY zawiera dane binarne, wielko tych danych jest mierzona nie w znakach, lecz w bajtach. acuchy zawierajce

Rozdzia 3. Typy danych

29

mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie znakami 0x00 (wersja MySQL 5.0.5 i nowsze) lub spacjami (wersje starsze).

BLOB
Binarny odpowiednik typu TEXT.

CHAR
CHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar wedug rozmiar, do 255 Rozmiar w pamici zaleny od rozmiaru i od uytego zestawu znakw Opis Pole tekstowe ustalonej dugoci. acuchy zawierajce mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie spacjami. Podczas pobierania danych z bazy te dodatkowe spacje s usuwane. Pola CHAR(0) zostay zachowane w celu zapewnienia zgodnoci ze starymi systemami, w ktrych w kolumnach nie s zapisywane adne wartoci.

CHARACTER
Synonim CHAR.

30

MySQL. Leksykon kieszonkowy

CHARACTER VARYING
Synonim VARCHAR.

LONGBLOB
Binarny odpowiednik LONGTEXT.

LONGTEXT
LONGTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 4 294 295 Rozmiar w pamici Dugo wartoci+4 bajty Opis Typ pozwala zapisywa due wartoci tekstowe. Teoretyczne ograniczenie rozmiaru tekstu to ponad 4 GB, ale praktycznymi ograniczeniami s ograniczenia protokou komunikacyjnego MySQL oraz ilo pamici przeznaczonej na komunikacj na serwerze i na stacji klienckiej.

MEDIUMBLOB
Binarna posta MEDIUMTEXT.

MEDIUMTEXT
MEDIUMTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozdzia 3. Typy danych

31

Rozmiar 0 do 16 777 215 Rozmiar w pamici Dugo wartoci+3 bajty Opis Typ pozwala zapisywa redniej wielkoci wartoci tekstowe.

NCHAR
Synonim CHAR.

NATIONAL CHAR
Synonim CHAR.

NATIONAL CHARACTER
Synonim CHAR.

NATIONAL VARCHAR
Synonim VARCHAR.

TEXT
TEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 65 535

32

MySQL. Leksykon kieszonkowy

Rozmiar w pamici Dugo wartoci tekstowej+2 bajty Opis Typ pozwala zapisywa typowe wartoci tekstowe.

TINYBLOB
Binarny odpowiednik TINYTEXT.

TINYTEXT
TINYTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 255 Rozmiar w pamici Dugo wartoci tekstowej+1 bajt Opis Pozwala zapisywa krtkie dane tekstowe.

VARBINARY
VARBINARY(rozmiar)

Rozmiar Wedug parametru rozmiar

Rozdzia 3. Typy danych

33

Rozmiar w pamici
rozmiar bajtw

Opis Jest to binarna odmiana typu VARCHAR. Podstawowa rnica polega na tym, e zapisywane s dane binarne, a rozmiar pola mierzony jest w bajtach, nie w znakach. Wielkoci typu VARBINARY, w przeciwiestwie do wartoci typu BINARY, nie s niczym dopeniane.

VARCHAR
VARCHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar Wskazana przez rozmiar warto z zakresu do 65 532 (od 1 do 255 w wersjach wczeniejszych ni MySQL 5); rozmiar wskazuje rzeczywist wielko kolumny i jest ograniczony przez dopuszczaln wielko wiersza w znakach; to, ile miejsca faktycznie bdzie potrzebne, zaley zatem od zestawu znakw uytego w danej kolumnie Rozmiar w pamici Zaley od liczby znakw wskazanych jako rozmiar oraz od liczby bajtw potrzebnych do zapisu poszczeglnych znakw w uytym mechanizmie kodowania znakw Opis Pozwala zapisywa wartoci tekstowe zmiennej dugoci. W wersjach poprzedzajcych MySQL 5 z wartoci VARCHAR usuwane s spacje kocowe; wersja MySQL 5 i nowsze standardowo nie usuwaj spacji kocowych.

34

MySQL. Leksykon kieszonkowy

Daty
Typy datowe MySQL s wyjtkowo elastycznym narzdziem, pozwalajcym zapisywa wszelki informacje dzienne. MySQL jest bardzo tolerancyjny i zakada, e to aplikacja, a nie baza danych, ma sprawdza poprawno tych danych. MySQL sprawdza jedynie, czy miesic nie wykracza poza zakres 0 12 i czy dzie nie wykracza poza zakres 0 31. Wobec tego z punktu widzenia MySQL 31 lutego 2001 roku jest poprawn dat. Bardziej przydatn wartoci jest data 0 lutego 2001 roku; cyfra zero moe zastpowa t cz daty, ktrej dokadnie nie znamy. MySQL 5 jest jednak ju baz danych nieco bardziej restrykcyjn co do wartoci, jakie mona zapisywa w polach datowych. Wprawdzie MySQL dopuszcza do du swobod formatw wejciowych dat, to naley stara si w aplikacjach daty formatowa zgodnie z formatem wewntrznym MySQL w celu uniknicia nieporozumie. MySQL zawsze zakada, e rok jest pierwszym elementem po lewej stronie daty. Jeli w operacji SQL podana zostanie nieprawidowa warto daty, MySQL wstawi w jej miejsce zero. MySQL w kontekcie liczb cakowitych automatycznie konwertuje daty i czas na liczby cakowite.

DATE
DATE

Format
YYYY-MM-DD (2001-01-01)

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

35

Opis Data kalendarza gregoriaskiego z zakresu od 1 stycznia 1000 roku ('1000-01-01') do 31 grudnia 9999 roku ('9999-12-31').

DATETIME
DATETIME

Format
YYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 8 bajtw Opis Zapisuje czas z zakresu od 00:00:00 1 stycznia 1000 roku ('100001-01 00:00:00') do 23:59:59 31 grudnia 9999 ('9999-12-31 23:59:59') wedug kalendarza gregoriaskiego.

TIME
TIME

Format
hh:mm:ss (06:00:00)

Rozmiar w pamici 3 bajty Opis Zapisuje czas od pnocy ('00:00:00') do sekundy przed pnoc ('23:59:59').
36 | MySQL. Leksykon kieszonkowy

TIMESTAMP
TIMESTAMP[(rozmiar_wywietlania)]

Format
YYYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 4 bajty Opis Zapis chwili z dokadnoci do sekundy od pnocy 1 stycznia 1970 roku do minuty przed pnoc 31 grudnia 2037 roku. Podstawowym zastosowaniem tego typu jest rejestracja modyfikacji tabel. Przy wstawianiu do takiej kolumny wartoci NULL wstawiane s aktualna data i czas. W przypadku modyfikowania jakiejkolwiek wartoci w wierszu z kolumn TIMESTAMP pierwsza kolumna tego typu zostanie zaktualizowana biec dat i czasem. Format danych TIMESTAMP znany z wczeniejszych wersji MySQL, do 4.1 wcznie, w wersji 5.1 nie jest ju obsugiwany.

YEAR
YEAR[(rozmiar)]

Format
YYYY (2001)

Rozmiar w pamici 1 bajt

Rozdzia 3. Typy danych

37

Opis Pozwala zapisa rok z kalendarza gregoriaskiego. Parametr rozmiar umoliwia zapisywanie roku dwu- lub czterocyfrowo. Zakres YEAR(4) rozciga si od 1900 do 2155, dla YEAR(2) od 1970 do 2069. Domylnie przyjmowane jest YEAR(4).

Typy zoone
Zoone typy danych MySQL, ENUM i SET, s po prostu specjalnymi przypadkami typw acuchowych. Opisujemy je osobno, gdy s bardziej zoone pojciowo i stanowi wprowadzenie do typw danych SQL3, ktre by moe MySQL bdzie obsugiwa w przyszoci.

ENUM
ENUM(warto1, warto2, ...)

Rozmiar w pamici 1 255 elementw: 1 bajt 255 65 535 elementw: 2 bajty Opis Typ danych ENUM pozwala zapisywa jeden z wielu zdefiniowanych wczeniej acuchw. Przy tworzeniu kolumny typu ENUM podaje si list dopuszczalnych jej wartoci. Dane mog by do tej kolumny wstawiane i aktualizowane jedynie z tej listy; kada prba wstawienia wartoci spoza niej powoduje wstawienie pustego acucha.

38

MySQL. Leksykon kieszonkowy

Do listy dopuszczalnych wartoci mona si odwoywa przez indeks, przy czym pierwszy element otrzymuje numer 0. Na przykad:
SELECT COLID FROM TBL WHERE COLENUM = 0;

Jeli COLID jest kolumn z kluczem gwnym, a COLENUM kolumn typu ENUM, taka instrukcja SQL spowoduje pobranie kluczy gwnych wszystkich wierszy, dla ktrych COLENUM jest pierwsz wartoci z listy. Analogicznie, sortowanie wzgldem kolumn ENUM powoduje sortowanie wedug indeksu, nie acucha. Najwiksza moliwa liczba elementw kolumny ENUM to 65 535.

SET
SET(warto1, warto2, ...)

Rozmiar w pamici 1 8 elementw: 1 bajt 9 16 elementw: 2 bajty 17 24 elementy: 3 bajty 25 32 elementy: 4 bajty 33 64 elementy: 8 bajtw Opis Lista wartoci wybieranych z okrelonego wczeniej zbioru. Pole moe zawiera dowoln liczb acuchw wskazanych w instrukcji SET, szczeglnie moe nie zawiera adnej takiej wartoci. SET jest podobny do ENUM, ale kade pole moe zawiera wicej ni jedn z podanych wartoci. Dane typu SET nie s jednak zapisywane za pomoc indeksw, ale w zoonej mapie bitowej. Jeli dany jest zbir SET, zawierajcy elementy: Mandarynka, Pomidor,
Rozdzia 3. Typy danych | 39

Gruszka i Banan, kady z tych elementw jest reprezentowany jako

wczony bit w bajcie, jak to pokazano w tabeli 3.1.


Tabela 3.1. Reprezentacja zbioru elementw w MySQL
Element
Mandarynka Pomidor Gruszka Banan

Warto dziesitna
1 2 4 8

Zapis bitowy
0001 0010 0100 1000

W powyszym przykadzie zapisanie jednoczenie wartoci Mandarynka i Gruszka wymaga uycia wartoci 5 (bitowo 0101). W kolumnie SET mona zapisa najwyej 64 wartoci. Wprawdzie t sam warto mona w jednym wyraeniu SQL wpisa wielokrotnie, ale w bazie danych warto ta zostanie zapisana raz.

40

MySQL. Leksykon kieszonkowy

4. SQL .............................................................................................. 41
Rozrnianie wielkoci liter Literay Identyfikatory Komentarze Instrukcje Zasady dotyczce transakcji 41 42 43 45 46 106

5. Operatory .................................................................................. 108


Priorytety operatorw Operatory arytmetyczne Operatory porwnania Operatory logiczne 108 109 109 111

6. Funkcje .......................................................................................113
Funkcje agregujce Funkcje oglnego przeznaczenia 113 115

7. Rodzaje tabel ............................................................................ 137 8. Procedury i funkcje skadowane .............................................. 138


Parametry Logika Kursory Obsuga zdarze i warunki 138 139 143 144

9. Trygery ...................................................................................... 146 Skorowidz ................................................................................. 147

MySQL. Leksykon kieszonkowy

Rozdzia 3. Typy danych


We wszystkich typach danych nawiasami kwadratowymi ([]) oznaczane s fragmenty opcjonalne. Poniszy przykad pokazuje sposb prezentacji typu BIGINT, opisanego dalej w tym rozdziale:
BIGINT[(wielko_pokazywana)]

Oznacza to, e sowo BIGINT moe wystpi samodzielnie lub z pokazywan wartoci. Uycie kursywy wskazuje, e nie naley wpisywa sowa wielko_pokazywana, ale poda wasn warto. Oto przykady uycia:
BIGINT BIGINT(20)

Poza typem BIGINT take wiele innych typw danych MySQL uwzgldnia deklaracj rozmiaru wywietlania. Jeli nie powiedziano inaczej, musi to by liczba od 1 do 255. W wersjach MySQL starszych ni wersja 5, baza danych w niektrych przypadkach zmieniaa podany typ kolumny, nie informujc o tym uytkownika. Obecnie takie podmiany nie maj ju miejsca.
VARCHAR -> CHAR

Jeli podana kolumna VARCHAR ma rozmiar mniejszy od czterech znakw, jest przeksztacana w kolumn CHAR.
CHAR -> VARCHAR

Jeli tabela zawiera co najmniej jedn kolumn o zmiennej dugoci, wszystkie kolumny typu CHAR dusze ni trzy znaki s zamieniane na VARCHAR.

Rozmiar wywietlania TIMESTAMP Rozmiar wywietlania pl TIMESTAMP musi by zawsze wielkoci parzyst od 2 do 14. Rozmiar rwny 0 lub wikszy od 14 powoduje przyjcie 14. Wszelkie liczby nieparzyste s zamieniane na nastpn liczb parzyst.

22

MySQL. Leksykon kieszonkowy

Liczby
MySQL obsuguje liczbowe typy danych zgodne z ANSI SQL 2. Typy te dzielimy na cakowitoliczbowe, dziesitne i zmiennoprzecinkowe. W ramach tych grup dzielimy typy dalej, wedug zajmowanej przez nie pamici. W przypadku typw liczbowych mona poda rozmiar wywietlania, ktry wpywa na sposb pokazywania przez MySQL wynikw. Rozmiar ten nie ma adnego zwizku z wielkoci pamici zajmowanej przez dany typ. Dodatkowo w przypadku liczb zmiennoprzecinkowych i dziesitnych mona poda liczb cyfr znajdujcych si za kropk dziesitn. Wtedy liczba cyfr powinna nalee do zakresu od 0 do 30, czyli by co najmniej o dwa mniejsza od rozmiaru wywietlania. Jeli warunek ten nie zostanie dotrzymany, MySQL automatycznie zmieni liczb cyfr tak, aby bya mniejsza o dwa od rozmiaru wywietlania. Przykadowo, MySQL automatycznie zmieni FLOAT(6,5) na FLOAT(7,5). Prba wstawienia do kolumny wartoci przekraczajcej dopuszczalny zakres tej kolumny powoduje obcicie tej wartoci do najmniejszej (dla liczb ujemnych) lub najwikszej (dla liczb dodatnich) wartoci dla danej kolumny dopuszczalnej. Jeli takie obcicie jest robione podczas wykonywania instrukcji ALTER TABLE, LOAD DATA INFILE, UPDATE lub wielowierszowej instrukcji INSERT, MySQL pokazuje ostrzeenie. Wyjtkiem jest korzystanie z MySQL w wersji 5 lub nowszej w trybie penej zgodnoci ze standardem SQL, gdy wtedy w przypadku instrukcji INSERT i UPDATE zgaszany jest bd. Atrybutu AUTO_INCREMENT mona uy do co najwyej jednej kolumny cakowitoliczbowej w tabeli. Atrybut UNSIGNED moe by czony z dowolnym liczbowym typem danych. Uycie tego atrybutu powoduje, e do kolumny nie mona wpisywa liczb ujemnych. Atrybut ZEROFILL nakazuje wypenienie kolumny od lewej

Rozdzia 3. Typy danych

23

strony zerami podczas wywietlania jej wartoci. O liczbie tych zer decyduje szeroko wywietlania danej kolumny.

BIGINT
BIGINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Najwikszy z typw cakowitoliczbowych, pozwalajcy zapisywa liczby od 9 223 372 036 854 775 808 do 9 223 372 036 854 775 807 (jeli bez znaku, to od 0 do 18 446 744 073 709 551 615). Z uwagi na sposb realizacji dziaa na liczbach tego typu, naley unika operacji na liczbach BIGINT bez znaku wikszych ni 9 223 372 036 854 775 807, gdy moe to zaowocowa nieprawidowymi wynikami.

BIT
BIT[(bity)]

Rozmiar w pamici w przyblieniu bity bitw+7 lub 8 bitw Opis W wersjach MySQL 5.0.3 i starszych, pola typu BIT dziaay tak samo, jak TINYINT(1). Omawiany typ pola pozwala przechowywa ustalon liczb bitw. Jeli podana zostanie wielko bitw mniejsza od dozwolonej, MySQL wypeni zerami bity od lewej strony.
24 | MySQL. Leksykon kieszonkowy

DEC
Synonim typu DECIMAL.

DECIMAL
DECIMAL[(dokadno, [skala])] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici rnie Opis Pozwala zapisywa liczby zmiennoprzecinkowe w sytuacjach, kiedy istotna jest dokadno na przykad przy operowaniu kwotami pienidzy. Stosujc typ DECIMAL, trzeba poda dwa jego parametry, dokadno i skal. Dokadno to liczba znaczcych cyfr, za skala to liczba znaczcych cyfr po kropce dziesitnej. Przykadowo, kolumna SALDO typu DECIMAL(9,2) pozwoliaby zapisywa liczby dziewiciocyfrowe, przy czym na prawo od kropki dziesitnej mogyby by dwie cyfry. Zakres dopuszczalnych liczb to w takiej sytuacji od 9 999 999,99 do 9 999 999,99. Jeli podana zostanie liczba zawierajca wicej cyfr po przecinku, ni przewiduje to definicja, liczba zostanie zaokrglona. Wartoci spoza zakresu DECIMAL s obcinane tak, aby si w nim zmieciy. W wersjach MySQL starszych ni 5, wartoci DECIMAL nie byy zapisywane jako liczby zmiennoprzecinkowe, lecz jako acuchy znakw. Na kad cyfr zuywany by jeden znak w przypadku skali wikszej od 0, poza tym jeden dodatkowy znak zuywany jest w przypadku liczb ujemnych. Jeli skala wynosi 0, liczby nie maj czci uamkowej. SQL zgodnie z norm ANSI pozwala pomija dokadno i (lub) skal. Jeli brak dokadnoci, przyjmowane jest ustawienie

Rozdzia 3. Typy danych

25

domylne charakterystyczne dla implementacji. Jeli brak skali, przyjmowane jest zero. W MySQL domylna warto dokadnoci to 10.

DOUBLE
DOUBLE[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Liczba zmiennoprzecinkowa podwjnej precyzji. Ten typ danych pozwala zapisywa due wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 1,7976931348623157E+308 do 2,2250738585072014E308, 0 oraz wartoci dodatnie od 2,2250738585072014E308 do 1,7976931348623157E+308.

DOUBLE PRECISION
Synonim DOUBLE.

FLOAT
FLOAT[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 4 bajty

26

MySQL. Leksykon kieszonkowy

Opis Liczba zmiennoprzecinkowa pojedynczej precyzji. Ten typ danych pozwala zapisywa mae wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 3,402823466E+38 do 1,175494351E38, 0 oraz wartoci dodatnie od 1,175494351E38 do 3,402823466E+38.

INT
INT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 4 bajty Opis Podstawowy rodzaj liczb cakowitych od 2 147 483 648 do 2 147 483 647 (lub od 0 do 4 294 967 295 w przypadku liczb bez znaku).

INTEGER
Synonim INT.

MEDIUMINT
MEDIUMINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

27

Opis Liczby cakowite od 8 388 608 do 8 388 607 (lub od 0 do 16 777 215 w przypadku liczb bez znaku).

NUMERIC
Synonim DECIMAL.

REAL
Synonim DOUBLE.

SMALLINT
SMALLINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 2 bajty Opis Liczby cakowite z zakresu od 32 768 do 32 767 (od 0 do 65 535 w przypadku liczb bez znaku).

TINYINT
TINYINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 1 bajt

28

MySQL. Leksykon kieszonkowy

Opis Liczby cakowite od 128 do 127 (od 0 do 255 w przypadku liczb bez znaku).

acuchy
MySQL obsuguje dwie kategorie acuchw: acuchy tekstowe oraz acuchy binarne. Obie kategorie maj swoje specyficzne typy do obsugi rnych wielkoci pl i rnych sposobw porwnywania wartoci. W zalenoci od sposobu porwnywania, mona uwzgldnia bd nie wielko liter, mona te porwnywa dane binarnie (bajt po bajcie). Kiedy nazwa typu tekstowego (jak CHAR, VARCHAR i inne) zostanie oznaczona sowem kluczowym BINARY, kolumna pozostaje kolumn tekstow, ale dane s porwnywane ze sob binarnie.

BINARY
BINARY(rozmiar)

Rozmiar wedug rozmiar, w zakresie od 0 do 255 Rozmiar w pamici


rozmiar bajtw

Opis Typ danych BINARY to binarny odpowiednik typu CHAR. Podstawowa rnica midzy tymi dwoma typami polega na tym, e pole typu BINARY zawiera dane binarne, wielko tych danych jest mierzona nie w znakach, lecz w bajtach. acuchy zawierajce

Rozdzia 3. Typy danych

29

mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie znakami 0x00 (wersja MySQL 5.0.5 i nowsze) lub spacjami (wersje starsze).

BLOB
Binarny odpowiednik typu TEXT.

CHAR
CHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar wedug rozmiar, do 255 Rozmiar w pamici zaleny od rozmiaru i od uytego zestawu znakw Opis Pole tekstowe ustalonej dugoci. acuchy zawierajce mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie spacjami. Podczas pobierania danych z bazy te dodatkowe spacje s usuwane. Pola CHAR(0) zostay zachowane w celu zapewnienia zgodnoci ze starymi systemami, w ktrych w kolumnach nie s zapisywane adne wartoci.

CHARACTER
Synonim CHAR.

30

MySQL. Leksykon kieszonkowy

CHARACTER VARYING
Synonim VARCHAR.

LONGBLOB
Binarny odpowiednik LONGTEXT.

LONGTEXT
LONGTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 4 294 295 Rozmiar w pamici Dugo wartoci+4 bajty Opis Typ pozwala zapisywa due wartoci tekstowe. Teoretyczne ograniczenie rozmiaru tekstu to ponad 4 GB, ale praktycznymi ograniczeniami s ograniczenia protokou komunikacyjnego MySQL oraz ilo pamici przeznaczonej na komunikacj na serwerze i na stacji klienckiej.

MEDIUMBLOB
Binarna posta MEDIUMTEXT.

MEDIUMTEXT
MEDIUMTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozdzia 3. Typy danych

31

Rozmiar 0 do 16 777 215 Rozmiar w pamici Dugo wartoci+3 bajty Opis Typ pozwala zapisywa redniej wielkoci wartoci tekstowe.

NCHAR
Synonim CHAR.

NATIONAL CHAR
Synonim CHAR.

NATIONAL CHARACTER
Synonim CHAR.

NATIONAL VARCHAR
Synonim VARCHAR.

TEXT
TEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 65 535

32

MySQL. Leksykon kieszonkowy

Rozmiar w pamici Dugo wartoci tekstowej+2 bajty Opis Typ pozwala zapisywa typowe wartoci tekstowe.

TINYBLOB
Binarny odpowiednik TINYTEXT.

TINYTEXT
TINYTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 255 Rozmiar w pamici Dugo wartoci tekstowej+1 bajt Opis Pozwala zapisywa krtkie dane tekstowe.

VARBINARY
VARBINARY(rozmiar)

Rozmiar Wedug parametru rozmiar

Rozdzia 3. Typy danych

33

Rozmiar w pamici
rozmiar bajtw

Opis Jest to binarna odmiana typu VARCHAR. Podstawowa rnica polega na tym, e zapisywane s dane binarne, a rozmiar pola mierzony jest w bajtach, nie w znakach. Wielkoci typu VARBINARY, w przeciwiestwie do wartoci typu BINARY, nie s niczym dopeniane.

VARCHAR
VARCHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar Wskazana przez rozmiar warto z zakresu do 65 532 (od 1 do 255 w wersjach wczeniejszych ni MySQL 5); rozmiar wskazuje rzeczywist wielko kolumny i jest ograniczony przez dopuszczaln wielko wiersza w znakach; to, ile miejsca faktycznie bdzie potrzebne, zaley zatem od zestawu znakw uytego w danej kolumnie Rozmiar w pamici Zaley od liczby znakw wskazanych jako rozmiar oraz od liczby bajtw potrzebnych do zapisu poszczeglnych znakw w uytym mechanizmie kodowania znakw Opis Pozwala zapisywa wartoci tekstowe zmiennej dugoci. W wersjach poprzedzajcych MySQL 5 z wartoci VARCHAR usuwane s spacje kocowe; wersja MySQL 5 i nowsze standardowo nie usuwaj spacji kocowych.

34

MySQL. Leksykon kieszonkowy

Daty
Typy datowe MySQL s wyjtkowo elastycznym narzdziem, pozwalajcym zapisywa wszelki informacje dzienne. MySQL jest bardzo tolerancyjny i zakada, e to aplikacja, a nie baza danych, ma sprawdza poprawno tych danych. MySQL sprawdza jedynie, czy miesic nie wykracza poza zakres 0 12 i czy dzie nie wykracza poza zakres 0 31. Wobec tego z punktu widzenia MySQL 31 lutego 2001 roku jest poprawn dat. Bardziej przydatn wartoci jest data 0 lutego 2001 roku; cyfra zero moe zastpowa t cz daty, ktrej dokadnie nie znamy. MySQL 5 jest jednak ju baz danych nieco bardziej restrykcyjn co do wartoci, jakie mona zapisywa w polach datowych. Wprawdzie MySQL dopuszcza do du swobod formatw wejciowych dat, to naley stara si w aplikacjach daty formatowa zgodnie z formatem wewntrznym MySQL w celu uniknicia nieporozumie. MySQL zawsze zakada, e rok jest pierwszym elementem po lewej stronie daty. Jeli w operacji SQL podana zostanie nieprawidowa warto daty, MySQL wstawi w jej miejsce zero. MySQL w kontekcie liczb cakowitych automatycznie konwertuje daty i czas na liczby cakowite.

DATE
DATE

Format
YYYY-MM-DD (2001-01-01)

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

35

Opis Data kalendarza gregoriaskiego z zakresu od 1 stycznia 1000 roku ('1000-01-01') do 31 grudnia 9999 roku ('9999-12-31').

DATETIME
DATETIME

Format
YYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 8 bajtw Opis Zapisuje czas z zakresu od 00:00:00 1 stycznia 1000 roku ('100001-01 00:00:00') do 23:59:59 31 grudnia 9999 ('9999-12-31 23:59:59') wedug kalendarza gregoriaskiego.

TIME
TIME

Format
hh:mm:ss (06:00:00)

Rozmiar w pamici 3 bajty Opis Zapisuje czas od pnocy ('00:00:00') do sekundy przed pnoc ('23:59:59').
36 | MySQL. Leksykon kieszonkowy

TIMESTAMP
TIMESTAMP[(rozmiar_wywietlania)]

Format
YYYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 4 bajty Opis Zapis chwili z dokadnoci do sekundy od pnocy 1 stycznia 1970 roku do minuty przed pnoc 31 grudnia 2037 roku. Podstawowym zastosowaniem tego typu jest rejestracja modyfikacji tabel. Przy wstawianiu do takiej kolumny wartoci NULL wstawiane s aktualna data i czas. W przypadku modyfikowania jakiejkolwiek wartoci w wierszu z kolumn TIMESTAMP pierwsza kolumna tego typu zostanie zaktualizowana biec dat i czasem. Format danych TIMESTAMP znany z wczeniejszych wersji MySQL, do 4.1 wcznie, w wersji 5.1 nie jest ju obsugiwany.

YEAR
YEAR[(rozmiar)]

Format
YYYY (2001)

Rozmiar w pamici 1 bajt

Rozdzia 3. Typy danych

37

Opis Pozwala zapisa rok z kalendarza gregoriaskiego. Parametr rozmiar umoliwia zapisywanie roku dwu- lub czterocyfrowo. Zakres YEAR(4) rozciga si od 1900 do 2155, dla YEAR(2) od 1970 do 2069. Domylnie przyjmowane jest YEAR(4).

Typy zoone
Zoone typy danych MySQL, ENUM i SET, s po prostu specjalnymi przypadkami typw acuchowych. Opisujemy je osobno, gdy s bardziej zoone pojciowo i stanowi wprowadzenie do typw danych SQL3, ktre by moe MySQL bdzie obsugiwa w przyszoci.

ENUM
ENUM(warto1, warto2, ...)

Rozmiar w pamici 1 255 elementw: 1 bajt 255 65 535 elementw: 2 bajty Opis Typ danych ENUM pozwala zapisywa jeden z wielu zdefiniowanych wczeniej acuchw. Przy tworzeniu kolumny typu ENUM podaje si list dopuszczalnych jej wartoci. Dane mog by do tej kolumny wstawiane i aktualizowane jedynie z tej listy; kada prba wstawienia wartoci spoza niej powoduje wstawienie pustego acucha.

38

MySQL. Leksykon kieszonkowy

Do listy dopuszczalnych wartoci mona si odwoywa przez indeks, przy czym pierwszy element otrzymuje numer 0. Na przykad:
SELECT COLID FROM TBL WHERE COLENUM = 0;

Jeli COLID jest kolumn z kluczem gwnym, a COLENUM kolumn typu ENUM, taka instrukcja SQL spowoduje pobranie kluczy gwnych wszystkich wierszy, dla ktrych COLENUM jest pierwsz wartoci z listy. Analogicznie, sortowanie wzgldem kolumn ENUM powoduje sortowanie wedug indeksu, nie acucha. Najwiksza moliwa liczba elementw kolumny ENUM to 65 535.

SET
SET(warto1, warto2, ...)

Rozmiar w pamici 1 8 elementw: 1 bajt 9 16 elementw: 2 bajty 17 24 elementy: 3 bajty 25 32 elementy: 4 bajty 33 64 elementy: 8 bajtw Opis Lista wartoci wybieranych z okrelonego wczeniej zbioru. Pole moe zawiera dowoln liczb acuchw wskazanych w instrukcji SET, szczeglnie moe nie zawiera adnej takiej wartoci. SET jest podobny do ENUM, ale kade pole moe zawiera wicej ni jedn z podanych wartoci. Dane typu SET nie s jednak zapisywane za pomoc indeksw, ale w zoonej mapie bitowej. Jeli dany jest zbir SET, zawierajcy elementy: Mandarynka, Pomidor,
Rozdzia 3. Typy danych | 39

Gruszka i Banan, kady z tych elementw jest reprezentowany jako

wczony bit w bajcie, jak to pokazano w tabeli 3.1.


Tabela 3.1. Reprezentacja zbioru elementw w MySQL
Element
Mandarynka Pomidor Gruszka Banan

Warto dziesitna
1 2 4 8

Zapis bitowy
0001 0010 0100 1000

W powyszym przykadzie zapisanie jednoczenie wartoci Mandarynka i Gruszka wymaga uycia wartoci 5 (bitowo 0101). W kolumnie SET mona zapisa najwyej 64 wartoci. Wprawdzie t sam warto mona w jednym wyraeniu SQL wpisa wielokrotnie, ale w bazie danych warto ta zostanie zapisana raz.

40

MySQL. Leksykon kieszonkowy

4. SQL .............................................................................................. 41
Rozrnianie wielkoci liter Literay Identyfikatory Komentarze Instrukcje Zasady dotyczce transakcji 41 42 43 45 46 106

5. Operatory .................................................................................. 108


Priorytety operatorw Operatory arytmetyczne Operatory porwnania Operatory logiczne 108 109 109 111

6. Funkcje .......................................................................................113
Funkcje agregujce Funkcje oglnego przeznaczenia 113 115

7. Rodzaje tabel ............................................................................ 137 8. Procedury i funkcje skadowane .............................................. 138


Parametry Logika Kursory Obsuga zdarze i warunki 138 139 143 144

9. Trygery ...................................................................................... 146 Skorowidz ................................................................................. 147

MySQL. Leksykon kieszonkowy

Rozdzia 3. Typy danych


We wszystkich typach danych nawiasami kwadratowymi ([]) oznaczane s fragmenty opcjonalne. Poniszy przykad pokazuje sposb prezentacji typu BIGINT, opisanego dalej w tym rozdziale:
BIGINT[(wielko_pokazywana)]

Oznacza to, e sowo BIGINT moe wystpi samodzielnie lub z pokazywan wartoci. Uycie kursywy wskazuje, e nie naley wpisywa sowa wielko_pokazywana, ale poda wasn warto. Oto przykady uycia:
BIGINT BIGINT(20)

Poza typem BIGINT take wiele innych typw danych MySQL uwzgldnia deklaracj rozmiaru wywietlania. Jeli nie powiedziano inaczej, musi to by liczba od 1 do 255. W wersjach MySQL starszych ni wersja 5, baza danych w niektrych przypadkach zmieniaa podany typ kolumny, nie informujc o tym uytkownika. Obecnie takie podmiany nie maj ju miejsca.
VARCHAR -> CHAR

Jeli podana kolumna VARCHAR ma rozmiar mniejszy od czterech znakw, jest przeksztacana w kolumn CHAR.
CHAR -> VARCHAR

Jeli tabela zawiera co najmniej jedn kolumn o zmiennej dugoci, wszystkie kolumny typu CHAR dusze ni trzy znaki s zamieniane na VARCHAR.

Rozmiar wywietlania TIMESTAMP Rozmiar wywietlania pl TIMESTAMP musi by zawsze wielkoci parzyst od 2 do 14. Rozmiar rwny 0 lub wikszy od 14 powoduje przyjcie 14. Wszelkie liczby nieparzyste s zamieniane na nastpn liczb parzyst.

22

MySQL. Leksykon kieszonkowy

Liczby
MySQL obsuguje liczbowe typy danych zgodne z ANSI SQL 2. Typy te dzielimy na cakowitoliczbowe, dziesitne i zmiennoprzecinkowe. W ramach tych grup dzielimy typy dalej, wedug zajmowanej przez nie pamici. W przypadku typw liczbowych mona poda rozmiar wywietlania, ktry wpywa na sposb pokazywania przez MySQL wynikw. Rozmiar ten nie ma adnego zwizku z wielkoci pamici zajmowanej przez dany typ. Dodatkowo w przypadku liczb zmiennoprzecinkowych i dziesitnych mona poda liczb cyfr znajdujcych si za kropk dziesitn. Wtedy liczba cyfr powinna nalee do zakresu od 0 do 30, czyli by co najmniej o dwa mniejsza od rozmiaru wywietlania. Jeli warunek ten nie zostanie dotrzymany, MySQL automatycznie zmieni liczb cyfr tak, aby bya mniejsza o dwa od rozmiaru wywietlania. Przykadowo, MySQL automatycznie zmieni FLOAT(6,5) na FLOAT(7,5). Prba wstawienia do kolumny wartoci przekraczajcej dopuszczalny zakres tej kolumny powoduje obcicie tej wartoci do najmniejszej (dla liczb ujemnych) lub najwikszej (dla liczb dodatnich) wartoci dla danej kolumny dopuszczalnej. Jeli takie obcicie jest robione podczas wykonywania instrukcji ALTER TABLE, LOAD DATA INFILE, UPDATE lub wielowierszowej instrukcji INSERT, MySQL pokazuje ostrzeenie. Wyjtkiem jest korzystanie z MySQL w wersji 5 lub nowszej w trybie penej zgodnoci ze standardem SQL, gdy wtedy w przypadku instrukcji INSERT i UPDATE zgaszany jest bd. Atrybutu AUTO_INCREMENT mona uy do co najwyej jednej kolumny cakowitoliczbowej w tabeli. Atrybut UNSIGNED moe by czony z dowolnym liczbowym typem danych. Uycie tego atrybutu powoduje, e do kolumny nie mona wpisywa liczb ujemnych. Atrybut ZEROFILL nakazuje wypenienie kolumny od lewej

Rozdzia 3. Typy danych

23

strony zerami podczas wywietlania jej wartoci. O liczbie tych zer decyduje szeroko wywietlania danej kolumny.

BIGINT
BIGINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Najwikszy z typw cakowitoliczbowych, pozwalajcy zapisywa liczby od 9 223 372 036 854 775 808 do 9 223 372 036 854 775 807 (jeli bez znaku, to od 0 do 18 446 744 073 709 551 615). Z uwagi na sposb realizacji dziaa na liczbach tego typu, naley unika operacji na liczbach BIGINT bez znaku wikszych ni 9 223 372 036 854 775 807, gdy moe to zaowocowa nieprawidowymi wynikami.

BIT
BIT[(bity)]

Rozmiar w pamici w przyblieniu bity bitw+7 lub 8 bitw Opis W wersjach MySQL 5.0.3 i starszych, pola typu BIT dziaay tak samo, jak TINYINT(1). Omawiany typ pola pozwala przechowywa ustalon liczb bitw. Jeli podana zostanie wielko bitw mniejsza od dozwolonej, MySQL wypeni zerami bity od lewej strony.
24 | MySQL. Leksykon kieszonkowy

DEC
Synonim typu DECIMAL.

DECIMAL
DECIMAL[(dokadno, [skala])] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici rnie Opis Pozwala zapisywa liczby zmiennoprzecinkowe w sytuacjach, kiedy istotna jest dokadno na przykad przy operowaniu kwotami pienidzy. Stosujc typ DECIMAL, trzeba poda dwa jego parametry, dokadno i skal. Dokadno to liczba znaczcych cyfr, za skala to liczba znaczcych cyfr po kropce dziesitnej. Przykadowo, kolumna SALDO typu DECIMAL(9,2) pozwoliaby zapisywa liczby dziewiciocyfrowe, przy czym na prawo od kropki dziesitnej mogyby by dwie cyfry. Zakres dopuszczalnych liczb to w takiej sytuacji od 9 999 999,99 do 9 999 999,99. Jeli podana zostanie liczba zawierajca wicej cyfr po przecinku, ni przewiduje to definicja, liczba zostanie zaokrglona. Wartoci spoza zakresu DECIMAL s obcinane tak, aby si w nim zmieciy. W wersjach MySQL starszych ni 5, wartoci DECIMAL nie byy zapisywane jako liczby zmiennoprzecinkowe, lecz jako acuchy znakw. Na kad cyfr zuywany by jeden znak w przypadku skali wikszej od 0, poza tym jeden dodatkowy znak zuywany jest w przypadku liczb ujemnych. Jeli skala wynosi 0, liczby nie maj czci uamkowej. SQL zgodnie z norm ANSI pozwala pomija dokadno i (lub) skal. Jeli brak dokadnoci, przyjmowane jest ustawienie

Rozdzia 3. Typy danych

25

domylne charakterystyczne dla implementacji. Jeli brak skali, przyjmowane jest zero. W MySQL domylna warto dokadnoci to 10.

DOUBLE
DOUBLE[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Liczba zmiennoprzecinkowa podwjnej precyzji. Ten typ danych pozwala zapisywa due wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 1,7976931348623157E+308 do 2,2250738585072014E308, 0 oraz wartoci dodatnie od 2,2250738585072014E308 do 1,7976931348623157E+308.

DOUBLE PRECISION
Synonim DOUBLE.

FLOAT
FLOAT[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 4 bajty

26

MySQL. Leksykon kieszonkowy

Opis Liczba zmiennoprzecinkowa pojedynczej precyzji. Ten typ danych pozwala zapisywa mae wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 3,402823466E+38 do 1,175494351E38, 0 oraz wartoci dodatnie od 1,175494351E38 do 3,402823466E+38.

INT
INT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 4 bajty Opis Podstawowy rodzaj liczb cakowitych od 2 147 483 648 do 2 147 483 647 (lub od 0 do 4 294 967 295 w przypadku liczb bez znaku).

INTEGER
Synonim INT.

MEDIUMINT
MEDIUMINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

27

Opis Liczby cakowite od 8 388 608 do 8 388 607 (lub od 0 do 16 777 215 w przypadku liczb bez znaku).

NUMERIC
Synonim DECIMAL.

REAL
Synonim DOUBLE.

SMALLINT
SMALLINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 2 bajty Opis Liczby cakowite z zakresu od 32 768 do 32 767 (od 0 do 65 535 w przypadku liczb bez znaku).

TINYINT
TINYINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 1 bajt

28

MySQL. Leksykon kieszonkowy

Opis Liczby cakowite od 128 do 127 (od 0 do 255 w przypadku liczb bez znaku).

acuchy
MySQL obsuguje dwie kategorie acuchw: acuchy tekstowe oraz acuchy binarne. Obie kategorie maj swoje specyficzne typy do obsugi rnych wielkoci pl i rnych sposobw porwnywania wartoci. W zalenoci od sposobu porwnywania, mona uwzgldnia bd nie wielko liter, mona te porwnywa dane binarnie (bajt po bajcie). Kiedy nazwa typu tekstowego (jak CHAR, VARCHAR i inne) zostanie oznaczona sowem kluczowym BINARY, kolumna pozostaje kolumn tekstow, ale dane s porwnywane ze sob binarnie.

BINARY
BINARY(rozmiar)

Rozmiar wedug rozmiar, w zakresie od 0 do 255 Rozmiar w pamici


rozmiar bajtw

Opis Typ danych BINARY to binarny odpowiednik typu CHAR. Podstawowa rnica midzy tymi dwoma typami polega na tym, e pole typu BINARY zawiera dane binarne, wielko tych danych jest mierzona nie w znakach, lecz w bajtach. acuchy zawierajce

Rozdzia 3. Typy danych

29

mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie znakami 0x00 (wersja MySQL 5.0.5 i nowsze) lub spacjami (wersje starsze).

BLOB
Binarny odpowiednik typu TEXT.

CHAR
CHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar wedug rozmiar, do 255 Rozmiar w pamici zaleny od rozmiaru i od uytego zestawu znakw Opis Pole tekstowe ustalonej dugoci. acuchy zawierajce mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie spacjami. Podczas pobierania danych z bazy te dodatkowe spacje s usuwane. Pola CHAR(0) zostay zachowane w celu zapewnienia zgodnoci ze starymi systemami, w ktrych w kolumnach nie s zapisywane adne wartoci.

CHARACTER
Synonim CHAR.

30

MySQL. Leksykon kieszonkowy

CHARACTER VARYING
Synonim VARCHAR.

LONGBLOB
Binarny odpowiednik LONGTEXT.

LONGTEXT
LONGTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 4 294 295 Rozmiar w pamici Dugo wartoci+4 bajty Opis Typ pozwala zapisywa due wartoci tekstowe. Teoretyczne ograniczenie rozmiaru tekstu to ponad 4 GB, ale praktycznymi ograniczeniami s ograniczenia protokou komunikacyjnego MySQL oraz ilo pamici przeznaczonej na komunikacj na serwerze i na stacji klienckiej.

MEDIUMBLOB
Binarna posta MEDIUMTEXT.

MEDIUMTEXT
MEDIUMTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozdzia 3. Typy danych

31

Rozmiar 0 do 16 777 215 Rozmiar w pamici Dugo wartoci+3 bajty Opis Typ pozwala zapisywa redniej wielkoci wartoci tekstowe.

NCHAR
Synonim CHAR.

NATIONAL CHAR
Synonim CHAR.

NATIONAL CHARACTER
Synonim CHAR.

NATIONAL VARCHAR
Synonim VARCHAR.

TEXT
TEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 65 535

32

MySQL. Leksykon kieszonkowy

Rozmiar w pamici Dugo wartoci tekstowej+2 bajty Opis Typ pozwala zapisywa typowe wartoci tekstowe.

TINYBLOB
Binarny odpowiednik TINYTEXT.

TINYTEXT
TINYTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 255 Rozmiar w pamici Dugo wartoci tekstowej+1 bajt Opis Pozwala zapisywa krtkie dane tekstowe.

VARBINARY
VARBINARY(rozmiar)

Rozmiar Wedug parametru rozmiar

Rozdzia 3. Typy danych

33

Rozmiar w pamici
rozmiar bajtw

Opis Jest to binarna odmiana typu VARCHAR. Podstawowa rnica polega na tym, e zapisywane s dane binarne, a rozmiar pola mierzony jest w bajtach, nie w znakach. Wielkoci typu VARBINARY, w przeciwiestwie do wartoci typu BINARY, nie s niczym dopeniane.

VARCHAR
VARCHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar Wskazana przez rozmiar warto z zakresu do 65 532 (od 1 do 255 w wersjach wczeniejszych ni MySQL 5); rozmiar wskazuje rzeczywist wielko kolumny i jest ograniczony przez dopuszczaln wielko wiersza w znakach; to, ile miejsca faktycznie bdzie potrzebne, zaley zatem od zestawu znakw uytego w danej kolumnie Rozmiar w pamici Zaley od liczby znakw wskazanych jako rozmiar oraz od liczby bajtw potrzebnych do zapisu poszczeglnych znakw w uytym mechanizmie kodowania znakw Opis Pozwala zapisywa wartoci tekstowe zmiennej dugoci. W wersjach poprzedzajcych MySQL 5 z wartoci VARCHAR usuwane s spacje kocowe; wersja MySQL 5 i nowsze standardowo nie usuwaj spacji kocowych.

34

MySQL. Leksykon kieszonkowy

Daty
Typy datowe MySQL s wyjtkowo elastycznym narzdziem, pozwalajcym zapisywa wszelki informacje dzienne. MySQL jest bardzo tolerancyjny i zakada, e to aplikacja, a nie baza danych, ma sprawdza poprawno tych danych. MySQL sprawdza jedynie, czy miesic nie wykracza poza zakres 0 12 i czy dzie nie wykracza poza zakres 0 31. Wobec tego z punktu widzenia MySQL 31 lutego 2001 roku jest poprawn dat. Bardziej przydatn wartoci jest data 0 lutego 2001 roku; cyfra zero moe zastpowa t cz daty, ktrej dokadnie nie znamy. MySQL 5 jest jednak ju baz danych nieco bardziej restrykcyjn co do wartoci, jakie mona zapisywa w polach datowych. Wprawdzie MySQL dopuszcza do du swobod formatw wejciowych dat, to naley stara si w aplikacjach daty formatowa zgodnie z formatem wewntrznym MySQL w celu uniknicia nieporozumie. MySQL zawsze zakada, e rok jest pierwszym elementem po lewej stronie daty. Jeli w operacji SQL podana zostanie nieprawidowa warto daty, MySQL wstawi w jej miejsce zero. MySQL w kontekcie liczb cakowitych automatycznie konwertuje daty i czas na liczby cakowite.

DATE
DATE

Format
YYYY-MM-DD (2001-01-01)

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

35

Opis Data kalendarza gregoriaskiego z zakresu od 1 stycznia 1000 roku ('1000-01-01') do 31 grudnia 9999 roku ('9999-12-31').

DATETIME
DATETIME

Format
YYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 8 bajtw Opis Zapisuje czas z zakresu od 00:00:00 1 stycznia 1000 roku ('100001-01 00:00:00') do 23:59:59 31 grudnia 9999 ('9999-12-31 23:59:59') wedug kalendarza gregoriaskiego.

TIME
TIME

Format
hh:mm:ss (06:00:00)

Rozmiar w pamici 3 bajty Opis Zapisuje czas od pnocy ('00:00:00') do sekundy przed pnoc ('23:59:59').
36 | MySQL. Leksykon kieszonkowy

TIMESTAMP
TIMESTAMP[(rozmiar_wywietlania)]

Format
YYYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 4 bajty Opis Zapis chwili z dokadnoci do sekundy od pnocy 1 stycznia 1970 roku do minuty przed pnoc 31 grudnia 2037 roku. Podstawowym zastosowaniem tego typu jest rejestracja modyfikacji tabel. Przy wstawianiu do takiej kolumny wartoci NULL wstawiane s aktualna data i czas. W przypadku modyfikowania jakiejkolwiek wartoci w wierszu z kolumn TIMESTAMP pierwsza kolumna tego typu zostanie zaktualizowana biec dat i czasem. Format danych TIMESTAMP znany z wczeniejszych wersji MySQL, do 4.1 wcznie, w wersji 5.1 nie jest ju obsugiwany.

YEAR
YEAR[(rozmiar)]

Format
YYYY (2001)

Rozmiar w pamici 1 bajt

Rozdzia 3. Typy danych

37

Opis Pozwala zapisa rok z kalendarza gregoriaskiego. Parametr rozmiar umoliwia zapisywanie roku dwu- lub czterocyfrowo. Zakres YEAR(4) rozciga si od 1900 do 2155, dla YEAR(2) od 1970 do 2069. Domylnie przyjmowane jest YEAR(4).

Typy zoone
Zoone typy danych MySQL, ENUM i SET, s po prostu specjalnymi przypadkami typw acuchowych. Opisujemy je osobno, gdy s bardziej zoone pojciowo i stanowi wprowadzenie do typw danych SQL3, ktre by moe MySQL bdzie obsugiwa w przyszoci.

ENUM
ENUM(warto1, warto2, ...)

Rozmiar w pamici 1 255 elementw: 1 bajt 255 65 535 elementw: 2 bajty Opis Typ danych ENUM pozwala zapisywa jeden z wielu zdefiniowanych wczeniej acuchw. Przy tworzeniu kolumny typu ENUM podaje si list dopuszczalnych jej wartoci. Dane mog by do tej kolumny wstawiane i aktualizowane jedynie z tej listy; kada prba wstawienia wartoci spoza niej powoduje wstawienie pustego acucha.

38

MySQL. Leksykon kieszonkowy

Do listy dopuszczalnych wartoci mona si odwoywa przez indeks, przy czym pierwszy element otrzymuje numer 0. Na przykad:
SELECT COLID FROM TBL WHERE COLENUM = 0;

Jeli COLID jest kolumn z kluczem gwnym, a COLENUM kolumn typu ENUM, taka instrukcja SQL spowoduje pobranie kluczy gwnych wszystkich wierszy, dla ktrych COLENUM jest pierwsz wartoci z listy. Analogicznie, sortowanie wzgldem kolumn ENUM powoduje sortowanie wedug indeksu, nie acucha. Najwiksza moliwa liczba elementw kolumny ENUM to 65 535.

SET
SET(warto1, warto2, ...)

Rozmiar w pamici 1 8 elementw: 1 bajt 9 16 elementw: 2 bajty 17 24 elementy: 3 bajty 25 32 elementy: 4 bajty 33 64 elementy: 8 bajtw Opis Lista wartoci wybieranych z okrelonego wczeniej zbioru. Pole moe zawiera dowoln liczb acuchw wskazanych w instrukcji SET, szczeglnie moe nie zawiera adnej takiej wartoci. SET jest podobny do ENUM, ale kade pole moe zawiera wicej ni jedn z podanych wartoci. Dane typu SET nie s jednak zapisywane za pomoc indeksw, ale w zoonej mapie bitowej. Jeli dany jest zbir SET, zawierajcy elementy: Mandarynka, Pomidor,
Rozdzia 3. Typy danych | 39

Gruszka i Banan, kady z tych elementw jest reprezentowany jako

wczony bit w bajcie, jak to pokazano w tabeli 3.1.


Tabela 3.1. Reprezentacja zbioru elementw w MySQL
Element
Mandarynka Pomidor Gruszka Banan

Warto dziesitna
1 2 4 8

Zapis bitowy
0001 0010 0100 1000

W powyszym przykadzie zapisanie jednoczenie wartoci Mandarynka i Gruszka wymaga uycia wartoci 5 (bitowo 0101). W kolumnie SET mona zapisa najwyej 64 wartoci. Wprawdzie t sam warto mona w jednym wyraeniu SQL wpisa wielokrotnie, ale w bazie danych warto ta zostanie zapisana raz.

40

MySQL. Leksykon kieszonkowy

4. SQL .............................................................................................. 41
Rozrnianie wielkoci liter Literay Identyfikatory Komentarze Instrukcje Zasady dotyczce transakcji 41 42 43 45 46 106

5. Operatory .................................................................................. 108


Priorytety operatorw Operatory arytmetyczne Operatory porwnania Operatory logiczne 108 109 109 111

6. Funkcje .......................................................................................113
Funkcje agregujce Funkcje oglnego przeznaczenia 113 115

7. Rodzaje tabel ............................................................................ 137 8. Procedury i funkcje skadowane .............................................. 138


Parametry Logika Kursory Obsuga zdarze i warunki 138 139 143 144

9. Trygery ...................................................................................... 146 Skorowidz ................................................................................. 147

MySQL. Leksykon kieszonkowy

Rozdzia 3. Typy danych


We wszystkich typach danych nawiasami kwadratowymi ([]) oznaczane s fragmenty opcjonalne. Poniszy przykad pokazuje sposb prezentacji typu BIGINT, opisanego dalej w tym rozdziale:
BIGINT[(wielko_pokazywana)]

Oznacza to, e sowo BIGINT moe wystpi samodzielnie lub z pokazywan wartoci. Uycie kursywy wskazuje, e nie naley wpisywa sowa wielko_pokazywana, ale poda wasn warto. Oto przykady uycia:
BIGINT BIGINT(20)

Poza typem BIGINT take wiele innych typw danych MySQL uwzgldnia deklaracj rozmiaru wywietlania. Jeli nie powiedziano inaczej, musi to by liczba od 1 do 255. W wersjach MySQL starszych ni wersja 5, baza danych w niektrych przypadkach zmieniaa podany typ kolumny, nie informujc o tym uytkownika. Obecnie takie podmiany nie maj ju miejsca.
VARCHAR -> CHAR

Jeli podana kolumna VARCHAR ma rozmiar mniejszy od czterech znakw, jest przeksztacana w kolumn CHAR.
CHAR -> VARCHAR

Jeli tabela zawiera co najmniej jedn kolumn o zmiennej dugoci, wszystkie kolumny typu CHAR dusze ni trzy znaki s zamieniane na VARCHAR.

Rozmiar wywietlania TIMESTAMP Rozmiar wywietlania pl TIMESTAMP musi by zawsze wielkoci parzyst od 2 do 14. Rozmiar rwny 0 lub wikszy od 14 powoduje przyjcie 14. Wszelkie liczby nieparzyste s zamieniane na nastpn liczb parzyst.

22

MySQL. Leksykon kieszonkowy

Liczby
MySQL obsuguje liczbowe typy danych zgodne z ANSI SQL 2. Typy te dzielimy na cakowitoliczbowe, dziesitne i zmiennoprzecinkowe. W ramach tych grup dzielimy typy dalej, wedug zajmowanej przez nie pamici. W przypadku typw liczbowych mona poda rozmiar wywietlania, ktry wpywa na sposb pokazywania przez MySQL wynikw. Rozmiar ten nie ma adnego zwizku z wielkoci pamici zajmowanej przez dany typ. Dodatkowo w przypadku liczb zmiennoprzecinkowych i dziesitnych mona poda liczb cyfr znajdujcych si za kropk dziesitn. Wtedy liczba cyfr powinna nalee do zakresu od 0 do 30, czyli by co najmniej o dwa mniejsza od rozmiaru wywietlania. Jeli warunek ten nie zostanie dotrzymany, MySQL automatycznie zmieni liczb cyfr tak, aby bya mniejsza o dwa od rozmiaru wywietlania. Przykadowo, MySQL automatycznie zmieni FLOAT(6,5) na FLOAT(7,5). Prba wstawienia do kolumny wartoci przekraczajcej dopuszczalny zakres tej kolumny powoduje obcicie tej wartoci do najmniejszej (dla liczb ujemnych) lub najwikszej (dla liczb dodatnich) wartoci dla danej kolumny dopuszczalnej. Jeli takie obcicie jest robione podczas wykonywania instrukcji ALTER TABLE, LOAD DATA INFILE, UPDATE lub wielowierszowej instrukcji INSERT, MySQL pokazuje ostrzeenie. Wyjtkiem jest korzystanie z MySQL w wersji 5 lub nowszej w trybie penej zgodnoci ze standardem SQL, gdy wtedy w przypadku instrukcji INSERT i UPDATE zgaszany jest bd. Atrybutu AUTO_INCREMENT mona uy do co najwyej jednej kolumny cakowitoliczbowej w tabeli. Atrybut UNSIGNED moe by czony z dowolnym liczbowym typem danych. Uycie tego atrybutu powoduje, e do kolumny nie mona wpisywa liczb ujemnych. Atrybut ZEROFILL nakazuje wypenienie kolumny od lewej

Rozdzia 3. Typy danych

23

strony zerami podczas wywietlania jej wartoci. O liczbie tych zer decyduje szeroko wywietlania danej kolumny.

BIGINT
BIGINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Najwikszy z typw cakowitoliczbowych, pozwalajcy zapisywa liczby od 9 223 372 036 854 775 808 do 9 223 372 036 854 775 807 (jeli bez znaku, to od 0 do 18 446 744 073 709 551 615). Z uwagi na sposb realizacji dziaa na liczbach tego typu, naley unika operacji na liczbach BIGINT bez znaku wikszych ni 9 223 372 036 854 775 807, gdy moe to zaowocowa nieprawidowymi wynikami.

BIT
BIT[(bity)]

Rozmiar w pamici w przyblieniu bity bitw+7 lub 8 bitw Opis W wersjach MySQL 5.0.3 i starszych, pola typu BIT dziaay tak samo, jak TINYINT(1). Omawiany typ pola pozwala przechowywa ustalon liczb bitw. Jeli podana zostanie wielko bitw mniejsza od dozwolonej, MySQL wypeni zerami bity od lewej strony.
24 | MySQL. Leksykon kieszonkowy

DEC
Synonim typu DECIMAL.

DECIMAL
DECIMAL[(dokadno, [skala])] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici rnie Opis Pozwala zapisywa liczby zmiennoprzecinkowe w sytuacjach, kiedy istotna jest dokadno na przykad przy operowaniu kwotami pienidzy. Stosujc typ DECIMAL, trzeba poda dwa jego parametry, dokadno i skal. Dokadno to liczba znaczcych cyfr, za skala to liczba znaczcych cyfr po kropce dziesitnej. Przykadowo, kolumna SALDO typu DECIMAL(9,2) pozwoliaby zapisywa liczby dziewiciocyfrowe, przy czym na prawo od kropki dziesitnej mogyby by dwie cyfry. Zakres dopuszczalnych liczb to w takiej sytuacji od 9 999 999,99 do 9 999 999,99. Jeli podana zostanie liczba zawierajca wicej cyfr po przecinku, ni przewiduje to definicja, liczba zostanie zaokrglona. Wartoci spoza zakresu DECIMAL s obcinane tak, aby si w nim zmieciy. W wersjach MySQL starszych ni 5, wartoci DECIMAL nie byy zapisywane jako liczby zmiennoprzecinkowe, lecz jako acuchy znakw. Na kad cyfr zuywany by jeden znak w przypadku skali wikszej od 0, poza tym jeden dodatkowy znak zuywany jest w przypadku liczb ujemnych. Jeli skala wynosi 0, liczby nie maj czci uamkowej. SQL zgodnie z norm ANSI pozwala pomija dokadno i (lub) skal. Jeli brak dokadnoci, przyjmowane jest ustawienie

Rozdzia 3. Typy danych

25

domylne charakterystyczne dla implementacji. Jeli brak skali, przyjmowane jest zero. W MySQL domylna warto dokadnoci to 10.

DOUBLE
DOUBLE[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Liczba zmiennoprzecinkowa podwjnej precyzji. Ten typ danych pozwala zapisywa due wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 1,7976931348623157E+308 do 2,2250738585072014E308, 0 oraz wartoci dodatnie od 2,2250738585072014E308 do 1,7976931348623157E+308.

DOUBLE PRECISION
Synonim DOUBLE.

FLOAT
FLOAT[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 4 bajty

26

MySQL. Leksykon kieszonkowy

Opis Liczba zmiennoprzecinkowa pojedynczej precyzji. Ten typ danych pozwala zapisywa mae wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 3,402823466E+38 do 1,175494351E38, 0 oraz wartoci dodatnie od 1,175494351E38 do 3,402823466E+38.

INT
INT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 4 bajty Opis Podstawowy rodzaj liczb cakowitych od 2 147 483 648 do 2 147 483 647 (lub od 0 do 4 294 967 295 w przypadku liczb bez znaku).

INTEGER
Synonim INT.

MEDIUMINT
MEDIUMINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

27

Opis Liczby cakowite od 8 388 608 do 8 388 607 (lub od 0 do 16 777 215 w przypadku liczb bez znaku).

NUMERIC
Synonim DECIMAL.

REAL
Synonim DOUBLE.

SMALLINT
SMALLINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 2 bajty Opis Liczby cakowite z zakresu od 32 768 do 32 767 (od 0 do 65 535 w przypadku liczb bez znaku).

TINYINT
TINYINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 1 bajt

28

MySQL. Leksykon kieszonkowy

Opis Liczby cakowite od 128 do 127 (od 0 do 255 w przypadku liczb bez znaku).

acuchy
MySQL obsuguje dwie kategorie acuchw: acuchy tekstowe oraz acuchy binarne. Obie kategorie maj swoje specyficzne typy do obsugi rnych wielkoci pl i rnych sposobw porwnywania wartoci. W zalenoci od sposobu porwnywania, mona uwzgldnia bd nie wielko liter, mona te porwnywa dane binarnie (bajt po bajcie). Kiedy nazwa typu tekstowego (jak CHAR, VARCHAR i inne) zostanie oznaczona sowem kluczowym BINARY, kolumna pozostaje kolumn tekstow, ale dane s porwnywane ze sob binarnie.

BINARY
BINARY(rozmiar)

Rozmiar wedug rozmiar, w zakresie od 0 do 255 Rozmiar w pamici


rozmiar bajtw

Opis Typ danych BINARY to binarny odpowiednik typu CHAR. Podstawowa rnica midzy tymi dwoma typami polega na tym, e pole typu BINARY zawiera dane binarne, wielko tych danych jest mierzona nie w znakach, lecz w bajtach. acuchy zawierajce

Rozdzia 3. Typy danych

29

mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie znakami 0x00 (wersja MySQL 5.0.5 i nowsze) lub spacjami (wersje starsze).

BLOB
Binarny odpowiednik typu TEXT.

CHAR
CHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar wedug rozmiar, do 255 Rozmiar w pamici zaleny od rozmiaru i od uytego zestawu znakw Opis Pole tekstowe ustalonej dugoci. acuchy zawierajce mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie spacjami. Podczas pobierania danych z bazy te dodatkowe spacje s usuwane. Pola CHAR(0) zostay zachowane w celu zapewnienia zgodnoci ze starymi systemami, w ktrych w kolumnach nie s zapisywane adne wartoci.

CHARACTER
Synonim CHAR.

30

MySQL. Leksykon kieszonkowy

CHARACTER VARYING
Synonim VARCHAR.

LONGBLOB
Binarny odpowiednik LONGTEXT.

LONGTEXT
LONGTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 4 294 295 Rozmiar w pamici Dugo wartoci+4 bajty Opis Typ pozwala zapisywa due wartoci tekstowe. Teoretyczne ograniczenie rozmiaru tekstu to ponad 4 GB, ale praktycznymi ograniczeniami s ograniczenia protokou komunikacyjnego MySQL oraz ilo pamici przeznaczonej na komunikacj na serwerze i na stacji klienckiej.

MEDIUMBLOB
Binarna posta MEDIUMTEXT.

MEDIUMTEXT
MEDIUMTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozdzia 3. Typy danych

31

Rozmiar 0 do 16 777 215 Rozmiar w pamici Dugo wartoci+3 bajty Opis Typ pozwala zapisywa redniej wielkoci wartoci tekstowe.

NCHAR
Synonim CHAR.

NATIONAL CHAR
Synonim CHAR.

NATIONAL CHARACTER
Synonim CHAR.

NATIONAL VARCHAR
Synonim VARCHAR.

TEXT
TEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 65 535

32

MySQL. Leksykon kieszonkowy

Rozmiar w pamici Dugo wartoci tekstowej+2 bajty Opis Typ pozwala zapisywa typowe wartoci tekstowe.

TINYBLOB
Binarny odpowiednik TINYTEXT.

TINYTEXT
TINYTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 255 Rozmiar w pamici Dugo wartoci tekstowej+1 bajt Opis Pozwala zapisywa krtkie dane tekstowe.

VARBINARY
VARBINARY(rozmiar)

Rozmiar Wedug parametru rozmiar

Rozdzia 3. Typy danych

33

Rozmiar w pamici
rozmiar bajtw

Opis Jest to binarna odmiana typu VARCHAR. Podstawowa rnica polega na tym, e zapisywane s dane binarne, a rozmiar pola mierzony jest w bajtach, nie w znakach. Wielkoci typu VARBINARY, w przeciwiestwie do wartoci typu BINARY, nie s niczym dopeniane.

VARCHAR
VARCHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar Wskazana przez rozmiar warto z zakresu do 65 532 (od 1 do 255 w wersjach wczeniejszych ni MySQL 5); rozmiar wskazuje rzeczywist wielko kolumny i jest ograniczony przez dopuszczaln wielko wiersza w znakach; to, ile miejsca faktycznie bdzie potrzebne, zaley zatem od zestawu znakw uytego w danej kolumnie Rozmiar w pamici Zaley od liczby znakw wskazanych jako rozmiar oraz od liczby bajtw potrzebnych do zapisu poszczeglnych znakw w uytym mechanizmie kodowania znakw Opis Pozwala zapisywa wartoci tekstowe zmiennej dugoci. W wersjach poprzedzajcych MySQL 5 z wartoci VARCHAR usuwane s spacje kocowe; wersja MySQL 5 i nowsze standardowo nie usuwaj spacji kocowych.

34

MySQL. Leksykon kieszonkowy

Daty
Typy datowe MySQL s wyjtkowo elastycznym narzdziem, pozwalajcym zapisywa wszelki informacje dzienne. MySQL jest bardzo tolerancyjny i zakada, e to aplikacja, a nie baza danych, ma sprawdza poprawno tych danych. MySQL sprawdza jedynie, czy miesic nie wykracza poza zakres 0 12 i czy dzie nie wykracza poza zakres 0 31. Wobec tego z punktu widzenia MySQL 31 lutego 2001 roku jest poprawn dat. Bardziej przydatn wartoci jest data 0 lutego 2001 roku; cyfra zero moe zastpowa t cz daty, ktrej dokadnie nie znamy. MySQL 5 jest jednak ju baz danych nieco bardziej restrykcyjn co do wartoci, jakie mona zapisywa w polach datowych. Wprawdzie MySQL dopuszcza do du swobod formatw wejciowych dat, to naley stara si w aplikacjach daty formatowa zgodnie z formatem wewntrznym MySQL w celu uniknicia nieporozumie. MySQL zawsze zakada, e rok jest pierwszym elementem po lewej stronie daty. Jeli w operacji SQL podana zostanie nieprawidowa warto daty, MySQL wstawi w jej miejsce zero. MySQL w kontekcie liczb cakowitych automatycznie konwertuje daty i czas na liczby cakowite.

DATE
DATE

Format
YYYY-MM-DD (2001-01-01)

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

35

Opis Data kalendarza gregoriaskiego z zakresu od 1 stycznia 1000 roku ('1000-01-01') do 31 grudnia 9999 roku ('9999-12-31').

DATETIME
DATETIME

Format
YYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 8 bajtw Opis Zapisuje czas z zakresu od 00:00:00 1 stycznia 1000 roku ('100001-01 00:00:00') do 23:59:59 31 grudnia 9999 ('9999-12-31 23:59:59') wedug kalendarza gregoriaskiego.

TIME
TIME

Format
hh:mm:ss (06:00:00)

Rozmiar w pamici 3 bajty Opis Zapisuje czas od pnocy ('00:00:00') do sekundy przed pnoc ('23:59:59').
36 | MySQL. Leksykon kieszonkowy

TIMESTAMP
TIMESTAMP[(rozmiar_wywietlania)]

Format
YYYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 4 bajty Opis Zapis chwili z dokadnoci do sekundy od pnocy 1 stycznia 1970 roku do minuty przed pnoc 31 grudnia 2037 roku. Podstawowym zastosowaniem tego typu jest rejestracja modyfikacji tabel. Przy wstawianiu do takiej kolumny wartoci NULL wstawiane s aktualna data i czas. W przypadku modyfikowania jakiejkolwiek wartoci w wierszu z kolumn TIMESTAMP pierwsza kolumna tego typu zostanie zaktualizowana biec dat i czasem. Format danych TIMESTAMP znany z wczeniejszych wersji MySQL, do 4.1 wcznie, w wersji 5.1 nie jest ju obsugiwany.

YEAR
YEAR[(rozmiar)]

Format
YYYY (2001)

Rozmiar w pamici 1 bajt

Rozdzia 3. Typy danych

37

Opis Pozwala zapisa rok z kalendarza gregoriaskiego. Parametr rozmiar umoliwia zapisywanie roku dwu- lub czterocyfrowo. Zakres YEAR(4) rozciga si od 1900 do 2155, dla YEAR(2) od 1970 do 2069. Domylnie przyjmowane jest YEAR(4).

Typy zoone
Zoone typy danych MySQL, ENUM i SET, s po prostu specjalnymi przypadkami typw acuchowych. Opisujemy je osobno, gdy s bardziej zoone pojciowo i stanowi wprowadzenie do typw danych SQL3, ktre by moe MySQL bdzie obsugiwa w przyszoci.

ENUM
ENUM(warto1, warto2, ...)

Rozmiar w pamici 1 255 elementw: 1 bajt 255 65 535 elementw: 2 bajty Opis Typ danych ENUM pozwala zapisywa jeden z wielu zdefiniowanych wczeniej acuchw. Przy tworzeniu kolumny typu ENUM podaje si list dopuszczalnych jej wartoci. Dane mog by do tej kolumny wstawiane i aktualizowane jedynie z tej listy; kada prba wstawienia wartoci spoza niej powoduje wstawienie pustego acucha.

38

MySQL. Leksykon kieszonkowy

Do listy dopuszczalnych wartoci mona si odwoywa przez indeks, przy czym pierwszy element otrzymuje numer 0. Na przykad:
SELECT COLID FROM TBL WHERE COLENUM = 0;

Jeli COLID jest kolumn z kluczem gwnym, a COLENUM kolumn typu ENUM, taka instrukcja SQL spowoduje pobranie kluczy gwnych wszystkich wierszy, dla ktrych COLENUM jest pierwsz wartoci z listy. Analogicznie, sortowanie wzgldem kolumn ENUM powoduje sortowanie wedug indeksu, nie acucha. Najwiksza moliwa liczba elementw kolumny ENUM to 65 535.

SET
SET(warto1, warto2, ...)

Rozmiar w pamici 1 8 elementw: 1 bajt 9 16 elementw: 2 bajty 17 24 elementy: 3 bajty 25 32 elementy: 4 bajty 33 64 elementy: 8 bajtw Opis Lista wartoci wybieranych z okrelonego wczeniej zbioru. Pole moe zawiera dowoln liczb acuchw wskazanych w instrukcji SET, szczeglnie moe nie zawiera adnej takiej wartoci. SET jest podobny do ENUM, ale kade pole moe zawiera wicej ni jedn z podanych wartoci. Dane typu SET nie s jednak zapisywane za pomoc indeksw, ale w zoonej mapie bitowej. Jeli dany jest zbir SET, zawierajcy elementy: Mandarynka, Pomidor,
Rozdzia 3. Typy danych | 39

Gruszka i Banan, kady z tych elementw jest reprezentowany jako

wczony bit w bajcie, jak to pokazano w tabeli 3.1.


Tabela 3.1. Reprezentacja zbioru elementw w MySQL
Element
Mandarynka Pomidor Gruszka Banan

Warto dziesitna
1 2 4 8

Zapis bitowy
0001 0010 0100 1000

W powyszym przykadzie zapisanie jednoczenie wartoci Mandarynka i Gruszka wymaga uycia wartoci 5 (bitowo 0101). W kolumnie SET mona zapisa najwyej 64 wartoci. Wprawdzie t sam warto mona w jednym wyraeniu SQL wpisa wielokrotnie, ale w bazie danych warto ta zostanie zapisana raz.

40

MySQL. Leksykon kieszonkowy

4. SQL .............................................................................................. 41
Rozrnianie wielkoci liter Literay Identyfikatory Komentarze Instrukcje Zasady dotyczce transakcji 41 42 43 45 46 106

5. Operatory .................................................................................. 108


Priorytety operatorw Operatory arytmetyczne Operatory porwnania Operatory logiczne 108 109 109 111

6. Funkcje .......................................................................................113
Funkcje agregujce Funkcje oglnego przeznaczenia 113 115

7. Rodzaje tabel ............................................................................ 137 8. Procedury i funkcje skadowane .............................................. 138


Parametry Logika Kursory Obsuga zdarze i warunki 138 139 143 144

9. Trygery ...................................................................................... 146 Skorowidz ................................................................................. 147

MySQL. Leksykon kieszonkowy

Rozdzia 3. Typy danych


We wszystkich typach danych nawiasami kwadratowymi ([]) oznaczane s fragmenty opcjonalne. Poniszy przykad pokazuje sposb prezentacji typu BIGINT, opisanego dalej w tym rozdziale:
BIGINT[(wielko_pokazywana)]

Oznacza to, e sowo BIGINT moe wystpi samodzielnie lub z pokazywan wartoci. Uycie kursywy wskazuje, e nie naley wpisywa sowa wielko_pokazywana, ale poda wasn warto. Oto przykady uycia:
BIGINT BIGINT(20)

Poza typem BIGINT take wiele innych typw danych MySQL uwzgldnia deklaracj rozmiaru wywietlania. Jeli nie powiedziano inaczej, musi to by liczba od 1 do 255. W wersjach MySQL starszych ni wersja 5, baza danych w niektrych przypadkach zmieniaa podany typ kolumny, nie informujc o tym uytkownika. Obecnie takie podmiany nie maj ju miejsca.
VARCHAR -> CHAR

Jeli podana kolumna VARCHAR ma rozmiar mniejszy od czterech znakw, jest przeksztacana w kolumn CHAR.
CHAR -> VARCHAR

Jeli tabela zawiera co najmniej jedn kolumn o zmiennej dugoci, wszystkie kolumny typu CHAR dusze ni trzy znaki s zamieniane na VARCHAR.

Rozmiar wywietlania TIMESTAMP Rozmiar wywietlania pl TIMESTAMP musi by zawsze wielkoci parzyst od 2 do 14. Rozmiar rwny 0 lub wikszy od 14 powoduje przyjcie 14. Wszelkie liczby nieparzyste s zamieniane na nastpn liczb parzyst.

22

MySQL. Leksykon kieszonkowy

Liczby
MySQL obsuguje liczbowe typy danych zgodne z ANSI SQL 2. Typy te dzielimy na cakowitoliczbowe, dziesitne i zmiennoprzecinkowe. W ramach tych grup dzielimy typy dalej, wedug zajmowanej przez nie pamici. W przypadku typw liczbowych mona poda rozmiar wywietlania, ktry wpywa na sposb pokazywania przez MySQL wynikw. Rozmiar ten nie ma adnego zwizku z wielkoci pamici zajmowanej przez dany typ. Dodatkowo w przypadku liczb zmiennoprzecinkowych i dziesitnych mona poda liczb cyfr znajdujcych si za kropk dziesitn. Wtedy liczba cyfr powinna nalee do zakresu od 0 do 30, czyli by co najmniej o dwa mniejsza od rozmiaru wywietlania. Jeli warunek ten nie zostanie dotrzymany, MySQL automatycznie zmieni liczb cyfr tak, aby bya mniejsza o dwa od rozmiaru wywietlania. Przykadowo, MySQL automatycznie zmieni FLOAT(6,5) na FLOAT(7,5). Prba wstawienia do kolumny wartoci przekraczajcej dopuszczalny zakres tej kolumny powoduje obcicie tej wartoci do najmniejszej (dla liczb ujemnych) lub najwikszej (dla liczb dodatnich) wartoci dla danej kolumny dopuszczalnej. Jeli takie obcicie jest robione podczas wykonywania instrukcji ALTER TABLE, LOAD DATA INFILE, UPDATE lub wielowierszowej instrukcji INSERT, MySQL pokazuje ostrzeenie. Wyjtkiem jest korzystanie z MySQL w wersji 5 lub nowszej w trybie penej zgodnoci ze standardem SQL, gdy wtedy w przypadku instrukcji INSERT i UPDATE zgaszany jest bd. Atrybutu AUTO_INCREMENT mona uy do co najwyej jednej kolumny cakowitoliczbowej w tabeli. Atrybut UNSIGNED moe by czony z dowolnym liczbowym typem danych. Uycie tego atrybutu powoduje, e do kolumny nie mona wpisywa liczb ujemnych. Atrybut ZEROFILL nakazuje wypenienie kolumny od lewej

Rozdzia 3. Typy danych

23

strony zerami podczas wywietlania jej wartoci. O liczbie tych zer decyduje szeroko wywietlania danej kolumny.

BIGINT
BIGINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Najwikszy z typw cakowitoliczbowych, pozwalajcy zapisywa liczby od 9 223 372 036 854 775 808 do 9 223 372 036 854 775 807 (jeli bez znaku, to od 0 do 18 446 744 073 709 551 615). Z uwagi na sposb realizacji dziaa na liczbach tego typu, naley unika operacji na liczbach BIGINT bez znaku wikszych ni 9 223 372 036 854 775 807, gdy moe to zaowocowa nieprawidowymi wynikami.

BIT
BIT[(bity)]

Rozmiar w pamici w przyblieniu bity bitw+7 lub 8 bitw Opis W wersjach MySQL 5.0.3 i starszych, pola typu BIT dziaay tak samo, jak TINYINT(1). Omawiany typ pola pozwala przechowywa ustalon liczb bitw. Jeli podana zostanie wielko bitw mniejsza od dozwolonej, MySQL wypeni zerami bity od lewej strony.
24 | MySQL. Leksykon kieszonkowy

DEC
Synonim typu DECIMAL.

DECIMAL
DECIMAL[(dokadno, [skala])] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici rnie Opis Pozwala zapisywa liczby zmiennoprzecinkowe w sytuacjach, kiedy istotna jest dokadno na przykad przy operowaniu kwotami pienidzy. Stosujc typ DECIMAL, trzeba poda dwa jego parametry, dokadno i skal. Dokadno to liczba znaczcych cyfr, za skala to liczba znaczcych cyfr po kropce dziesitnej. Przykadowo, kolumna SALDO typu DECIMAL(9,2) pozwoliaby zapisywa liczby dziewiciocyfrowe, przy czym na prawo od kropki dziesitnej mogyby by dwie cyfry. Zakres dopuszczalnych liczb to w takiej sytuacji od 9 999 999,99 do 9 999 999,99. Jeli podana zostanie liczba zawierajca wicej cyfr po przecinku, ni przewiduje to definicja, liczba zostanie zaokrglona. Wartoci spoza zakresu DECIMAL s obcinane tak, aby si w nim zmieciy. W wersjach MySQL starszych ni 5, wartoci DECIMAL nie byy zapisywane jako liczby zmiennoprzecinkowe, lecz jako acuchy znakw. Na kad cyfr zuywany by jeden znak w przypadku skali wikszej od 0, poza tym jeden dodatkowy znak zuywany jest w przypadku liczb ujemnych. Jeli skala wynosi 0, liczby nie maj czci uamkowej. SQL zgodnie z norm ANSI pozwala pomija dokadno i (lub) skal. Jeli brak dokadnoci, przyjmowane jest ustawienie

Rozdzia 3. Typy danych

25

domylne charakterystyczne dla implementacji. Jeli brak skali, przyjmowane jest zero. W MySQL domylna warto dokadnoci to 10.

DOUBLE
DOUBLE[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Liczba zmiennoprzecinkowa podwjnej precyzji. Ten typ danych pozwala zapisywa due wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 1,7976931348623157E+308 do 2,2250738585072014E308, 0 oraz wartoci dodatnie od 2,2250738585072014E308 do 1,7976931348623157E+308.

DOUBLE PRECISION
Synonim DOUBLE.

FLOAT
FLOAT[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 4 bajty

26

MySQL. Leksykon kieszonkowy

Opis Liczba zmiennoprzecinkowa pojedynczej precyzji. Ten typ danych pozwala zapisywa mae wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 3,402823466E+38 do 1,175494351E38, 0 oraz wartoci dodatnie od 1,175494351E38 do 3,402823466E+38.

INT
INT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 4 bajty Opis Podstawowy rodzaj liczb cakowitych od 2 147 483 648 do 2 147 483 647 (lub od 0 do 4 294 967 295 w przypadku liczb bez znaku).

INTEGER
Synonim INT.

MEDIUMINT
MEDIUMINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

27

Opis Liczby cakowite od 8 388 608 do 8 388 607 (lub od 0 do 16 777 215 w przypadku liczb bez znaku).

NUMERIC
Synonim DECIMAL.

REAL
Synonim DOUBLE.

SMALLINT
SMALLINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 2 bajty Opis Liczby cakowite z zakresu od 32 768 do 32 767 (od 0 do 65 535 w przypadku liczb bez znaku).

TINYINT
TINYINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 1 bajt

28

MySQL. Leksykon kieszonkowy

Opis Liczby cakowite od 128 do 127 (od 0 do 255 w przypadku liczb bez znaku).

acuchy
MySQL obsuguje dwie kategorie acuchw: acuchy tekstowe oraz acuchy binarne. Obie kategorie maj swoje specyficzne typy do obsugi rnych wielkoci pl i rnych sposobw porwnywania wartoci. W zalenoci od sposobu porwnywania, mona uwzgldnia bd nie wielko liter, mona te porwnywa dane binarnie (bajt po bajcie). Kiedy nazwa typu tekstowego (jak CHAR, VARCHAR i inne) zostanie oznaczona sowem kluczowym BINARY, kolumna pozostaje kolumn tekstow, ale dane s porwnywane ze sob binarnie.

BINARY
BINARY(rozmiar)

Rozmiar wedug rozmiar, w zakresie od 0 do 255 Rozmiar w pamici


rozmiar bajtw

Opis Typ danych BINARY to binarny odpowiednik typu CHAR. Podstawowa rnica midzy tymi dwoma typami polega na tym, e pole typu BINARY zawiera dane binarne, wielko tych danych jest mierzona nie w znakach, lecz w bajtach. acuchy zawierajce

Rozdzia 3. Typy danych

29

mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie znakami 0x00 (wersja MySQL 5.0.5 i nowsze) lub spacjami (wersje starsze).

BLOB
Binarny odpowiednik typu TEXT.

CHAR
CHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar wedug rozmiar, do 255 Rozmiar w pamici zaleny od rozmiaru i od uytego zestawu znakw Opis Pole tekstowe ustalonej dugoci. acuchy zawierajce mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie spacjami. Podczas pobierania danych z bazy te dodatkowe spacje s usuwane. Pola CHAR(0) zostay zachowane w celu zapewnienia zgodnoci ze starymi systemami, w ktrych w kolumnach nie s zapisywane adne wartoci.

CHARACTER
Synonim CHAR.

30

MySQL. Leksykon kieszonkowy

CHARACTER VARYING
Synonim VARCHAR.

LONGBLOB
Binarny odpowiednik LONGTEXT.

LONGTEXT
LONGTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 4 294 295 Rozmiar w pamici Dugo wartoci+4 bajty Opis Typ pozwala zapisywa due wartoci tekstowe. Teoretyczne ograniczenie rozmiaru tekstu to ponad 4 GB, ale praktycznymi ograniczeniami s ograniczenia protokou komunikacyjnego MySQL oraz ilo pamici przeznaczonej na komunikacj na serwerze i na stacji klienckiej.

MEDIUMBLOB
Binarna posta MEDIUMTEXT.

MEDIUMTEXT
MEDIUMTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozdzia 3. Typy danych

31

Rozmiar 0 do 16 777 215 Rozmiar w pamici Dugo wartoci+3 bajty Opis Typ pozwala zapisywa redniej wielkoci wartoci tekstowe.

NCHAR
Synonim CHAR.

NATIONAL CHAR
Synonim CHAR.

NATIONAL CHARACTER
Synonim CHAR.

NATIONAL VARCHAR
Synonim VARCHAR.

TEXT
TEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 65 535

32

MySQL. Leksykon kieszonkowy

Rozmiar w pamici Dugo wartoci tekstowej+2 bajty Opis Typ pozwala zapisywa typowe wartoci tekstowe.

TINYBLOB
Binarny odpowiednik TINYTEXT.

TINYTEXT
TINYTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 255 Rozmiar w pamici Dugo wartoci tekstowej+1 bajt Opis Pozwala zapisywa krtkie dane tekstowe.

VARBINARY
VARBINARY(rozmiar)

Rozmiar Wedug parametru rozmiar

Rozdzia 3. Typy danych

33

Rozmiar w pamici
rozmiar bajtw

Opis Jest to binarna odmiana typu VARCHAR. Podstawowa rnica polega na tym, e zapisywane s dane binarne, a rozmiar pola mierzony jest w bajtach, nie w znakach. Wielkoci typu VARBINARY, w przeciwiestwie do wartoci typu BINARY, nie s niczym dopeniane.

VARCHAR
VARCHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar Wskazana przez rozmiar warto z zakresu do 65 532 (od 1 do 255 w wersjach wczeniejszych ni MySQL 5); rozmiar wskazuje rzeczywist wielko kolumny i jest ograniczony przez dopuszczaln wielko wiersza w znakach; to, ile miejsca faktycznie bdzie potrzebne, zaley zatem od zestawu znakw uytego w danej kolumnie Rozmiar w pamici Zaley od liczby znakw wskazanych jako rozmiar oraz od liczby bajtw potrzebnych do zapisu poszczeglnych znakw w uytym mechanizmie kodowania znakw Opis Pozwala zapisywa wartoci tekstowe zmiennej dugoci. W wersjach poprzedzajcych MySQL 5 z wartoci VARCHAR usuwane s spacje kocowe; wersja MySQL 5 i nowsze standardowo nie usuwaj spacji kocowych.

34

MySQL. Leksykon kieszonkowy

Daty
Typy datowe MySQL s wyjtkowo elastycznym narzdziem, pozwalajcym zapisywa wszelki informacje dzienne. MySQL jest bardzo tolerancyjny i zakada, e to aplikacja, a nie baza danych, ma sprawdza poprawno tych danych. MySQL sprawdza jedynie, czy miesic nie wykracza poza zakres 0 12 i czy dzie nie wykracza poza zakres 0 31. Wobec tego z punktu widzenia MySQL 31 lutego 2001 roku jest poprawn dat. Bardziej przydatn wartoci jest data 0 lutego 2001 roku; cyfra zero moe zastpowa t cz daty, ktrej dokadnie nie znamy. MySQL 5 jest jednak ju baz danych nieco bardziej restrykcyjn co do wartoci, jakie mona zapisywa w polach datowych. Wprawdzie MySQL dopuszcza do du swobod formatw wejciowych dat, to naley stara si w aplikacjach daty formatowa zgodnie z formatem wewntrznym MySQL w celu uniknicia nieporozumie. MySQL zawsze zakada, e rok jest pierwszym elementem po lewej stronie daty. Jeli w operacji SQL podana zostanie nieprawidowa warto daty, MySQL wstawi w jej miejsce zero. MySQL w kontekcie liczb cakowitych automatycznie konwertuje daty i czas na liczby cakowite.

DATE
DATE

Format
YYYY-MM-DD (2001-01-01)

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

35

Opis Data kalendarza gregoriaskiego z zakresu od 1 stycznia 1000 roku ('1000-01-01') do 31 grudnia 9999 roku ('9999-12-31').

DATETIME
DATETIME

Format
YYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 8 bajtw Opis Zapisuje czas z zakresu od 00:00:00 1 stycznia 1000 roku ('100001-01 00:00:00') do 23:59:59 31 grudnia 9999 ('9999-12-31 23:59:59') wedug kalendarza gregoriaskiego.

TIME
TIME

Format
hh:mm:ss (06:00:00)

Rozmiar w pamici 3 bajty Opis Zapisuje czas od pnocy ('00:00:00') do sekundy przed pnoc ('23:59:59').
36 | MySQL. Leksykon kieszonkowy

TIMESTAMP
TIMESTAMP[(rozmiar_wywietlania)]

Format
YYYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 4 bajty Opis Zapis chwili z dokadnoci do sekundy od pnocy 1 stycznia 1970 roku do minuty przed pnoc 31 grudnia 2037 roku. Podstawowym zastosowaniem tego typu jest rejestracja modyfikacji tabel. Przy wstawianiu do takiej kolumny wartoci NULL wstawiane s aktualna data i czas. W przypadku modyfikowania jakiejkolwiek wartoci w wierszu z kolumn TIMESTAMP pierwsza kolumna tego typu zostanie zaktualizowana biec dat i czasem. Format danych TIMESTAMP znany z wczeniejszych wersji MySQL, do 4.1 wcznie, w wersji 5.1 nie jest ju obsugiwany.

YEAR
YEAR[(rozmiar)]

Format
YYYY (2001)

Rozmiar w pamici 1 bajt

Rozdzia 3. Typy danych

37

Opis Pozwala zapisa rok z kalendarza gregoriaskiego. Parametr rozmiar umoliwia zapisywanie roku dwu- lub czterocyfrowo. Zakres YEAR(4) rozciga si od 1900 do 2155, dla YEAR(2) od 1970 do 2069. Domylnie przyjmowane jest YEAR(4).

Typy zoone
Zoone typy danych MySQL, ENUM i SET, s po prostu specjalnymi przypadkami typw acuchowych. Opisujemy je osobno, gdy s bardziej zoone pojciowo i stanowi wprowadzenie do typw danych SQL3, ktre by moe MySQL bdzie obsugiwa w przyszoci.

ENUM
ENUM(warto1, warto2, ...)

Rozmiar w pamici 1 255 elementw: 1 bajt 255 65 535 elementw: 2 bajty Opis Typ danych ENUM pozwala zapisywa jeden z wielu zdefiniowanych wczeniej acuchw. Przy tworzeniu kolumny typu ENUM podaje si list dopuszczalnych jej wartoci. Dane mog by do tej kolumny wstawiane i aktualizowane jedynie z tej listy; kada prba wstawienia wartoci spoza niej powoduje wstawienie pustego acucha.

38

MySQL. Leksykon kieszonkowy

Do listy dopuszczalnych wartoci mona si odwoywa przez indeks, przy czym pierwszy element otrzymuje numer 0. Na przykad:
SELECT COLID FROM TBL WHERE COLENUM = 0;

Jeli COLID jest kolumn z kluczem gwnym, a COLENUM kolumn typu ENUM, taka instrukcja SQL spowoduje pobranie kluczy gwnych wszystkich wierszy, dla ktrych COLENUM jest pierwsz wartoci z listy. Analogicznie, sortowanie wzgldem kolumn ENUM powoduje sortowanie wedug indeksu, nie acucha. Najwiksza moliwa liczba elementw kolumny ENUM to 65 535.

SET
SET(warto1, warto2, ...)

Rozmiar w pamici 1 8 elementw: 1 bajt 9 16 elementw: 2 bajty 17 24 elementy: 3 bajty 25 32 elementy: 4 bajty 33 64 elementy: 8 bajtw Opis Lista wartoci wybieranych z okrelonego wczeniej zbioru. Pole moe zawiera dowoln liczb acuchw wskazanych w instrukcji SET, szczeglnie moe nie zawiera adnej takiej wartoci. SET jest podobny do ENUM, ale kade pole moe zawiera wicej ni jedn z podanych wartoci. Dane typu SET nie s jednak zapisywane za pomoc indeksw, ale w zoonej mapie bitowej. Jeli dany jest zbir SET, zawierajcy elementy: Mandarynka, Pomidor,
Rozdzia 3. Typy danych | 39

Gruszka i Banan, kady z tych elementw jest reprezentowany jako

wczony bit w bajcie, jak to pokazano w tabeli 3.1.


Tabela 3.1. Reprezentacja zbioru elementw w MySQL
Element
Mandarynka Pomidor Gruszka Banan

Warto dziesitna
1 2 4 8

Zapis bitowy
0001 0010 0100 1000

W powyszym przykadzie zapisanie jednoczenie wartoci Mandarynka i Gruszka wymaga uycia wartoci 5 (bitowo 0101). W kolumnie SET mona zapisa najwyej 64 wartoci. Wprawdzie t sam warto mona w jednym wyraeniu SQL wpisa wielokrotnie, ale w bazie danych warto ta zostanie zapisana raz.

40

MySQL. Leksykon kieszonkowy

4. SQL .............................................................................................. 41
Rozrnianie wielkoci liter Literay Identyfikatory Komentarze Instrukcje Zasady dotyczce transakcji 41 42 43 45 46 106

5. Operatory .................................................................................. 108


Priorytety operatorw Operatory arytmetyczne Operatory porwnania Operatory logiczne 108 109 109 111

6. Funkcje .......................................................................................113
Funkcje agregujce Funkcje oglnego przeznaczenia 113 115

7. Rodzaje tabel ............................................................................ 137 8. Procedury i funkcje skadowane .............................................. 138


Parametry Logika Kursory Obsuga zdarze i warunki 138 139 143 144

9. Trygery ...................................................................................... 146 Skorowidz ................................................................................. 147

MySQL. Leksykon kieszonkowy

Rozdzia 3. Typy danych


We wszystkich typach danych nawiasami kwadratowymi ([]) oznaczane s fragmenty opcjonalne. Poniszy przykad pokazuje sposb prezentacji typu BIGINT, opisanego dalej w tym rozdziale:
BIGINT[(wielko_pokazywana)]

Oznacza to, e sowo BIGINT moe wystpi samodzielnie lub z pokazywan wartoci. Uycie kursywy wskazuje, e nie naley wpisywa sowa wielko_pokazywana, ale poda wasn warto. Oto przykady uycia:
BIGINT BIGINT(20)

Poza typem BIGINT take wiele innych typw danych MySQL uwzgldnia deklaracj rozmiaru wywietlania. Jeli nie powiedziano inaczej, musi to by liczba od 1 do 255. W wersjach MySQL starszych ni wersja 5, baza danych w niektrych przypadkach zmieniaa podany typ kolumny, nie informujc o tym uytkownika. Obecnie takie podmiany nie maj ju miejsca.
VARCHAR -> CHAR

Jeli podana kolumna VARCHAR ma rozmiar mniejszy od czterech znakw, jest przeksztacana w kolumn CHAR.
CHAR -> VARCHAR

Jeli tabela zawiera co najmniej jedn kolumn o zmiennej dugoci, wszystkie kolumny typu CHAR dusze ni trzy znaki s zamieniane na VARCHAR.

Rozmiar wywietlania TIMESTAMP Rozmiar wywietlania pl TIMESTAMP musi by zawsze wielkoci parzyst od 2 do 14. Rozmiar rwny 0 lub wikszy od 14 powoduje przyjcie 14. Wszelkie liczby nieparzyste s zamieniane na nastpn liczb parzyst.

22

MySQL. Leksykon kieszonkowy

Liczby
MySQL obsuguje liczbowe typy danych zgodne z ANSI SQL 2. Typy te dzielimy na cakowitoliczbowe, dziesitne i zmiennoprzecinkowe. W ramach tych grup dzielimy typy dalej, wedug zajmowanej przez nie pamici. W przypadku typw liczbowych mona poda rozmiar wywietlania, ktry wpywa na sposb pokazywania przez MySQL wynikw. Rozmiar ten nie ma adnego zwizku z wielkoci pamici zajmowanej przez dany typ. Dodatkowo w przypadku liczb zmiennoprzecinkowych i dziesitnych mona poda liczb cyfr znajdujcych si za kropk dziesitn. Wtedy liczba cyfr powinna nalee do zakresu od 0 do 30, czyli by co najmniej o dwa mniejsza od rozmiaru wywietlania. Jeli warunek ten nie zostanie dotrzymany, MySQL automatycznie zmieni liczb cyfr tak, aby bya mniejsza o dwa od rozmiaru wywietlania. Przykadowo, MySQL automatycznie zmieni FLOAT(6,5) na FLOAT(7,5). Prba wstawienia do kolumny wartoci przekraczajcej dopuszczalny zakres tej kolumny powoduje obcicie tej wartoci do najmniejszej (dla liczb ujemnych) lub najwikszej (dla liczb dodatnich) wartoci dla danej kolumny dopuszczalnej. Jeli takie obcicie jest robione podczas wykonywania instrukcji ALTER TABLE, LOAD DATA INFILE, UPDATE lub wielowierszowej instrukcji INSERT, MySQL pokazuje ostrzeenie. Wyjtkiem jest korzystanie z MySQL w wersji 5 lub nowszej w trybie penej zgodnoci ze standardem SQL, gdy wtedy w przypadku instrukcji INSERT i UPDATE zgaszany jest bd. Atrybutu AUTO_INCREMENT mona uy do co najwyej jednej kolumny cakowitoliczbowej w tabeli. Atrybut UNSIGNED moe by czony z dowolnym liczbowym typem danych. Uycie tego atrybutu powoduje, e do kolumny nie mona wpisywa liczb ujemnych. Atrybut ZEROFILL nakazuje wypenienie kolumny od lewej

Rozdzia 3. Typy danych

23

strony zerami podczas wywietlania jej wartoci. O liczbie tych zer decyduje szeroko wywietlania danej kolumny.

BIGINT
BIGINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Najwikszy z typw cakowitoliczbowych, pozwalajcy zapisywa liczby od 9 223 372 036 854 775 808 do 9 223 372 036 854 775 807 (jeli bez znaku, to od 0 do 18 446 744 073 709 551 615). Z uwagi na sposb realizacji dziaa na liczbach tego typu, naley unika operacji na liczbach BIGINT bez znaku wikszych ni 9 223 372 036 854 775 807, gdy moe to zaowocowa nieprawidowymi wynikami.

BIT
BIT[(bity)]

Rozmiar w pamici w przyblieniu bity bitw+7 lub 8 bitw Opis W wersjach MySQL 5.0.3 i starszych, pola typu BIT dziaay tak samo, jak TINYINT(1). Omawiany typ pola pozwala przechowywa ustalon liczb bitw. Jeli podana zostanie wielko bitw mniejsza od dozwolonej, MySQL wypeni zerami bity od lewej strony.
24 | MySQL. Leksykon kieszonkowy

DEC
Synonim typu DECIMAL.

DECIMAL
DECIMAL[(dokadno, [skala])] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici rnie Opis Pozwala zapisywa liczby zmiennoprzecinkowe w sytuacjach, kiedy istotna jest dokadno na przykad przy operowaniu kwotami pienidzy. Stosujc typ DECIMAL, trzeba poda dwa jego parametry, dokadno i skal. Dokadno to liczba znaczcych cyfr, za skala to liczba znaczcych cyfr po kropce dziesitnej. Przykadowo, kolumna SALDO typu DECIMAL(9,2) pozwoliaby zapisywa liczby dziewiciocyfrowe, przy czym na prawo od kropki dziesitnej mogyby by dwie cyfry. Zakres dopuszczalnych liczb to w takiej sytuacji od 9 999 999,99 do 9 999 999,99. Jeli podana zostanie liczba zawierajca wicej cyfr po przecinku, ni przewiduje to definicja, liczba zostanie zaokrglona. Wartoci spoza zakresu DECIMAL s obcinane tak, aby si w nim zmieciy. W wersjach MySQL starszych ni 5, wartoci DECIMAL nie byy zapisywane jako liczby zmiennoprzecinkowe, lecz jako acuchy znakw. Na kad cyfr zuywany by jeden znak w przypadku skali wikszej od 0, poza tym jeden dodatkowy znak zuywany jest w przypadku liczb ujemnych. Jeli skala wynosi 0, liczby nie maj czci uamkowej. SQL zgodnie z norm ANSI pozwala pomija dokadno i (lub) skal. Jeli brak dokadnoci, przyjmowane jest ustawienie

Rozdzia 3. Typy danych

25

domylne charakterystyczne dla implementacji. Jeli brak skali, przyjmowane jest zero. W MySQL domylna warto dokadnoci to 10.

DOUBLE
DOUBLE[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Liczba zmiennoprzecinkowa podwjnej precyzji. Ten typ danych pozwala zapisywa due wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 1,7976931348623157E+308 do 2,2250738585072014E308, 0 oraz wartoci dodatnie od 2,2250738585072014E308 do 1,7976931348623157E+308.

DOUBLE PRECISION
Synonim DOUBLE.

FLOAT
FLOAT[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 4 bajty

26

MySQL. Leksykon kieszonkowy

Opis Liczba zmiennoprzecinkowa pojedynczej precyzji. Ten typ danych pozwala zapisywa mae wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 3,402823466E+38 do 1,175494351E38, 0 oraz wartoci dodatnie od 1,175494351E38 do 3,402823466E+38.

INT
INT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 4 bajty Opis Podstawowy rodzaj liczb cakowitych od 2 147 483 648 do 2 147 483 647 (lub od 0 do 4 294 967 295 w przypadku liczb bez znaku).

INTEGER
Synonim INT.

MEDIUMINT
MEDIUMINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

27

Opis Liczby cakowite od 8 388 608 do 8 388 607 (lub od 0 do 16 777 215 w przypadku liczb bez znaku).

NUMERIC
Synonim DECIMAL.

REAL
Synonim DOUBLE.

SMALLINT
SMALLINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 2 bajty Opis Liczby cakowite z zakresu od 32 768 do 32 767 (od 0 do 65 535 w przypadku liczb bez znaku).

TINYINT
TINYINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 1 bajt

28

MySQL. Leksykon kieszonkowy

Opis Liczby cakowite od 128 do 127 (od 0 do 255 w przypadku liczb bez znaku).

acuchy
MySQL obsuguje dwie kategorie acuchw: acuchy tekstowe oraz acuchy binarne. Obie kategorie maj swoje specyficzne typy do obsugi rnych wielkoci pl i rnych sposobw porwnywania wartoci. W zalenoci od sposobu porwnywania, mona uwzgldnia bd nie wielko liter, mona te porwnywa dane binarnie (bajt po bajcie). Kiedy nazwa typu tekstowego (jak CHAR, VARCHAR i inne) zostanie oznaczona sowem kluczowym BINARY, kolumna pozostaje kolumn tekstow, ale dane s porwnywane ze sob binarnie.

BINARY
BINARY(rozmiar)

Rozmiar wedug rozmiar, w zakresie od 0 do 255 Rozmiar w pamici


rozmiar bajtw

Opis Typ danych BINARY to binarny odpowiednik typu CHAR. Podstawowa rnica midzy tymi dwoma typami polega na tym, e pole typu BINARY zawiera dane binarne, wielko tych danych jest mierzona nie w znakach, lecz w bajtach. acuchy zawierajce

Rozdzia 3. Typy danych

29

mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie znakami 0x00 (wersja MySQL 5.0.5 i nowsze) lub spacjami (wersje starsze).

BLOB
Binarny odpowiednik typu TEXT.

CHAR
CHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar wedug rozmiar, do 255 Rozmiar w pamici zaleny od rozmiaru i od uytego zestawu znakw Opis Pole tekstowe ustalonej dugoci. acuchy zawierajce mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie spacjami. Podczas pobierania danych z bazy te dodatkowe spacje s usuwane. Pola CHAR(0) zostay zachowane w celu zapewnienia zgodnoci ze starymi systemami, w ktrych w kolumnach nie s zapisywane adne wartoci.

CHARACTER
Synonim CHAR.

30

MySQL. Leksykon kieszonkowy

CHARACTER VARYING
Synonim VARCHAR.

LONGBLOB
Binarny odpowiednik LONGTEXT.

LONGTEXT
LONGTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 4 294 295 Rozmiar w pamici Dugo wartoci+4 bajty Opis Typ pozwala zapisywa due wartoci tekstowe. Teoretyczne ograniczenie rozmiaru tekstu to ponad 4 GB, ale praktycznymi ograniczeniami s ograniczenia protokou komunikacyjnego MySQL oraz ilo pamici przeznaczonej na komunikacj na serwerze i na stacji klienckiej.

MEDIUMBLOB
Binarna posta MEDIUMTEXT.

MEDIUMTEXT
MEDIUMTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozdzia 3. Typy danych

31

Rozmiar 0 do 16 777 215 Rozmiar w pamici Dugo wartoci+3 bajty Opis Typ pozwala zapisywa redniej wielkoci wartoci tekstowe.

NCHAR
Synonim CHAR.

NATIONAL CHAR
Synonim CHAR.

NATIONAL CHARACTER
Synonim CHAR.

NATIONAL VARCHAR
Synonim VARCHAR.

TEXT
TEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 65 535

32

MySQL. Leksykon kieszonkowy

Rozmiar w pamici Dugo wartoci tekstowej+2 bajty Opis Typ pozwala zapisywa typowe wartoci tekstowe.

TINYBLOB
Binarny odpowiednik TINYTEXT.

TINYTEXT
TINYTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 255 Rozmiar w pamici Dugo wartoci tekstowej+1 bajt Opis Pozwala zapisywa krtkie dane tekstowe.

VARBINARY
VARBINARY(rozmiar)

Rozmiar Wedug parametru rozmiar

Rozdzia 3. Typy danych

33

Rozmiar w pamici
rozmiar bajtw

Opis Jest to binarna odmiana typu VARCHAR. Podstawowa rnica polega na tym, e zapisywane s dane binarne, a rozmiar pola mierzony jest w bajtach, nie w znakach. Wielkoci typu VARBINARY, w przeciwiestwie do wartoci typu BINARY, nie s niczym dopeniane.

VARCHAR
VARCHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar Wskazana przez rozmiar warto z zakresu do 65 532 (od 1 do 255 w wersjach wczeniejszych ni MySQL 5); rozmiar wskazuje rzeczywist wielko kolumny i jest ograniczony przez dopuszczaln wielko wiersza w znakach; to, ile miejsca faktycznie bdzie potrzebne, zaley zatem od zestawu znakw uytego w danej kolumnie Rozmiar w pamici Zaley od liczby znakw wskazanych jako rozmiar oraz od liczby bajtw potrzebnych do zapisu poszczeglnych znakw w uytym mechanizmie kodowania znakw Opis Pozwala zapisywa wartoci tekstowe zmiennej dugoci. W wersjach poprzedzajcych MySQL 5 z wartoci VARCHAR usuwane s spacje kocowe; wersja MySQL 5 i nowsze standardowo nie usuwaj spacji kocowych.

34

MySQL. Leksykon kieszonkowy

Daty
Typy datowe MySQL s wyjtkowo elastycznym narzdziem, pozwalajcym zapisywa wszelki informacje dzienne. MySQL jest bardzo tolerancyjny i zakada, e to aplikacja, a nie baza danych, ma sprawdza poprawno tych danych. MySQL sprawdza jedynie, czy miesic nie wykracza poza zakres 0 12 i czy dzie nie wykracza poza zakres 0 31. Wobec tego z punktu widzenia MySQL 31 lutego 2001 roku jest poprawn dat. Bardziej przydatn wartoci jest data 0 lutego 2001 roku; cyfra zero moe zastpowa t cz daty, ktrej dokadnie nie znamy. MySQL 5 jest jednak ju baz danych nieco bardziej restrykcyjn co do wartoci, jakie mona zapisywa w polach datowych. Wprawdzie MySQL dopuszcza do du swobod formatw wejciowych dat, to naley stara si w aplikacjach daty formatowa zgodnie z formatem wewntrznym MySQL w celu uniknicia nieporozumie. MySQL zawsze zakada, e rok jest pierwszym elementem po lewej stronie daty. Jeli w operacji SQL podana zostanie nieprawidowa warto daty, MySQL wstawi w jej miejsce zero. MySQL w kontekcie liczb cakowitych automatycznie konwertuje daty i czas na liczby cakowite.

DATE
DATE

Format
YYYY-MM-DD (2001-01-01)

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

35

Opis Data kalendarza gregoriaskiego z zakresu od 1 stycznia 1000 roku ('1000-01-01') do 31 grudnia 9999 roku ('9999-12-31').

DATETIME
DATETIME

Format
YYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 8 bajtw Opis Zapisuje czas z zakresu od 00:00:00 1 stycznia 1000 roku ('100001-01 00:00:00') do 23:59:59 31 grudnia 9999 ('9999-12-31 23:59:59') wedug kalendarza gregoriaskiego.

TIME
TIME

Format
hh:mm:ss (06:00:00)

Rozmiar w pamici 3 bajty Opis Zapisuje czas od pnocy ('00:00:00') do sekundy przed pnoc ('23:59:59').
36 | MySQL. Leksykon kieszonkowy

TIMESTAMP
TIMESTAMP[(rozmiar_wywietlania)]

Format
YYYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 4 bajty Opis Zapis chwili z dokadnoci do sekundy od pnocy 1 stycznia 1970 roku do minuty przed pnoc 31 grudnia 2037 roku. Podstawowym zastosowaniem tego typu jest rejestracja modyfikacji tabel. Przy wstawianiu do takiej kolumny wartoci NULL wstawiane s aktualna data i czas. W przypadku modyfikowania jakiejkolwiek wartoci w wierszu z kolumn TIMESTAMP pierwsza kolumna tego typu zostanie zaktualizowana biec dat i czasem. Format danych TIMESTAMP znany z wczeniejszych wersji MySQL, do 4.1 wcznie, w wersji 5.1 nie jest ju obsugiwany.

YEAR
YEAR[(rozmiar)]

Format
YYYY (2001)

Rozmiar w pamici 1 bajt

Rozdzia 3. Typy danych

37

Opis Pozwala zapisa rok z kalendarza gregoriaskiego. Parametr rozmiar umoliwia zapisywanie roku dwu- lub czterocyfrowo. Zakres YEAR(4) rozciga si od 1900 do 2155, dla YEAR(2) od 1970 do 2069. Domylnie przyjmowane jest YEAR(4).

Typy zoone
Zoone typy danych MySQL, ENUM i SET, s po prostu specjalnymi przypadkami typw acuchowych. Opisujemy je osobno, gdy s bardziej zoone pojciowo i stanowi wprowadzenie do typw danych SQL3, ktre by moe MySQL bdzie obsugiwa w przyszoci.

ENUM
ENUM(warto1, warto2, ...)

Rozmiar w pamici 1 255 elementw: 1 bajt 255 65 535 elementw: 2 bajty Opis Typ danych ENUM pozwala zapisywa jeden z wielu zdefiniowanych wczeniej acuchw. Przy tworzeniu kolumny typu ENUM podaje si list dopuszczalnych jej wartoci. Dane mog by do tej kolumny wstawiane i aktualizowane jedynie z tej listy; kada prba wstawienia wartoci spoza niej powoduje wstawienie pustego acucha.

38

MySQL. Leksykon kieszonkowy

Do listy dopuszczalnych wartoci mona si odwoywa przez indeks, przy czym pierwszy element otrzymuje numer 0. Na przykad:
SELECT COLID FROM TBL WHERE COLENUM = 0;

Jeli COLID jest kolumn z kluczem gwnym, a COLENUM kolumn typu ENUM, taka instrukcja SQL spowoduje pobranie kluczy gwnych wszystkich wierszy, dla ktrych COLENUM jest pierwsz wartoci z listy. Analogicznie, sortowanie wzgldem kolumn ENUM powoduje sortowanie wedug indeksu, nie acucha. Najwiksza moliwa liczba elementw kolumny ENUM to 65 535.

SET
SET(warto1, warto2, ...)

Rozmiar w pamici 1 8 elementw: 1 bajt 9 16 elementw: 2 bajty 17 24 elementy: 3 bajty 25 32 elementy: 4 bajty 33 64 elementy: 8 bajtw Opis Lista wartoci wybieranych z okrelonego wczeniej zbioru. Pole moe zawiera dowoln liczb acuchw wskazanych w instrukcji SET, szczeglnie moe nie zawiera adnej takiej wartoci. SET jest podobny do ENUM, ale kade pole moe zawiera wicej ni jedn z podanych wartoci. Dane typu SET nie s jednak zapisywane za pomoc indeksw, ale w zoonej mapie bitowej. Jeli dany jest zbir SET, zawierajcy elementy: Mandarynka, Pomidor,
Rozdzia 3. Typy danych | 39

Gruszka i Banan, kady z tych elementw jest reprezentowany jako

wczony bit w bajcie, jak to pokazano w tabeli 3.1.


Tabela 3.1. Reprezentacja zbioru elementw w MySQL
Element
Mandarynka Pomidor Gruszka Banan

Warto dziesitna
1 2 4 8

Zapis bitowy
0001 0010 0100 1000

W powyszym przykadzie zapisanie jednoczenie wartoci Mandarynka i Gruszka wymaga uycia wartoci 5 (bitowo 0101). W kolumnie SET mona zapisa najwyej 64 wartoci. Wprawdzie t sam warto mona w jednym wyraeniu SQL wpisa wielokrotnie, ale w bazie danych warto ta zostanie zapisana raz.

40

MySQL. Leksykon kieszonkowy

4. SQL .............................................................................................. 41
Rozrnianie wielkoci liter Literay Identyfikatory Komentarze Instrukcje Zasady dotyczce transakcji 41 42 43 45 46 106

5. Operatory .................................................................................. 108


Priorytety operatorw Operatory arytmetyczne Operatory porwnania Operatory logiczne 108 109 109 111

6. Funkcje .......................................................................................113
Funkcje agregujce Funkcje oglnego przeznaczenia 113 115

7. Rodzaje tabel ............................................................................ 137 8. Procedury i funkcje skadowane .............................................. 138


Parametry Logika Kursory Obsuga zdarze i warunki 138 139 143 144

9. Trygery ...................................................................................... 146 Skorowidz ................................................................................. 147

MySQL. Leksykon kieszonkowy

Rozdzia 3. Typy danych


We wszystkich typach danych nawiasami kwadratowymi ([]) oznaczane s fragmenty opcjonalne. Poniszy przykad pokazuje sposb prezentacji typu BIGINT, opisanego dalej w tym rozdziale:
BIGINT[(wielko_pokazywana)]

Oznacza to, e sowo BIGINT moe wystpi samodzielnie lub z pokazywan wartoci. Uycie kursywy wskazuje, e nie naley wpisywa sowa wielko_pokazywana, ale poda wasn warto. Oto przykady uycia:
BIGINT BIGINT(20)

Poza typem BIGINT take wiele innych typw danych MySQL uwzgldnia deklaracj rozmiaru wywietlania. Jeli nie powiedziano inaczej, musi to by liczba od 1 do 255. W wersjach MySQL starszych ni wersja 5, baza danych w niektrych przypadkach zmieniaa podany typ kolumny, nie informujc o tym uytkownika. Obecnie takie podmiany nie maj ju miejsca.
VARCHAR -> CHAR

Jeli podana kolumna VARCHAR ma rozmiar mniejszy od czterech znakw, jest przeksztacana w kolumn CHAR.
CHAR -> VARCHAR

Jeli tabela zawiera co najmniej jedn kolumn o zmiennej dugoci, wszystkie kolumny typu CHAR dusze ni trzy znaki s zamieniane na VARCHAR.

Rozmiar wywietlania TIMESTAMP Rozmiar wywietlania pl TIMESTAMP musi by zawsze wielkoci parzyst od 2 do 14. Rozmiar rwny 0 lub wikszy od 14 powoduje przyjcie 14. Wszelkie liczby nieparzyste s zamieniane na nastpn liczb parzyst.

22

MySQL. Leksykon kieszonkowy

Liczby
MySQL obsuguje liczbowe typy danych zgodne z ANSI SQL 2. Typy te dzielimy na cakowitoliczbowe, dziesitne i zmiennoprzecinkowe. W ramach tych grup dzielimy typy dalej, wedug zajmowanej przez nie pamici. W przypadku typw liczbowych mona poda rozmiar wywietlania, ktry wpywa na sposb pokazywania przez MySQL wynikw. Rozmiar ten nie ma adnego zwizku z wielkoci pamici zajmowanej przez dany typ. Dodatkowo w przypadku liczb zmiennoprzecinkowych i dziesitnych mona poda liczb cyfr znajdujcych si za kropk dziesitn. Wtedy liczba cyfr powinna nalee do zakresu od 0 do 30, czyli by co najmniej o dwa mniejsza od rozmiaru wywietlania. Jeli warunek ten nie zostanie dotrzymany, MySQL automatycznie zmieni liczb cyfr tak, aby bya mniejsza o dwa od rozmiaru wywietlania. Przykadowo, MySQL automatycznie zmieni FLOAT(6,5) na FLOAT(7,5). Prba wstawienia do kolumny wartoci przekraczajcej dopuszczalny zakres tej kolumny powoduje obcicie tej wartoci do najmniejszej (dla liczb ujemnych) lub najwikszej (dla liczb dodatnich) wartoci dla danej kolumny dopuszczalnej. Jeli takie obcicie jest robione podczas wykonywania instrukcji ALTER TABLE, LOAD DATA INFILE, UPDATE lub wielowierszowej instrukcji INSERT, MySQL pokazuje ostrzeenie. Wyjtkiem jest korzystanie z MySQL w wersji 5 lub nowszej w trybie penej zgodnoci ze standardem SQL, gdy wtedy w przypadku instrukcji INSERT i UPDATE zgaszany jest bd. Atrybutu AUTO_INCREMENT mona uy do co najwyej jednej kolumny cakowitoliczbowej w tabeli. Atrybut UNSIGNED moe by czony z dowolnym liczbowym typem danych. Uycie tego atrybutu powoduje, e do kolumny nie mona wpisywa liczb ujemnych. Atrybut ZEROFILL nakazuje wypenienie kolumny od lewej

Rozdzia 3. Typy danych

23

strony zerami podczas wywietlania jej wartoci. O liczbie tych zer decyduje szeroko wywietlania danej kolumny.

BIGINT
BIGINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Najwikszy z typw cakowitoliczbowych, pozwalajcy zapisywa liczby od 9 223 372 036 854 775 808 do 9 223 372 036 854 775 807 (jeli bez znaku, to od 0 do 18 446 744 073 709 551 615). Z uwagi na sposb realizacji dziaa na liczbach tego typu, naley unika operacji na liczbach BIGINT bez znaku wikszych ni 9 223 372 036 854 775 807, gdy moe to zaowocowa nieprawidowymi wynikami.

BIT
BIT[(bity)]

Rozmiar w pamici w przyblieniu bity bitw+7 lub 8 bitw Opis W wersjach MySQL 5.0.3 i starszych, pola typu BIT dziaay tak samo, jak TINYINT(1). Omawiany typ pola pozwala przechowywa ustalon liczb bitw. Jeli podana zostanie wielko bitw mniejsza od dozwolonej, MySQL wypeni zerami bity od lewej strony.
24 | MySQL. Leksykon kieszonkowy

DEC
Synonim typu DECIMAL.

DECIMAL
DECIMAL[(dokadno, [skala])] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici rnie Opis Pozwala zapisywa liczby zmiennoprzecinkowe w sytuacjach, kiedy istotna jest dokadno na przykad przy operowaniu kwotami pienidzy. Stosujc typ DECIMAL, trzeba poda dwa jego parametry, dokadno i skal. Dokadno to liczba znaczcych cyfr, za skala to liczba znaczcych cyfr po kropce dziesitnej. Przykadowo, kolumna SALDO typu DECIMAL(9,2) pozwoliaby zapisywa liczby dziewiciocyfrowe, przy czym na prawo od kropki dziesitnej mogyby by dwie cyfry. Zakres dopuszczalnych liczb to w takiej sytuacji od 9 999 999,99 do 9 999 999,99. Jeli podana zostanie liczba zawierajca wicej cyfr po przecinku, ni przewiduje to definicja, liczba zostanie zaokrglona. Wartoci spoza zakresu DECIMAL s obcinane tak, aby si w nim zmieciy. W wersjach MySQL starszych ni 5, wartoci DECIMAL nie byy zapisywane jako liczby zmiennoprzecinkowe, lecz jako acuchy znakw. Na kad cyfr zuywany by jeden znak w przypadku skali wikszej od 0, poza tym jeden dodatkowy znak zuywany jest w przypadku liczb ujemnych. Jeli skala wynosi 0, liczby nie maj czci uamkowej. SQL zgodnie z norm ANSI pozwala pomija dokadno i (lub) skal. Jeli brak dokadnoci, przyjmowane jest ustawienie

Rozdzia 3. Typy danych

25

domylne charakterystyczne dla implementacji. Jeli brak skali, przyjmowane jest zero. W MySQL domylna warto dokadnoci to 10.

DOUBLE
DOUBLE[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Liczba zmiennoprzecinkowa podwjnej precyzji. Ten typ danych pozwala zapisywa due wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 1,7976931348623157E+308 do 2,2250738585072014E308, 0 oraz wartoci dodatnie od 2,2250738585072014E308 do 1,7976931348623157E+308.

DOUBLE PRECISION
Synonim DOUBLE.

FLOAT
FLOAT[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 4 bajty

26

MySQL. Leksykon kieszonkowy

Opis Liczba zmiennoprzecinkowa pojedynczej precyzji. Ten typ danych pozwala zapisywa mae wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 3,402823466E+38 do 1,175494351E38, 0 oraz wartoci dodatnie od 1,175494351E38 do 3,402823466E+38.

INT
INT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 4 bajty Opis Podstawowy rodzaj liczb cakowitych od 2 147 483 648 do 2 147 483 647 (lub od 0 do 4 294 967 295 w przypadku liczb bez znaku).

INTEGER
Synonim INT.

MEDIUMINT
MEDIUMINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

27

Opis Liczby cakowite od 8 388 608 do 8 388 607 (lub od 0 do 16 777 215 w przypadku liczb bez znaku).

NUMERIC
Synonim DECIMAL.

REAL
Synonim DOUBLE.

SMALLINT
SMALLINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 2 bajty Opis Liczby cakowite z zakresu od 32 768 do 32 767 (od 0 do 65 535 w przypadku liczb bez znaku).

TINYINT
TINYINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 1 bajt

28

MySQL. Leksykon kieszonkowy

Opis Liczby cakowite od 128 do 127 (od 0 do 255 w przypadku liczb bez znaku).

acuchy
MySQL obsuguje dwie kategorie acuchw: acuchy tekstowe oraz acuchy binarne. Obie kategorie maj swoje specyficzne typy do obsugi rnych wielkoci pl i rnych sposobw porwnywania wartoci. W zalenoci od sposobu porwnywania, mona uwzgldnia bd nie wielko liter, mona te porwnywa dane binarnie (bajt po bajcie). Kiedy nazwa typu tekstowego (jak CHAR, VARCHAR i inne) zostanie oznaczona sowem kluczowym BINARY, kolumna pozostaje kolumn tekstow, ale dane s porwnywane ze sob binarnie.

BINARY
BINARY(rozmiar)

Rozmiar wedug rozmiar, w zakresie od 0 do 255 Rozmiar w pamici


rozmiar bajtw

Opis Typ danych BINARY to binarny odpowiednik typu CHAR. Podstawowa rnica midzy tymi dwoma typami polega na tym, e pole typu BINARY zawiera dane binarne, wielko tych danych jest mierzona nie w znakach, lecz w bajtach. acuchy zawierajce

Rozdzia 3. Typy danych

29

mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie znakami 0x00 (wersja MySQL 5.0.5 i nowsze) lub spacjami (wersje starsze).

BLOB
Binarny odpowiednik typu TEXT.

CHAR
CHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar wedug rozmiar, do 255 Rozmiar w pamici zaleny od rozmiaru i od uytego zestawu znakw Opis Pole tekstowe ustalonej dugoci. acuchy zawierajce mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie spacjami. Podczas pobierania danych z bazy te dodatkowe spacje s usuwane. Pola CHAR(0) zostay zachowane w celu zapewnienia zgodnoci ze starymi systemami, w ktrych w kolumnach nie s zapisywane adne wartoci.

CHARACTER
Synonim CHAR.

30

MySQL. Leksykon kieszonkowy

CHARACTER VARYING
Synonim VARCHAR.

LONGBLOB
Binarny odpowiednik LONGTEXT.

LONGTEXT
LONGTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 4 294 295 Rozmiar w pamici Dugo wartoci+4 bajty Opis Typ pozwala zapisywa due wartoci tekstowe. Teoretyczne ograniczenie rozmiaru tekstu to ponad 4 GB, ale praktycznymi ograniczeniami s ograniczenia protokou komunikacyjnego MySQL oraz ilo pamici przeznaczonej na komunikacj na serwerze i na stacji klienckiej.

MEDIUMBLOB
Binarna posta MEDIUMTEXT.

MEDIUMTEXT
MEDIUMTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozdzia 3. Typy danych

31

Rozmiar 0 do 16 777 215 Rozmiar w pamici Dugo wartoci+3 bajty Opis Typ pozwala zapisywa redniej wielkoci wartoci tekstowe.

NCHAR
Synonim CHAR.

NATIONAL CHAR
Synonim CHAR.

NATIONAL CHARACTER
Synonim CHAR.

NATIONAL VARCHAR
Synonim VARCHAR.

TEXT
TEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 65 535

32

MySQL. Leksykon kieszonkowy

Rozmiar w pamici Dugo wartoci tekstowej+2 bajty Opis Typ pozwala zapisywa typowe wartoci tekstowe.

TINYBLOB
Binarny odpowiednik TINYTEXT.

TINYTEXT
TINYTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 255 Rozmiar w pamici Dugo wartoci tekstowej+1 bajt Opis Pozwala zapisywa krtkie dane tekstowe.

VARBINARY
VARBINARY(rozmiar)

Rozmiar Wedug parametru rozmiar

Rozdzia 3. Typy danych

33

Rozmiar w pamici
rozmiar bajtw

Opis Jest to binarna odmiana typu VARCHAR. Podstawowa rnica polega na tym, e zapisywane s dane binarne, a rozmiar pola mierzony jest w bajtach, nie w znakach. Wielkoci typu VARBINARY, w przeciwiestwie do wartoci typu BINARY, nie s niczym dopeniane.

VARCHAR
VARCHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar Wskazana przez rozmiar warto z zakresu do 65 532 (od 1 do 255 w wersjach wczeniejszych ni MySQL 5); rozmiar wskazuje rzeczywist wielko kolumny i jest ograniczony przez dopuszczaln wielko wiersza w znakach; to, ile miejsca faktycznie bdzie potrzebne, zaley zatem od zestawu znakw uytego w danej kolumnie Rozmiar w pamici Zaley od liczby znakw wskazanych jako rozmiar oraz od liczby bajtw potrzebnych do zapisu poszczeglnych znakw w uytym mechanizmie kodowania znakw Opis Pozwala zapisywa wartoci tekstowe zmiennej dugoci. W wersjach poprzedzajcych MySQL 5 z wartoci VARCHAR usuwane s spacje kocowe; wersja MySQL 5 i nowsze standardowo nie usuwaj spacji kocowych.

34

MySQL. Leksykon kieszonkowy

Daty
Typy datowe MySQL s wyjtkowo elastycznym narzdziem, pozwalajcym zapisywa wszelki informacje dzienne. MySQL jest bardzo tolerancyjny i zakada, e to aplikacja, a nie baza danych, ma sprawdza poprawno tych danych. MySQL sprawdza jedynie, czy miesic nie wykracza poza zakres 0 12 i czy dzie nie wykracza poza zakres 0 31. Wobec tego z punktu widzenia MySQL 31 lutego 2001 roku jest poprawn dat. Bardziej przydatn wartoci jest data 0 lutego 2001 roku; cyfra zero moe zastpowa t cz daty, ktrej dokadnie nie znamy. MySQL 5 jest jednak ju baz danych nieco bardziej restrykcyjn co do wartoci, jakie mona zapisywa w polach datowych. Wprawdzie MySQL dopuszcza do du swobod formatw wejciowych dat, to naley stara si w aplikacjach daty formatowa zgodnie z formatem wewntrznym MySQL w celu uniknicia nieporozumie. MySQL zawsze zakada, e rok jest pierwszym elementem po lewej stronie daty. Jeli w operacji SQL podana zostanie nieprawidowa warto daty, MySQL wstawi w jej miejsce zero. MySQL w kontekcie liczb cakowitych automatycznie konwertuje daty i czas na liczby cakowite.

DATE
DATE

Format
YYYY-MM-DD (2001-01-01)

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

35

Opis Data kalendarza gregoriaskiego z zakresu od 1 stycznia 1000 roku ('1000-01-01') do 31 grudnia 9999 roku ('9999-12-31').

DATETIME
DATETIME

Format
YYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 8 bajtw Opis Zapisuje czas z zakresu od 00:00:00 1 stycznia 1000 roku ('100001-01 00:00:00') do 23:59:59 31 grudnia 9999 ('9999-12-31 23:59:59') wedug kalendarza gregoriaskiego.

TIME
TIME

Format
hh:mm:ss (06:00:00)

Rozmiar w pamici 3 bajty Opis Zapisuje czas od pnocy ('00:00:00') do sekundy przed pnoc ('23:59:59').
36 | MySQL. Leksykon kieszonkowy

TIMESTAMP
TIMESTAMP[(rozmiar_wywietlania)]

Format
YYYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 4 bajty Opis Zapis chwili z dokadnoci do sekundy od pnocy 1 stycznia 1970 roku do minuty przed pnoc 31 grudnia 2037 roku. Podstawowym zastosowaniem tego typu jest rejestracja modyfikacji tabel. Przy wstawianiu do takiej kolumny wartoci NULL wstawiane s aktualna data i czas. W przypadku modyfikowania jakiejkolwiek wartoci w wierszu z kolumn TIMESTAMP pierwsza kolumna tego typu zostanie zaktualizowana biec dat i czasem. Format danych TIMESTAMP znany z wczeniejszych wersji MySQL, do 4.1 wcznie, w wersji 5.1 nie jest ju obsugiwany.

YEAR
YEAR[(rozmiar)]

Format
YYYY (2001)

Rozmiar w pamici 1 bajt

Rozdzia 3. Typy danych

37

Opis Pozwala zapisa rok z kalendarza gregoriaskiego. Parametr rozmiar umoliwia zapisywanie roku dwu- lub czterocyfrowo. Zakres YEAR(4) rozciga si od 1900 do 2155, dla YEAR(2) od 1970 do 2069. Domylnie przyjmowane jest YEAR(4).

Typy zoone
Zoone typy danych MySQL, ENUM i SET, s po prostu specjalnymi przypadkami typw acuchowych. Opisujemy je osobno, gdy s bardziej zoone pojciowo i stanowi wprowadzenie do typw danych SQL3, ktre by moe MySQL bdzie obsugiwa w przyszoci.

ENUM
ENUM(warto1, warto2, ...)

Rozmiar w pamici 1 255 elementw: 1 bajt 255 65 535 elementw: 2 bajty Opis Typ danych ENUM pozwala zapisywa jeden z wielu zdefiniowanych wczeniej acuchw. Przy tworzeniu kolumny typu ENUM podaje si list dopuszczalnych jej wartoci. Dane mog by do tej kolumny wstawiane i aktualizowane jedynie z tej listy; kada prba wstawienia wartoci spoza niej powoduje wstawienie pustego acucha.

38

MySQL. Leksykon kieszonkowy

Do listy dopuszczalnych wartoci mona si odwoywa przez indeks, przy czym pierwszy element otrzymuje numer 0. Na przykad:
SELECT COLID FROM TBL WHERE COLENUM = 0;

Jeli COLID jest kolumn z kluczem gwnym, a COLENUM kolumn typu ENUM, taka instrukcja SQL spowoduje pobranie kluczy gwnych wszystkich wierszy, dla ktrych COLENUM jest pierwsz wartoci z listy. Analogicznie, sortowanie wzgldem kolumn ENUM powoduje sortowanie wedug indeksu, nie acucha. Najwiksza moliwa liczba elementw kolumny ENUM to 65 535.

SET
SET(warto1, warto2, ...)

Rozmiar w pamici 1 8 elementw: 1 bajt 9 16 elementw: 2 bajty 17 24 elementy: 3 bajty 25 32 elementy: 4 bajty 33 64 elementy: 8 bajtw Opis Lista wartoci wybieranych z okrelonego wczeniej zbioru. Pole moe zawiera dowoln liczb acuchw wskazanych w instrukcji SET, szczeglnie moe nie zawiera adnej takiej wartoci. SET jest podobny do ENUM, ale kade pole moe zawiera wicej ni jedn z podanych wartoci. Dane typu SET nie s jednak zapisywane za pomoc indeksw, ale w zoonej mapie bitowej. Jeli dany jest zbir SET, zawierajcy elementy: Mandarynka, Pomidor,
Rozdzia 3. Typy danych | 39

Gruszka i Banan, kady z tych elementw jest reprezentowany jako

wczony bit w bajcie, jak to pokazano w tabeli 3.1.


Tabela 3.1. Reprezentacja zbioru elementw w MySQL
Element
Mandarynka Pomidor Gruszka Banan

Warto dziesitna
1 2 4 8

Zapis bitowy
0001 0010 0100 1000

W powyszym przykadzie zapisanie jednoczenie wartoci Mandarynka i Gruszka wymaga uycia wartoci 5 (bitowo 0101). W kolumnie SET mona zapisa najwyej 64 wartoci. Wprawdzie t sam warto mona w jednym wyraeniu SQL wpisa wielokrotnie, ale w bazie danych warto ta zostanie zapisana raz.

40

MySQL. Leksykon kieszonkowy

4. SQL .............................................................................................. 41
Rozrnianie wielkoci liter Literay Identyfikatory Komentarze Instrukcje Zasady dotyczce transakcji 41 42 43 45 46 106

5. Operatory .................................................................................. 108


Priorytety operatorw Operatory arytmetyczne Operatory porwnania Operatory logiczne 108 109 109 111

6. Funkcje .......................................................................................113
Funkcje agregujce Funkcje oglnego przeznaczenia 113 115

7. Rodzaje tabel ............................................................................ 137 8. Procedury i funkcje skadowane .............................................. 138


Parametry Logika Kursory Obsuga zdarze i warunki 138 139 143 144

9. Trygery ...................................................................................... 146 Skorowidz ................................................................................. 147

MySQL. Leksykon kieszonkowy

Rozdzia 3. Typy danych


We wszystkich typach danych nawiasami kwadratowymi ([]) oznaczane s fragmenty opcjonalne. Poniszy przykad pokazuje sposb prezentacji typu BIGINT, opisanego dalej w tym rozdziale:
BIGINT[(wielko_pokazywana)]

Oznacza to, e sowo BIGINT moe wystpi samodzielnie lub z pokazywan wartoci. Uycie kursywy wskazuje, e nie naley wpisywa sowa wielko_pokazywana, ale poda wasn warto. Oto przykady uycia:
BIGINT BIGINT(20)

Poza typem BIGINT take wiele innych typw danych MySQL uwzgldnia deklaracj rozmiaru wywietlania. Jeli nie powiedziano inaczej, musi to by liczba od 1 do 255. W wersjach MySQL starszych ni wersja 5, baza danych w niektrych przypadkach zmieniaa podany typ kolumny, nie informujc o tym uytkownika. Obecnie takie podmiany nie maj ju miejsca.
VARCHAR -> CHAR

Jeli podana kolumna VARCHAR ma rozmiar mniejszy od czterech znakw, jest przeksztacana w kolumn CHAR.
CHAR -> VARCHAR

Jeli tabela zawiera co najmniej jedn kolumn o zmiennej dugoci, wszystkie kolumny typu CHAR dusze ni trzy znaki s zamieniane na VARCHAR.

Rozmiar wywietlania TIMESTAMP Rozmiar wywietlania pl TIMESTAMP musi by zawsze wielkoci parzyst od 2 do 14. Rozmiar rwny 0 lub wikszy od 14 powoduje przyjcie 14. Wszelkie liczby nieparzyste s zamieniane na nastpn liczb parzyst.

22

MySQL. Leksykon kieszonkowy

Liczby
MySQL obsuguje liczbowe typy danych zgodne z ANSI SQL 2. Typy te dzielimy na cakowitoliczbowe, dziesitne i zmiennoprzecinkowe. W ramach tych grup dzielimy typy dalej, wedug zajmowanej przez nie pamici. W przypadku typw liczbowych mona poda rozmiar wywietlania, ktry wpywa na sposb pokazywania przez MySQL wynikw. Rozmiar ten nie ma adnego zwizku z wielkoci pamici zajmowanej przez dany typ. Dodatkowo w przypadku liczb zmiennoprzecinkowych i dziesitnych mona poda liczb cyfr znajdujcych si za kropk dziesitn. Wtedy liczba cyfr powinna nalee do zakresu od 0 do 30, czyli by co najmniej o dwa mniejsza od rozmiaru wywietlania. Jeli warunek ten nie zostanie dotrzymany, MySQL automatycznie zmieni liczb cyfr tak, aby bya mniejsza o dwa od rozmiaru wywietlania. Przykadowo, MySQL automatycznie zmieni FLOAT(6,5) na FLOAT(7,5). Prba wstawienia do kolumny wartoci przekraczajcej dopuszczalny zakres tej kolumny powoduje obcicie tej wartoci do najmniejszej (dla liczb ujemnych) lub najwikszej (dla liczb dodatnich) wartoci dla danej kolumny dopuszczalnej. Jeli takie obcicie jest robione podczas wykonywania instrukcji ALTER TABLE, LOAD DATA INFILE, UPDATE lub wielowierszowej instrukcji INSERT, MySQL pokazuje ostrzeenie. Wyjtkiem jest korzystanie z MySQL w wersji 5 lub nowszej w trybie penej zgodnoci ze standardem SQL, gdy wtedy w przypadku instrukcji INSERT i UPDATE zgaszany jest bd. Atrybutu AUTO_INCREMENT mona uy do co najwyej jednej kolumny cakowitoliczbowej w tabeli. Atrybut UNSIGNED moe by czony z dowolnym liczbowym typem danych. Uycie tego atrybutu powoduje, e do kolumny nie mona wpisywa liczb ujemnych. Atrybut ZEROFILL nakazuje wypenienie kolumny od lewej

Rozdzia 3. Typy danych

23

strony zerami podczas wywietlania jej wartoci. O liczbie tych zer decyduje szeroko wywietlania danej kolumny.

BIGINT
BIGINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Najwikszy z typw cakowitoliczbowych, pozwalajcy zapisywa liczby od 9 223 372 036 854 775 808 do 9 223 372 036 854 775 807 (jeli bez znaku, to od 0 do 18 446 744 073 709 551 615). Z uwagi na sposb realizacji dziaa na liczbach tego typu, naley unika operacji na liczbach BIGINT bez znaku wikszych ni 9 223 372 036 854 775 807, gdy moe to zaowocowa nieprawidowymi wynikami.

BIT
BIT[(bity)]

Rozmiar w pamici w przyblieniu bity bitw+7 lub 8 bitw Opis W wersjach MySQL 5.0.3 i starszych, pola typu BIT dziaay tak samo, jak TINYINT(1). Omawiany typ pola pozwala przechowywa ustalon liczb bitw. Jeli podana zostanie wielko bitw mniejsza od dozwolonej, MySQL wypeni zerami bity od lewej strony.
24 | MySQL. Leksykon kieszonkowy

DEC
Synonim typu DECIMAL.

DECIMAL
DECIMAL[(dokadno, [skala])] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici rnie Opis Pozwala zapisywa liczby zmiennoprzecinkowe w sytuacjach, kiedy istotna jest dokadno na przykad przy operowaniu kwotami pienidzy. Stosujc typ DECIMAL, trzeba poda dwa jego parametry, dokadno i skal. Dokadno to liczba znaczcych cyfr, za skala to liczba znaczcych cyfr po kropce dziesitnej. Przykadowo, kolumna SALDO typu DECIMAL(9,2) pozwoliaby zapisywa liczby dziewiciocyfrowe, przy czym na prawo od kropki dziesitnej mogyby by dwie cyfry. Zakres dopuszczalnych liczb to w takiej sytuacji od 9 999 999,99 do 9 999 999,99. Jeli podana zostanie liczba zawierajca wicej cyfr po przecinku, ni przewiduje to definicja, liczba zostanie zaokrglona. Wartoci spoza zakresu DECIMAL s obcinane tak, aby si w nim zmieciy. W wersjach MySQL starszych ni 5, wartoci DECIMAL nie byy zapisywane jako liczby zmiennoprzecinkowe, lecz jako acuchy znakw. Na kad cyfr zuywany by jeden znak w przypadku skali wikszej od 0, poza tym jeden dodatkowy znak zuywany jest w przypadku liczb ujemnych. Jeli skala wynosi 0, liczby nie maj czci uamkowej. SQL zgodnie z norm ANSI pozwala pomija dokadno i (lub) skal. Jeli brak dokadnoci, przyjmowane jest ustawienie

Rozdzia 3. Typy danych

25

domylne charakterystyczne dla implementacji. Jeli brak skali, przyjmowane jest zero. W MySQL domylna warto dokadnoci to 10.

DOUBLE
DOUBLE[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Liczba zmiennoprzecinkowa podwjnej precyzji. Ten typ danych pozwala zapisywa due wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 1,7976931348623157E+308 do 2,2250738585072014E308, 0 oraz wartoci dodatnie od 2,2250738585072014E308 do 1,7976931348623157E+308.

DOUBLE PRECISION
Synonim DOUBLE.

FLOAT
FLOAT[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 4 bajty

26

MySQL. Leksykon kieszonkowy

Opis Liczba zmiennoprzecinkowa pojedynczej precyzji. Ten typ danych pozwala zapisywa mae wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 3,402823466E+38 do 1,175494351E38, 0 oraz wartoci dodatnie od 1,175494351E38 do 3,402823466E+38.

INT
INT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 4 bajty Opis Podstawowy rodzaj liczb cakowitych od 2 147 483 648 do 2 147 483 647 (lub od 0 do 4 294 967 295 w przypadku liczb bez znaku).

INTEGER
Synonim INT.

MEDIUMINT
MEDIUMINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

27

Opis Liczby cakowite od 8 388 608 do 8 388 607 (lub od 0 do 16 777 215 w przypadku liczb bez znaku).

NUMERIC
Synonim DECIMAL.

REAL
Synonim DOUBLE.

SMALLINT
SMALLINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 2 bajty Opis Liczby cakowite z zakresu od 32 768 do 32 767 (od 0 do 65 535 w przypadku liczb bez znaku).

TINYINT
TINYINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 1 bajt

28

MySQL. Leksykon kieszonkowy

Opis Liczby cakowite od 128 do 127 (od 0 do 255 w przypadku liczb bez znaku).

acuchy
MySQL obsuguje dwie kategorie acuchw: acuchy tekstowe oraz acuchy binarne. Obie kategorie maj swoje specyficzne typy do obsugi rnych wielkoci pl i rnych sposobw porwnywania wartoci. W zalenoci od sposobu porwnywania, mona uwzgldnia bd nie wielko liter, mona te porwnywa dane binarnie (bajt po bajcie). Kiedy nazwa typu tekstowego (jak CHAR, VARCHAR i inne) zostanie oznaczona sowem kluczowym BINARY, kolumna pozostaje kolumn tekstow, ale dane s porwnywane ze sob binarnie.

BINARY
BINARY(rozmiar)

Rozmiar wedug rozmiar, w zakresie od 0 do 255 Rozmiar w pamici


rozmiar bajtw

Opis Typ danych BINARY to binarny odpowiednik typu CHAR. Podstawowa rnica midzy tymi dwoma typami polega na tym, e pole typu BINARY zawiera dane binarne, wielko tych danych jest mierzona nie w znakach, lecz w bajtach. acuchy zawierajce

Rozdzia 3. Typy danych

29

mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie znakami 0x00 (wersja MySQL 5.0.5 i nowsze) lub spacjami (wersje starsze).

BLOB
Binarny odpowiednik typu TEXT.

CHAR
CHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar wedug rozmiar, do 255 Rozmiar w pamici zaleny od rozmiaru i od uytego zestawu znakw Opis Pole tekstowe ustalonej dugoci. acuchy zawierajce mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie spacjami. Podczas pobierania danych z bazy te dodatkowe spacje s usuwane. Pola CHAR(0) zostay zachowane w celu zapewnienia zgodnoci ze starymi systemami, w ktrych w kolumnach nie s zapisywane adne wartoci.

CHARACTER
Synonim CHAR.

30

MySQL. Leksykon kieszonkowy

CHARACTER VARYING
Synonim VARCHAR.

LONGBLOB
Binarny odpowiednik LONGTEXT.

LONGTEXT
LONGTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 4 294 295 Rozmiar w pamici Dugo wartoci+4 bajty Opis Typ pozwala zapisywa due wartoci tekstowe. Teoretyczne ograniczenie rozmiaru tekstu to ponad 4 GB, ale praktycznymi ograniczeniami s ograniczenia protokou komunikacyjnego MySQL oraz ilo pamici przeznaczonej na komunikacj na serwerze i na stacji klienckiej.

MEDIUMBLOB
Binarna posta MEDIUMTEXT.

MEDIUMTEXT
MEDIUMTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozdzia 3. Typy danych

31

Rozmiar 0 do 16 777 215 Rozmiar w pamici Dugo wartoci+3 bajty Opis Typ pozwala zapisywa redniej wielkoci wartoci tekstowe.

NCHAR
Synonim CHAR.

NATIONAL CHAR
Synonim CHAR.

NATIONAL CHARACTER
Synonim CHAR.

NATIONAL VARCHAR
Synonim VARCHAR.

TEXT
TEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 65 535

32

MySQL. Leksykon kieszonkowy

Rozmiar w pamici Dugo wartoci tekstowej+2 bajty Opis Typ pozwala zapisywa typowe wartoci tekstowe.

TINYBLOB
Binarny odpowiednik TINYTEXT.

TINYTEXT
TINYTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 255 Rozmiar w pamici Dugo wartoci tekstowej+1 bajt Opis Pozwala zapisywa krtkie dane tekstowe.

VARBINARY
VARBINARY(rozmiar)

Rozmiar Wedug parametru rozmiar

Rozdzia 3. Typy danych

33

Rozmiar w pamici
rozmiar bajtw

Opis Jest to binarna odmiana typu VARCHAR. Podstawowa rnica polega na tym, e zapisywane s dane binarne, a rozmiar pola mierzony jest w bajtach, nie w znakach. Wielkoci typu VARBINARY, w przeciwiestwie do wartoci typu BINARY, nie s niczym dopeniane.

VARCHAR
VARCHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar Wskazana przez rozmiar warto z zakresu do 65 532 (od 1 do 255 w wersjach wczeniejszych ni MySQL 5); rozmiar wskazuje rzeczywist wielko kolumny i jest ograniczony przez dopuszczaln wielko wiersza w znakach; to, ile miejsca faktycznie bdzie potrzebne, zaley zatem od zestawu znakw uytego w danej kolumnie Rozmiar w pamici Zaley od liczby znakw wskazanych jako rozmiar oraz od liczby bajtw potrzebnych do zapisu poszczeglnych znakw w uytym mechanizmie kodowania znakw Opis Pozwala zapisywa wartoci tekstowe zmiennej dugoci. W wersjach poprzedzajcych MySQL 5 z wartoci VARCHAR usuwane s spacje kocowe; wersja MySQL 5 i nowsze standardowo nie usuwaj spacji kocowych.

34

MySQL. Leksykon kieszonkowy

Daty
Typy datowe MySQL s wyjtkowo elastycznym narzdziem, pozwalajcym zapisywa wszelki informacje dzienne. MySQL jest bardzo tolerancyjny i zakada, e to aplikacja, a nie baza danych, ma sprawdza poprawno tych danych. MySQL sprawdza jedynie, czy miesic nie wykracza poza zakres 0 12 i czy dzie nie wykracza poza zakres 0 31. Wobec tego z punktu widzenia MySQL 31 lutego 2001 roku jest poprawn dat. Bardziej przydatn wartoci jest data 0 lutego 2001 roku; cyfra zero moe zastpowa t cz daty, ktrej dokadnie nie znamy. MySQL 5 jest jednak ju baz danych nieco bardziej restrykcyjn co do wartoci, jakie mona zapisywa w polach datowych. Wprawdzie MySQL dopuszcza do du swobod formatw wejciowych dat, to naley stara si w aplikacjach daty formatowa zgodnie z formatem wewntrznym MySQL w celu uniknicia nieporozumie. MySQL zawsze zakada, e rok jest pierwszym elementem po lewej stronie daty. Jeli w operacji SQL podana zostanie nieprawidowa warto daty, MySQL wstawi w jej miejsce zero. MySQL w kontekcie liczb cakowitych automatycznie konwertuje daty i czas na liczby cakowite.

DATE
DATE

Format
YYYY-MM-DD (2001-01-01)

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

35

Opis Data kalendarza gregoriaskiego z zakresu od 1 stycznia 1000 roku ('1000-01-01') do 31 grudnia 9999 roku ('9999-12-31').

DATETIME
DATETIME

Format
YYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 8 bajtw Opis Zapisuje czas z zakresu od 00:00:00 1 stycznia 1000 roku ('100001-01 00:00:00') do 23:59:59 31 grudnia 9999 ('9999-12-31 23:59:59') wedug kalendarza gregoriaskiego.

TIME
TIME

Format
hh:mm:ss (06:00:00)

Rozmiar w pamici 3 bajty Opis Zapisuje czas od pnocy ('00:00:00') do sekundy przed pnoc ('23:59:59').
36 | MySQL. Leksykon kieszonkowy

TIMESTAMP
TIMESTAMP[(rozmiar_wywietlania)]

Format
YYYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 4 bajty Opis Zapis chwili z dokadnoci do sekundy od pnocy 1 stycznia 1970 roku do minuty przed pnoc 31 grudnia 2037 roku. Podstawowym zastosowaniem tego typu jest rejestracja modyfikacji tabel. Przy wstawianiu do takiej kolumny wartoci NULL wstawiane s aktualna data i czas. W przypadku modyfikowania jakiejkolwiek wartoci w wierszu z kolumn TIMESTAMP pierwsza kolumna tego typu zostanie zaktualizowana biec dat i czasem. Format danych TIMESTAMP znany z wczeniejszych wersji MySQL, do 4.1 wcznie, w wersji 5.1 nie jest ju obsugiwany.

YEAR
YEAR[(rozmiar)]

Format
YYYY (2001)

Rozmiar w pamici 1 bajt

Rozdzia 3. Typy danych

37

Opis Pozwala zapisa rok z kalendarza gregoriaskiego. Parametr rozmiar umoliwia zapisywanie roku dwu- lub czterocyfrowo. Zakres YEAR(4) rozciga si od 1900 do 2155, dla YEAR(2) od 1970 do 2069. Domylnie przyjmowane jest YEAR(4).

Typy zoone
Zoone typy danych MySQL, ENUM i SET, s po prostu specjalnymi przypadkami typw acuchowych. Opisujemy je osobno, gdy s bardziej zoone pojciowo i stanowi wprowadzenie do typw danych SQL3, ktre by moe MySQL bdzie obsugiwa w przyszoci.

ENUM
ENUM(warto1, warto2, ...)

Rozmiar w pamici 1 255 elementw: 1 bajt 255 65 535 elementw: 2 bajty Opis Typ danych ENUM pozwala zapisywa jeden z wielu zdefiniowanych wczeniej acuchw. Przy tworzeniu kolumny typu ENUM podaje si list dopuszczalnych jej wartoci. Dane mog by do tej kolumny wstawiane i aktualizowane jedynie z tej listy; kada prba wstawienia wartoci spoza niej powoduje wstawienie pustego acucha.

38

MySQL. Leksykon kieszonkowy

Do listy dopuszczalnych wartoci mona si odwoywa przez indeks, przy czym pierwszy element otrzymuje numer 0. Na przykad:
SELECT COLID FROM TBL WHERE COLENUM = 0;

Jeli COLID jest kolumn z kluczem gwnym, a COLENUM kolumn typu ENUM, taka instrukcja SQL spowoduje pobranie kluczy gwnych wszystkich wierszy, dla ktrych COLENUM jest pierwsz wartoci z listy. Analogicznie, sortowanie wzgldem kolumn ENUM powoduje sortowanie wedug indeksu, nie acucha. Najwiksza moliwa liczba elementw kolumny ENUM to 65 535.

SET
SET(warto1, warto2, ...)

Rozmiar w pamici 1 8 elementw: 1 bajt 9 16 elementw: 2 bajty 17 24 elementy: 3 bajty 25 32 elementy: 4 bajty 33 64 elementy: 8 bajtw Opis Lista wartoci wybieranych z okrelonego wczeniej zbioru. Pole moe zawiera dowoln liczb acuchw wskazanych w instrukcji SET, szczeglnie moe nie zawiera adnej takiej wartoci. SET jest podobny do ENUM, ale kade pole moe zawiera wicej ni jedn z podanych wartoci. Dane typu SET nie s jednak zapisywane za pomoc indeksw, ale w zoonej mapie bitowej. Jeli dany jest zbir SET, zawierajcy elementy: Mandarynka, Pomidor,
Rozdzia 3. Typy danych | 39

Gruszka i Banan, kady z tych elementw jest reprezentowany jako

wczony bit w bajcie, jak to pokazano w tabeli 3.1.


Tabela 3.1. Reprezentacja zbioru elementw w MySQL
Element
Mandarynka Pomidor Gruszka Banan

Warto dziesitna
1 2 4 8

Zapis bitowy
0001 0010 0100 1000

W powyszym przykadzie zapisanie jednoczenie wartoci Mandarynka i Gruszka wymaga uycia wartoci 5 (bitowo 0101). W kolumnie SET mona zapisa najwyej 64 wartoci. Wprawdzie t sam warto mona w jednym wyraeniu SQL wpisa wielokrotnie, ale w bazie danych warto ta zostanie zapisana raz.

40

MySQL. Leksykon kieszonkowy

4. SQL .............................................................................................. 41
Rozrnianie wielkoci liter Literay Identyfikatory Komentarze Instrukcje Zasady dotyczce transakcji 41 42 43 45 46 106

5. Operatory .................................................................................. 108


Priorytety operatorw Operatory arytmetyczne Operatory porwnania Operatory logiczne 108 109 109 111

6. Funkcje .......................................................................................113
Funkcje agregujce Funkcje oglnego przeznaczenia 113 115

7. Rodzaje tabel ............................................................................ 137 8. Procedury i funkcje skadowane .............................................. 138


Parametry Logika Kursory Obsuga zdarze i warunki 138 139 143 144

9. Trygery ...................................................................................... 146 Skorowidz ................................................................................. 147

MySQL. Leksykon kieszonkowy

Rozdzia 3. Typy danych


We wszystkich typach danych nawiasami kwadratowymi ([]) oznaczane s fragmenty opcjonalne. Poniszy przykad pokazuje sposb prezentacji typu BIGINT, opisanego dalej w tym rozdziale:
BIGINT[(wielko_pokazywana)]

Oznacza to, e sowo BIGINT moe wystpi samodzielnie lub z pokazywan wartoci. Uycie kursywy wskazuje, e nie naley wpisywa sowa wielko_pokazywana, ale poda wasn warto. Oto przykady uycia:
BIGINT BIGINT(20)

Poza typem BIGINT take wiele innych typw danych MySQL uwzgldnia deklaracj rozmiaru wywietlania. Jeli nie powiedziano inaczej, musi to by liczba od 1 do 255. W wersjach MySQL starszych ni wersja 5, baza danych w niektrych przypadkach zmieniaa podany typ kolumny, nie informujc o tym uytkownika. Obecnie takie podmiany nie maj ju miejsca.
VARCHAR -> CHAR

Jeli podana kolumna VARCHAR ma rozmiar mniejszy od czterech znakw, jest przeksztacana w kolumn CHAR.
CHAR -> VARCHAR

Jeli tabela zawiera co najmniej jedn kolumn o zmiennej dugoci, wszystkie kolumny typu CHAR dusze ni trzy znaki s zamieniane na VARCHAR.

Rozmiar wywietlania TIMESTAMP Rozmiar wywietlania pl TIMESTAMP musi by zawsze wielkoci parzyst od 2 do 14. Rozmiar rwny 0 lub wikszy od 14 powoduje przyjcie 14. Wszelkie liczby nieparzyste s zamieniane na nastpn liczb parzyst.

22

MySQL. Leksykon kieszonkowy

Liczby
MySQL obsuguje liczbowe typy danych zgodne z ANSI SQL 2. Typy te dzielimy na cakowitoliczbowe, dziesitne i zmiennoprzecinkowe. W ramach tych grup dzielimy typy dalej, wedug zajmowanej przez nie pamici. W przypadku typw liczbowych mona poda rozmiar wywietlania, ktry wpywa na sposb pokazywania przez MySQL wynikw. Rozmiar ten nie ma adnego zwizku z wielkoci pamici zajmowanej przez dany typ. Dodatkowo w przypadku liczb zmiennoprzecinkowych i dziesitnych mona poda liczb cyfr znajdujcych si za kropk dziesitn. Wtedy liczba cyfr powinna nalee do zakresu od 0 do 30, czyli by co najmniej o dwa mniejsza od rozmiaru wywietlania. Jeli warunek ten nie zostanie dotrzymany, MySQL automatycznie zmieni liczb cyfr tak, aby bya mniejsza o dwa od rozmiaru wywietlania. Przykadowo, MySQL automatycznie zmieni FLOAT(6,5) na FLOAT(7,5). Prba wstawienia do kolumny wartoci przekraczajcej dopuszczalny zakres tej kolumny powoduje obcicie tej wartoci do najmniejszej (dla liczb ujemnych) lub najwikszej (dla liczb dodatnich) wartoci dla danej kolumny dopuszczalnej. Jeli takie obcicie jest robione podczas wykonywania instrukcji ALTER TABLE, LOAD DATA INFILE, UPDATE lub wielowierszowej instrukcji INSERT, MySQL pokazuje ostrzeenie. Wyjtkiem jest korzystanie z MySQL w wersji 5 lub nowszej w trybie penej zgodnoci ze standardem SQL, gdy wtedy w przypadku instrukcji INSERT i UPDATE zgaszany jest bd. Atrybutu AUTO_INCREMENT mona uy do co najwyej jednej kolumny cakowitoliczbowej w tabeli. Atrybut UNSIGNED moe by czony z dowolnym liczbowym typem danych. Uycie tego atrybutu powoduje, e do kolumny nie mona wpisywa liczb ujemnych. Atrybut ZEROFILL nakazuje wypenienie kolumny od lewej

Rozdzia 3. Typy danych

23

strony zerami podczas wywietlania jej wartoci. O liczbie tych zer decyduje szeroko wywietlania danej kolumny.

BIGINT
BIGINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Najwikszy z typw cakowitoliczbowych, pozwalajcy zapisywa liczby od 9 223 372 036 854 775 808 do 9 223 372 036 854 775 807 (jeli bez znaku, to od 0 do 18 446 744 073 709 551 615). Z uwagi na sposb realizacji dziaa na liczbach tego typu, naley unika operacji na liczbach BIGINT bez znaku wikszych ni 9 223 372 036 854 775 807, gdy moe to zaowocowa nieprawidowymi wynikami.

BIT
BIT[(bity)]

Rozmiar w pamici w przyblieniu bity bitw+7 lub 8 bitw Opis W wersjach MySQL 5.0.3 i starszych, pola typu BIT dziaay tak samo, jak TINYINT(1). Omawiany typ pola pozwala przechowywa ustalon liczb bitw. Jeli podana zostanie wielko bitw mniejsza od dozwolonej, MySQL wypeni zerami bity od lewej strony.
24 | MySQL. Leksykon kieszonkowy

DEC
Synonim typu DECIMAL.

DECIMAL
DECIMAL[(dokadno, [skala])] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici rnie Opis Pozwala zapisywa liczby zmiennoprzecinkowe w sytuacjach, kiedy istotna jest dokadno na przykad przy operowaniu kwotami pienidzy. Stosujc typ DECIMAL, trzeba poda dwa jego parametry, dokadno i skal. Dokadno to liczba znaczcych cyfr, za skala to liczba znaczcych cyfr po kropce dziesitnej. Przykadowo, kolumna SALDO typu DECIMAL(9,2) pozwoliaby zapisywa liczby dziewiciocyfrowe, przy czym na prawo od kropki dziesitnej mogyby by dwie cyfry. Zakres dopuszczalnych liczb to w takiej sytuacji od 9 999 999,99 do 9 999 999,99. Jeli podana zostanie liczba zawierajca wicej cyfr po przecinku, ni przewiduje to definicja, liczba zostanie zaokrglona. Wartoci spoza zakresu DECIMAL s obcinane tak, aby si w nim zmieciy. W wersjach MySQL starszych ni 5, wartoci DECIMAL nie byy zapisywane jako liczby zmiennoprzecinkowe, lecz jako acuchy znakw. Na kad cyfr zuywany by jeden znak w przypadku skali wikszej od 0, poza tym jeden dodatkowy znak zuywany jest w przypadku liczb ujemnych. Jeli skala wynosi 0, liczby nie maj czci uamkowej. SQL zgodnie z norm ANSI pozwala pomija dokadno i (lub) skal. Jeli brak dokadnoci, przyjmowane jest ustawienie

Rozdzia 3. Typy danych

25

domylne charakterystyczne dla implementacji. Jeli brak skali, przyjmowane jest zero. W MySQL domylna warto dokadnoci to 10.

DOUBLE
DOUBLE[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Liczba zmiennoprzecinkowa podwjnej precyzji. Ten typ danych pozwala zapisywa due wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 1,7976931348623157E+308 do 2,2250738585072014E308, 0 oraz wartoci dodatnie od 2,2250738585072014E308 do 1,7976931348623157E+308.

DOUBLE PRECISION
Synonim DOUBLE.

FLOAT
FLOAT[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 4 bajty

26

MySQL. Leksykon kieszonkowy

Opis Liczba zmiennoprzecinkowa pojedynczej precyzji. Ten typ danych pozwala zapisywa mae wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 3,402823466E+38 do 1,175494351E38, 0 oraz wartoci dodatnie od 1,175494351E38 do 3,402823466E+38.

INT
INT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 4 bajty Opis Podstawowy rodzaj liczb cakowitych od 2 147 483 648 do 2 147 483 647 (lub od 0 do 4 294 967 295 w przypadku liczb bez znaku).

INTEGER
Synonim INT.

MEDIUMINT
MEDIUMINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

27

Opis Liczby cakowite od 8 388 608 do 8 388 607 (lub od 0 do 16 777 215 w przypadku liczb bez znaku).

NUMERIC
Synonim DECIMAL.

REAL
Synonim DOUBLE.

SMALLINT
SMALLINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 2 bajty Opis Liczby cakowite z zakresu od 32 768 do 32 767 (od 0 do 65 535 w przypadku liczb bez znaku).

TINYINT
TINYINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 1 bajt

28

MySQL. Leksykon kieszonkowy

Opis Liczby cakowite od 128 do 127 (od 0 do 255 w przypadku liczb bez znaku).

acuchy
MySQL obsuguje dwie kategorie acuchw: acuchy tekstowe oraz acuchy binarne. Obie kategorie maj swoje specyficzne typy do obsugi rnych wielkoci pl i rnych sposobw porwnywania wartoci. W zalenoci od sposobu porwnywania, mona uwzgldnia bd nie wielko liter, mona te porwnywa dane binarnie (bajt po bajcie). Kiedy nazwa typu tekstowego (jak CHAR, VARCHAR i inne) zostanie oznaczona sowem kluczowym BINARY, kolumna pozostaje kolumn tekstow, ale dane s porwnywane ze sob binarnie.

BINARY
BINARY(rozmiar)

Rozmiar wedug rozmiar, w zakresie od 0 do 255 Rozmiar w pamici


rozmiar bajtw

Opis Typ danych BINARY to binarny odpowiednik typu CHAR. Podstawowa rnica midzy tymi dwoma typami polega na tym, e pole typu BINARY zawiera dane binarne, wielko tych danych jest mierzona nie w znakach, lecz w bajtach. acuchy zawierajce

Rozdzia 3. Typy danych

29

mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie znakami 0x00 (wersja MySQL 5.0.5 i nowsze) lub spacjami (wersje starsze).

BLOB
Binarny odpowiednik typu TEXT.

CHAR
CHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar wedug rozmiar, do 255 Rozmiar w pamici zaleny od rozmiaru i od uytego zestawu znakw Opis Pole tekstowe ustalonej dugoci. acuchy zawierajce mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie spacjami. Podczas pobierania danych z bazy te dodatkowe spacje s usuwane. Pola CHAR(0) zostay zachowane w celu zapewnienia zgodnoci ze starymi systemami, w ktrych w kolumnach nie s zapisywane adne wartoci.

CHARACTER
Synonim CHAR.

30

MySQL. Leksykon kieszonkowy

CHARACTER VARYING
Synonim VARCHAR.

LONGBLOB
Binarny odpowiednik LONGTEXT.

LONGTEXT
LONGTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 4 294 295 Rozmiar w pamici Dugo wartoci+4 bajty Opis Typ pozwala zapisywa due wartoci tekstowe. Teoretyczne ograniczenie rozmiaru tekstu to ponad 4 GB, ale praktycznymi ograniczeniami s ograniczenia protokou komunikacyjnego MySQL oraz ilo pamici przeznaczonej na komunikacj na serwerze i na stacji klienckiej.

MEDIUMBLOB
Binarna posta MEDIUMTEXT.

MEDIUMTEXT
MEDIUMTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozdzia 3. Typy danych

31

Rozmiar 0 do 16 777 215 Rozmiar w pamici Dugo wartoci+3 bajty Opis Typ pozwala zapisywa redniej wielkoci wartoci tekstowe.

NCHAR
Synonim CHAR.

NATIONAL CHAR
Synonim CHAR.

NATIONAL CHARACTER
Synonim CHAR.

NATIONAL VARCHAR
Synonim VARCHAR.

TEXT
TEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 65 535

32

MySQL. Leksykon kieszonkowy

Rozmiar w pamici Dugo wartoci tekstowej+2 bajty Opis Typ pozwala zapisywa typowe wartoci tekstowe.

TINYBLOB
Binarny odpowiednik TINYTEXT.

TINYTEXT
TINYTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 255 Rozmiar w pamici Dugo wartoci tekstowej+1 bajt Opis Pozwala zapisywa krtkie dane tekstowe.

VARBINARY
VARBINARY(rozmiar)

Rozmiar Wedug parametru rozmiar

Rozdzia 3. Typy danych

33

Rozmiar w pamici
rozmiar bajtw

Opis Jest to binarna odmiana typu VARCHAR. Podstawowa rnica polega na tym, e zapisywane s dane binarne, a rozmiar pola mierzony jest w bajtach, nie w znakach. Wielkoci typu VARBINARY, w przeciwiestwie do wartoci typu BINARY, nie s niczym dopeniane.

VARCHAR
VARCHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar Wskazana przez rozmiar warto z zakresu do 65 532 (od 1 do 255 w wersjach wczeniejszych ni MySQL 5); rozmiar wskazuje rzeczywist wielko kolumny i jest ograniczony przez dopuszczaln wielko wiersza w znakach; to, ile miejsca faktycznie bdzie potrzebne, zaley zatem od zestawu znakw uytego w danej kolumnie Rozmiar w pamici Zaley od liczby znakw wskazanych jako rozmiar oraz od liczby bajtw potrzebnych do zapisu poszczeglnych znakw w uytym mechanizmie kodowania znakw Opis Pozwala zapisywa wartoci tekstowe zmiennej dugoci. W wersjach poprzedzajcych MySQL 5 z wartoci VARCHAR usuwane s spacje kocowe; wersja MySQL 5 i nowsze standardowo nie usuwaj spacji kocowych.

34

MySQL. Leksykon kieszonkowy

Daty
Typy datowe MySQL s wyjtkowo elastycznym narzdziem, pozwalajcym zapisywa wszelki informacje dzienne. MySQL jest bardzo tolerancyjny i zakada, e to aplikacja, a nie baza danych, ma sprawdza poprawno tych danych. MySQL sprawdza jedynie, czy miesic nie wykracza poza zakres 0 12 i czy dzie nie wykracza poza zakres 0 31. Wobec tego z punktu widzenia MySQL 31 lutego 2001 roku jest poprawn dat. Bardziej przydatn wartoci jest data 0 lutego 2001 roku; cyfra zero moe zastpowa t cz daty, ktrej dokadnie nie znamy. MySQL 5 jest jednak ju baz danych nieco bardziej restrykcyjn co do wartoci, jakie mona zapisywa w polach datowych. Wprawdzie MySQL dopuszcza do du swobod formatw wejciowych dat, to naley stara si w aplikacjach daty formatowa zgodnie z formatem wewntrznym MySQL w celu uniknicia nieporozumie. MySQL zawsze zakada, e rok jest pierwszym elementem po lewej stronie daty. Jeli w operacji SQL podana zostanie nieprawidowa warto daty, MySQL wstawi w jej miejsce zero. MySQL w kontekcie liczb cakowitych automatycznie konwertuje daty i czas na liczby cakowite.

DATE
DATE

Format
YYYY-MM-DD (2001-01-01)

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

35

Opis Data kalendarza gregoriaskiego z zakresu od 1 stycznia 1000 roku ('1000-01-01') do 31 grudnia 9999 roku ('9999-12-31').

DATETIME
DATETIME

Format
YYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 8 bajtw Opis Zapisuje czas z zakresu od 00:00:00 1 stycznia 1000 roku ('100001-01 00:00:00') do 23:59:59 31 grudnia 9999 ('9999-12-31 23:59:59') wedug kalendarza gregoriaskiego.

TIME
TIME

Format
hh:mm:ss (06:00:00)

Rozmiar w pamici 3 bajty Opis Zapisuje czas od pnocy ('00:00:00') do sekundy przed pnoc ('23:59:59').
36 | MySQL. Leksykon kieszonkowy

TIMESTAMP
TIMESTAMP[(rozmiar_wywietlania)]

Format
YYYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 4 bajty Opis Zapis chwili z dokadnoci do sekundy od pnocy 1 stycznia 1970 roku do minuty przed pnoc 31 grudnia 2037 roku. Podstawowym zastosowaniem tego typu jest rejestracja modyfikacji tabel. Przy wstawianiu do takiej kolumny wartoci NULL wstawiane s aktualna data i czas. W przypadku modyfikowania jakiejkolwiek wartoci w wierszu z kolumn TIMESTAMP pierwsza kolumna tego typu zostanie zaktualizowana biec dat i czasem. Format danych TIMESTAMP znany z wczeniejszych wersji MySQL, do 4.1 wcznie, w wersji 5.1 nie jest ju obsugiwany.

YEAR
YEAR[(rozmiar)]

Format
YYYY (2001)

Rozmiar w pamici 1 bajt

Rozdzia 3. Typy danych

37

Opis Pozwala zapisa rok z kalendarza gregoriaskiego. Parametr rozmiar umoliwia zapisywanie roku dwu- lub czterocyfrowo. Zakres YEAR(4) rozciga si od 1900 do 2155, dla YEAR(2) od 1970 do 2069. Domylnie przyjmowane jest YEAR(4).

Typy zoone
Zoone typy danych MySQL, ENUM i SET, s po prostu specjalnymi przypadkami typw acuchowych. Opisujemy je osobno, gdy s bardziej zoone pojciowo i stanowi wprowadzenie do typw danych SQL3, ktre by moe MySQL bdzie obsugiwa w przyszoci.

ENUM
ENUM(warto1, warto2, ...)

Rozmiar w pamici 1 255 elementw: 1 bajt 255 65 535 elementw: 2 bajty Opis Typ danych ENUM pozwala zapisywa jeden z wielu zdefiniowanych wczeniej acuchw. Przy tworzeniu kolumny typu ENUM podaje si list dopuszczalnych jej wartoci. Dane mog by do tej kolumny wstawiane i aktualizowane jedynie z tej listy; kada prba wstawienia wartoci spoza niej powoduje wstawienie pustego acucha.

38

MySQL. Leksykon kieszonkowy

Do listy dopuszczalnych wartoci mona si odwoywa przez indeks, przy czym pierwszy element otrzymuje numer 0. Na przykad:
SELECT COLID FROM TBL WHERE COLENUM = 0;

Jeli COLID jest kolumn z kluczem gwnym, a COLENUM kolumn typu ENUM, taka instrukcja SQL spowoduje pobranie kluczy gwnych wszystkich wierszy, dla ktrych COLENUM jest pierwsz wartoci z listy. Analogicznie, sortowanie wzgldem kolumn ENUM powoduje sortowanie wedug indeksu, nie acucha. Najwiksza moliwa liczba elementw kolumny ENUM to 65 535.

SET
SET(warto1, warto2, ...)

Rozmiar w pamici 1 8 elementw: 1 bajt 9 16 elementw: 2 bajty 17 24 elementy: 3 bajty 25 32 elementy: 4 bajty 33 64 elementy: 8 bajtw Opis Lista wartoci wybieranych z okrelonego wczeniej zbioru. Pole moe zawiera dowoln liczb acuchw wskazanych w instrukcji SET, szczeglnie moe nie zawiera adnej takiej wartoci. SET jest podobny do ENUM, ale kade pole moe zawiera wicej ni jedn z podanych wartoci. Dane typu SET nie s jednak zapisywane za pomoc indeksw, ale w zoonej mapie bitowej. Jeli dany jest zbir SET, zawierajcy elementy: Mandarynka, Pomidor,
Rozdzia 3. Typy danych | 39

Gruszka i Banan, kady z tych elementw jest reprezentowany jako

wczony bit w bajcie, jak to pokazano w tabeli 3.1.


Tabela 3.1. Reprezentacja zbioru elementw w MySQL
Element
Mandarynka Pomidor Gruszka Banan

Warto dziesitna
1 2 4 8

Zapis bitowy
0001 0010 0100 1000

W powyszym przykadzie zapisanie jednoczenie wartoci Mandarynka i Gruszka wymaga uycia wartoci 5 (bitowo 0101). W kolumnie SET mona zapisa najwyej 64 wartoci. Wprawdzie t sam warto mona w jednym wyraeniu SQL wpisa wielokrotnie, ale w bazie danych warto ta zostanie zapisana raz.

40

MySQL. Leksykon kieszonkowy

MySQL. Leksykon kieszonkowy. II wydanie


Autor: George Reese Tumaczenie: Tomasz mijewski ISBN: 978-83-246-1385-4 Tytu oryginau: MySQL Pocket Reference, 2nd Ed Format: B6, stron: 160 MySQL to jeden z najpopularniejszych systemw zarzdzania bazami danych Rozprowadzany na zasadzie open source, MySQL jest wykorzystywany jako zaplecze bazodanowe setek tysicy serwisw WWW, sklepw internetowych, blogw i galerii. Coraz czciej sigaj po niego take twrcy rozbudowanych aplikacji korporacyjnych, poszukujcy stabilnej, bezpiecznej i wydajnej platformy do przechowywania danych. W najnowszej wersji, oznaczonej symbolem 5.0, dodano wiele od dawna oczekiwanych funkcji, w tym procedury skadowane, wyzwalacze, kursory i widoki. Poprawiono take mechanizmy skadowania danych. Jeli jeste administratorem lub programist baz danych, ksika MySQL. Leksykon kieszonkowy. II wydanie bdzie dla Ciebie nieocenion pomoc. W skondensowanej formie przedstawiono w niej wszystkie najistotniejsze zagadnienia zwizane z instalacj i konfiguracj tego systemu, a take z zarzdzaniem nim i wykorzystywaniem go. Znajdziesz tu omwienie typw danych, polece jzyka SQL, funkcji i rodzajw tabel. Przeczytasz take o replikacji, procedurach skadowanych, narzdziach dostpnych z wiersza polece i wyzwalaczach.
Pobieranie i instalacja MySQL Replikacja danych Narzdzia wiersza polece Typy danych Polecenia SQL Operatory Procedury skadowane

Dziki tej ksice Twoja praca z MySQL stanie si szybsza i efektywniejsza Wydawnictwo Helion ul. Kociuszki 1c 44-100 Gliwice tel. 032 230 98 63 e-mail: helion@helion.pl

Spis treci

Wstp ............................................................................................5 MySQL 5 ........................................................................................7


Widoki Trygery Procedury skadowane Kursory Nowe mechanizmy skadowania danych Zdarzenia bazy danych 7 7 7 8 8 9

1. Instalacja ..................................................................................... 10
Pobieranie MySQL Konfiguracja Uruchomienie Ustawianie hasa gwnego Replikacja 10 11 14 15 15

2. Narzdzia wiersza polece ........................................................ 18 3. Typy danych ................................................................................22


Liczby acuchy 23 29

4. SQL .............................................................................................. 41
Rozrnianie wielkoci liter Literay Identyfikatory Komentarze Instrukcje Zasady dotyczce transakcji 41 42 43 45 46 106

5. Operatory .................................................................................. 108


Priorytety operatorw Operatory arytmetyczne Operatory porwnania Operatory logiczne 108 109 109 111

6. Funkcje .......................................................................................113
Funkcje agregujce Funkcje oglnego przeznaczenia 113 115

7. Rodzaje tabel ............................................................................ 137 8. Procedury i funkcje skadowane .............................................. 138


Parametry Logika Kursory Obsuga zdarze i warunki 138 139 143 144

9. Trygery ...................................................................................... 146 Skorowidz ................................................................................. 147

MySQL. Leksykon kieszonkowy

Rozdzia 3. Typy danych


We wszystkich typach danych nawiasami kwadratowymi ([]) oznaczane s fragmenty opcjonalne. Poniszy przykad pokazuje sposb prezentacji typu BIGINT, opisanego dalej w tym rozdziale:
BIGINT[(wielko_pokazywana)]

Oznacza to, e sowo BIGINT moe wystpi samodzielnie lub z pokazywan wartoci. Uycie kursywy wskazuje, e nie naley wpisywa sowa wielko_pokazywana, ale poda wasn warto. Oto przykady uycia:
BIGINT BIGINT(20)

Poza typem BIGINT take wiele innych typw danych MySQL uwzgldnia deklaracj rozmiaru wywietlania. Jeli nie powiedziano inaczej, musi to by liczba od 1 do 255. W wersjach MySQL starszych ni wersja 5, baza danych w niektrych przypadkach zmieniaa podany typ kolumny, nie informujc o tym uytkownika. Obecnie takie podmiany nie maj ju miejsca.
VARCHAR -> CHAR

Jeli podana kolumna VARCHAR ma rozmiar mniejszy od czterech znakw, jest przeksztacana w kolumn CHAR.
CHAR -> VARCHAR

Jeli tabela zawiera co najmniej jedn kolumn o zmiennej dugoci, wszystkie kolumny typu CHAR dusze ni trzy znaki s zamieniane na VARCHAR.

Rozmiar wywietlania TIMESTAMP Rozmiar wywietlania pl TIMESTAMP musi by zawsze wielkoci parzyst od 2 do 14. Rozmiar rwny 0 lub wikszy od 14 powoduje przyjcie 14. Wszelkie liczby nieparzyste s zamieniane na nastpn liczb parzyst.

22

MySQL. Leksykon kieszonkowy

Liczby
MySQL obsuguje liczbowe typy danych zgodne z ANSI SQL 2. Typy te dzielimy na cakowitoliczbowe, dziesitne i zmiennoprzecinkowe. W ramach tych grup dzielimy typy dalej, wedug zajmowanej przez nie pamici. W przypadku typw liczbowych mona poda rozmiar wywietlania, ktry wpywa na sposb pokazywania przez MySQL wynikw. Rozmiar ten nie ma adnego zwizku z wielkoci pamici zajmowanej przez dany typ. Dodatkowo w przypadku liczb zmiennoprzecinkowych i dziesitnych mona poda liczb cyfr znajdujcych si za kropk dziesitn. Wtedy liczba cyfr powinna nalee do zakresu od 0 do 30, czyli by co najmniej o dwa mniejsza od rozmiaru wywietlania. Jeli warunek ten nie zostanie dotrzymany, MySQL automatycznie zmieni liczb cyfr tak, aby bya mniejsza o dwa od rozmiaru wywietlania. Przykadowo, MySQL automatycznie zmieni FLOAT(6,5) na FLOAT(7,5). Prba wstawienia do kolumny wartoci przekraczajcej dopuszczalny zakres tej kolumny powoduje obcicie tej wartoci do najmniejszej (dla liczb ujemnych) lub najwikszej (dla liczb dodatnich) wartoci dla danej kolumny dopuszczalnej. Jeli takie obcicie jest robione podczas wykonywania instrukcji ALTER TABLE, LOAD DATA INFILE, UPDATE lub wielowierszowej instrukcji INSERT, MySQL pokazuje ostrzeenie. Wyjtkiem jest korzystanie z MySQL w wersji 5 lub nowszej w trybie penej zgodnoci ze standardem SQL, gdy wtedy w przypadku instrukcji INSERT i UPDATE zgaszany jest bd. Atrybutu AUTO_INCREMENT mona uy do co najwyej jednej kolumny cakowitoliczbowej w tabeli. Atrybut UNSIGNED moe by czony z dowolnym liczbowym typem danych. Uycie tego atrybutu powoduje, e do kolumny nie mona wpisywa liczb ujemnych. Atrybut ZEROFILL nakazuje wypenienie kolumny od lewej

Rozdzia 3. Typy danych

23

strony zerami podczas wywietlania jej wartoci. O liczbie tych zer decyduje szeroko wywietlania danej kolumny.

BIGINT
BIGINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Najwikszy z typw cakowitoliczbowych, pozwalajcy zapisywa liczby od 9 223 372 036 854 775 808 do 9 223 372 036 854 775 807 (jeli bez znaku, to od 0 do 18 446 744 073 709 551 615). Z uwagi na sposb realizacji dziaa na liczbach tego typu, naley unika operacji na liczbach BIGINT bez znaku wikszych ni 9 223 372 036 854 775 807, gdy moe to zaowocowa nieprawidowymi wynikami.

BIT
BIT[(bity)]

Rozmiar w pamici w przyblieniu bity bitw+7 lub 8 bitw Opis W wersjach MySQL 5.0.3 i starszych, pola typu BIT dziaay tak samo, jak TINYINT(1). Omawiany typ pola pozwala przechowywa ustalon liczb bitw. Jeli podana zostanie wielko bitw mniejsza od dozwolonej, MySQL wypeni zerami bity od lewej strony.
24 | MySQL. Leksykon kieszonkowy

DEC
Synonim typu DECIMAL.

DECIMAL
DECIMAL[(dokadno, [skala])] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici rnie Opis Pozwala zapisywa liczby zmiennoprzecinkowe w sytuacjach, kiedy istotna jest dokadno na przykad przy operowaniu kwotami pienidzy. Stosujc typ DECIMAL, trzeba poda dwa jego parametry, dokadno i skal. Dokadno to liczba znaczcych cyfr, za skala to liczba znaczcych cyfr po kropce dziesitnej. Przykadowo, kolumna SALDO typu DECIMAL(9,2) pozwoliaby zapisywa liczby dziewiciocyfrowe, przy czym na prawo od kropki dziesitnej mogyby by dwie cyfry. Zakres dopuszczalnych liczb to w takiej sytuacji od 9 999 999,99 do 9 999 999,99. Jeli podana zostanie liczba zawierajca wicej cyfr po przecinku, ni przewiduje to definicja, liczba zostanie zaokrglona. Wartoci spoza zakresu DECIMAL s obcinane tak, aby si w nim zmieciy. W wersjach MySQL starszych ni 5, wartoci DECIMAL nie byy zapisywane jako liczby zmiennoprzecinkowe, lecz jako acuchy znakw. Na kad cyfr zuywany by jeden znak w przypadku skali wikszej od 0, poza tym jeden dodatkowy znak zuywany jest w przypadku liczb ujemnych. Jeli skala wynosi 0, liczby nie maj czci uamkowej. SQL zgodnie z norm ANSI pozwala pomija dokadno i (lub) skal. Jeli brak dokadnoci, przyjmowane jest ustawienie

Rozdzia 3. Typy danych

25

domylne charakterystyczne dla implementacji. Jeli brak skali, przyjmowane jest zero. W MySQL domylna warto dokadnoci to 10.

DOUBLE
DOUBLE[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Liczba zmiennoprzecinkowa podwjnej precyzji. Ten typ danych pozwala zapisywa due wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 1,7976931348623157E+308 do 2,2250738585072014E308, 0 oraz wartoci dodatnie od 2,2250738585072014E308 do 1,7976931348623157E+308.

DOUBLE PRECISION
Synonim DOUBLE.

FLOAT
FLOAT[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 4 bajty

26

MySQL. Leksykon kieszonkowy

Opis Liczba zmiennoprzecinkowa pojedynczej precyzji. Ten typ danych pozwala zapisywa mae wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 3,402823466E+38 do 1,175494351E38, 0 oraz wartoci dodatnie od 1,175494351E38 do 3,402823466E+38.

INT
INT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 4 bajty Opis Podstawowy rodzaj liczb cakowitych od 2 147 483 648 do 2 147 483 647 (lub od 0 do 4 294 967 295 w przypadku liczb bez znaku).

INTEGER
Synonim INT.

MEDIUMINT
MEDIUMINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

27

Opis Liczby cakowite od 8 388 608 do 8 388 607 (lub od 0 do 16 777 215 w przypadku liczb bez znaku).

NUMERIC
Synonim DECIMAL.

REAL
Synonim DOUBLE.

SMALLINT
SMALLINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 2 bajty Opis Liczby cakowite z zakresu od 32 768 do 32 767 (od 0 do 65 535 w przypadku liczb bez znaku).

TINYINT
TINYINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 1 bajt

28

MySQL. Leksykon kieszonkowy

Opis Liczby cakowite od 128 do 127 (od 0 do 255 w przypadku liczb bez znaku).

acuchy
MySQL obsuguje dwie kategorie acuchw: acuchy tekstowe oraz acuchy binarne. Obie kategorie maj swoje specyficzne typy do obsugi rnych wielkoci pl i rnych sposobw porwnywania wartoci. W zalenoci od sposobu porwnywania, mona uwzgldnia bd nie wielko liter, mona te porwnywa dane binarnie (bajt po bajcie). Kiedy nazwa typu tekstowego (jak CHAR, VARCHAR i inne) zostanie oznaczona sowem kluczowym BINARY, kolumna pozostaje kolumn tekstow, ale dane s porwnywane ze sob binarnie.

BINARY
BINARY(rozmiar)

Rozmiar wedug rozmiar, w zakresie od 0 do 255 Rozmiar w pamici


rozmiar bajtw

Opis Typ danych BINARY to binarny odpowiednik typu CHAR. Podstawowa rnica midzy tymi dwoma typami polega na tym, e pole typu BINARY zawiera dane binarne, wielko tych danych jest mierzona nie w znakach, lecz w bajtach. acuchy zawierajce

Rozdzia 3. Typy danych

29

mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie znakami 0x00 (wersja MySQL 5.0.5 i nowsze) lub spacjami (wersje starsze).

BLOB
Binarny odpowiednik typu TEXT.

CHAR
CHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar wedug rozmiar, do 255 Rozmiar w pamici zaleny od rozmiaru i od uytego zestawu znakw Opis Pole tekstowe ustalonej dugoci. acuchy zawierajce mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie spacjami. Podczas pobierania danych z bazy te dodatkowe spacje s usuwane. Pola CHAR(0) zostay zachowane w celu zapewnienia zgodnoci ze starymi systemami, w ktrych w kolumnach nie s zapisywane adne wartoci.

CHARACTER
Synonim CHAR.

30

MySQL. Leksykon kieszonkowy

CHARACTER VARYING
Synonim VARCHAR.

LONGBLOB
Binarny odpowiednik LONGTEXT.

LONGTEXT
LONGTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 4 294 295 Rozmiar w pamici Dugo wartoci+4 bajty Opis Typ pozwala zapisywa due wartoci tekstowe. Teoretyczne ograniczenie rozmiaru tekstu to ponad 4 GB, ale praktycznymi ograniczeniami s ograniczenia protokou komunikacyjnego MySQL oraz ilo pamici przeznaczonej na komunikacj na serwerze i na stacji klienckiej.

MEDIUMBLOB
Binarna posta MEDIUMTEXT.

MEDIUMTEXT
MEDIUMTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozdzia 3. Typy danych

31

Rozmiar 0 do 16 777 215 Rozmiar w pamici Dugo wartoci+3 bajty Opis Typ pozwala zapisywa redniej wielkoci wartoci tekstowe.

NCHAR
Synonim CHAR.

NATIONAL CHAR
Synonim CHAR.

NATIONAL CHARACTER
Synonim CHAR.

NATIONAL VARCHAR
Synonim VARCHAR.

TEXT
TEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 65 535

32

MySQL. Leksykon kieszonkowy

Rozmiar w pamici Dugo wartoci tekstowej+2 bajty Opis Typ pozwala zapisywa typowe wartoci tekstowe.

TINYBLOB
Binarny odpowiednik TINYTEXT.

TINYTEXT
TINYTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 255 Rozmiar w pamici Dugo wartoci tekstowej+1 bajt Opis Pozwala zapisywa krtkie dane tekstowe.

VARBINARY
VARBINARY(rozmiar)

Rozmiar Wedug parametru rozmiar

Rozdzia 3. Typy danych

33

Rozmiar w pamici
rozmiar bajtw

Opis Jest to binarna odmiana typu VARCHAR. Podstawowa rnica polega na tym, e zapisywane s dane binarne, a rozmiar pola mierzony jest w bajtach, nie w znakach. Wielkoci typu VARBINARY, w przeciwiestwie do wartoci typu BINARY, nie s niczym dopeniane.

VARCHAR
VARCHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar Wskazana przez rozmiar warto z zakresu do 65 532 (od 1 do 255 w wersjach wczeniejszych ni MySQL 5); rozmiar wskazuje rzeczywist wielko kolumny i jest ograniczony przez dopuszczaln wielko wiersza w znakach; to, ile miejsca faktycznie bdzie potrzebne, zaley zatem od zestawu znakw uytego w danej kolumnie Rozmiar w pamici Zaley od liczby znakw wskazanych jako rozmiar oraz od liczby bajtw potrzebnych do zapisu poszczeglnych znakw w uytym mechanizmie kodowania znakw Opis Pozwala zapisywa wartoci tekstowe zmiennej dugoci. W wersjach poprzedzajcych MySQL 5 z wartoci VARCHAR usuwane s spacje kocowe; wersja MySQL 5 i nowsze standardowo nie usuwaj spacji kocowych.

34

MySQL. Leksykon kieszonkowy

Daty
Typy datowe MySQL s wyjtkowo elastycznym narzdziem, pozwalajcym zapisywa wszelki informacje dzienne. MySQL jest bardzo tolerancyjny i zakada, e to aplikacja, a nie baza danych, ma sprawdza poprawno tych danych. MySQL sprawdza jedynie, czy miesic nie wykracza poza zakres 0 12 i czy dzie nie wykracza poza zakres 0 31. Wobec tego z punktu widzenia MySQL 31 lutego 2001 roku jest poprawn dat. Bardziej przydatn wartoci jest data 0 lutego 2001 roku; cyfra zero moe zastpowa t cz daty, ktrej dokadnie nie znamy. MySQL 5 jest jednak ju baz danych nieco bardziej restrykcyjn co do wartoci, jakie mona zapisywa w polach datowych. Wprawdzie MySQL dopuszcza do du swobod formatw wejciowych dat, to naley stara si w aplikacjach daty formatowa zgodnie z formatem wewntrznym MySQL w celu uniknicia nieporozumie. MySQL zawsze zakada, e rok jest pierwszym elementem po lewej stronie daty. Jeli w operacji SQL podana zostanie nieprawidowa warto daty, MySQL wstawi w jej miejsce zero. MySQL w kontekcie liczb cakowitych automatycznie konwertuje daty i czas na liczby cakowite.

DATE
DATE

Format
YYYY-MM-DD (2001-01-01)

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

35

Opis Data kalendarza gregoriaskiego z zakresu od 1 stycznia 1000 roku ('1000-01-01') do 31 grudnia 9999 roku ('9999-12-31').

DATETIME
DATETIME

Format
YYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 8 bajtw Opis Zapisuje czas z zakresu od 00:00:00 1 stycznia 1000 roku ('100001-01 00:00:00') do 23:59:59 31 grudnia 9999 ('9999-12-31 23:59:59') wedug kalendarza gregoriaskiego.

TIME
TIME

Format
hh:mm:ss (06:00:00)

Rozmiar w pamici 3 bajty Opis Zapisuje czas od pnocy ('00:00:00') do sekundy przed pnoc ('23:59:59').
36 | MySQL. Leksykon kieszonkowy

TIMESTAMP
TIMESTAMP[(rozmiar_wywietlania)]

Format
YYYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 4 bajty Opis Zapis chwili z dokadnoci do sekundy od pnocy 1 stycznia 1970 roku do minuty przed pnoc 31 grudnia 2037 roku. Podstawowym zastosowaniem tego typu jest rejestracja modyfikacji tabel. Przy wstawianiu do takiej kolumny wartoci NULL wstawiane s aktualna data i czas. W przypadku modyfikowania jakiejkolwiek wartoci w wierszu z kolumn TIMESTAMP pierwsza kolumna tego typu zostanie zaktualizowana biec dat i czasem. Format danych TIMESTAMP znany z wczeniejszych wersji MySQL, do 4.1 wcznie, w wersji 5.1 nie jest ju obsugiwany.

YEAR
YEAR[(rozmiar)]

Format
YYYY (2001)

Rozmiar w pamici 1 bajt

Rozdzia 3. Typy danych

37

Opis Pozwala zapisa rok z kalendarza gregoriaskiego. Parametr rozmiar umoliwia zapisywanie roku dwu- lub czterocyfrowo. Zakres YEAR(4) rozciga si od 1900 do 2155, dla YEAR(2) od 1970 do 2069. Domylnie przyjmowane jest YEAR(4).

Typy zoone
Zoone typy danych MySQL, ENUM i SET, s po prostu specjalnymi przypadkami typw acuchowych. Opisujemy je osobno, gdy s bardziej zoone pojciowo i stanowi wprowadzenie do typw danych SQL3, ktre by moe MySQL bdzie obsugiwa w przyszoci.

ENUM
ENUM(warto1, warto2, ...)

Rozmiar w pamici 1 255 elementw: 1 bajt 255 65 535 elementw: 2 bajty Opis Typ danych ENUM pozwala zapisywa jeden z wielu zdefiniowanych wczeniej acuchw. Przy tworzeniu kolumny typu ENUM podaje si list dopuszczalnych jej wartoci. Dane mog by do tej kolumny wstawiane i aktualizowane jedynie z tej listy; kada prba wstawienia wartoci spoza niej powoduje wstawienie pustego acucha.

38

MySQL. Leksykon kieszonkowy

Do listy dopuszczalnych wartoci mona si odwoywa przez indeks, przy czym pierwszy element otrzymuje numer 0. Na przykad:
SELECT COLID FROM TBL WHERE COLENUM = 0;

Jeli COLID jest kolumn z kluczem gwnym, a COLENUM kolumn typu ENUM, taka instrukcja SQL spowoduje pobranie kluczy gwnych wszystkich wierszy, dla ktrych COLENUM jest pierwsz wartoci z listy. Analogicznie, sortowanie wzgldem kolumn ENUM powoduje sortowanie wedug indeksu, nie acucha. Najwiksza moliwa liczba elementw kolumny ENUM to 65 535.

SET
SET(warto1, warto2, ...)

Rozmiar w pamici 1 8 elementw: 1 bajt 9 16 elementw: 2 bajty 17 24 elementy: 3 bajty 25 32 elementy: 4 bajty 33 64 elementy: 8 bajtw Opis Lista wartoci wybieranych z okrelonego wczeniej zbioru. Pole moe zawiera dowoln liczb acuchw wskazanych w instrukcji SET, szczeglnie moe nie zawiera adnej takiej wartoci. SET jest podobny do ENUM, ale kade pole moe zawiera wicej ni jedn z podanych wartoci. Dane typu SET nie s jednak zapisywane za pomoc indeksw, ale w zoonej mapie bitowej. Jeli dany jest zbir SET, zawierajcy elementy: Mandarynka, Pomidor,
Rozdzia 3. Typy danych | 39

Gruszka i Banan, kady z tych elementw jest reprezentowany jako

wczony bit w bajcie, jak to pokazano w tabeli 3.1.


Tabela 3.1. Reprezentacja zbioru elementw w MySQL
Element
Mandarynka Pomidor Gruszka Banan

Warto dziesitna
1 2 4 8

Zapis bitowy
0001 0010 0100 1000

W powyszym przykadzie zapisanie jednoczenie wartoci Mandarynka i Gruszka wymaga uycia wartoci 5 (bitowo 0101). W kolumnie SET mona zapisa najwyej 64 wartoci. Wprawdzie t sam warto mona w jednym wyraeniu SQL wpisa wielokrotnie, ale w bazie danych warto ta zostanie zapisana raz.

40

MySQL. Leksykon kieszonkowy

4. SQL .............................................................................................. 41
Rozrnianie wielkoci liter Literay Identyfikatory Komentarze Instrukcje Zasady dotyczce transakcji 41 42 43 45 46 106

5. Operatory .................................................................................. 108


Priorytety operatorw Operatory arytmetyczne Operatory porwnania Operatory logiczne 108 109 109 111

6. Funkcje .......................................................................................113
Funkcje agregujce Funkcje oglnego przeznaczenia 113 115

7. Rodzaje tabel ............................................................................ 137 8. Procedury i funkcje skadowane .............................................. 138


Parametry Logika Kursory Obsuga zdarze i warunki 138 139 143 144

9. Trygery ...................................................................................... 146 Skorowidz ................................................................................. 147

MySQL. Leksykon kieszonkowy

Rozdzia 3. Typy danych


We wszystkich typach danych nawiasami kwadratowymi ([]) oznaczane s fragmenty opcjonalne. Poniszy przykad pokazuje sposb prezentacji typu BIGINT, opisanego dalej w tym rozdziale:
BIGINT[(wielko_pokazywana)]

Oznacza to, e sowo BIGINT moe wystpi samodzielnie lub z pokazywan wartoci. Uycie kursywy wskazuje, e nie naley wpisywa sowa wielko_pokazywana, ale poda wasn warto. Oto przykady uycia:
BIGINT BIGINT(20)

Poza typem BIGINT take wiele innych typw danych MySQL uwzgldnia deklaracj rozmiaru wywietlania. Jeli nie powiedziano inaczej, musi to by liczba od 1 do 255. W wersjach MySQL starszych ni wersja 5, baza danych w niektrych przypadkach zmieniaa podany typ kolumny, nie informujc o tym uytkownika. Obecnie takie podmiany nie maj ju miejsca.
VARCHAR -> CHAR

Jeli podana kolumna VARCHAR ma rozmiar mniejszy od czterech znakw, jest przeksztacana w kolumn CHAR.
CHAR -> VARCHAR

Jeli tabela zawiera co najmniej jedn kolumn o zmiennej dugoci, wszystkie kolumny typu CHAR dusze ni trzy znaki s zamieniane na VARCHAR.

Rozmiar wywietlania TIMESTAMP Rozmiar wywietlania pl TIMESTAMP musi by zawsze wielkoci parzyst od 2 do 14. Rozmiar rwny 0 lub wikszy od 14 powoduje przyjcie 14. Wszelkie liczby nieparzyste s zamieniane na nastpn liczb parzyst.

22

MySQL. Leksykon kieszonkowy

Liczby
MySQL obsuguje liczbowe typy danych zgodne z ANSI SQL 2. Typy te dzielimy na cakowitoliczbowe, dziesitne i zmiennoprzecinkowe. W ramach tych grup dzielimy typy dalej, wedug zajmowanej przez nie pamici. W przypadku typw liczbowych mona poda rozmiar wywietlania, ktry wpywa na sposb pokazywania przez MySQL wynikw. Rozmiar ten nie ma adnego zwizku z wielkoci pamici zajmowanej przez dany typ. Dodatkowo w przypadku liczb zmiennoprzecinkowych i dziesitnych mona poda liczb cyfr znajdujcych si za kropk dziesitn. Wtedy liczba cyfr powinna nalee do zakresu od 0 do 30, czyli by co najmniej o dwa mniejsza od rozmiaru wywietlania. Jeli warunek ten nie zostanie dotrzymany, MySQL automatycznie zmieni liczb cyfr tak, aby bya mniejsza o dwa od rozmiaru wywietlania. Przykadowo, MySQL automatycznie zmieni FLOAT(6,5) na FLOAT(7,5). Prba wstawienia do kolumny wartoci przekraczajcej dopuszczalny zakres tej kolumny powoduje obcicie tej wartoci do najmniejszej (dla liczb ujemnych) lub najwikszej (dla liczb dodatnich) wartoci dla danej kolumny dopuszczalnej. Jeli takie obcicie jest robione podczas wykonywania instrukcji ALTER TABLE, LOAD DATA INFILE, UPDATE lub wielowierszowej instrukcji INSERT, MySQL pokazuje ostrzeenie. Wyjtkiem jest korzystanie z MySQL w wersji 5 lub nowszej w trybie penej zgodnoci ze standardem SQL, gdy wtedy w przypadku instrukcji INSERT i UPDATE zgaszany jest bd. Atrybutu AUTO_INCREMENT mona uy do co najwyej jednej kolumny cakowitoliczbowej w tabeli. Atrybut UNSIGNED moe by czony z dowolnym liczbowym typem danych. Uycie tego atrybutu powoduje, e do kolumny nie mona wpisywa liczb ujemnych. Atrybut ZEROFILL nakazuje wypenienie kolumny od lewej

Rozdzia 3. Typy danych

23

strony zerami podczas wywietlania jej wartoci. O liczbie tych zer decyduje szeroko wywietlania danej kolumny.

BIGINT
BIGINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Najwikszy z typw cakowitoliczbowych, pozwalajcy zapisywa liczby od 9 223 372 036 854 775 808 do 9 223 372 036 854 775 807 (jeli bez znaku, to od 0 do 18 446 744 073 709 551 615). Z uwagi na sposb realizacji dziaa na liczbach tego typu, naley unika operacji na liczbach BIGINT bez znaku wikszych ni 9 223 372 036 854 775 807, gdy moe to zaowocowa nieprawidowymi wynikami.

BIT
BIT[(bity)]

Rozmiar w pamici w przyblieniu bity bitw+7 lub 8 bitw Opis W wersjach MySQL 5.0.3 i starszych, pola typu BIT dziaay tak samo, jak TINYINT(1). Omawiany typ pola pozwala przechowywa ustalon liczb bitw. Jeli podana zostanie wielko bitw mniejsza od dozwolonej, MySQL wypeni zerami bity od lewej strony.
24 | MySQL. Leksykon kieszonkowy

DEC
Synonim typu DECIMAL.

DECIMAL
DECIMAL[(dokadno, [skala])] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici rnie Opis Pozwala zapisywa liczby zmiennoprzecinkowe w sytuacjach, kiedy istotna jest dokadno na przykad przy operowaniu kwotami pienidzy. Stosujc typ DECIMAL, trzeba poda dwa jego parametry, dokadno i skal. Dokadno to liczba znaczcych cyfr, za skala to liczba znaczcych cyfr po kropce dziesitnej. Przykadowo, kolumna SALDO typu DECIMAL(9,2) pozwoliaby zapisywa liczby dziewiciocyfrowe, przy czym na prawo od kropki dziesitnej mogyby by dwie cyfry. Zakres dopuszczalnych liczb to w takiej sytuacji od 9 999 999,99 do 9 999 999,99. Jeli podana zostanie liczba zawierajca wicej cyfr po przecinku, ni przewiduje to definicja, liczba zostanie zaokrglona. Wartoci spoza zakresu DECIMAL s obcinane tak, aby si w nim zmieciy. W wersjach MySQL starszych ni 5, wartoci DECIMAL nie byy zapisywane jako liczby zmiennoprzecinkowe, lecz jako acuchy znakw. Na kad cyfr zuywany by jeden znak w przypadku skali wikszej od 0, poza tym jeden dodatkowy znak zuywany jest w przypadku liczb ujemnych. Jeli skala wynosi 0, liczby nie maj czci uamkowej. SQL zgodnie z norm ANSI pozwala pomija dokadno i (lub) skal. Jeli brak dokadnoci, przyjmowane jest ustawienie

Rozdzia 3. Typy danych

25

domylne charakterystyczne dla implementacji. Jeli brak skali, przyjmowane jest zero. W MySQL domylna warto dokadnoci to 10.

DOUBLE
DOUBLE[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Liczba zmiennoprzecinkowa podwjnej precyzji. Ten typ danych pozwala zapisywa due wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 1,7976931348623157E+308 do 2,2250738585072014E308, 0 oraz wartoci dodatnie od 2,2250738585072014E308 do 1,7976931348623157E+308.

DOUBLE PRECISION
Synonim DOUBLE.

FLOAT
FLOAT[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 4 bajty

26

MySQL. Leksykon kieszonkowy

Opis Liczba zmiennoprzecinkowa pojedynczej precyzji. Ten typ danych pozwala zapisywa mae wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 3,402823466E+38 do 1,175494351E38, 0 oraz wartoci dodatnie od 1,175494351E38 do 3,402823466E+38.

INT
INT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 4 bajty Opis Podstawowy rodzaj liczb cakowitych od 2 147 483 648 do 2 147 483 647 (lub od 0 do 4 294 967 295 w przypadku liczb bez znaku).

INTEGER
Synonim INT.

MEDIUMINT
MEDIUMINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

27

Opis Liczby cakowite od 8 388 608 do 8 388 607 (lub od 0 do 16 777 215 w przypadku liczb bez znaku).

NUMERIC
Synonim DECIMAL.

REAL
Synonim DOUBLE.

SMALLINT
SMALLINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 2 bajty Opis Liczby cakowite z zakresu od 32 768 do 32 767 (od 0 do 65 535 w przypadku liczb bez znaku).

TINYINT
TINYINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 1 bajt

28

MySQL. Leksykon kieszonkowy

Opis Liczby cakowite od 128 do 127 (od 0 do 255 w przypadku liczb bez znaku).

acuchy
MySQL obsuguje dwie kategorie acuchw: acuchy tekstowe oraz acuchy binarne. Obie kategorie maj swoje specyficzne typy do obsugi rnych wielkoci pl i rnych sposobw porwnywania wartoci. W zalenoci od sposobu porwnywania, mona uwzgldnia bd nie wielko liter, mona te porwnywa dane binarnie (bajt po bajcie). Kiedy nazwa typu tekstowego (jak CHAR, VARCHAR i inne) zostanie oznaczona sowem kluczowym BINARY, kolumna pozostaje kolumn tekstow, ale dane s porwnywane ze sob binarnie.

BINARY
BINARY(rozmiar)

Rozmiar wedug rozmiar, w zakresie od 0 do 255 Rozmiar w pamici


rozmiar bajtw

Opis Typ danych BINARY to binarny odpowiednik typu CHAR. Podstawowa rnica midzy tymi dwoma typami polega na tym, e pole typu BINARY zawiera dane binarne, wielko tych danych jest mierzona nie w znakach, lecz w bajtach. acuchy zawierajce

Rozdzia 3. Typy danych

29

mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie znakami 0x00 (wersja MySQL 5.0.5 i nowsze) lub spacjami (wersje starsze).

BLOB
Binarny odpowiednik typu TEXT.

CHAR
CHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar wedug rozmiar, do 255 Rozmiar w pamici zaleny od rozmiaru i od uytego zestawu znakw Opis Pole tekstowe ustalonej dugoci. acuchy zawierajce mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie spacjami. Podczas pobierania danych z bazy te dodatkowe spacje s usuwane. Pola CHAR(0) zostay zachowane w celu zapewnienia zgodnoci ze starymi systemami, w ktrych w kolumnach nie s zapisywane adne wartoci.

CHARACTER
Synonim CHAR.

30

MySQL. Leksykon kieszonkowy

CHARACTER VARYING
Synonim VARCHAR.

LONGBLOB
Binarny odpowiednik LONGTEXT.

LONGTEXT
LONGTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 4 294 295 Rozmiar w pamici Dugo wartoci+4 bajty Opis Typ pozwala zapisywa due wartoci tekstowe. Teoretyczne ograniczenie rozmiaru tekstu to ponad 4 GB, ale praktycznymi ograniczeniami s ograniczenia protokou komunikacyjnego MySQL oraz ilo pamici przeznaczonej na komunikacj na serwerze i na stacji klienckiej.

MEDIUMBLOB
Binarna posta MEDIUMTEXT.

MEDIUMTEXT
MEDIUMTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozdzia 3. Typy danych

31

Rozmiar 0 do 16 777 215 Rozmiar w pamici Dugo wartoci+3 bajty Opis Typ pozwala zapisywa redniej wielkoci wartoci tekstowe.

NCHAR
Synonim CHAR.

NATIONAL CHAR
Synonim CHAR.

NATIONAL CHARACTER
Synonim CHAR.

NATIONAL VARCHAR
Synonim VARCHAR.

TEXT
TEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 65 535

32

MySQL. Leksykon kieszonkowy

Rozmiar w pamici Dugo wartoci tekstowej+2 bajty Opis Typ pozwala zapisywa typowe wartoci tekstowe.

TINYBLOB
Binarny odpowiednik TINYTEXT.

TINYTEXT
TINYTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 255 Rozmiar w pamici Dugo wartoci tekstowej+1 bajt Opis Pozwala zapisywa krtkie dane tekstowe.

VARBINARY
VARBINARY(rozmiar)

Rozmiar Wedug parametru rozmiar

Rozdzia 3. Typy danych

33

Rozmiar w pamici
rozmiar bajtw

Opis Jest to binarna odmiana typu VARCHAR. Podstawowa rnica polega na tym, e zapisywane s dane binarne, a rozmiar pola mierzony jest w bajtach, nie w znakach. Wielkoci typu VARBINARY, w przeciwiestwie do wartoci typu BINARY, nie s niczym dopeniane.

VARCHAR
VARCHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar Wskazana przez rozmiar warto z zakresu do 65 532 (od 1 do 255 w wersjach wczeniejszych ni MySQL 5); rozmiar wskazuje rzeczywist wielko kolumny i jest ograniczony przez dopuszczaln wielko wiersza w znakach; to, ile miejsca faktycznie bdzie potrzebne, zaley zatem od zestawu znakw uytego w danej kolumnie Rozmiar w pamici Zaley od liczby znakw wskazanych jako rozmiar oraz od liczby bajtw potrzebnych do zapisu poszczeglnych znakw w uytym mechanizmie kodowania znakw Opis Pozwala zapisywa wartoci tekstowe zmiennej dugoci. W wersjach poprzedzajcych MySQL 5 z wartoci VARCHAR usuwane s spacje kocowe; wersja MySQL 5 i nowsze standardowo nie usuwaj spacji kocowych.

34

MySQL. Leksykon kieszonkowy

Daty
Typy datowe MySQL s wyjtkowo elastycznym narzdziem, pozwalajcym zapisywa wszelki informacje dzienne. MySQL jest bardzo tolerancyjny i zakada, e to aplikacja, a nie baza danych, ma sprawdza poprawno tych danych. MySQL sprawdza jedynie, czy miesic nie wykracza poza zakres 0 12 i czy dzie nie wykracza poza zakres 0 31. Wobec tego z punktu widzenia MySQL 31 lutego 2001 roku jest poprawn dat. Bardziej przydatn wartoci jest data 0 lutego 2001 roku; cyfra zero moe zastpowa t cz daty, ktrej dokadnie nie znamy. MySQL 5 jest jednak ju baz danych nieco bardziej restrykcyjn co do wartoci, jakie mona zapisywa w polach datowych. Wprawdzie MySQL dopuszcza do du swobod formatw wejciowych dat, to naley stara si w aplikacjach daty formatowa zgodnie z formatem wewntrznym MySQL w celu uniknicia nieporozumie. MySQL zawsze zakada, e rok jest pierwszym elementem po lewej stronie daty. Jeli w operacji SQL podana zostanie nieprawidowa warto daty, MySQL wstawi w jej miejsce zero. MySQL w kontekcie liczb cakowitych automatycznie konwertuje daty i czas na liczby cakowite.

DATE
DATE

Format
YYYY-MM-DD (2001-01-01)

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

35

Opis Data kalendarza gregoriaskiego z zakresu od 1 stycznia 1000 roku ('1000-01-01') do 31 grudnia 9999 roku ('9999-12-31').

DATETIME
DATETIME

Format
YYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 8 bajtw Opis Zapisuje czas z zakresu od 00:00:00 1 stycznia 1000 roku ('100001-01 00:00:00') do 23:59:59 31 grudnia 9999 ('9999-12-31 23:59:59') wedug kalendarza gregoriaskiego.

TIME
TIME

Format
hh:mm:ss (06:00:00)

Rozmiar w pamici 3 bajty Opis Zapisuje czas od pnocy ('00:00:00') do sekundy przed pnoc ('23:59:59').
36 | MySQL. Leksykon kieszonkowy

TIMESTAMP
TIMESTAMP[(rozmiar_wywietlania)]

Format
YYYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 4 bajty Opis Zapis chwili z dokadnoci do sekundy od pnocy 1 stycznia 1970 roku do minuty przed pnoc 31 grudnia 2037 roku. Podstawowym zastosowaniem tego typu jest rejestracja modyfikacji tabel. Przy wstawianiu do takiej kolumny wartoci NULL wstawiane s aktualna data i czas. W przypadku modyfikowania jakiejkolwiek wartoci w wierszu z kolumn TIMESTAMP pierwsza kolumna tego typu zostanie zaktualizowana biec dat i czasem. Format danych TIMESTAMP znany z wczeniejszych wersji MySQL, do 4.1 wcznie, w wersji 5.1 nie jest ju obsugiwany.

YEAR
YEAR[(rozmiar)]

Format
YYYY (2001)

Rozmiar w pamici 1 bajt

Rozdzia 3. Typy danych

37

Opis Pozwala zapisa rok z kalendarza gregoriaskiego. Parametr rozmiar umoliwia zapisywanie roku dwu- lub czterocyfrowo. Zakres YEAR(4) rozciga si od 1900 do 2155, dla YEAR(2) od 1970 do 2069. Domylnie przyjmowane jest YEAR(4).

Typy zoone
Zoone typy danych MySQL, ENUM i SET, s po prostu specjalnymi przypadkami typw acuchowych. Opisujemy je osobno, gdy s bardziej zoone pojciowo i stanowi wprowadzenie do typw danych SQL3, ktre by moe MySQL bdzie obsugiwa w przyszoci.

ENUM
ENUM(warto1, warto2, ...)

Rozmiar w pamici 1 255 elementw: 1 bajt 255 65 535 elementw: 2 bajty Opis Typ danych ENUM pozwala zapisywa jeden z wielu zdefiniowanych wczeniej acuchw. Przy tworzeniu kolumny typu ENUM podaje si list dopuszczalnych jej wartoci. Dane mog by do tej kolumny wstawiane i aktualizowane jedynie z tej listy; kada prba wstawienia wartoci spoza niej powoduje wstawienie pustego acucha.

38

MySQL. Leksykon kieszonkowy

Do listy dopuszczalnych wartoci mona si odwoywa przez indeks, przy czym pierwszy element otrzymuje numer 0. Na przykad:
SELECT COLID FROM TBL WHERE COLENUM = 0;

Jeli COLID jest kolumn z kluczem gwnym, a COLENUM kolumn typu ENUM, taka instrukcja SQL spowoduje pobranie kluczy gwnych wszystkich wierszy, dla ktrych COLENUM jest pierwsz wartoci z listy. Analogicznie, sortowanie wzgldem kolumn ENUM powoduje sortowanie wedug indeksu, nie acucha. Najwiksza moliwa liczba elementw kolumny ENUM to 65 535.

SET
SET(warto1, warto2, ...)

Rozmiar w pamici 1 8 elementw: 1 bajt 9 16 elementw: 2 bajty 17 24 elementy: 3 bajty 25 32 elementy: 4 bajty 33 64 elementy: 8 bajtw Opis Lista wartoci wybieranych z okrelonego wczeniej zbioru. Pole moe zawiera dowoln liczb acuchw wskazanych w instrukcji SET, szczeglnie moe nie zawiera adnej takiej wartoci. SET jest podobny do ENUM, ale kade pole moe zawiera wicej ni jedn z podanych wartoci. Dane typu SET nie s jednak zapisywane za pomoc indeksw, ale w zoonej mapie bitowej. Jeli dany jest zbir SET, zawierajcy elementy: Mandarynka, Pomidor,
Rozdzia 3. Typy danych | 39

Gruszka i Banan, kady z tych elementw jest reprezentowany jako

wczony bit w bajcie, jak to pokazano w tabeli 3.1.


Tabela 3.1. Reprezentacja zbioru elementw w MySQL
Element
Mandarynka Pomidor Gruszka Banan

Warto dziesitna
1 2 4 8

Zapis bitowy
0001 0010 0100 1000

W powyszym przykadzie zapisanie jednoczenie wartoci Mandarynka i Gruszka wymaga uycia wartoci 5 (bitowo 0101). W kolumnie SET mona zapisa najwyej 64 wartoci. Wprawdzie t sam warto mona w jednym wyraeniu SQL wpisa wielokrotnie, ale w bazie danych warto ta zostanie zapisana raz.

40

MySQL. Leksykon kieszonkowy

4. SQL .............................................................................................. 41
Rozrnianie wielkoci liter Literay Identyfikatory Komentarze Instrukcje Zasady dotyczce transakcji 41 42 43 45 46 106

5. Operatory .................................................................................. 108


Priorytety operatorw Operatory arytmetyczne Operatory porwnania Operatory logiczne 108 109 109 111

6. Funkcje .......................................................................................113
Funkcje agregujce Funkcje oglnego przeznaczenia 113 115

7. Rodzaje tabel ............................................................................ 137 8. Procedury i funkcje skadowane .............................................. 138


Parametry Logika Kursory Obsuga zdarze i warunki 138 139 143 144

9. Trygery ...................................................................................... 146 Skorowidz ................................................................................. 147

MySQL. Leksykon kieszonkowy

Rozdzia 3. Typy danych


We wszystkich typach danych nawiasami kwadratowymi ([]) oznaczane s fragmenty opcjonalne. Poniszy przykad pokazuje sposb prezentacji typu BIGINT, opisanego dalej w tym rozdziale:
BIGINT[(wielko_pokazywana)]

Oznacza to, e sowo BIGINT moe wystpi samodzielnie lub z pokazywan wartoci. Uycie kursywy wskazuje, e nie naley wpisywa sowa wielko_pokazywana, ale poda wasn warto. Oto przykady uycia:
BIGINT BIGINT(20)

Poza typem BIGINT take wiele innych typw danych MySQL uwzgldnia deklaracj rozmiaru wywietlania. Jeli nie powiedziano inaczej, musi to by liczba od 1 do 255. W wersjach MySQL starszych ni wersja 5, baza danych w niektrych przypadkach zmieniaa podany typ kolumny, nie informujc o tym uytkownika. Obecnie takie podmiany nie maj ju miejsca.
VARCHAR -> CHAR

Jeli podana kolumna VARCHAR ma rozmiar mniejszy od czterech znakw, jest przeksztacana w kolumn CHAR.
CHAR -> VARCHAR

Jeli tabela zawiera co najmniej jedn kolumn o zmiennej dugoci, wszystkie kolumny typu CHAR dusze ni trzy znaki s zamieniane na VARCHAR.

Rozmiar wywietlania TIMESTAMP Rozmiar wywietlania pl TIMESTAMP musi by zawsze wielkoci parzyst od 2 do 14. Rozmiar rwny 0 lub wikszy od 14 powoduje przyjcie 14. Wszelkie liczby nieparzyste s zamieniane na nastpn liczb parzyst.

22

MySQL. Leksykon kieszonkowy

Liczby
MySQL obsuguje liczbowe typy danych zgodne z ANSI SQL 2. Typy te dzielimy na cakowitoliczbowe, dziesitne i zmiennoprzecinkowe. W ramach tych grup dzielimy typy dalej, wedug zajmowanej przez nie pamici. W przypadku typw liczbowych mona poda rozmiar wywietlania, ktry wpywa na sposb pokazywania przez MySQL wynikw. Rozmiar ten nie ma adnego zwizku z wielkoci pamici zajmowanej przez dany typ. Dodatkowo w przypadku liczb zmiennoprzecinkowych i dziesitnych mona poda liczb cyfr znajdujcych si za kropk dziesitn. Wtedy liczba cyfr powinna nalee do zakresu od 0 do 30, czyli by co najmniej o dwa mniejsza od rozmiaru wywietlania. Jeli warunek ten nie zostanie dotrzymany, MySQL automatycznie zmieni liczb cyfr tak, aby bya mniejsza o dwa od rozmiaru wywietlania. Przykadowo, MySQL automatycznie zmieni FLOAT(6,5) na FLOAT(7,5). Prba wstawienia do kolumny wartoci przekraczajcej dopuszczalny zakres tej kolumny powoduje obcicie tej wartoci do najmniejszej (dla liczb ujemnych) lub najwikszej (dla liczb dodatnich) wartoci dla danej kolumny dopuszczalnej. Jeli takie obcicie jest robione podczas wykonywania instrukcji ALTER TABLE, LOAD DATA INFILE, UPDATE lub wielowierszowej instrukcji INSERT, MySQL pokazuje ostrzeenie. Wyjtkiem jest korzystanie z MySQL w wersji 5 lub nowszej w trybie penej zgodnoci ze standardem SQL, gdy wtedy w przypadku instrukcji INSERT i UPDATE zgaszany jest bd. Atrybutu AUTO_INCREMENT mona uy do co najwyej jednej kolumny cakowitoliczbowej w tabeli. Atrybut UNSIGNED moe by czony z dowolnym liczbowym typem danych. Uycie tego atrybutu powoduje, e do kolumny nie mona wpisywa liczb ujemnych. Atrybut ZEROFILL nakazuje wypenienie kolumny od lewej

Rozdzia 3. Typy danych

23

strony zerami podczas wywietlania jej wartoci. O liczbie tych zer decyduje szeroko wywietlania danej kolumny.

BIGINT
BIGINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Najwikszy z typw cakowitoliczbowych, pozwalajcy zapisywa liczby od 9 223 372 036 854 775 808 do 9 223 372 036 854 775 807 (jeli bez znaku, to od 0 do 18 446 744 073 709 551 615). Z uwagi na sposb realizacji dziaa na liczbach tego typu, naley unika operacji na liczbach BIGINT bez znaku wikszych ni 9 223 372 036 854 775 807, gdy moe to zaowocowa nieprawidowymi wynikami.

BIT
BIT[(bity)]

Rozmiar w pamici w przyblieniu bity bitw+7 lub 8 bitw Opis W wersjach MySQL 5.0.3 i starszych, pola typu BIT dziaay tak samo, jak TINYINT(1). Omawiany typ pola pozwala przechowywa ustalon liczb bitw. Jeli podana zostanie wielko bitw mniejsza od dozwolonej, MySQL wypeni zerami bity od lewej strony.
24 | MySQL. Leksykon kieszonkowy

DEC
Synonim typu DECIMAL.

DECIMAL
DECIMAL[(dokadno, [skala])] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici rnie Opis Pozwala zapisywa liczby zmiennoprzecinkowe w sytuacjach, kiedy istotna jest dokadno na przykad przy operowaniu kwotami pienidzy. Stosujc typ DECIMAL, trzeba poda dwa jego parametry, dokadno i skal. Dokadno to liczba znaczcych cyfr, za skala to liczba znaczcych cyfr po kropce dziesitnej. Przykadowo, kolumna SALDO typu DECIMAL(9,2) pozwoliaby zapisywa liczby dziewiciocyfrowe, przy czym na prawo od kropki dziesitnej mogyby by dwie cyfry. Zakres dopuszczalnych liczb to w takiej sytuacji od 9 999 999,99 do 9 999 999,99. Jeli podana zostanie liczba zawierajca wicej cyfr po przecinku, ni przewiduje to definicja, liczba zostanie zaokrglona. Wartoci spoza zakresu DECIMAL s obcinane tak, aby si w nim zmieciy. W wersjach MySQL starszych ni 5, wartoci DECIMAL nie byy zapisywane jako liczby zmiennoprzecinkowe, lecz jako acuchy znakw. Na kad cyfr zuywany by jeden znak w przypadku skali wikszej od 0, poza tym jeden dodatkowy znak zuywany jest w przypadku liczb ujemnych. Jeli skala wynosi 0, liczby nie maj czci uamkowej. SQL zgodnie z norm ANSI pozwala pomija dokadno i (lub) skal. Jeli brak dokadnoci, przyjmowane jest ustawienie

Rozdzia 3. Typy danych

25

domylne charakterystyczne dla implementacji. Jeli brak skali, przyjmowane jest zero. W MySQL domylna warto dokadnoci to 10.

DOUBLE
DOUBLE[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Liczba zmiennoprzecinkowa podwjnej precyzji. Ten typ danych pozwala zapisywa due wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 1,7976931348623157E+308 do 2,2250738585072014E308, 0 oraz wartoci dodatnie od 2,2250738585072014E308 do 1,7976931348623157E+308.

DOUBLE PRECISION
Synonim DOUBLE.

FLOAT
FLOAT[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 4 bajty

26

MySQL. Leksykon kieszonkowy

Opis Liczba zmiennoprzecinkowa pojedynczej precyzji. Ten typ danych pozwala zapisywa mae wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 3,402823466E+38 do 1,175494351E38, 0 oraz wartoci dodatnie od 1,175494351E38 do 3,402823466E+38.

INT
INT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 4 bajty Opis Podstawowy rodzaj liczb cakowitych od 2 147 483 648 do 2 147 483 647 (lub od 0 do 4 294 967 295 w przypadku liczb bez znaku).

INTEGER
Synonim INT.

MEDIUMINT
MEDIUMINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

27

Opis Liczby cakowite od 8 388 608 do 8 388 607 (lub od 0 do 16 777 215 w przypadku liczb bez znaku).

NUMERIC
Synonim DECIMAL.

REAL
Synonim DOUBLE.

SMALLINT
SMALLINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 2 bajty Opis Liczby cakowite z zakresu od 32 768 do 32 767 (od 0 do 65 535 w przypadku liczb bez znaku).

TINYINT
TINYINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 1 bajt

28

MySQL. Leksykon kieszonkowy

Opis Liczby cakowite od 128 do 127 (od 0 do 255 w przypadku liczb bez znaku).

acuchy
MySQL obsuguje dwie kategorie acuchw: acuchy tekstowe oraz acuchy binarne. Obie kategorie maj swoje specyficzne typy do obsugi rnych wielkoci pl i rnych sposobw porwnywania wartoci. W zalenoci od sposobu porwnywania, mona uwzgldnia bd nie wielko liter, mona te porwnywa dane binarnie (bajt po bajcie). Kiedy nazwa typu tekstowego (jak CHAR, VARCHAR i inne) zostanie oznaczona sowem kluczowym BINARY, kolumna pozostaje kolumn tekstow, ale dane s porwnywane ze sob binarnie.

BINARY
BINARY(rozmiar)

Rozmiar wedug rozmiar, w zakresie od 0 do 255 Rozmiar w pamici


rozmiar bajtw

Opis Typ danych BINARY to binarny odpowiednik typu CHAR. Podstawowa rnica midzy tymi dwoma typami polega na tym, e pole typu BINARY zawiera dane binarne, wielko tych danych jest mierzona nie w znakach, lecz w bajtach. acuchy zawierajce

Rozdzia 3. Typy danych

29

mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie znakami 0x00 (wersja MySQL 5.0.5 i nowsze) lub spacjami (wersje starsze).

BLOB
Binarny odpowiednik typu TEXT.

CHAR
CHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar wedug rozmiar, do 255 Rozmiar w pamici zaleny od rozmiaru i od uytego zestawu znakw Opis Pole tekstowe ustalonej dugoci. acuchy zawierajce mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie spacjami. Podczas pobierania danych z bazy te dodatkowe spacje s usuwane. Pola CHAR(0) zostay zachowane w celu zapewnienia zgodnoci ze starymi systemami, w ktrych w kolumnach nie s zapisywane adne wartoci.

CHARACTER
Synonim CHAR.

30

MySQL. Leksykon kieszonkowy

CHARACTER VARYING
Synonim VARCHAR.

LONGBLOB
Binarny odpowiednik LONGTEXT.

LONGTEXT
LONGTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 4 294 295 Rozmiar w pamici Dugo wartoci+4 bajty Opis Typ pozwala zapisywa due wartoci tekstowe. Teoretyczne ograniczenie rozmiaru tekstu to ponad 4 GB, ale praktycznymi ograniczeniami s ograniczenia protokou komunikacyjnego MySQL oraz ilo pamici przeznaczonej na komunikacj na serwerze i na stacji klienckiej.

MEDIUMBLOB
Binarna posta MEDIUMTEXT.

MEDIUMTEXT
MEDIUMTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozdzia 3. Typy danych

31

Rozmiar 0 do 16 777 215 Rozmiar w pamici Dugo wartoci+3 bajty Opis Typ pozwala zapisywa redniej wielkoci wartoci tekstowe.

NCHAR
Synonim CHAR.

NATIONAL CHAR
Synonim CHAR.

NATIONAL CHARACTER
Synonim CHAR.

NATIONAL VARCHAR
Synonim VARCHAR.

TEXT
TEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 65 535

32

MySQL. Leksykon kieszonkowy

Rozmiar w pamici Dugo wartoci tekstowej+2 bajty Opis Typ pozwala zapisywa typowe wartoci tekstowe.

TINYBLOB
Binarny odpowiednik TINYTEXT.

TINYTEXT
TINYTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 255 Rozmiar w pamici Dugo wartoci tekstowej+1 bajt Opis Pozwala zapisywa krtkie dane tekstowe.

VARBINARY
VARBINARY(rozmiar)

Rozmiar Wedug parametru rozmiar

Rozdzia 3. Typy danych

33

Rozmiar w pamici
rozmiar bajtw

Opis Jest to binarna odmiana typu VARCHAR. Podstawowa rnica polega na tym, e zapisywane s dane binarne, a rozmiar pola mierzony jest w bajtach, nie w znakach. Wielkoci typu VARBINARY, w przeciwiestwie do wartoci typu BINARY, nie s niczym dopeniane.

VARCHAR
VARCHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar Wskazana przez rozmiar warto z zakresu do 65 532 (od 1 do 255 w wersjach wczeniejszych ni MySQL 5); rozmiar wskazuje rzeczywist wielko kolumny i jest ograniczony przez dopuszczaln wielko wiersza w znakach; to, ile miejsca faktycznie bdzie potrzebne, zaley zatem od zestawu znakw uytego w danej kolumnie Rozmiar w pamici Zaley od liczby znakw wskazanych jako rozmiar oraz od liczby bajtw potrzebnych do zapisu poszczeglnych znakw w uytym mechanizmie kodowania znakw Opis Pozwala zapisywa wartoci tekstowe zmiennej dugoci. W wersjach poprzedzajcych MySQL 5 z wartoci VARCHAR usuwane s spacje kocowe; wersja MySQL 5 i nowsze standardowo nie usuwaj spacji kocowych.

34

MySQL. Leksykon kieszonkowy

Daty
Typy datowe MySQL s wyjtkowo elastycznym narzdziem, pozwalajcym zapisywa wszelki informacje dzienne. MySQL jest bardzo tolerancyjny i zakada, e to aplikacja, a nie baza danych, ma sprawdza poprawno tych danych. MySQL sprawdza jedynie, czy miesic nie wykracza poza zakres 0 12 i czy dzie nie wykracza poza zakres 0 31. Wobec tego z punktu widzenia MySQL 31 lutego 2001 roku jest poprawn dat. Bardziej przydatn wartoci jest data 0 lutego 2001 roku; cyfra zero moe zastpowa t cz daty, ktrej dokadnie nie znamy. MySQL 5 jest jednak ju baz danych nieco bardziej restrykcyjn co do wartoci, jakie mona zapisywa w polach datowych. Wprawdzie MySQL dopuszcza do du swobod formatw wejciowych dat, to naley stara si w aplikacjach daty formatowa zgodnie z formatem wewntrznym MySQL w celu uniknicia nieporozumie. MySQL zawsze zakada, e rok jest pierwszym elementem po lewej stronie daty. Jeli w operacji SQL podana zostanie nieprawidowa warto daty, MySQL wstawi w jej miejsce zero. MySQL w kontekcie liczb cakowitych automatycznie konwertuje daty i czas na liczby cakowite.

DATE
DATE

Format
YYYY-MM-DD (2001-01-01)

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

35

Opis Data kalendarza gregoriaskiego z zakresu od 1 stycznia 1000 roku ('1000-01-01') do 31 grudnia 9999 roku ('9999-12-31').

DATETIME
DATETIME

Format
YYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 8 bajtw Opis Zapisuje czas z zakresu od 00:00:00 1 stycznia 1000 roku ('100001-01 00:00:00') do 23:59:59 31 grudnia 9999 ('9999-12-31 23:59:59') wedug kalendarza gregoriaskiego.

TIME
TIME

Format
hh:mm:ss (06:00:00)

Rozmiar w pamici 3 bajty Opis Zapisuje czas od pnocy ('00:00:00') do sekundy przed pnoc ('23:59:59').
36 | MySQL. Leksykon kieszonkowy

TIMESTAMP
TIMESTAMP[(rozmiar_wywietlania)]

Format
YYYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 4 bajty Opis Zapis chwili z dokadnoci do sekundy od pnocy 1 stycznia 1970 roku do minuty przed pnoc 31 grudnia 2037 roku. Podstawowym zastosowaniem tego typu jest rejestracja modyfikacji tabel. Przy wstawianiu do takiej kolumny wartoci NULL wstawiane s aktualna data i czas. W przypadku modyfikowania jakiejkolwiek wartoci w wierszu z kolumn TIMESTAMP pierwsza kolumna tego typu zostanie zaktualizowana biec dat i czasem. Format danych TIMESTAMP znany z wczeniejszych wersji MySQL, do 4.1 wcznie, w wersji 5.1 nie jest ju obsugiwany.

YEAR
YEAR[(rozmiar)]

Format
YYYY (2001)

Rozmiar w pamici 1 bajt

Rozdzia 3. Typy danych

37

Opis Pozwala zapisa rok z kalendarza gregoriaskiego. Parametr rozmiar umoliwia zapisywanie roku dwu- lub czterocyfrowo. Zakres YEAR(4) rozciga si od 1900 do 2155, dla YEAR(2) od 1970 do 2069. Domylnie przyjmowane jest YEAR(4).

Typy zoone
Zoone typy danych MySQL, ENUM i SET, s po prostu specjalnymi przypadkami typw acuchowych. Opisujemy je osobno, gdy s bardziej zoone pojciowo i stanowi wprowadzenie do typw danych SQL3, ktre by moe MySQL bdzie obsugiwa w przyszoci.

ENUM
ENUM(warto1, warto2, ...)

Rozmiar w pamici 1 255 elementw: 1 bajt 255 65 535 elementw: 2 bajty Opis Typ danych ENUM pozwala zapisywa jeden z wielu zdefiniowanych wczeniej acuchw. Przy tworzeniu kolumny typu ENUM podaje si list dopuszczalnych jej wartoci. Dane mog by do tej kolumny wstawiane i aktualizowane jedynie z tej listy; kada prba wstawienia wartoci spoza niej powoduje wstawienie pustego acucha.

38

MySQL. Leksykon kieszonkowy

Do listy dopuszczalnych wartoci mona si odwoywa przez indeks, przy czym pierwszy element otrzymuje numer 0. Na przykad:
SELECT COLID FROM TBL WHERE COLENUM = 0;

Jeli COLID jest kolumn z kluczem gwnym, a COLENUM kolumn typu ENUM, taka instrukcja SQL spowoduje pobranie kluczy gwnych wszystkich wierszy, dla ktrych COLENUM jest pierwsz wartoci z listy. Analogicznie, sortowanie wzgldem kolumn ENUM powoduje sortowanie wedug indeksu, nie acucha. Najwiksza moliwa liczba elementw kolumny ENUM to 65 535.

SET
SET(warto1, warto2, ...)

Rozmiar w pamici 1 8 elementw: 1 bajt 9 16 elementw: 2 bajty 17 24 elementy: 3 bajty 25 32 elementy: 4 bajty 33 64 elementy: 8 bajtw Opis Lista wartoci wybieranych z okrelonego wczeniej zbioru. Pole moe zawiera dowoln liczb acuchw wskazanych w instrukcji SET, szczeglnie moe nie zawiera adnej takiej wartoci. SET jest podobny do ENUM, ale kade pole moe zawiera wicej ni jedn z podanych wartoci. Dane typu SET nie s jednak zapisywane za pomoc indeksw, ale w zoonej mapie bitowej. Jeli dany jest zbir SET, zawierajcy elementy: Mandarynka, Pomidor,
Rozdzia 3. Typy danych | 39

Gruszka i Banan, kady z tych elementw jest reprezentowany jako

wczony bit w bajcie, jak to pokazano w tabeli 3.1.


Tabela 3.1. Reprezentacja zbioru elementw w MySQL
Element
Mandarynka Pomidor Gruszka Banan

Warto dziesitna
1 2 4 8

Zapis bitowy
0001 0010 0100 1000

W powyszym przykadzie zapisanie jednoczenie wartoci Mandarynka i Gruszka wymaga uycia wartoci 5 (bitowo 0101). W kolumnie SET mona zapisa najwyej 64 wartoci. Wprawdzie t sam warto mona w jednym wyraeniu SQL wpisa wielokrotnie, ale w bazie danych warto ta zostanie zapisana raz.

40

MySQL. Leksykon kieszonkowy

4. SQL .............................................................................................. 41
Rozrnianie wielkoci liter Literay Identyfikatory Komentarze Instrukcje Zasady dotyczce transakcji 41 42 43 45 46 106

5. Operatory .................................................................................. 108


Priorytety operatorw Operatory arytmetyczne Operatory porwnania Operatory logiczne 108 109 109 111

6. Funkcje .......................................................................................113
Funkcje agregujce Funkcje oglnego przeznaczenia 113 115

7. Rodzaje tabel ............................................................................ 137 8. Procedury i funkcje skadowane .............................................. 138


Parametry Logika Kursory Obsuga zdarze i warunki 138 139 143 144

9. Trygery ...................................................................................... 146 Skorowidz ................................................................................. 147

MySQL. Leksykon kieszonkowy

Rozdzia 3. Typy danych


We wszystkich typach danych nawiasami kwadratowymi ([]) oznaczane s fragmenty opcjonalne. Poniszy przykad pokazuje sposb prezentacji typu BIGINT, opisanego dalej w tym rozdziale:
BIGINT[(wielko_pokazywana)]

Oznacza to, e sowo BIGINT moe wystpi samodzielnie lub z pokazywan wartoci. Uycie kursywy wskazuje, e nie naley wpisywa sowa wielko_pokazywana, ale poda wasn warto. Oto przykady uycia:
BIGINT BIGINT(20)

Poza typem BIGINT take wiele innych typw danych MySQL uwzgldnia deklaracj rozmiaru wywietlania. Jeli nie powiedziano inaczej, musi to by liczba od 1 do 255. W wersjach MySQL starszych ni wersja 5, baza danych w niektrych przypadkach zmieniaa podany typ kolumny, nie informujc o tym uytkownika. Obecnie takie podmiany nie maj ju miejsca.
VARCHAR -> CHAR

Jeli podana kolumna VARCHAR ma rozmiar mniejszy od czterech znakw, jest przeksztacana w kolumn CHAR.
CHAR -> VARCHAR

Jeli tabela zawiera co najmniej jedn kolumn o zmiennej dugoci, wszystkie kolumny typu CHAR dusze ni trzy znaki s zamieniane na VARCHAR.

Rozmiar wywietlania TIMESTAMP Rozmiar wywietlania pl TIMESTAMP musi by zawsze wielkoci parzyst od 2 do 14. Rozmiar rwny 0 lub wikszy od 14 powoduje przyjcie 14. Wszelkie liczby nieparzyste s zamieniane na nastpn liczb parzyst.

22

MySQL. Leksykon kieszonkowy

Liczby
MySQL obsuguje liczbowe typy danych zgodne z ANSI SQL 2. Typy te dzielimy na cakowitoliczbowe, dziesitne i zmiennoprzecinkowe. W ramach tych grup dzielimy typy dalej, wedug zajmowanej przez nie pamici. W przypadku typw liczbowych mona poda rozmiar wywietlania, ktry wpywa na sposb pokazywania przez MySQL wynikw. Rozmiar ten nie ma adnego zwizku z wielkoci pamici zajmowanej przez dany typ. Dodatkowo w przypadku liczb zmiennoprzecinkowych i dziesitnych mona poda liczb cyfr znajdujcych si za kropk dziesitn. Wtedy liczba cyfr powinna nalee do zakresu od 0 do 30, czyli by co najmniej o dwa mniejsza od rozmiaru wywietlania. Jeli warunek ten nie zostanie dotrzymany, MySQL automatycznie zmieni liczb cyfr tak, aby bya mniejsza o dwa od rozmiaru wywietlania. Przykadowo, MySQL automatycznie zmieni FLOAT(6,5) na FLOAT(7,5). Prba wstawienia do kolumny wartoci przekraczajcej dopuszczalny zakres tej kolumny powoduje obcicie tej wartoci do najmniejszej (dla liczb ujemnych) lub najwikszej (dla liczb dodatnich) wartoci dla danej kolumny dopuszczalnej. Jeli takie obcicie jest robione podczas wykonywania instrukcji ALTER TABLE, LOAD DATA INFILE, UPDATE lub wielowierszowej instrukcji INSERT, MySQL pokazuje ostrzeenie. Wyjtkiem jest korzystanie z MySQL w wersji 5 lub nowszej w trybie penej zgodnoci ze standardem SQL, gdy wtedy w przypadku instrukcji INSERT i UPDATE zgaszany jest bd. Atrybutu AUTO_INCREMENT mona uy do co najwyej jednej kolumny cakowitoliczbowej w tabeli. Atrybut UNSIGNED moe by czony z dowolnym liczbowym typem danych. Uycie tego atrybutu powoduje, e do kolumny nie mona wpisywa liczb ujemnych. Atrybut ZEROFILL nakazuje wypenienie kolumny od lewej

Rozdzia 3. Typy danych

23

strony zerami podczas wywietlania jej wartoci. O liczbie tych zer decyduje szeroko wywietlania danej kolumny.

BIGINT
BIGINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Najwikszy z typw cakowitoliczbowych, pozwalajcy zapisywa liczby od 9 223 372 036 854 775 808 do 9 223 372 036 854 775 807 (jeli bez znaku, to od 0 do 18 446 744 073 709 551 615). Z uwagi na sposb realizacji dziaa na liczbach tego typu, naley unika operacji na liczbach BIGINT bez znaku wikszych ni 9 223 372 036 854 775 807, gdy moe to zaowocowa nieprawidowymi wynikami.

BIT
BIT[(bity)]

Rozmiar w pamici w przyblieniu bity bitw+7 lub 8 bitw Opis W wersjach MySQL 5.0.3 i starszych, pola typu BIT dziaay tak samo, jak TINYINT(1). Omawiany typ pola pozwala przechowywa ustalon liczb bitw. Jeli podana zostanie wielko bitw mniejsza od dozwolonej, MySQL wypeni zerami bity od lewej strony.
24 | MySQL. Leksykon kieszonkowy

DEC
Synonim typu DECIMAL.

DECIMAL
DECIMAL[(dokadno, [skala])] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici rnie Opis Pozwala zapisywa liczby zmiennoprzecinkowe w sytuacjach, kiedy istotna jest dokadno na przykad przy operowaniu kwotami pienidzy. Stosujc typ DECIMAL, trzeba poda dwa jego parametry, dokadno i skal. Dokadno to liczba znaczcych cyfr, za skala to liczba znaczcych cyfr po kropce dziesitnej. Przykadowo, kolumna SALDO typu DECIMAL(9,2) pozwoliaby zapisywa liczby dziewiciocyfrowe, przy czym na prawo od kropki dziesitnej mogyby by dwie cyfry. Zakres dopuszczalnych liczb to w takiej sytuacji od 9 999 999,99 do 9 999 999,99. Jeli podana zostanie liczba zawierajca wicej cyfr po przecinku, ni przewiduje to definicja, liczba zostanie zaokrglona. Wartoci spoza zakresu DECIMAL s obcinane tak, aby si w nim zmieciy. W wersjach MySQL starszych ni 5, wartoci DECIMAL nie byy zapisywane jako liczby zmiennoprzecinkowe, lecz jako acuchy znakw. Na kad cyfr zuywany by jeden znak w przypadku skali wikszej od 0, poza tym jeden dodatkowy znak zuywany jest w przypadku liczb ujemnych. Jeli skala wynosi 0, liczby nie maj czci uamkowej. SQL zgodnie z norm ANSI pozwala pomija dokadno i (lub) skal. Jeli brak dokadnoci, przyjmowane jest ustawienie

Rozdzia 3. Typy danych

25

domylne charakterystyczne dla implementacji. Jeli brak skali, przyjmowane jest zero. W MySQL domylna warto dokadnoci to 10.

DOUBLE
DOUBLE[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Liczba zmiennoprzecinkowa podwjnej precyzji. Ten typ danych pozwala zapisywa due wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 1,7976931348623157E+308 do 2,2250738585072014E308, 0 oraz wartoci dodatnie od 2,2250738585072014E308 do 1,7976931348623157E+308.

DOUBLE PRECISION
Synonim DOUBLE.

FLOAT
FLOAT[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 4 bajty

26

MySQL. Leksykon kieszonkowy

Opis Liczba zmiennoprzecinkowa pojedynczej precyzji. Ten typ danych pozwala zapisywa mae wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 3,402823466E+38 do 1,175494351E38, 0 oraz wartoci dodatnie od 1,175494351E38 do 3,402823466E+38.

INT
INT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 4 bajty Opis Podstawowy rodzaj liczb cakowitych od 2 147 483 648 do 2 147 483 647 (lub od 0 do 4 294 967 295 w przypadku liczb bez znaku).

INTEGER
Synonim INT.

MEDIUMINT
MEDIUMINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

27

Opis Liczby cakowite od 8 388 608 do 8 388 607 (lub od 0 do 16 777 215 w przypadku liczb bez znaku).

NUMERIC
Synonim DECIMAL.

REAL
Synonim DOUBLE.

SMALLINT
SMALLINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 2 bajty Opis Liczby cakowite z zakresu od 32 768 do 32 767 (od 0 do 65 535 w przypadku liczb bez znaku).

TINYINT
TINYINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 1 bajt

28

MySQL. Leksykon kieszonkowy

Opis Liczby cakowite od 128 do 127 (od 0 do 255 w przypadku liczb bez znaku).

acuchy
MySQL obsuguje dwie kategorie acuchw: acuchy tekstowe oraz acuchy binarne. Obie kategorie maj swoje specyficzne typy do obsugi rnych wielkoci pl i rnych sposobw porwnywania wartoci. W zalenoci od sposobu porwnywania, mona uwzgldnia bd nie wielko liter, mona te porwnywa dane binarnie (bajt po bajcie). Kiedy nazwa typu tekstowego (jak CHAR, VARCHAR i inne) zostanie oznaczona sowem kluczowym BINARY, kolumna pozostaje kolumn tekstow, ale dane s porwnywane ze sob binarnie.

BINARY
BINARY(rozmiar)

Rozmiar wedug rozmiar, w zakresie od 0 do 255 Rozmiar w pamici


rozmiar bajtw

Opis Typ danych BINARY to binarny odpowiednik typu CHAR. Podstawowa rnica midzy tymi dwoma typami polega na tym, e pole typu BINARY zawiera dane binarne, wielko tych danych jest mierzona nie w znakach, lecz w bajtach. acuchy zawierajce

Rozdzia 3. Typy danych

29

mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie znakami 0x00 (wersja MySQL 5.0.5 i nowsze) lub spacjami (wersje starsze).

BLOB
Binarny odpowiednik typu TEXT.

CHAR
CHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar wedug rozmiar, do 255 Rozmiar w pamici zaleny od rozmiaru i od uytego zestawu znakw Opis Pole tekstowe ustalonej dugoci. acuchy zawierajce mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie spacjami. Podczas pobierania danych z bazy te dodatkowe spacje s usuwane. Pola CHAR(0) zostay zachowane w celu zapewnienia zgodnoci ze starymi systemami, w ktrych w kolumnach nie s zapisywane adne wartoci.

CHARACTER
Synonim CHAR.

30

MySQL. Leksykon kieszonkowy

CHARACTER VARYING
Synonim VARCHAR.

LONGBLOB
Binarny odpowiednik LONGTEXT.

LONGTEXT
LONGTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 4 294 295 Rozmiar w pamici Dugo wartoci+4 bajty Opis Typ pozwala zapisywa due wartoci tekstowe. Teoretyczne ograniczenie rozmiaru tekstu to ponad 4 GB, ale praktycznymi ograniczeniami s ograniczenia protokou komunikacyjnego MySQL oraz ilo pamici przeznaczonej na komunikacj na serwerze i na stacji klienckiej.

MEDIUMBLOB
Binarna posta MEDIUMTEXT.

MEDIUMTEXT
MEDIUMTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozdzia 3. Typy danych

31

Rozmiar 0 do 16 777 215 Rozmiar w pamici Dugo wartoci+3 bajty Opis Typ pozwala zapisywa redniej wielkoci wartoci tekstowe.

NCHAR
Synonim CHAR.

NATIONAL CHAR
Synonim CHAR.

NATIONAL CHARACTER
Synonim CHAR.

NATIONAL VARCHAR
Synonim VARCHAR.

TEXT
TEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 65 535

32

MySQL. Leksykon kieszonkowy

Rozmiar w pamici Dugo wartoci tekstowej+2 bajty Opis Typ pozwala zapisywa typowe wartoci tekstowe.

TINYBLOB
Binarny odpowiednik TINYTEXT.

TINYTEXT
TINYTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 255 Rozmiar w pamici Dugo wartoci tekstowej+1 bajt Opis Pozwala zapisywa krtkie dane tekstowe.

VARBINARY
VARBINARY(rozmiar)

Rozmiar Wedug parametru rozmiar

Rozdzia 3. Typy danych

33

Rozmiar w pamici
rozmiar bajtw

Opis Jest to binarna odmiana typu VARCHAR. Podstawowa rnica polega na tym, e zapisywane s dane binarne, a rozmiar pola mierzony jest w bajtach, nie w znakach. Wielkoci typu VARBINARY, w przeciwiestwie do wartoci typu BINARY, nie s niczym dopeniane.

VARCHAR
VARCHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar Wskazana przez rozmiar warto z zakresu do 65 532 (od 1 do 255 w wersjach wczeniejszych ni MySQL 5); rozmiar wskazuje rzeczywist wielko kolumny i jest ograniczony przez dopuszczaln wielko wiersza w znakach; to, ile miejsca faktycznie bdzie potrzebne, zaley zatem od zestawu znakw uytego w danej kolumnie Rozmiar w pamici Zaley od liczby znakw wskazanych jako rozmiar oraz od liczby bajtw potrzebnych do zapisu poszczeglnych znakw w uytym mechanizmie kodowania znakw Opis Pozwala zapisywa wartoci tekstowe zmiennej dugoci. W wersjach poprzedzajcych MySQL 5 z wartoci VARCHAR usuwane s spacje kocowe; wersja MySQL 5 i nowsze standardowo nie usuwaj spacji kocowych.

34

MySQL. Leksykon kieszonkowy

Daty
Typy datowe MySQL s wyjtkowo elastycznym narzdziem, pozwalajcym zapisywa wszelki informacje dzienne. MySQL jest bardzo tolerancyjny i zakada, e to aplikacja, a nie baza danych, ma sprawdza poprawno tych danych. MySQL sprawdza jedynie, czy miesic nie wykracza poza zakres 0 12 i czy dzie nie wykracza poza zakres 0 31. Wobec tego z punktu widzenia MySQL 31 lutego 2001 roku jest poprawn dat. Bardziej przydatn wartoci jest data 0 lutego 2001 roku; cyfra zero moe zastpowa t cz daty, ktrej dokadnie nie znamy. MySQL 5 jest jednak ju baz danych nieco bardziej restrykcyjn co do wartoci, jakie mona zapisywa w polach datowych. Wprawdzie MySQL dopuszcza do du swobod formatw wejciowych dat, to naley stara si w aplikacjach daty formatowa zgodnie z formatem wewntrznym MySQL w celu uniknicia nieporozumie. MySQL zawsze zakada, e rok jest pierwszym elementem po lewej stronie daty. Jeli w operacji SQL podana zostanie nieprawidowa warto daty, MySQL wstawi w jej miejsce zero. MySQL w kontekcie liczb cakowitych automatycznie konwertuje daty i czas na liczby cakowite.

DATE
DATE

Format
YYYY-MM-DD (2001-01-01)

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

35

Opis Data kalendarza gregoriaskiego z zakresu od 1 stycznia 1000 roku ('1000-01-01') do 31 grudnia 9999 roku ('9999-12-31').

DATETIME
DATETIME

Format
YYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 8 bajtw Opis Zapisuje czas z zakresu od 00:00:00 1 stycznia 1000 roku ('100001-01 00:00:00') do 23:59:59 31 grudnia 9999 ('9999-12-31 23:59:59') wedug kalendarza gregoriaskiego.

TIME
TIME

Format
hh:mm:ss (06:00:00)

Rozmiar w pamici 3 bajty Opis Zapisuje czas od pnocy ('00:00:00') do sekundy przed pnoc ('23:59:59').
36 | MySQL. Leksykon kieszonkowy

TIMESTAMP
TIMESTAMP[(rozmiar_wywietlania)]

Format
YYYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 4 bajty Opis Zapis chwili z dokadnoci do sekundy od pnocy 1 stycznia 1970 roku do minuty przed pnoc 31 grudnia 2037 roku. Podstawowym zastosowaniem tego typu jest rejestracja modyfikacji tabel. Przy wstawianiu do takiej kolumny wartoci NULL wstawiane s aktualna data i czas. W przypadku modyfikowania jakiejkolwiek wartoci w wierszu z kolumn TIMESTAMP pierwsza kolumna tego typu zostanie zaktualizowana biec dat i czasem. Format danych TIMESTAMP znany z wczeniejszych wersji MySQL, do 4.1 wcznie, w wersji 5.1 nie jest ju obsugiwany.

YEAR
YEAR[(rozmiar)]

Format
YYYY (2001)

Rozmiar w pamici 1 bajt

Rozdzia 3. Typy danych

37

Opis Pozwala zapisa rok z kalendarza gregoriaskiego. Parametr rozmiar umoliwia zapisywanie roku dwu- lub czterocyfrowo. Zakres YEAR(4) rozciga si od 1900 do 2155, dla YEAR(2) od 1970 do 2069. Domylnie przyjmowane jest YEAR(4).

Typy zoone
Zoone typy danych MySQL, ENUM i SET, s po prostu specjalnymi przypadkami typw acuchowych. Opisujemy je osobno, gdy s bardziej zoone pojciowo i stanowi wprowadzenie do typw danych SQL3, ktre by moe MySQL bdzie obsugiwa w przyszoci.

ENUM
ENUM(warto1, warto2, ...)

Rozmiar w pamici 1 255 elementw: 1 bajt 255 65 535 elementw: 2 bajty Opis Typ danych ENUM pozwala zapisywa jeden z wielu zdefiniowanych wczeniej acuchw. Przy tworzeniu kolumny typu ENUM podaje si list dopuszczalnych jej wartoci. Dane mog by do tej kolumny wstawiane i aktualizowane jedynie z tej listy; kada prba wstawienia wartoci spoza niej powoduje wstawienie pustego acucha.

38

MySQL. Leksykon kieszonkowy

Do listy dopuszczalnych wartoci mona si odwoywa przez indeks, przy czym pierwszy element otrzymuje numer 0. Na przykad:
SELECT COLID FROM TBL WHERE COLENUM = 0;

Jeli COLID jest kolumn z kluczem gwnym, a COLENUM kolumn typu ENUM, taka instrukcja SQL spowoduje pobranie kluczy gwnych wszystkich wierszy, dla ktrych COLENUM jest pierwsz wartoci z listy. Analogicznie, sortowanie wzgldem kolumn ENUM powoduje sortowanie wedug indeksu, nie acucha. Najwiksza moliwa liczba elementw kolumny ENUM to 65 535.

SET
SET(warto1, warto2, ...)

Rozmiar w pamici 1 8 elementw: 1 bajt 9 16 elementw: 2 bajty 17 24 elementy: 3 bajty 25 32 elementy: 4 bajty 33 64 elementy: 8 bajtw Opis Lista wartoci wybieranych z okrelonego wczeniej zbioru. Pole moe zawiera dowoln liczb acuchw wskazanych w instrukcji SET, szczeglnie moe nie zawiera adnej takiej wartoci. SET jest podobny do ENUM, ale kade pole moe zawiera wicej ni jedn z podanych wartoci. Dane typu SET nie s jednak zapisywane za pomoc indeksw, ale w zoonej mapie bitowej. Jeli dany jest zbir SET, zawierajcy elementy: Mandarynka, Pomidor,
Rozdzia 3. Typy danych | 39

Gruszka i Banan, kady z tych elementw jest reprezentowany jako

wczony bit w bajcie, jak to pokazano w tabeli 3.1.


Tabela 3.1. Reprezentacja zbioru elementw w MySQL
Element
Mandarynka Pomidor Gruszka Banan

Warto dziesitna
1 2 4 8

Zapis bitowy
0001 0010 0100 1000

W powyszym przykadzie zapisanie jednoczenie wartoci Mandarynka i Gruszka wymaga uycia wartoci 5 (bitowo 0101). W kolumnie SET mona zapisa najwyej 64 wartoci. Wprawdzie t sam warto mona w jednym wyraeniu SQL wpisa wielokrotnie, ale w bazie danych warto ta zostanie zapisana raz.

40

MySQL. Leksykon kieszonkowy

4. SQL .............................................................................................. 41
Rozrnianie wielkoci liter Literay Identyfikatory Komentarze Instrukcje Zasady dotyczce transakcji 41 42 43 45 46 106

5. Operatory .................................................................................. 108


Priorytety operatorw Operatory arytmetyczne Operatory porwnania Operatory logiczne 108 109 109 111

6. Funkcje .......................................................................................113
Funkcje agregujce Funkcje oglnego przeznaczenia 113 115

7. Rodzaje tabel ............................................................................ 137 8. Procedury i funkcje skadowane .............................................. 138


Parametry Logika Kursory Obsuga zdarze i warunki 138 139 143 144

9. Trygery ...................................................................................... 146 Skorowidz ................................................................................. 147

MySQL. Leksykon kieszonkowy

Rozdzia 3. Typy danych


We wszystkich typach danych nawiasami kwadratowymi ([]) oznaczane s fragmenty opcjonalne. Poniszy przykad pokazuje sposb prezentacji typu BIGINT, opisanego dalej w tym rozdziale:
BIGINT[(wielko_pokazywana)]

Oznacza to, e sowo BIGINT moe wystpi samodzielnie lub z pokazywan wartoci. Uycie kursywy wskazuje, e nie naley wpisywa sowa wielko_pokazywana, ale poda wasn warto. Oto przykady uycia:
BIGINT BIGINT(20)

Poza typem BIGINT take wiele innych typw danych MySQL uwzgldnia deklaracj rozmiaru wywietlania. Jeli nie powiedziano inaczej, musi to by liczba od 1 do 255. W wersjach MySQL starszych ni wersja 5, baza danych w niektrych przypadkach zmieniaa podany typ kolumny, nie informujc o tym uytkownika. Obecnie takie podmiany nie maj ju miejsca.
VARCHAR -> CHAR

Jeli podana kolumna VARCHAR ma rozmiar mniejszy od czterech znakw, jest przeksztacana w kolumn CHAR.
CHAR -> VARCHAR

Jeli tabela zawiera co najmniej jedn kolumn o zmiennej dugoci, wszystkie kolumny typu CHAR dusze ni trzy znaki s zamieniane na VARCHAR.

Rozmiar wywietlania TIMESTAMP Rozmiar wywietlania pl TIMESTAMP musi by zawsze wielkoci parzyst od 2 do 14. Rozmiar rwny 0 lub wikszy od 14 powoduje przyjcie 14. Wszelkie liczby nieparzyste s zamieniane na nastpn liczb parzyst.

22

MySQL. Leksykon kieszonkowy

Liczby
MySQL obsuguje liczbowe typy danych zgodne z ANSI SQL 2. Typy te dzielimy na cakowitoliczbowe, dziesitne i zmiennoprzecinkowe. W ramach tych grup dzielimy typy dalej, wedug zajmowanej przez nie pamici. W przypadku typw liczbowych mona poda rozmiar wywietlania, ktry wpywa na sposb pokazywania przez MySQL wynikw. Rozmiar ten nie ma adnego zwizku z wielkoci pamici zajmowanej przez dany typ. Dodatkowo w przypadku liczb zmiennoprzecinkowych i dziesitnych mona poda liczb cyfr znajdujcych si za kropk dziesitn. Wtedy liczba cyfr powinna nalee do zakresu od 0 do 30, czyli by co najmniej o dwa mniejsza od rozmiaru wywietlania. Jeli warunek ten nie zostanie dotrzymany, MySQL automatycznie zmieni liczb cyfr tak, aby bya mniejsza o dwa od rozmiaru wywietlania. Przykadowo, MySQL automatycznie zmieni FLOAT(6,5) na FLOAT(7,5). Prba wstawienia do kolumny wartoci przekraczajcej dopuszczalny zakres tej kolumny powoduje obcicie tej wartoci do najmniejszej (dla liczb ujemnych) lub najwikszej (dla liczb dodatnich) wartoci dla danej kolumny dopuszczalnej. Jeli takie obcicie jest robione podczas wykonywania instrukcji ALTER TABLE, LOAD DATA INFILE, UPDATE lub wielowierszowej instrukcji INSERT, MySQL pokazuje ostrzeenie. Wyjtkiem jest korzystanie z MySQL w wersji 5 lub nowszej w trybie penej zgodnoci ze standardem SQL, gdy wtedy w przypadku instrukcji INSERT i UPDATE zgaszany jest bd. Atrybutu AUTO_INCREMENT mona uy do co najwyej jednej kolumny cakowitoliczbowej w tabeli. Atrybut UNSIGNED moe by czony z dowolnym liczbowym typem danych. Uycie tego atrybutu powoduje, e do kolumny nie mona wpisywa liczb ujemnych. Atrybut ZEROFILL nakazuje wypenienie kolumny od lewej

Rozdzia 3. Typy danych

23

strony zerami podczas wywietlania jej wartoci. O liczbie tych zer decyduje szeroko wywietlania danej kolumny.

BIGINT
BIGINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Najwikszy z typw cakowitoliczbowych, pozwalajcy zapisywa liczby od 9 223 372 036 854 775 808 do 9 223 372 036 854 775 807 (jeli bez znaku, to od 0 do 18 446 744 073 709 551 615). Z uwagi na sposb realizacji dziaa na liczbach tego typu, naley unika operacji na liczbach BIGINT bez znaku wikszych ni 9 223 372 036 854 775 807, gdy moe to zaowocowa nieprawidowymi wynikami.

BIT
BIT[(bity)]

Rozmiar w pamici w przyblieniu bity bitw+7 lub 8 bitw Opis W wersjach MySQL 5.0.3 i starszych, pola typu BIT dziaay tak samo, jak TINYINT(1). Omawiany typ pola pozwala przechowywa ustalon liczb bitw. Jeli podana zostanie wielko bitw mniejsza od dozwolonej, MySQL wypeni zerami bity od lewej strony.
24 | MySQL. Leksykon kieszonkowy

DEC
Synonim typu DECIMAL.

DECIMAL
DECIMAL[(dokadno, [skala])] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici rnie Opis Pozwala zapisywa liczby zmiennoprzecinkowe w sytuacjach, kiedy istotna jest dokadno na przykad przy operowaniu kwotami pienidzy. Stosujc typ DECIMAL, trzeba poda dwa jego parametry, dokadno i skal. Dokadno to liczba znaczcych cyfr, za skala to liczba znaczcych cyfr po kropce dziesitnej. Przykadowo, kolumna SALDO typu DECIMAL(9,2) pozwoliaby zapisywa liczby dziewiciocyfrowe, przy czym na prawo od kropki dziesitnej mogyby by dwie cyfry. Zakres dopuszczalnych liczb to w takiej sytuacji od 9 999 999,99 do 9 999 999,99. Jeli podana zostanie liczba zawierajca wicej cyfr po przecinku, ni przewiduje to definicja, liczba zostanie zaokrglona. Wartoci spoza zakresu DECIMAL s obcinane tak, aby si w nim zmieciy. W wersjach MySQL starszych ni 5, wartoci DECIMAL nie byy zapisywane jako liczby zmiennoprzecinkowe, lecz jako acuchy znakw. Na kad cyfr zuywany by jeden znak w przypadku skali wikszej od 0, poza tym jeden dodatkowy znak zuywany jest w przypadku liczb ujemnych. Jeli skala wynosi 0, liczby nie maj czci uamkowej. SQL zgodnie z norm ANSI pozwala pomija dokadno i (lub) skal. Jeli brak dokadnoci, przyjmowane jest ustawienie

Rozdzia 3. Typy danych

25

domylne charakterystyczne dla implementacji. Jeli brak skali, przyjmowane jest zero. W MySQL domylna warto dokadnoci to 10.

DOUBLE
DOUBLE[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Liczba zmiennoprzecinkowa podwjnej precyzji. Ten typ danych pozwala zapisywa due wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 1,7976931348623157E+308 do 2,2250738585072014E308, 0 oraz wartoci dodatnie od 2,2250738585072014E308 do 1,7976931348623157E+308.

DOUBLE PRECISION
Synonim DOUBLE.

FLOAT
FLOAT[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 4 bajty

26

MySQL. Leksykon kieszonkowy

Opis Liczba zmiennoprzecinkowa pojedynczej precyzji. Ten typ danych pozwala zapisywa mae wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 3,402823466E+38 do 1,175494351E38, 0 oraz wartoci dodatnie od 1,175494351E38 do 3,402823466E+38.

INT
INT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 4 bajty Opis Podstawowy rodzaj liczb cakowitych od 2 147 483 648 do 2 147 483 647 (lub od 0 do 4 294 967 295 w przypadku liczb bez znaku).

INTEGER
Synonim INT.

MEDIUMINT
MEDIUMINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

27

Opis Liczby cakowite od 8 388 608 do 8 388 607 (lub od 0 do 16 777 215 w przypadku liczb bez znaku).

NUMERIC
Synonim DECIMAL.

REAL
Synonim DOUBLE.

SMALLINT
SMALLINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 2 bajty Opis Liczby cakowite z zakresu od 32 768 do 32 767 (od 0 do 65 535 w przypadku liczb bez znaku).

TINYINT
TINYINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 1 bajt

28

MySQL. Leksykon kieszonkowy

Opis Liczby cakowite od 128 do 127 (od 0 do 255 w przypadku liczb bez znaku).

acuchy
MySQL obsuguje dwie kategorie acuchw: acuchy tekstowe oraz acuchy binarne. Obie kategorie maj swoje specyficzne typy do obsugi rnych wielkoci pl i rnych sposobw porwnywania wartoci. W zalenoci od sposobu porwnywania, mona uwzgldnia bd nie wielko liter, mona te porwnywa dane binarnie (bajt po bajcie). Kiedy nazwa typu tekstowego (jak CHAR, VARCHAR i inne) zostanie oznaczona sowem kluczowym BINARY, kolumna pozostaje kolumn tekstow, ale dane s porwnywane ze sob binarnie.

BINARY
BINARY(rozmiar)

Rozmiar wedug rozmiar, w zakresie od 0 do 255 Rozmiar w pamici


rozmiar bajtw

Opis Typ danych BINARY to binarny odpowiednik typu CHAR. Podstawowa rnica midzy tymi dwoma typami polega na tym, e pole typu BINARY zawiera dane binarne, wielko tych danych jest mierzona nie w znakach, lecz w bajtach. acuchy zawierajce

Rozdzia 3. Typy danych

29

mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie znakami 0x00 (wersja MySQL 5.0.5 i nowsze) lub spacjami (wersje starsze).

BLOB
Binarny odpowiednik typu TEXT.

CHAR
CHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar wedug rozmiar, do 255 Rozmiar w pamici zaleny od rozmiaru i od uytego zestawu znakw Opis Pole tekstowe ustalonej dugoci. acuchy zawierajce mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie spacjami. Podczas pobierania danych z bazy te dodatkowe spacje s usuwane. Pola CHAR(0) zostay zachowane w celu zapewnienia zgodnoci ze starymi systemami, w ktrych w kolumnach nie s zapisywane adne wartoci.

CHARACTER
Synonim CHAR.

30

MySQL. Leksykon kieszonkowy

CHARACTER VARYING
Synonim VARCHAR.

LONGBLOB
Binarny odpowiednik LONGTEXT.

LONGTEXT
LONGTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 4 294 295 Rozmiar w pamici Dugo wartoci+4 bajty Opis Typ pozwala zapisywa due wartoci tekstowe. Teoretyczne ograniczenie rozmiaru tekstu to ponad 4 GB, ale praktycznymi ograniczeniami s ograniczenia protokou komunikacyjnego MySQL oraz ilo pamici przeznaczonej na komunikacj na serwerze i na stacji klienckiej.

MEDIUMBLOB
Binarna posta MEDIUMTEXT.

MEDIUMTEXT
MEDIUMTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozdzia 3. Typy danych

31

Rozmiar 0 do 16 777 215 Rozmiar w pamici Dugo wartoci+3 bajty Opis Typ pozwala zapisywa redniej wielkoci wartoci tekstowe.

NCHAR
Synonim CHAR.

NATIONAL CHAR
Synonim CHAR.

NATIONAL CHARACTER
Synonim CHAR.

NATIONAL VARCHAR
Synonim VARCHAR.

TEXT
TEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 65 535

32

MySQL. Leksykon kieszonkowy

Rozmiar w pamici Dugo wartoci tekstowej+2 bajty Opis Typ pozwala zapisywa typowe wartoci tekstowe.

TINYBLOB
Binarny odpowiednik TINYTEXT.

TINYTEXT
TINYTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 255 Rozmiar w pamici Dugo wartoci tekstowej+1 bajt Opis Pozwala zapisywa krtkie dane tekstowe.

VARBINARY
VARBINARY(rozmiar)

Rozmiar Wedug parametru rozmiar

Rozdzia 3. Typy danych

33

Rozmiar w pamici
rozmiar bajtw

Opis Jest to binarna odmiana typu VARCHAR. Podstawowa rnica polega na tym, e zapisywane s dane binarne, a rozmiar pola mierzony jest w bajtach, nie w znakach. Wielkoci typu VARBINARY, w przeciwiestwie do wartoci typu BINARY, nie s niczym dopeniane.

VARCHAR
VARCHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar Wskazana przez rozmiar warto z zakresu do 65 532 (od 1 do 255 w wersjach wczeniejszych ni MySQL 5); rozmiar wskazuje rzeczywist wielko kolumny i jest ograniczony przez dopuszczaln wielko wiersza w znakach; to, ile miejsca faktycznie bdzie potrzebne, zaley zatem od zestawu znakw uytego w danej kolumnie Rozmiar w pamici Zaley od liczby znakw wskazanych jako rozmiar oraz od liczby bajtw potrzebnych do zapisu poszczeglnych znakw w uytym mechanizmie kodowania znakw Opis Pozwala zapisywa wartoci tekstowe zmiennej dugoci. W wersjach poprzedzajcych MySQL 5 z wartoci VARCHAR usuwane s spacje kocowe; wersja MySQL 5 i nowsze standardowo nie usuwaj spacji kocowych.

34

MySQL. Leksykon kieszonkowy

Daty
Typy datowe MySQL s wyjtkowo elastycznym narzdziem, pozwalajcym zapisywa wszelki informacje dzienne. MySQL jest bardzo tolerancyjny i zakada, e to aplikacja, a nie baza danych, ma sprawdza poprawno tych danych. MySQL sprawdza jedynie, czy miesic nie wykracza poza zakres 0 12 i czy dzie nie wykracza poza zakres 0 31. Wobec tego z punktu widzenia MySQL 31 lutego 2001 roku jest poprawn dat. Bardziej przydatn wartoci jest data 0 lutego 2001 roku; cyfra zero moe zastpowa t cz daty, ktrej dokadnie nie znamy. MySQL 5 jest jednak ju baz danych nieco bardziej restrykcyjn co do wartoci, jakie mona zapisywa w polach datowych. Wprawdzie MySQL dopuszcza do du swobod formatw wejciowych dat, to naley stara si w aplikacjach daty formatowa zgodnie z formatem wewntrznym MySQL w celu uniknicia nieporozumie. MySQL zawsze zakada, e rok jest pierwszym elementem po lewej stronie daty. Jeli w operacji SQL podana zostanie nieprawidowa warto daty, MySQL wstawi w jej miejsce zero. MySQL w kontekcie liczb cakowitych automatycznie konwertuje daty i czas na liczby cakowite.

DATE
DATE

Format
YYYY-MM-DD (2001-01-01)

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

35

Opis Data kalendarza gregoriaskiego z zakresu od 1 stycznia 1000 roku ('1000-01-01') do 31 grudnia 9999 roku ('9999-12-31').

DATETIME
DATETIME

Format
YYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 8 bajtw Opis Zapisuje czas z zakresu od 00:00:00 1 stycznia 1000 roku ('100001-01 00:00:00') do 23:59:59 31 grudnia 9999 ('9999-12-31 23:59:59') wedug kalendarza gregoriaskiego.

TIME
TIME

Format
hh:mm:ss (06:00:00)

Rozmiar w pamici 3 bajty Opis Zapisuje czas od pnocy ('00:00:00') do sekundy przed pnoc ('23:59:59').
36 | MySQL. Leksykon kieszonkowy

TIMESTAMP
TIMESTAMP[(rozmiar_wywietlania)]

Format
YYYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 4 bajty Opis Zapis chwili z dokadnoci do sekundy od pnocy 1 stycznia 1970 roku do minuty przed pnoc 31 grudnia 2037 roku. Podstawowym zastosowaniem tego typu jest rejestracja modyfikacji tabel. Przy wstawianiu do takiej kolumny wartoci NULL wstawiane s aktualna data i czas. W przypadku modyfikowania jakiejkolwiek wartoci w wierszu z kolumn TIMESTAMP pierwsza kolumna tego typu zostanie zaktualizowana biec dat i czasem. Format danych TIMESTAMP znany z wczeniejszych wersji MySQL, do 4.1 wcznie, w wersji 5.1 nie jest ju obsugiwany.

YEAR
YEAR[(rozmiar)]

Format
YYYY (2001)

Rozmiar w pamici 1 bajt

Rozdzia 3. Typy danych

37

Opis Pozwala zapisa rok z kalendarza gregoriaskiego. Parametr rozmiar umoliwia zapisywanie roku dwu- lub czterocyfrowo. Zakres YEAR(4) rozciga si od 1900 do 2155, dla YEAR(2) od 1970 do 2069. Domylnie przyjmowane jest YEAR(4).

Typy zoone
Zoone typy danych MySQL, ENUM i SET, s po prostu specjalnymi przypadkami typw acuchowych. Opisujemy je osobno, gdy s bardziej zoone pojciowo i stanowi wprowadzenie do typw danych SQL3, ktre by moe MySQL bdzie obsugiwa w przyszoci.

ENUM
ENUM(warto1, warto2, ...)

Rozmiar w pamici 1 255 elementw: 1 bajt 255 65 535 elementw: 2 bajty Opis Typ danych ENUM pozwala zapisywa jeden z wielu zdefiniowanych wczeniej acuchw. Przy tworzeniu kolumny typu ENUM podaje si list dopuszczalnych jej wartoci. Dane mog by do tej kolumny wstawiane i aktualizowane jedynie z tej listy; kada prba wstawienia wartoci spoza niej powoduje wstawienie pustego acucha.

38

MySQL. Leksykon kieszonkowy

Do listy dopuszczalnych wartoci mona si odwoywa przez indeks, przy czym pierwszy element otrzymuje numer 0. Na przykad:
SELECT COLID FROM TBL WHERE COLENUM = 0;

Jeli COLID jest kolumn z kluczem gwnym, a COLENUM kolumn typu ENUM, taka instrukcja SQL spowoduje pobranie kluczy gwnych wszystkich wierszy, dla ktrych COLENUM jest pierwsz wartoci z listy. Analogicznie, sortowanie wzgldem kolumn ENUM powoduje sortowanie wedug indeksu, nie acucha. Najwiksza moliwa liczba elementw kolumny ENUM to 65 535.

SET
SET(warto1, warto2, ...)

Rozmiar w pamici 1 8 elementw: 1 bajt 9 16 elementw: 2 bajty 17 24 elementy: 3 bajty 25 32 elementy: 4 bajty 33 64 elementy: 8 bajtw Opis Lista wartoci wybieranych z okrelonego wczeniej zbioru. Pole moe zawiera dowoln liczb acuchw wskazanych w instrukcji SET, szczeglnie moe nie zawiera adnej takiej wartoci. SET jest podobny do ENUM, ale kade pole moe zawiera wicej ni jedn z podanych wartoci. Dane typu SET nie s jednak zapisywane za pomoc indeksw, ale w zoonej mapie bitowej. Jeli dany jest zbir SET, zawierajcy elementy: Mandarynka, Pomidor,
Rozdzia 3. Typy danych | 39

Gruszka i Banan, kady z tych elementw jest reprezentowany jako

wczony bit w bajcie, jak to pokazano w tabeli 3.1.


Tabela 3.1. Reprezentacja zbioru elementw w MySQL
Element
Mandarynka Pomidor Gruszka Banan

Warto dziesitna
1 2 4 8

Zapis bitowy
0001 0010 0100 1000

W powyszym przykadzie zapisanie jednoczenie wartoci Mandarynka i Gruszka wymaga uycia wartoci 5 (bitowo 0101). W kolumnie SET mona zapisa najwyej 64 wartoci. Wprawdzie t sam warto mona w jednym wyraeniu SQL wpisa wielokrotnie, ale w bazie danych warto ta zostanie zapisana raz.

40

MySQL. Leksykon kieszonkowy

4. SQL .............................................................................................. 41
Rozrnianie wielkoci liter Literay Identyfikatory Komentarze Instrukcje Zasady dotyczce transakcji 41 42 43 45 46 106

5. Operatory .................................................................................. 108


Priorytety operatorw Operatory arytmetyczne Operatory porwnania Operatory logiczne 108 109 109 111

6. Funkcje .......................................................................................113
Funkcje agregujce Funkcje oglnego przeznaczenia 113 115

7. Rodzaje tabel ............................................................................ 137 8. Procedury i funkcje skadowane .............................................. 138


Parametry Logika Kursory Obsuga zdarze i warunki 138 139 143 144

9. Trygery ...................................................................................... 146 Skorowidz ................................................................................. 147

MySQL. Leksykon kieszonkowy

Rozdzia 3. Typy danych


We wszystkich typach danych nawiasami kwadratowymi ([]) oznaczane s fragmenty opcjonalne. Poniszy przykad pokazuje sposb prezentacji typu BIGINT, opisanego dalej w tym rozdziale:
BIGINT[(wielko_pokazywana)]

Oznacza to, e sowo BIGINT moe wystpi samodzielnie lub z pokazywan wartoci. Uycie kursywy wskazuje, e nie naley wpisywa sowa wielko_pokazywana, ale poda wasn warto. Oto przykady uycia:
BIGINT BIGINT(20)

Poza typem BIGINT take wiele innych typw danych MySQL uwzgldnia deklaracj rozmiaru wywietlania. Jeli nie powiedziano inaczej, musi to by liczba od 1 do 255. W wersjach MySQL starszych ni wersja 5, baza danych w niektrych przypadkach zmieniaa podany typ kolumny, nie informujc o tym uytkownika. Obecnie takie podmiany nie maj ju miejsca.
VARCHAR -> CHAR

Jeli podana kolumna VARCHAR ma rozmiar mniejszy od czterech znakw, jest przeksztacana w kolumn CHAR.
CHAR -> VARCHAR

Jeli tabela zawiera co najmniej jedn kolumn o zmiennej dugoci, wszystkie kolumny typu CHAR dusze ni trzy znaki s zamieniane na VARCHAR.

Rozmiar wywietlania TIMESTAMP Rozmiar wywietlania pl TIMESTAMP musi by zawsze wielkoci parzyst od 2 do 14. Rozmiar rwny 0 lub wikszy od 14 powoduje przyjcie 14. Wszelkie liczby nieparzyste s zamieniane na nastpn liczb parzyst.

22

MySQL. Leksykon kieszonkowy

Liczby
MySQL obsuguje liczbowe typy danych zgodne z ANSI SQL 2. Typy te dzielimy na cakowitoliczbowe, dziesitne i zmiennoprzecinkowe. W ramach tych grup dzielimy typy dalej, wedug zajmowanej przez nie pamici. W przypadku typw liczbowych mona poda rozmiar wywietlania, ktry wpywa na sposb pokazywania przez MySQL wynikw. Rozmiar ten nie ma adnego zwizku z wielkoci pamici zajmowanej przez dany typ. Dodatkowo w przypadku liczb zmiennoprzecinkowych i dziesitnych mona poda liczb cyfr znajdujcych si za kropk dziesitn. Wtedy liczba cyfr powinna nalee do zakresu od 0 do 30, czyli by co najmniej o dwa mniejsza od rozmiaru wywietlania. Jeli warunek ten nie zostanie dotrzymany, MySQL automatycznie zmieni liczb cyfr tak, aby bya mniejsza o dwa od rozmiaru wywietlania. Przykadowo, MySQL automatycznie zmieni FLOAT(6,5) na FLOAT(7,5). Prba wstawienia do kolumny wartoci przekraczajcej dopuszczalny zakres tej kolumny powoduje obcicie tej wartoci do najmniejszej (dla liczb ujemnych) lub najwikszej (dla liczb dodatnich) wartoci dla danej kolumny dopuszczalnej. Jeli takie obcicie jest robione podczas wykonywania instrukcji ALTER TABLE, LOAD DATA INFILE, UPDATE lub wielowierszowej instrukcji INSERT, MySQL pokazuje ostrzeenie. Wyjtkiem jest korzystanie z MySQL w wersji 5 lub nowszej w trybie penej zgodnoci ze standardem SQL, gdy wtedy w przypadku instrukcji INSERT i UPDATE zgaszany jest bd. Atrybutu AUTO_INCREMENT mona uy do co najwyej jednej kolumny cakowitoliczbowej w tabeli. Atrybut UNSIGNED moe by czony z dowolnym liczbowym typem danych. Uycie tego atrybutu powoduje, e do kolumny nie mona wpisywa liczb ujemnych. Atrybut ZEROFILL nakazuje wypenienie kolumny od lewej

Rozdzia 3. Typy danych

23

strony zerami podczas wywietlania jej wartoci. O liczbie tych zer decyduje szeroko wywietlania danej kolumny.

BIGINT
BIGINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Najwikszy z typw cakowitoliczbowych, pozwalajcy zapisywa liczby od 9 223 372 036 854 775 808 do 9 223 372 036 854 775 807 (jeli bez znaku, to od 0 do 18 446 744 073 709 551 615). Z uwagi na sposb realizacji dziaa na liczbach tego typu, naley unika operacji na liczbach BIGINT bez znaku wikszych ni 9 223 372 036 854 775 807, gdy moe to zaowocowa nieprawidowymi wynikami.

BIT
BIT[(bity)]

Rozmiar w pamici w przyblieniu bity bitw+7 lub 8 bitw Opis W wersjach MySQL 5.0.3 i starszych, pola typu BIT dziaay tak samo, jak TINYINT(1). Omawiany typ pola pozwala przechowywa ustalon liczb bitw. Jeli podana zostanie wielko bitw mniejsza od dozwolonej, MySQL wypeni zerami bity od lewej strony.
24 | MySQL. Leksykon kieszonkowy

DEC
Synonim typu DECIMAL.

DECIMAL
DECIMAL[(dokadno, [skala])] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici rnie Opis Pozwala zapisywa liczby zmiennoprzecinkowe w sytuacjach, kiedy istotna jest dokadno na przykad przy operowaniu kwotami pienidzy. Stosujc typ DECIMAL, trzeba poda dwa jego parametry, dokadno i skal. Dokadno to liczba znaczcych cyfr, za skala to liczba znaczcych cyfr po kropce dziesitnej. Przykadowo, kolumna SALDO typu DECIMAL(9,2) pozwoliaby zapisywa liczby dziewiciocyfrowe, przy czym na prawo od kropki dziesitnej mogyby by dwie cyfry. Zakres dopuszczalnych liczb to w takiej sytuacji od 9 999 999,99 do 9 999 999,99. Jeli podana zostanie liczba zawierajca wicej cyfr po przecinku, ni przewiduje to definicja, liczba zostanie zaokrglona. Wartoci spoza zakresu DECIMAL s obcinane tak, aby si w nim zmieciy. W wersjach MySQL starszych ni 5, wartoci DECIMAL nie byy zapisywane jako liczby zmiennoprzecinkowe, lecz jako acuchy znakw. Na kad cyfr zuywany by jeden znak w przypadku skali wikszej od 0, poza tym jeden dodatkowy znak zuywany jest w przypadku liczb ujemnych. Jeli skala wynosi 0, liczby nie maj czci uamkowej. SQL zgodnie z norm ANSI pozwala pomija dokadno i (lub) skal. Jeli brak dokadnoci, przyjmowane jest ustawienie

Rozdzia 3. Typy danych

25

domylne charakterystyczne dla implementacji. Jeli brak skali, przyjmowane jest zero. W MySQL domylna warto dokadnoci to 10.

DOUBLE
DOUBLE[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Liczba zmiennoprzecinkowa podwjnej precyzji. Ten typ danych pozwala zapisywa due wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 1,7976931348623157E+308 do 2,2250738585072014E308, 0 oraz wartoci dodatnie od 2,2250738585072014E308 do 1,7976931348623157E+308.

DOUBLE PRECISION
Synonim DOUBLE.

FLOAT
FLOAT[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 4 bajty

26

MySQL. Leksykon kieszonkowy

Opis Liczba zmiennoprzecinkowa pojedynczej precyzji. Ten typ danych pozwala zapisywa mae wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 3,402823466E+38 do 1,175494351E38, 0 oraz wartoci dodatnie od 1,175494351E38 do 3,402823466E+38.

INT
INT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 4 bajty Opis Podstawowy rodzaj liczb cakowitych od 2 147 483 648 do 2 147 483 647 (lub od 0 do 4 294 967 295 w przypadku liczb bez znaku).

INTEGER
Synonim INT.

MEDIUMINT
MEDIUMINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

27

Opis Liczby cakowite od 8 388 608 do 8 388 607 (lub od 0 do 16 777 215 w przypadku liczb bez znaku).

NUMERIC
Synonim DECIMAL.

REAL
Synonim DOUBLE.

SMALLINT
SMALLINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 2 bajty Opis Liczby cakowite z zakresu od 32 768 do 32 767 (od 0 do 65 535 w przypadku liczb bez znaku).

TINYINT
TINYINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 1 bajt

28

MySQL. Leksykon kieszonkowy

Opis Liczby cakowite od 128 do 127 (od 0 do 255 w przypadku liczb bez znaku).

acuchy
MySQL obsuguje dwie kategorie acuchw: acuchy tekstowe oraz acuchy binarne. Obie kategorie maj swoje specyficzne typy do obsugi rnych wielkoci pl i rnych sposobw porwnywania wartoci. W zalenoci od sposobu porwnywania, mona uwzgldnia bd nie wielko liter, mona te porwnywa dane binarnie (bajt po bajcie). Kiedy nazwa typu tekstowego (jak CHAR, VARCHAR i inne) zostanie oznaczona sowem kluczowym BINARY, kolumna pozostaje kolumn tekstow, ale dane s porwnywane ze sob binarnie.

BINARY
BINARY(rozmiar)

Rozmiar wedug rozmiar, w zakresie od 0 do 255 Rozmiar w pamici


rozmiar bajtw

Opis Typ danych BINARY to binarny odpowiednik typu CHAR. Podstawowa rnica midzy tymi dwoma typami polega na tym, e pole typu BINARY zawiera dane binarne, wielko tych danych jest mierzona nie w znakach, lecz w bajtach. acuchy zawierajce

Rozdzia 3. Typy danych

29

mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie znakami 0x00 (wersja MySQL 5.0.5 i nowsze) lub spacjami (wersje starsze).

BLOB
Binarny odpowiednik typu TEXT.

CHAR
CHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar wedug rozmiar, do 255 Rozmiar w pamici zaleny od rozmiaru i od uytego zestawu znakw Opis Pole tekstowe ustalonej dugoci. acuchy zawierajce mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie spacjami. Podczas pobierania danych z bazy te dodatkowe spacje s usuwane. Pola CHAR(0) zostay zachowane w celu zapewnienia zgodnoci ze starymi systemami, w ktrych w kolumnach nie s zapisywane adne wartoci.

CHARACTER
Synonim CHAR.

30

MySQL. Leksykon kieszonkowy

CHARACTER VARYING
Synonim VARCHAR.

LONGBLOB
Binarny odpowiednik LONGTEXT.

LONGTEXT
LONGTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 4 294 295 Rozmiar w pamici Dugo wartoci+4 bajty Opis Typ pozwala zapisywa due wartoci tekstowe. Teoretyczne ograniczenie rozmiaru tekstu to ponad 4 GB, ale praktycznymi ograniczeniami s ograniczenia protokou komunikacyjnego MySQL oraz ilo pamici przeznaczonej na komunikacj na serwerze i na stacji klienckiej.

MEDIUMBLOB
Binarna posta MEDIUMTEXT.

MEDIUMTEXT
MEDIUMTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozdzia 3. Typy danych

31

Rozmiar 0 do 16 777 215 Rozmiar w pamici Dugo wartoci+3 bajty Opis Typ pozwala zapisywa redniej wielkoci wartoci tekstowe.

NCHAR
Synonim CHAR.

NATIONAL CHAR
Synonim CHAR.

NATIONAL CHARACTER
Synonim CHAR.

NATIONAL VARCHAR
Synonim VARCHAR.

TEXT
TEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 65 535

32

MySQL. Leksykon kieszonkowy

Rozmiar w pamici Dugo wartoci tekstowej+2 bajty Opis Typ pozwala zapisywa typowe wartoci tekstowe.

TINYBLOB
Binarny odpowiednik TINYTEXT.

TINYTEXT
TINYTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 255 Rozmiar w pamici Dugo wartoci tekstowej+1 bajt Opis Pozwala zapisywa krtkie dane tekstowe.

VARBINARY
VARBINARY(rozmiar)

Rozmiar Wedug parametru rozmiar

Rozdzia 3. Typy danych

33

Rozmiar w pamici
rozmiar bajtw

Opis Jest to binarna odmiana typu VARCHAR. Podstawowa rnica polega na tym, e zapisywane s dane binarne, a rozmiar pola mierzony jest w bajtach, nie w znakach. Wielkoci typu VARBINARY, w przeciwiestwie do wartoci typu BINARY, nie s niczym dopeniane.

VARCHAR
VARCHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar Wskazana przez rozmiar warto z zakresu do 65 532 (od 1 do 255 w wersjach wczeniejszych ni MySQL 5); rozmiar wskazuje rzeczywist wielko kolumny i jest ograniczony przez dopuszczaln wielko wiersza w znakach; to, ile miejsca faktycznie bdzie potrzebne, zaley zatem od zestawu znakw uytego w danej kolumnie Rozmiar w pamici Zaley od liczby znakw wskazanych jako rozmiar oraz od liczby bajtw potrzebnych do zapisu poszczeglnych znakw w uytym mechanizmie kodowania znakw Opis Pozwala zapisywa wartoci tekstowe zmiennej dugoci. W wersjach poprzedzajcych MySQL 5 z wartoci VARCHAR usuwane s spacje kocowe; wersja MySQL 5 i nowsze standardowo nie usuwaj spacji kocowych.

34

MySQL. Leksykon kieszonkowy

Daty
Typy datowe MySQL s wyjtkowo elastycznym narzdziem, pozwalajcym zapisywa wszelki informacje dzienne. MySQL jest bardzo tolerancyjny i zakada, e to aplikacja, a nie baza danych, ma sprawdza poprawno tych danych. MySQL sprawdza jedynie, czy miesic nie wykracza poza zakres 0 12 i czy dzie nie wykracza poza zakres 0 31. Wobec tego z punktu widzenia MySQL 31 lutego 2001 roku jest poprawn dat. Bardziej przydatn wartoci jest data 0 lutego 2001 roku; cyfra zero moe zastpowa t cz daty, ktrej dokadnie nie znamy. MySQL 5 jest jednak ju baz danych nieco bardziej restrykcyjn co do wartoci, jakie mona zapisywa w polach datowych. Wprawdzie MySQL dopuszcza do du swobod formatw wejciowych dat, to naley stara si w aplikacjach daty formatowa zgodnie z formatem wewntrznym MySQL w celu uniknicia nieporozumie. MySQL zawsze zakada, e rok jest pierwszym elementem po lewej stronie daty. Jeli w operacji SQL podana zostanie nieprawidowa warto daty, MySQL wstawi w jej miejsce zero. MySQL w kontekcie liczb cakowitych automatycznie konwertuje daty i czas na liczby cakowite.

DATE
DATE

Format
YYYY-MM-DD (2001-01-01)

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

35

Opis Data kalendarza gregoriaskiego z zakresu od 1 stycznia 1000 roku ('1000-01-01') do 31 grudnia 9999 roku ('9999-12-31').

DATETIME
DATETIME

Format
YYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 8 bajtw Opis Zapisuje czas z zakresu od 00:00:00 1 stycznia 1000 roku ('100001-01 00:00:00') do 23:59:59 31 grudnia 9999 ('9999-12-31 23:59:59') wedug kalendarza gregoriaskiego.

TIME
TIME

Format
hh:mm:ss (06:00:00)

Rozmiar w pamici 3 bajty Opis Zapisuje czas od pnocy ('00:00:00') do sekundy przed pnoc ('23:59:59').
36 | MySQL. Leksykon kieszonkowy

TIMESTAMP
TIMESTAMP[(rozmiar_wywietlania)]

Format
YYYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 4 bajty Opis Zapis chwili z dokadnoci do sekundy od pnocy 1 stycznia 1970 roku do minuty przed pnoc 31 grudnia 2037 roku. Podstawowym zastosowaniem tego typu jest rejestracja modyfikacji tabel. Przy wstawianiu do takiej kolumny wartoci NULL wstawiane s aktualna data i czas. W przypadku modyfikowania jakiejkolwiek wartoci w wierszu z kolumn TIMESTAMP pierwsza kolumna tego typu zostanie zaktualizowana biec dat i czasem. Format danych TIMESTAMP znany z wczeniejszych wersji MySQL, do 4.1 wcznie, w wersji 5.1 nie jest ju obsugiwany.

YEAR
YEAR[(rozmiar)]

Format
YYYY (2001)

Rozmiar w pamici 1 bajt

Rozdzia 3. Typy danych

37

Opis Pozwala zapisa rok z kalendarza gregoriaskiego. Parametr rozmiar umoliwia zapisywanie roku dwu- lub czterocyfrowo. Zakres YEAR(4) rozciga si od 1900 do 2155, dla YEAR(2) od 1970 do 2069. Domylnie przyjmowane jest YEAR(4).

Typy zoone
Zoone typy danych MySQL, ENUM i SET, s po prostu specjalnymi przypadkami typw acuchowych. Opisujemy je osobno, gdy s bardziej zoone pojciowo i stanowi wprowadzenie do typw danych SQL3, ktre by moe MySQL bdzie obsugiwa w przyszoci.

ENUM
ENUM(warto1, warto2, ...)

Rozmiar w pamici 1 255 elementw: 1 bajt 255 65 535 elementw: 2 bajty Opis Typ danych ENUM pozwala zapisywa jeden z wielu zdefiniowanych wczeniej acuchw. Przy tworzeniu kolumny typu ENUM podaje si list dopuszczalnych jej wartoci. Dane mog by do tej kolumny wstawiane i aktualizowane jedynie z tej listy; kada prba wstawienia wartoci spoza niej powoduje wstawienie pustego acucha.

38

MySQL. Leksykon kieszonkowy

Do listy dopuszczalnych wartoci mona si odwoywa przez indeks, przy czym pierwszy element otrzymuje numer 0. Na przykad:
SELECT COLID FROM TBL WHERE COLENUM = 0;

Jeli COLID jest kolumn z kluczem gwnym, a COLENUM kolumn typu ENUM, taka instrukcja SQL spowoduje pobranie kluczy gwnych wszystkich wierszy, dla ktrych COLENUM jest pierwsz wartoci z listy. Analogicznie, sortowanie wzgldem kolumn ENUM powoduje sortowanie wedug indeksu, nie acucha. Najwiksza moliwa liczba elementw kolumny ENUM to 65 535.

SET
SET(warto1, warto2, ...)

Rozmiar w pamici 1 8 elementw: 1 bajt 9 16 elementw: 2 bajty 17 24 elementy: 3 bajty 25 32 elementy: 4 bajty 33 64 elementy: 8 bajtw Opis Lista wartoci wybieranych z okrelonego wczeniej zbioru. Pole moe zawiera dowoln liczb acuchw wskazanych w instrukcji SET, szczeglnie moe nie zawiera adnej takiej wartoci. SET jest podobny do ENUM, ale kade pole moe zawiera wicej ni jedn z podanych wartoci. Dane typu SET nie s jednak zapisywane za pomoc indeksw, ale w zoonej mapie bitowej. Jeli dany jest zbir SET, zawierajcy elementy: Mandarynka, Pomidor,
Rozdzia 3. Typy danych | 39

Gruszka i Banan, kady z tych elementw jest reprezentowany jako

wczony bit w bajcie, jak to pokazano w tabeli 3.1.


Tabela 3.1. Reprezentacja zbioru elementw w MySQL
Element
Mandarynka Pomidor Gruszka Banan

Warto dziesitna
1 2 4 8

Zapis bitowy
0001 0010 0100 1000

W powyszym przykadzie zapisanie jednoczenie wartoci Mandarynka i Gruszka wymaga uycia wartoci 5 (bitowo 0101). W kolumnie SET mona zapisa najwyej 64 wartoci. Wprawdzie t sam warto mona w jednym wyraeniu SQL wpisa wielokrotnie, ale w bazie danych warto ta zostanie zapisana raz.

40

MySQL. Leksykon kieszonkowy

4. SQL .............................................................................................. 41
Rozrnianie wielkoci liter Literay Identyfikatory Komentarze Instrukcje Zasady dotyczce transakcji 41 42 43 45 46 106

5. Operatory .................................................................................. 108


Priorytety operatorw Operatory arytmetyczne Operatory porwnania Operatory logiczne 108 109 109 111

6. Funkcje .......................................................................................113
Funkcje agregujce Funkcje oglnego przeznaczenia 113 115

7. Rodzaje tabel ............................................................................ 137 8. Procedury i funkcje skadowane .............................................. 138


Parametry Logika Kursory Obsuga zdarze i warunki 138 139 143 144

9. Trygery ...................................................................................... 146 Skorowidz ................................................................................. 147

MySQL. Leksykon kieszonkowy

Rozdzia 3. Typy danych


We wszystkich typach danych nawiasami kwadratowymi ([]) oznaczane s fragmenty opcjonalne. Poniszy przykad pokazuje sposb prezentacji typu BIGINT, opisanego dalej w tym rozdziale:
BIGINT[(wielko_pokazywana)]

Oznacza to, e sowo BIGINT moe wystpi samodzielnie lub z pokazywan wartoci. Uycie kursywy wskazuje, e nie naley wpisywa sowa wielko_pokazywana, ale poda wasn warto. Oto przykady uycia:
BIGINT BIGINT(20)

Poza typem BIGINT take wiele innych typw danych MySQL uwzgldnia deklaracj rozmiaru wywietlania. Jeli nie powiedziano inaczej, musi to by liczba od 1 do 255. W wersjach MySQL starszych ni wersja 5, baza danych w niektrych przypadkach zmieniaa podany typ kolumny, nie informujc o tym uytkownika. Obecnie takie podmiany nie maj ju miejsca.
VARCHAR -> CHAR

Jeli podana kolumna VARCHAR ma rozmiar mniejszy od czterech znakw, jest przeksztacana w kolumn CHAR.
CHAR -> VARCHAR

Jeli tabela zawiera co najmniej jedn kolumn o zmiennej dugoci, wszystkie kolumny typu CHAR dusze ni trzy znaki s zamieniane na VARCHAR.

Rozmiar wywietlania TIMESTAMP Rozmiar wywietlania pl TIMESTAMP musi by zawsze wielkoci parzyst od 2 do 14. Rozmiar rwny 0 lub wikszy od 14 powoduje przyjcie 14. Wszelkie liczby nieparzyste s zamieniane na nastpn liczb parzyst.

22

MySQL. Leksykon kieszonkowy

Liczby
MySQL obsuguje liczbowe typy danych zgodne z ANSI SQL 2. Typy te dzielimy na cakowitoliczbowe, dziesitne i zmiennoprzecinkowe. W ramach tych grup dzielimy typy dalej, wedug zajmowanej przez nie pamici. W przypadku typw liczbowych mona poda rozmiar wywietlania, ktry wpywa na sposb pokazywania przez MySQL wynikw. Rozmiar ten nie ma adnego zwizku z wielkoci pamici zajmowanej przez dany typ. Dodatkowo w przypadku liczb zmiennoprzecinkowych i dziesitnych mona poda liczb cyfr znajdujcych si za kropk dziesitn. Wtedy liczba cyfr powinna nalee do zakresu od 0 do 30, czyli by co najmniej o dwa mniejsza od rozmiaru wywietlania. Jeli warunek ten nie zostanie dotrzymany, MySQL automatycznie zmieni liczb cyfr tak, aby bya mniejsza o dwa od rozmiaru wywietlania. Przykadowo, MySQL automatycznie zmieni FLOAT(6,5) na FLOAT(7,5). Prba wstawienia do kolumny wartoci przekraczajcej dopuszczalny zakres tej kolumny powoduje obcicie tej wartoci do najmniejszej (dla liczb ujemnych) lub najwikszej (dla liczb dodatnich) wartoci dla danej kolumny dopuszczalnej. Jeli takie obcicie jest robione podczas wykonywania instrukcji ALTER TABLE, LOAD DATA INFILE, UPDATE lub wielowierszowej instrukcji INSERT, MySQL pokazuje ostrzeenie. Wyjtkiem jest korzystanie z MySQL w wersji 5 lub nowszej w trybie penej zgodnoci ze standardem SQL, gdy wtedy w przypadku instrukcji INSERT i UPDATE zgaszany jest bd. Atrybutu AUTO_INCREMENT mona uy do co najwyej jednej kolumny cakowitoliczbowej w tabeli. Atrybut UNSIGNED moe by czony z dowolnym liczbowym typem danych. Uycie tego atrybutu powoduje, e do kolumny nie mona wpisywa liczb ujemnych. Atrybut ZEROFILL nakazuje wypenienie kolumny od lewej

Rozdzia 3. Typy danych

23

strony zerami podczas wywietlania jej wartoci. O liczbie tych zer decyduje szeroko wywietlania danej kolumny.

BIGINT
BIGINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Najwikszy z typw cakowitoliczbowych, pozwalajcy zapisywa liczby od 9 223 372 036 854 775 808 do 9 223 372 036 854 775 807 (jeli bez znaku, to od 0 do 18 446 744 073 709 551 615). Z uwagi na sposb realizacji dziaa na liczbach tego typu, naley unika operacji na liczbach BIGINT bez znaku wikszych ni 9 223 372 036 854 775 807, gdy moe to zaowocowa nieprawidowymi wynikami.

BIT
BIT[(bity)]

Rozmiar w pamici w przyblieniu bity bitw+7 lub 8 bitw Opis W wersjach MySQL 5.0.3 i starszych, pola typu BIT dziaay tak samo, jak TINYINT(1). Omawiany typ pola pozwala przechowywa ustalon liczb bitw. Jeli podana zostanie wielko bitw mniejsza od dozwolonej, MySQL wypeni zerami bity od lewej strony.
24 | MySQL. Leksykon kieszonkowy

DEC
Synonim typu DECIMAL.

DECIMAL
DECIMAL[(dokadno, [skala])] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici rnie Opis Pozwala zapisywa liczby zmiennoprzecinkowe w sytuacjach, kiedy istotna jest dokadno na przykad przy operowaniu kwotami pienidzy. Stosujc typ DECIMAL, trzeba poda dwa jego parametry, dokadno i skal. Dokadno to liczba znaczcych cyfr, za skala to liczba znaczcych cyfr po kropce dziesitnej. Przykadowo, kolumna SALDO typu DECIMAL(9,2) pozwoliaby zapisywa liczby dziewiciocyfrowe, przy czym na prawo od kropki dziesitnej mogyby by dwie cyfry. Zakres dopuszczalnych liczb to w takiej sytuacji od 9 999 999,99 do 9 999 999,99. Jeli podana zostanie liczba zawierajca wicej cyfr po przecinku, ni przewiduje to definicja, liczba zostanie zaokrglona. Wartoci spoza zakresu DECIMAL s obcinane tak, aby si w nim zmieciy. W wersjach MySQL starszych ni 5, wartoci DECIMAL nie byy zapisywane jako liczby zmiennoprzecinkowe, lecz jako acuchy znakw. Na kad cyfr zuywany by jeden znak w przypadku skali wikszej od 0, poza tym jeden dodatkowy znak zuywany jest w przypadku liczb ujemnych. Jeli skala wynosi 0, liczby nie maj czci uamkowej. SQL zgodnie z norm ANSI pozwala pomija dokadno i (lub) skal. Jeli brak dokadnoci, przyjmowane jest ustawienie

Rozdzia 3. Typy danych

25

domylne charakterystyczne dla implementacji. Jeli brak skali, przyjmowane jest zero. W MySQL domylna warto dokadnoci to 10.

DOUBLE
DOUBLE[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Liczba zmiennoprzecinkowa podwjnej precyzji. Ten typ danych pozwala zapisywa due wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 1,7976931348623157E+308 do 2,2250738585072014E308, 0 oraz wartoci dodatnie od 2,2250738585072014E308 do 1,7976931348623157E+308.

DOUBLE PRECISION
Synonim DOUBLE.

FLOAT
FLOAT[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 4 bajty

26

MySQL. Leksykon kieszonkowy

Opis Liczba zmiennoprzecinkowa pojedynczej precyzji. Ten typ danych pozwala zapisywa mae wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 3,402823466E+38 do 1,175494351E38, 0 oraz wartoci dodatnie od 1,175494351E38 do 3,402823466E+38.

INT
INT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 4 bajty Opis Podstawowy rodzaj liczb cakowitych od 2 147 483 648 do 2 147 483 647 (lub od 0 do 4 294 967 295 w przypadku liczb bez znaku).

INTEGER
Synonim INT.

MEDIUMINT
MEDIUMINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

27

Opis Liczby cakowite od 8 388 608 do 8 388 607 (lub od 0 do 16 777 215 w przypadku liczb bez znaku).

NUMERIC
Synonim DECIMAL.

REAL
Synonim DOUBLE.

SMALLINT
SMALLINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 2 bajty Opis Liczby cakowite z zakresu od 32 768 do 32 767 (od 0 do 65 535 w przypadku liczb bez znaku).

TINYINT
TINYINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 1 bajt

28

MySQL. Leksykon kieszonkowy

Opis Liczby cakowite od 128 do 127 (od 0 do 255 w przypadku liczb bez znaku).

acuchy
MySQL obsuguje dwie kategorie acuchw: acuchy tekstowe oraz acuchy binarne. Obie kategorie maj swoje specyficzne typy do obsugi rnych wielkoci pl i rnych sposobw porwnywania wartoci. W zalenoci od sposobu porwnywania, mona uwzgldnia bd nie wielko liter, mona te porwnywa dane binarnie (bajt po bajcie). Kiedy nazwa typu tekstowego (jak CHAR, VARCHAR i inne) zostanie oznaczona sowem kluczowym BINARY, kolumna pozostaje kolumn tekstow, ale dane s porwnywane ze sob binarnie.

BINARY
BINARY(rozmiar)

Rozmiar wedug rozmiar, w zakresie od 0 do 255 Rozmiar w pamici


rozmiar bajtw

Opis Typ danych BINARY to binarny odpowiednik typu CHAR. Podstawowa rnica midzy tymi dwoma typami polega na tym, e pole typu BINARY zawiera dane binarne, wielko tych danych jest mierzona nie w znakach, lecz w bajtach. acuchy zawierajce

Rozdzia 3. Typy danych

29

mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie znakami 0x00 (wersja MySQL 5.0.5 i nowsze) lub spacjami (wersje starsze).

BLOB
Binarny odpowiednik typu TEXT.

CHAR
CHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar wedug rozmiar, do 255 Rozmiar w pamici zaleny od rozmiaru i od uytego zestawu znakw Opis Pole tekstowe ustalonej dugoci. acuchy zawierajce mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie spacjami. Podczas pobierania danych z bazy te dodatkowe spacje s usuwane. Pola CHAR(0) zostay zachowane w celu zapewnienia zgodnoci ze starymi systemami, w ktrych w kolumnach nie s zapisywane adne wartoci.

CHARACTER
Synonim CHAR.

30

MySQL. Leksykon kieszonkowy

CHARACTER VARYING
Synonim VARCHAR.

LONGBLOB
Binarny odpowiednik LONGTEXT.

LONGTEXT
LONGTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 4 294 295 Rozmiar w pamici Dugo wartoci+4 bajty Opis Typ pozwala zapisywa due wartoci tekstowe. Teoretyczne ograniczenie rozmiaru tekstu to ponad 4 GB, ale praktycznymi ograniczeniami s ograniczenia protokou komunikacyjnego MySQL oraz ilo pamici przeznaczonej na komunikacj na serwerze i na stacji klienckiej.

MEDIUMBLOB
Binarna posta MEDIUMTEXT.

MEDIUMTEXT
MEDIUMTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozdzia 3. Typy danych

31

Rozmiar 0 do 16 777 215 Rozmiar w pamici Dugo wartoci+3 bajty Opis Typ pozwala zapisywa redniej wielkoci wartoci tekstowe.

NCHAR
Synonim CHAR.

NATIONAL CHAR
Synonim CHAR.

NATIONAL CHARACTER
Synonim CHAR.

NATIONAL VARCHAR
Synonim VARCHAR.

TEXT
TEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 65 535

32

MySQL. Leksykon kieszonkowy

Rozmiar w pamici Dugo wartoci tekstowej+2 bajty Opis Typ pozwala zapisywa typowe wartoci tekstowe.

TINYBLOB
Binarny odpowiednik TINYTEXT.

TINYTEXT
TINYTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 255 Rozmiar w pamici Dugo wartoci tekstowej+1 bajt Opis Pozwala zapisywa krtkie dane tekstowe.

VARBINARY
VARBINARY(rozmiar)

Rozmiar Wedug parametru rozmiar

Rozdzia 3. Typy danych

33

Rozmiar w pamici
rozmiar bajtw

Opis Jest to binarna odmiana typu VARCHAR. Podstawowa rnica polega na tym, e zapisywane s dane binarne, a rozmiar pola mierzony jest w bajtach, nie w znakach. Wielkoci typu VARBINARY, w przeciwiestwie do wartoci typu BINARY, nie s niczym dopeniane.

VARCHAR
VARCHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar Wskazana przez rozmiar warto z zakresu do 65 532 (od 1 do 255 w wersjach wczeniejszych ni MySQL 5); rozmiar wskazuje rzeczywist wielko kolumny i jest ograniczony przez dopuszczaln wielko wiersza w znakach; to, ile miejsca faktycznie bdzie potrzebne, zaley zatem od zestawu znakw uytego w danej kolumnie Rozmiar w pamici Zaley od liczby znakw wskazanych jako rozmiar oraz od liczby bajtw potrzebnych do zapisu poszczeglnych znakw w uytym mechanizmie kodowania znakw Opis Pozwala zapisywa wartoci tekstowe zmiennej dugoci. W wersjach poprzedzajcych MySQL 5 z wartoci VARCHAR usuwane s spacje kocowe; wersja MySQL 5 i nowsze standardowo nie usuwaj spacji kocowych.

34

MySQL. Leksykon kieszonkowy

Daty
Typy datowe MySQL s wyjtkowo elastycznym narzdziem, pozwalajcym zapisywa wszelki informacje dzienne. MySQL jest bardzo tolerancyjny i zakada, e to aplikacja, a nie baza danych, ma sprawdza poprawno tych danych. MySQL sprawdza jedynie, czy miesic nie wykracza poza zakres 0 12 i czy dzie nie wykracza poza zakres 0 31. Wobec tego z punktu widzenia MySQL 31 lutego 2001 roku jest poprawn dat. Bardziej przydatn wartoci jest data 0 lutego 2001 roku; cyfra zero moe zastpowa t cz daty, ktrej dokadnie nie znamy. MySQL 5 jest jednak ju baz danych nieco bardziej restrykcyjn co do wartoci, jakie mona zapisywa w polach datowych. Wprawdzie MySQL dopuszcza do du swobod formatw wejciowych dat, to naley stara si w aplikacjach daty formatowa zgodnie z formatem wewntrznym MySQL w celu uniknicia nieporozumie. MySQL zawsze zakada, e rok jest pierwszym elementem po lewej stronie daty. Jeli w operacji SQL podana zostanie nieprawidowa warto daty, MySQL wstawi w jej miejsce zero. MySQL w kontekcie liczb cakowitych automatycznie konwertuje daty i czas na liczby cakowite.

DATE
DATE

Format
YYYY-MM-DD (2001-01-01)

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

35

Opis Data kalendarza gregoriaskiego z zakresu od 1 stycznia 1000 roku ('1000-01-01') do 31 grudnia 9999 roku ('9999-12-31').

DATETIME
DATETIME

Format
YYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 8 bajtw Opis Zapisuje czas z zakresu od 00:00:00 1 stycznia 1000 roku ('100001-01 00:00:00') do 23:59:59 31 grudnia 9999 ('9999-12-31 23:59:59') wedug kalendarza gregoriaskiego.

TIME
TIME

Format
hh:mm:ss (06:00:00)

Rozmiar w pamici 3 bajty Opis Zapisuje czas od pnocy ('00:00:00') do sekundy przed pnoc ('23:59:59').
36 | MySQL. Leksykon kieszonkowy

TIMESTAMP
TIMESTAMP[(rozmiar_wywietlania)]

Format
YYYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 4 bajty Opis Zapis chwili z dokadnoci do sekundy od pnocy 1 stycznia 1970 roku do minuty przed pnoc 31 grudnia 2037 roku. Podstawowym zastosowaniem tego typu jest rejestracja modyfikacji tabel. Przy wstawianiu do takiej kolumny wartoci NULL wstawiane s aktualna data i czas. W przypadku modyfikowania jakiejkolwiek wartoci w wierszu z kolumn TIMESTAMP pierwsza kolumna tego typu zostanie zaktualizowana biec dat i czasem. Format danych TIMESTAMP znany z wczeniejszych wersji MySQL, do 4.1 wcznie, w wersji 5.1 nie jest ju obsugiwany.

YEAR
YEAR[(rozmiar)]

Format
YYYY (2001)

Rozmiar w pamici 1 bajt

Rozdzia 3. Typy danych

37

Opis Pozwala zapisa rok z kalendarza gregoriaskiego. Parametr rozmiar umoliwia zapisywanie roku dwu- lub czterocyfrowo. Zakres YEAR(4) rozciga si od 1900 do 2155, dla YEAR(2) od 1970 do 2069. Domylnie przyjmowane jest YEAR(4).

Typy zoone
Zoone typy danych MySQL, ENUM i SET, s po prostu specjalnymi przypadkami typw acuchowych. Opisujemy je osobno, gdy s bardziej zoone pojciowo i stanowi wprowadzenie do typw danych SQL3, ktre by moe MySQL bdzie obsugiwa w przyszoci.

ENUM
ENUM(warto1, warto2, ...)

Rozmiar w pamici 1 255 elementw: 1 bajt 255 65 535 elementw: 2 bajty Opis Typ danych ENUM pozwala zapisywa jeden z wielu zdefiniowanych wczeniej acuchw. Przy tworzeniu kolumny typu ENUM podaje si list dopuszczalnych jej wartoci. Dane mog by do tej kolumny wstawiane i aktualizowane jedynie z tej listy; kada prba wstawienia wartoci spoza niej powoduje wstawienie pustego acucha.

38

MySQL. Leksykon kieszonkowy

Do listy dopuszczalnych wartoci mona si odwoywa przez indeks, przy czym pierwszy element otrzymuje numer 0. Na przykad:
SELECT COLID FROM TBL WHERE COLENUM = 0;

Jeli COLID jest kolumn z kluczem gwnym, a COLENUM kolumn typu ENUM, taka instrukcja SQL spowoduje pobranie kluczy gwnych wszystkich wierszy, dla ktrych COLENUM jest pierwsz wartoci z listy. Analogicznie, sortowanie wzgldem kolumn ENUM powoduje sortowanie wedug indeksu, nie acucha. Najwiksza moliwa liczba elementw kolumny ENUM to 65 535.

SET
SET(warto1, warto2, ...)

Rozmiar w pamici 1 8 elementw: 1 bajt 9 16 elementw: 2 bajty 17 24 elementy: 3 bajty 25 32 elementy: 4 bajty 33 64 elementy: 8 bajtw Opis Lista wartoci wybieranych z okrelonego wczeniej zbioru. Pole moe zawiera dowoln liczb acuchw wskazanych w instrukcji SET, szczeglnie moe nie zawiera adnej takiej wartoci. SET jest podobny do ENUM, ale kade pole moe zawiera wicej ni jedn z podanych wartoci. Dane typu SET nie s jednak zapisywane za pomoc indeksw, ale w zoonej mapie bitowej. Jeli dany jest zbir SET, zawierajcy elementy: Mandarynka, Pomidor,
Rozdzia 3. Typy danych | 39

Gruszka i Banan, kady z tych elementw jest reprezentowany jako

wczony bit w bajcie, jak to pokazano w tabeli 3.1.


Tabela 3.1. Reprezentacja zbioru elementw w MySQL
Element
Mandarynka Pomidor Gruszka Banan

Warto dziesitna
1 2 4 8

Zapis bitowy
0001 0010 0100 1000

W powyszym przykadzie zapisanie jednoczenie wartoci Mandarynka i Gruszka wymaga uycia wartoci 5 (bitowo 0101). W kolumnie SET mona zapisa najwyej 64 wartoci. Wprawdzie t sam warto mona w jednym wyraeniu SQL wpisa wielokrotnie, ale w bazie danych warto ta zostanie zapisana raz.

40

MySQL. Leksykon kieszonkowy

4. SQL .............................................................................................. 41
Rozrnianie wielkoci liter Literay Identyfikatory Komentarze Instrukcje Zasady dotyczce transakcji 41 42 43 45 46 106

5. Operatory .................................................................................. 108


Priorytety operatorw Operatory arytmetyczne Operatory porwnania Operatory logiczne 108 109 109 111

6. Funkcje .......................................................................................113
Funkcje agregujce Funkcje oglnego przeznaczenia 113 115

7. Rodzaje tabel ............................................................................ 137 8. Procedury i funkcje skadowane .............................................. 138


Parametry Logika Kursory Obsuga zdarze i warunki 138 139 143 144

9. Trygery ...................................................................................... 146 Skorowidz ................................................................................. 147

MySQL. Leksykon kieszonkowy

Rozdzia 3. Typy danych


We wszystkich typach danych nawiasami kwadratowymi ([]) oznaczane s fragmenty opcjonalne. Poniszy przykad pokazuje sposb prezentacji typu BIGINT, opisanego dalej w tym rozdziale:
BIGINT[(wielko_pokazywana)]

Oznacza to, e sowo BIGINT moe wystpi samodzielnie lub z pokazywan wartoci. Uycie kursywy wskazuje, e nie naley wpisywa sowa wielko_pokazywana, ale poda wasn warto. Oto przykady uycia:
BIGINT BIGINT(20)

Poza typem BIGINT take wiele innych typw danych MySQL uwzgldnia deklaracj rozmiaru wywietlania. Jeli nie powiedziano inaczej, musi to by liczba od 1 do 255. W wersjach MySQL starszych ni wersja 5, baza danych w niektrych przypadkach zmieniaa podany typ kolumny, nie informujc o tym uytkownika. Obecnie takie podmiany nie maj ju miejsca.
VARCHAR -> CHAR

Jeli podana kolumna VARCHAR ma rozmiar mniejszy od czterech znakw, jest przeksztacana w kolumn CHAR.
CHAR -> VARCHAR

Jeli tabela zawiera co najmniej jedn kolumn o zmiennej dugoci, wszystkie kolumny typu CHAR dusze ni trzy znaki s zamieniane na VARCHAR.

Rozmiar wywietlania TIMESTAMP Rozmiar wywietlania pl TIMESTAMP musi by zawsze wielkoci parzyst od 2 do 14. Rozmiar rwny 0 lub wikszy od 14 powoduje przyjcie 14. Wszelkie liczby nieparzyste s zamieniane na nastpn liczb parzyst.

22

MySQL. Leksykon kieszonkowy

Liczby
MySQL obsuguje liczbowe typy danych zgodne z ANSI SQL 2. Typy te dzielimy na cakowitoliczbowe, dziesitne i zmiennoprzecinkowe. W ramach tych grup dzielimy typy dalej, wedug zajmowanej przez nie pamici. W przypadku typw liczbowych mona poda rozmiar wywietlania, ktry wpywa na sposb pokazywania przez MySQL wynikw. Rozmiar ten nie ma adnego zwizku z wielkoci pamici zajmowanej przez dany typ. Dodatkowo w przypadku liczb zmiennoprzecinkowych i dziesitnych mona poda liczb cyfr znajdujcych si za kropk dziesitn. Wtedy liczba cyfr powinna nalee do zakresu od 0 do 30, czyli by co najmniej o dwa mniejsza od rozmiaru wywietlania. Jeli warunek ten nie zostanie dotrzymany, MySQL automatycznie zmieni liczb cyfr tak, aby bya mniejsza o dwa od rozmiaru wywietlania. Przykadowo, MySQL automatycznie zmieni FLOAT(6,5) na FLOAT(7,5). Prba wstawienia do kolumny wartoci przekraczajcej dopuszczalny zakres tej kolumny powoduje obcicie tej wartoci do najmniejszej (dla liczb ujemnych) lub najwikszej (dla liczb dodatnich) wartoci dla danej kolumny dopuszczalnej. Jeli takie obcicie jest robione podczas wykonywania instrukcji ALTER TABLE, LOAD DATA INFILE, UPDATE lub wielowierszowej instrukcji INSERT, MySQL pokazuje ostrzeenie. Wyjtkiem jest korzystanie z MySQL w wersji 5 lub nowszej w trybie penej zgodnoci ze standardem SQL, gdy wtedy w przypadku instrukcji INSERT i UPDATE zgaszany jest bd. Atrybutu AUTO_INCREMENT mona uy do co najwyej jednej kolumny cakowitoliczbowej w tabeli. Atrybut UNSIGNED moe by czony z dowolnym liczbowym typem danych. Uycie tego atrybutu powoduje, e do kolumny nie mona wpisywa liczb ujemnych. Atrybut ZEROFILL nakazuje wypenienie kolumny od lewej

Rozdzia 3. Typy danych

23

strony zerami podczas wywietlania jej wartoci. O liczbie tych zer decyduje szeroko wywietlania danej kolumny.

BIGINT
BIGINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Najwikszy z typw cakowitoliczbowych, pozwalajcy zapisywa liczby od 9 223 372 036 854 775 808 do 9 223 372 036 854 775 807 (jeli bez znaku, to od 0 do 18 446 744 073 709 551 615). Z uwagi na sposb realizacji dziaa na liczbach tego typu, naley unika operacji na liczbach BIGINT bez znaku wikszych ni 9 223 372 036 854 775 807, gdy moe to zaowocowa nieprawidowymi wynikami.

BIT
BIT[(bity)]

Rozmiar w pamici w przyblieniu bity bitw+7 lub 8 bitw Opis W wersjach MySQL 5.0.3 i starszych, pola typu BIT dziaay tak samo, jak TINYINT(1). Omawiany typ pola pozwala przechowywa ustalon liczb bitw. Jeli podana zostanie wielko bitw mniejsza od dozwolonej, MySQL wypeni zerami bity od lewej strony.
24 | MySQL. Leksykon kieszonkowy

DEC
Synonim typu DECIMAL.

DECIMAL
DECIMAL[(dokadno, [skala])] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici rnie Opis Pozwala zapisywa liczby zmiennoprzecinkowe w sytuacjach, kiedy istotna jest dokadno na przykad przy operowaniu kwotami pienidzy. Stosujc typ DECIMAL, trzeba poda dwa jego parametry, dokadno i skal. Dokadno to liczba znaczcych cyfr, za skala to liczba znaczcych cyfr po kropce dziesitnej. Przykadowo, kolumna SALDO typu DECIMAL(9,2) pozwoliaby zapisywa liczby dziewiciocyfrowe, przy czym na prawo od kropki dziesitnej mogyby by dwie cyfry. Zakres dopuszczalnych liczb to w takiej sytuacji od 9 999 999,99 do 9 999 999,99. Jeli podana zostanie liczba zawierajca wicej cyfr po przecinku, ni przewiduje to definicja, liczba zostanie zaokrglona. Wartoci spoza zakresu DECIMAL s obcinane tak, aby si w nim zmieciy. W wersjach MySQL starszych ni 5, wartoci DECIMAL nie byy zapisywane jako liczby zmiennoprzecinkowe, lecz jako acuchy znakw. Na kad cyfr zuywany by jeden znak w przypadku skali wikszej od 0, poza tym jeden dodatkowy znak zuywany jest w przypadku liczb ujemnych. Jeli skala wynosi 0, liczby nie maj czci uamkowej. SQL zgodnie z norm ANSI pozwala pomija dokadno i (lub) skal. Jeli brak dokadnoci, przyjmowane jest ustawienie

Rozdzia 3. Typy danych

25

domylne charakterystyczne dla implementacji. Jeli brak skali, przyjmowane jest zero. W MySQL domylna warto dokadnoci to 10.

DOUBLE
DOUBLE[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Liczba zmiennoprzecinkowa podwjnej precyzji. Ten typ danych pozwala zapisywa due wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 1,7976931348623157E+308 do 2,2250738585072014E308, 0 oraz wartoci dodatnie od 2,2250738585072014E308 do 1,7976931348623157E+308.

DOUBLE PRECISION
Synonim DOUBLE.

FLOAT
FLOAT[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 4 bajty

26

MySQL. Leksykon kieszonkowy

Opis Liczba zmiennoprzecinkowa pojedynczej precyzji. Ten typ danych pozwala zapisywa mae wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 3,402823466E+38 do 1,175494351E38, 0 oraz wartoci dodatnie od 1,175494351E38 do 3,402823466E+38.

INT
INT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 4 bajty Opis Podstawowy rodzaj liczb cakowitych od 2 147 483 648 do 2 147 483 647 (lub od 0 do 4 294 967 295 w przypadku liczb bez znaku).

INTEGER
Synonim INT.

MEDIUMINT
MEDIUMINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

27

Opis Liczby cakowite od 8 388 608 do 8 388 607 (lub od 0 do 16 777 215 w przypadku liczb bez znaku).

NUMERIC
Synonim DECIMAL.

REAL
Synonim DOUBLE.

SMALLINT
SMALLINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 2 bajty Opis Liczby cakowite z zakresu od 32 768 do 32 767 (od 0 do 65 535 w przypadku liczb bez znaku).

TINYINT
TINYINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 1 bajt

28

MySQL. Leksykon kieszonkowy

Opis Liczby cakowite od 128 do 127 (od 0 do 255 w przypadku liczb bez znaku).

acuchy
MySQL obsuguje dwie kategorie acuchw: acuchy tekstowe oraz acuchy binarne. Obie kategorie maj swoje specyficzne typy do obsugi rnych wielkoci pl i rnych sposobw porwnywania wartoci. W zalenoci od sposobu porwnywania, mona uwzgldnia bd nie wielko liter, mona te porwnywa dane binarnie (bajt po bajcie). Kiedy nazwa typu tekstowego (jak CHAR, VARCHAR i inne) zostanie oznaczona sowem kluczowym BINARY, kolumna pozostaje kolumn tekstow, ale dane s porwnywane ze sob binarnie.

BINARY
BINARY(rozmiar)

Rozmiar wedug rozmiar, w zakresie od 0 do 255 Rozmiar w pamici


rozmiar bajtw

Opis Typ danych BINARY to binarny odpowiednik typu CHAR. Podstawowa rnica midzy tymi dwoma typami polega na tym, e pole typu BINARY zawiera dane binarne, wielko tych danych jest mierzona nie w znakach, lecz w bajtach. acuchy zawierajce

Rozdzia 3. Typy danych

29

mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie znakami 0x00 (wersja MySQL 5.0.5 i nowsze) lub spacjami (wersje starsze).

BLOB
Binarny odpowiednik typu TEXT.

CHAR
CHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar wedug rozmiar, do 255 Rozmiar w pamici zaleny od rozmiaru i od uytego zestawu znakw Opis Pole tekstowe ustalonej dugoci. acuchy zawierajce mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie spacjami. Podczas pobierania danych z bazy te dodatkowe spacje s usuwane. Pola CHAR(0) zostay zachowane w celu zapewnienia zgodnoci ze starymi systemami, w ktrych w kolumnach nie s zapisywane adne wartoci.

CHARACTER
Synonim CHAR.

30

MySQL. Leksykon kieszonkowy

CHARACTER VARYING
Synonim VARCHAR.

LONGBLOB
Binarny odpowiednik LONGTEXT.

LONGTEXT
LONGTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 4 294 295 Rozmiar w pamici Dugo wartoci+4 bajty Opis Typ pozwala zapisywa due wartoci tekstowe. Teoretyczne ograniczenie rozmiaru tekstu to ponad 4 GB, ale praktycznymi ograniczeniami s ograniczenia protokou komunikacyjnego MySQL oraz ilo pamici przeznaczonej na komunikacj na serwerze i na stacji klienckiej.

MEDIUMBLOB
Binarna posta MEDIUMTEXT.

MEDIUMTEXT
MEDIUMTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozdzia 3. Typy danych

31

Rozmiar 0 do 16 777 215 Rozmiar w pamici Dugo wartoci+3 bajty Opis Typ pozwala zapisywa redniej wielkoci wartoci tekstowe.

NCHAR
Synonim CHAR.

NATIONAL CHAR
Synonim CHAR.

NATIONAL CHARACTER
Synonim CHAR.

NATIONAL VARCHAR
Synonim VARCHAR.

TEXT
TEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 65 535

32

MySQL. Leksykon kieszonkowy

Rozmiar w pamici Dugo wartoci tekstowej+2 bajty Opis Typ pozwala zapisywa typowe wartoci tekstowe.

TINYBLOB
Binarny odpowiednik TINYTEXT.

TINYTEXT
TINYTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 255 Rozmiar w pamici Dugo wartoci tekstowej+1 bajt Opis Pozwala zapisywa krtkie dane tekstowe.

VARBINARY
VARBINARY(rozmiar)

Rozmiar Wedug parametru rozmiar

Rozdzia 3. Typy danych

33

Rozmiar w pamici
rozmiar bajtw

Opis Jest to binarna odmiana typu VARCHAR. Podstawowa rnica polega na tym, e zapisywane s dane binarne, a rozmiar pola mierzony jest w bajtach, nie w znakach. Wielkoci typu VARBINARY, w przeciwiestwie do wartoci typu BINARY, nie s niczym dopeniane.

VARCHAR
VARCHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar Wskazana przez rozmiar warto z zakresu do 65 532 (od 1 do 255 w wersjach wczeniejszych ni MySQL 5); rozmiar wskazuje rzeczywist wielko kolumny i jest ograniczony przez dopuszczaln wielko wiersza w znakach; to, ile miejsca faktycznie bdzie potrzebne, zaley zatem od zestawu znakw uytego w danej kolumnie Rozmiar w pamici Zaley od liczby znakw wskazanych jako rozmiar oraz od liczby bajtw potrzebnych do zapisu poszczeglnych znakw w uytym mechanizmie kodowania znakw Opis Pozwala zapisywa wartoci tekstowe zmiennej dugoci. W wersjach poprzedzajcych MySQL 5 z wartoci VARCHAR usuwane s spacje kocowe; wersja MySQL 5 i nowsze standardowo nie usuwaj spacji kocowych.

34

MySQL. Leksykon kieszonkowy

Daty
Typy datowe MySQL s wyjtkowo elastycznym narzdziem, pozwalajcym zapisywa wszelki informacje dzienne. MySQL jest bardzo tolerancyjny i zakada, e to aplikacja, a nie baza danych, ma sprawdza poprawno tych danych. MySQL sprawdza jedynie, czy miesic nie wykracza poza zakres 0 12 i czy dzie nie wykracza poza zakres 0 31. Wobec tego z punktu widzenia MySQL 31 lutego 2001 roku jest poprawn dat. Bardziej przydatn wartoci jest data 0 lutego 2001 roku; cyfra zero moe zastpowa t cz daty, ktrej dokadnie nie znamy. MySQL 5 jest jednak ju baz danych nieco bardziej restrykcyjn co do wartoci, jakie mona zapisywa w polach datowych. Wprawdzie MySQL dopuszcza do du swobod formatw wejciowych dat, to naley stara si w aplikacjach daty formatowa zgodnie z formatem wewntrznym MySQL w celu uniknicia nieporozumie. MySQL zawsze zakada, e rok jest pierwszym elementem po lewej stronie daty. Jeli w operacji SQL podana zostanie nieprawidowa warto daty, MySQL wstawi w jej miejsce zero. MySQL w kontekcie liczb cakowitych automatycznie konwertuje daty i czas na liczby cakowite.

DATE
DATE

Format
YYYY-MM-DD (2001-01-01)

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

35

Opis Data kalendarza gregoriaskiego z zakresu od 1 stycznia 1000 roku ('1000-01-01') do 31 grudnia 9999 roku ('9999-12-31').

DATETIME
DATETIME

Format
YYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 8 bajtw Opis Zapisuje czas z zakresu od 00:00:00 1 stycznia 1000 roku ('100001-01 00:00:00') do 23:59:59 31 grudnia 9999 ('9999-12-31 23:59:59') wedug kalendarza gregoriaskiego.

TIME
TIME

Format
hh:mm:ss (06:00:00)

Rozmiar w pamici 3 bajty Opis Zapisuje czas od pnocy ('00:00:00') do sekundy przed pnoc ('23:59:59').
36 | MySQL. Leksykon kieszonkowy

TIMESTAMP
TIMESTAMP[(rozmiar_wywietlania)]

Format
YYYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 4 bajty Opis Zapis chwili z dokadnoci do sekundy od pnocy 1 stycznia 1970 roku do minuty przed pnoc 31 grudnia 2037 roku. Podstawowym zastosowaniem tego typu jest rejestracja modyfikacji tabel. Przy wstawianiu do takiej kolumny wartoci NULL wstawiane s aktualna data i czas. W przypadku modyfikowania jakiejkolwiek wartoci w wierszu z kolumn TIMESTAMP pierwsza kolumna tego typu zostanie zaktualizowana biec dat i czasem. Format danych TIMESTAMP znany z wczeniejszych wersji MySQL, do 4.1 wcznie, w wersji 5.1 nie jest ju obsugiwany.

YEAR
YEAR[(rozmiar)]

Format
YYYY (2001)

Rozmiar w pamici 1 bajt

Rozdzia 3. Typy danych

37

Opis Pozwala zapisa rok z kalendarza gregoriaskiego. Parametr rozmiar umoliwia zapisywanie roku dwu- lub czterocyfrowo. Zakres YEAR(4) rozciga si od 1900 do 2155, dla YEAR(2) od 1970 do 2069. Domylnie przyjmowane jest YEAR(4).

Typy zoone
Zoone typy danych MySQL, ENUM i SET, s po prostu specjalnymi przypadkami typw acuchowych. Opisujemy je osobno, gdy s bardziej zoone pojciowo i stanowi wprowadzenie do typw danych SQL3, ktre by moe MySQL bdzie obsugiwa w przyszoci.

ENUM
ENUM(warto1, warto2, ...)

Rozmiar w pamici 1 255 elementw: 1 bajt 255 65 535 elementw: 2 bajty Opis Typ danych ENUM pozwala zapisywa jeden z wielu zdefiniowanych wczeniej acuchw. Przy tworzeniu kolumny typu ENUM podaje si list dopuszczalnych jej wartoci. Dane mog by do tej kolumny wstawiane i aktualizowane jedynie z tej listy; kada prba wstawienia wartoci spoza niej powoduje wstawienie pustego acucha.

38

MySQL. Leksykon kieszonkowy

Do listy dopuszczalnych wartoci mona si odwoywa przez indeks, przy czym pierwszy element otrzymuje numer 0. Na przykad:
SELECT COLID FROM TBL WHERE COLENUM = 0;

Jeli COLID jest kolumn z kluczem gwnym, a COLENUM kolumn typu ENUM, taka instrukcja SQL spowoduje pobranie kluczy gwnych wszystkich wierszy, dla ktrych COLENUM jest pierwsz wartoci z listy. Analogicznie, sortowanie wzgldem kolumn ENUM powoduje sortowanie wedug indeksu, nie acucha. Najwiksza moliwa liczba elementw kolumny ENUM to 65 535.

SET
SET(warto1, warto2, ...)

Rozmiar w pamici 1 8 elementw: 1 bajt 9 16 elementw: 2 bajty 17 24 elementy: 3 bajty 25 32 elementy: 4 bajty 33 64 elementy: 8 bajtw Opis Lista wartoci wybieranych z okrelonego wczeniej zbioru. Pole moe zawiera dowoln liczb acuchw wskazanych w instrukcji SET, szczeglnie moe nie zawiera adnej takiej wartoci. SET jest podobny do ENUM, ale kade pole moe zawiera wicej ni jedn z podanych wartoci. Dane typu SET nie s jednak zapisywane za pomoc indeksw, ale w zoonej mapie bitowej. Jeli dany jest zbir SET, zawierajcy elementy: Mandarynka, Pomidor,
Rozdzia 3. Typy danych | 39

Gruszka i Banan, kady z tych elementw jest reprezentowany jako

wczony bit w bajcie, jak to pokazano w tabeli 3.1.


Tabela 3.1. Reprezentacja zbioru elementw w MySQL
Element
Mandarynka Pomidor Gruszka Banan

Warto dziesitna
1 2 4 8

Zapis bitowy
0001 0010 0100 1000

W powyszym przykadzie zapisanie jednoczenie wartoci Mandarynka i Gruszka wymaga uycia wartoci 5 (bitowo 0101). W kolumnie SET mona zapisa najwyej 64 wartoci. Wprawdzie t sam warto mona w jednym wyraeniu SQL wpisa wielokrotnie, ale w bazie danych warto ta zostanie zapisana raz.

40

MySQL. Leksykon kieszonkowy

4. SQL .............................................................................................. 41
Rozrnianie wielkoci liter Literay Identyfikatory Komentarze Instrukcje Zasady dotyczce transakcji 41 42 43 45 46 106

5. Operatory .................................................................................. 108


Priorytety operatorw Operatory arytmetyczne Operatory porwnania Operatory logiczne 108 109 109 111

6. Funkcje .......................................................................................113
Funkcje agregujce Funkcje oglnego przeznaczenia 113 115

7. Rodzaje tabel ............................................................................ 137 8. Procedury i funkcje skadowane .............................................. 138


Parametry Logika Kursory Obsuga zdarze i warunki 138 139 143 144

9. Trygery ...................................................................................... 146 Skorowidz ................................................................................. 147

MySQL. Leksykon kieszonkowy

Rozdzia 3. Typy danych


We wszystkich typach danych nawiasami kwadratowymi ([]) oznaczane s fragmenty opcjonalne. Poniszy przykad pokazuje sposb prezentacji typu BIGINT, opisanego dalej w tym rozdziale:
BIGINT[(wielko_pokazywana)]

Oznacza to, e sowo BIGINT moe wystpi samodzielnie lub z pokazywan wartoci. Uycie kursywy wskazuje, e nie naley wpisywa sowa wielko_pokazywana, ale poda wasn warto. Oto przykady uycia:
BIGINT BIGINT(20)

Poza typem BIGINT take wiele innych typw danych MySQL uwzgldnia deklaracj rozmiaru wywietlania. Jeli nie powiedziano inaczej, musi to by liczba od 1 do 255. W wersjach MySQL starszych ni wersja 5, baza danych w niektrych przypadkach zmieniaa podany typ kolumny, nie informujc o tym uytkownika. Obecnie takie podmiany nie maj ju miejsca.
VARCHAR -> CHAR

Jeli podana kolumna VARCHAR ma rozmiar mniejszy od czterech znakw, jest przeksztacana w kolumn CHAR.
CHAR -> VARCHAR

Jeli tabela zawiera co najmniej jedn kolumn o zmiennej dugoci, wszystkie kolumny typu CHAR dusze ni trzy znaki s zamieniane na VARCHAR.

Rozmiar wywietlania TIMESTAMP Rozmiar wywietlania pl TIMESTAMP musi by zawsze wielkoci parzyst od 2 do 14. Rozmiar rwny 0 lub wikszy od 14 powoduje przyjcie 14. Wszelkie liczby nieparzyste s zamieniane na nastpn liczb parzyst.

22

MySQL. Leksykon kieszonkowy

Liczby
MySQL obsuguje liczbowe typy danych zgodne z ANSI SQL 2. Typy te dzielimy na cakowitoliczbowe, dziesitne i zmiennoprzecinkowe. W ramach tych grup dzielimy typy dalej, wedug zajmowanej przez nie pamici. W przypadku typw liczbowych mona poda rozmiar wywietlania, ktry wpywa na sposb pokazywania przez MySQL wynikw. Rozmiar ten nie ma adnego zwizku z wielkoci pamici zajmowanej przez dany typ. Dodatkowo w przypadku liczb zmiennoprzecinkowych i dziesitnych mona poda liczb cyfr znajdujcych si za kropk dziesitn. Wtedy liczba cyfr powinna nalee do zakresu od 0 do 30, czyli by co najmniej o dwa mniejsza od rozmiaru wywietlania. Jeli warunek ten nie zostanie dotrzymany, MySQL automatycznie zmieni liczb cyfr tak, aby bya mniejsza o dwa od rozmiaru wywietlania. Przykadowo, MySQL automatycznie zmieni FLOAT(6,5) na FLOAT(7,5). Prba wstawienia do kolumny wartoci przekraczajcej dopuszczalny zakres tej kolumny powoduje obcicie tej wartoci do najmniejszej (dla liczb ujemnych) lub najwikszej (dla liczb dodatnich) wartoci dla danej kolumny dopuszczalnej. Jeli takie obcicie jest robione podczas wykonywania instrukcji ALTER TABLE, LOAD DATA INFILE, UPDATE lub wielowierszowej instrukcji INSERT, MySQL pokazuje ostrzeenie. Wyjtkiem jest korzystanie z MySQL w wersji 5 lub nowszej w trybie penej zgodnoci ze standardem SQL, gdy wtedy w przypadku instrukcji INSERT i UPDATE zgaszany jest bd. Atrybutu AUTO_INCREMENT mona uy do co najwyej jednej kolumny cakowitoliczbowej w tabeli. Atrybut UNSIGNED moe by czony z dowolnym liczbowym typem danych. Uycie tego atrybutu powoduje, e do kolumny nie mona wpisywa liczb ujemnych. Atrybut ZEROFILL nakazuje wypenienie kolumny od lewej

Rozdzia 3. Typy danych

23

strony zerami podczas wywietlania jej wartoci. O liczbie tych zer decyduje szeroko wywietlania danej kolumny.

BIGINT
BIGINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Najwikszy z typw cakowitoliczbowych, pozwalajcy zapisywa liczby od 9 223 372 036 854 775 808 do 9 223 372 036 854 775 807 (jeli bez znaku, to od 0 do 18 446 744 073 709 551 615). Z uwagi na sposb realizacji dziaa na liczbach tego typu, naley unika operacji na liczbach BIGINT bez znaku wikszych ni 9 223 372 036 854 775 807, gdy moe to zaowocowa nieprawidowymi wynikami.

BIT
BIT[(bity)]

Rozmiar w pamici w przyblieniu bity bitw+7 lub 8 bitw Opis W wersjach MySQL 5.0.3 i starszych, pola typu BIT dziaay tak samo, jak TINYINT(1). Omawiany typ pola pozwala przechowywa ustalon liczb bitw. Jeli podana zostanie wielko bitw mniejsza od dozwolonej, MySQL wypeni zerami bity od lewej strony.
24 | MySQL. Leksykon kieszonkowy

DEC
Synonim typu DECIMAL.

DECIMAL
DECIMAL[(dokadno, [skala])] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici rnie Opis Pozwala zapisywa liczby zmiennoprzecinkowe w sytuacjach, kiedy istotna jest dokadno na przykad przy operowaniu kwotami pienidzy. Stosujc typ DECIMAL, trzeba poda dwa jego parametry, dokadno i skal. Dokadno to liczba znaczcych cyfr, za skala to liczba znaczcych cyfr po kropce dziesitnej. Przykadowo, kolumna SALDO typu DECIMAL(9,2) pozwoliaby zapisywa liczby dziewiciocyfrowe, przy czym na prawo od kropki dziesitnej mogyby by dwie cyfry. Zakres dopuszczalnych liczb to w takiej sytuacji od 9 999 999,99 do 9 999 999,99. Jeli podana zostanie liczba zawierajca wicej cyfr po przecinku, ni przewiduje to definicja, liczba zostanie zaokrglona. Wartoci spoza zakresu DECIMAL s obcinane tak, aby si w nim zmieciy. W wersjach MySQL starszych ni 5, wartoci DECIMAL nie byy zapisywane jako liczby zmiennoprzecinkowe, lecz jako acuchy znakw. Na kad cyfr zuywany by jeden znak w przypadku skali wikszej od 0, poza tym jeden dodatkowy znak zuywany jest w przypadku liczb ujemnych. Jeli skala wynosi 0, liczby nie maj czci uamkowej. SQL zgodnie z norm ANSI pozwala pomija dokadno i (lub) skal. Jeli brak dokadnoci, przyjmowane jest ustawienie

Rozdzia 3. Typy danych

25

domylne charakterystyczne dla implementacji. Jeli brak skali, przyjmowane jest zero. W MySQL domylna warto dokadnoci to 10.

DOUBLE
DOUBLE[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Liczba zmiennoprzecinkowa podwjnej precyzji. Ten typ danych pozwala zapisywa due wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 1,7976931348623157E+308 do 2,2250738585072014E308, 0 oraz wartoci dodatnie od 2,2250738585072014E308 do 1,7976931348623157E+308.

DOUBLE PRECISION
Synonim DOUBLE.

FLOAT
FLOAT[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 4 bajty

26

MySQL. Leksykon kieszonkowy

Opis Liczba zmiennoprzecinkowa pojedynczej precyzji. Ten typ danych pozwala zapisywa mae wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 3,402823466E+38 do 1,175494351E38, 0 oraz wartoci dodatnie od 1,175494351E38 do 3,402823466E+38.

INT
INT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 4 bajty Opis Podstawowy rodzaj liczb cakowitych od 2 147 483 648 do 2 147 483 647 (lub od 0 do 4 294 967 295 w przypadku liczb bez znaku).

INTEGER
Synonim INT.

MEDIUMINT
MEDIUMINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

27

Opis Liczby cakowite od 8 388 608 do 8 388 607 (lub od 0 do 16 777 215 w przypadku liczb bez znaku).

NUMERIC
Synonim DECIMAL.

REAL
Synonim DOUBLE.

SMALLINT
SMALLINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 2 bajty Opis Liczby cakowite z zakresu od 32 768 do 32 767 (od 0 do 65 535 w przypadku liczb bez znaku).

TINYINT
TINYINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 1 bajt

28

MySQL. Leksykon kieszonkowy

Opis Liczby cakowite od 128 do 127 (od 0 do 255 w przypadku liczb bez znaku).

acuchy
MySQL obsuguje dwie kategorie acuchw: acuchy tekstowe oraz acuchy binarne. Obie kategorie maj swoje specyficzne typy do obsugi rnych wielkoci pl i rnych sposobw porwnywania wartoci. W zalenoci od sposobu porwnywania, mona uwzgldnia bd nie wielko liter, mona te porwnywa dane binarnie (bajt po bajcie). Kiedy nazwa typu tekstowego (jak CHAR, VARCHAR i inne) zostanie oznaczona sowem kluczowym BINARY, kolumna pozostaje kolumn tekstow, ale dane s porwnywane ze sob binarnie.

BINARY
BINARY(rozmiar)

Rozmiar wedug rozmiar, w zakresie od 0 do 255 Rozmiar w pamici


rozmiar bajtw

Opis Typ danych BINARY to binarny odpowiednik typu CHAR. Podstawowa rnica midzy tymi dwoma typami polega na tym, e pole typu BINARY zawiera dane binarne, wielko tych danych jest mierzona nie w znakach, lecz w bajtach. acuchy zawierajce

Rozdzia 3. Typy danych

29

mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie znakami 0x00 (wersja MySQL 5.0.5 i nowsze) lub spacjami (wersje starsze).

BLOB
Binarny odpowiednik typu TEXT.

CHAR
CHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar wedug rozmiar, do 255 Rozmiar w pamici zaleny od rozmiaru i od uytego zestawu znakw Opis Pole tekstowe ustalonej dugoci. acuchy zawierajce mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie spacjami. Podczas pobierania danych z bazy te dodatkowe spacje s usuwane. Pola CHAR(0) zostay zachowane w celu zapewnienia zgodnoci ze starymi systemami, w ktrych w kolumnach nie s zapisywane adne wartoci.

CHARACTER
Synonim CHAR.

30

MySQL. Leksykon kieszonkowy

CHARACTER VARYING
Synonim VARCHAR.

LONGBLOB
Binarny odpowiednik LONGTEXT.

LONGTEXT
LONGTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 4 294 295 Rozmiar w pamici Dugo wartoci+4 bajty Opis Typ pozwala zapisywa due wartoci tekstowe. Teoretyczne ograniczenie rozmiaru tekstu to ponad 4 GB, ale praktycznymi ograniczeniami s ograniczenia protokou komunikacyjnego MySQL oraz ilo pamici przeznaczonej na komunikacj na serwerze i na stacji klienckiej.

MEDIUMBLOB
Binarna posta MEDIUMTEXT.

MEDIUMTEXT
MEDIUMTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozdzia 3. Typy danych

31

Rozmiar 0 do 16 777 215 Rozmiar w pamici Dugo wartoci+3 bajty Opis Typ pozwala zapisywa redniej wielkoci wartoci tekstowe.

NCHAR
Synonim CHAR.

NATIONAL CHAR
Synonim CHAR.

NATIONAL CHARACTER
Synonim CHAR.

NATIONAL VARCHAR
Synonim VARCHAR.

TEXT
TEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 65 535

32

MySQL. Leksykon kieszonkowy

Rozmiar w pamici Dugo wartoci tekstowej+2 bajty Opis Typ pozwala zapisywa typowe wartoci tekstowe.

TINYBLOB
Binarny odpowiednik TINYTEXT.

TINYTEXT
TINYTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 255 Rozmiar w pamici Dugo wartoci tekstowej+1 bajt Opis Pozwala zapisywa krtkie dane tekstowe.

VARBINARY
VARBINARY(rozmiar)

Rozmiar Wedug parametru rozmiar

Rozdzia 3. Typy danych

33

Rozmiar w pamici
rozmiar bajtw

Opis Jest to binarna odmiana typu VARCHAR. Podstawowa rnica polega na tym, e zapisywane s dane binarne, a rozmiar pola mierzony jest w bajtach, nie w znakach. Wielkoci typu VARBINARY, w przeciwiestwie do wartoci typu BINARY, nie s niczym dopeniane.

VARCHAR
VARCHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar Wskazana przez rozmiar warto z zakresu do 65 532 (od 1 do 255 w wersjach wczeniejszych ni MySQL 5); rozmiar wskazuje rzeczywist wielko kolumny i jest ograniczony przez dopuszczaln wielko wiersza w znakach; to, ile miejsca faktycznie bdzie potrzebne, zaley zatem od zestawu znakw uytego w danej kolumnie Rozmiar w pamici Zaley od liczby znakw wskazanych jako rozmiar oraz od liczby bajtw potrzebnych do zapisu poszczeglnych znakw w uytym mechanizmie kodowania znakw Opis Pozwala zapisywa wartoci tekstowe zmiennej dugoci. W wersjach poprzedzajcych MySQL 5 z wartoci VARCHAR usuwane s spacje kocowe; wersja MySQL 5 i nowsze standardowo nie usuwaj spacji kocowych.

34

MySQL. Leksykon kieszonkowy

Daty
Typy datowe MySQL s wyjtkowo elastycznym narzdziem, pozwalajcym zapisywa wszelki informacje dzienne. MySQL jest bardzo tolerancyjny i zakada, e to aplikacja, a nie baza danych, ma sprawdza poprawno tych danych. MySQL sprawdza jedynie, czy miesic nie wykracza poza zakres 0 12 i czy dzie nie wykracza poza zakres 0 31. Wobec tego z punktu widzenia MySQL 31 lutego 2001 roku jest poprawn dat. Bardziej przydatn wartoci jest data 0 lutego 2001 roku; cyfra zero moe zastpowa t cz daty, ktrej dokadnie nie znamy. MySQL 5 jest jednak ju baz danych nieco bardziej restrykcyjn co do wartoci, jakie mona zapisywa w polach datowych. Wprawdzie MySQL dopuszcza do du swobod formatw wejciowych dat, to naley stara si w aplikacjach daty formatowa zgodnie z formatem wewntrznym MySQL w celu uniknicia nieporozumie. MySQL zawsze zakada, e rok jest pierwszym elementem po lewej stronie daty. Jeli w operacji SQL podana zostanie nieprawidowa warto daty, MySQL wstawi w jej miejsce zero. MySQL w kontekcie liczb cakowitych automatycznie konwertuje daty i czas na liczby cakowite.

DATE
DATE

Format
YYYY-MM-DD (2001-01-01)

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

35

Opis Data kalendarza gregoriaskiego z zakresu od 1 stycznia 1000 roku ('1000-01-01') do 31 grudnia 9999 roku ('9999-12-31').

DATETIME
DATETIME

Format
YYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 8 bajtw Opis Zapisuje czas z zakresu od 00:00:00 1 stycznia 1000 roku ('100001-01 00:00:00') do 23:59:59 31 grudnia 9999 ('9999-12-31 23:59:59') wedug kalendarza gregoriaskiego.

TIME
TIME

Format
hh:mm:ss (06:00:00)

Rozmiar w pamici 3 bajty Opis Zapisuje czas od pnocy ('00:00:00') do sekundy przed pnoc ('23:59:59').
36 | MySQL. Leksykon kieszonkowy

TIMESTAMP
TIMESTAMP[(rozmiar_wywietlania)]

Format
YYYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 4 bajty Opis Zapis chwili z dokadnoci do sekundy od pnocy 1 stycznia 1970 roku do minuty przed pnoc 31 grudnia 2037 roku. Podstawowym zastosowaniem tego typu jest rejestracja modyfikacji tabel. Przy wstawianiu do takiej kolumny wartoci NULL wstawiane s aktualna data i czas. W przypadku modyfikowania jakiejkolwiek wartoci w wierszu z kolumn TIMESTAMP pierwsza kolumna tego typu zostanie zaktualizowana biec dat i czasem. Format danych TIMESTAMP znany z wczeniejszych wersji MySQL, do 4.1 wcznie, w wersji 5.1 nie jest ju obsugiwany.

YEAR
YEAR[(rozmiar)]

Format
YYYY (2001)

Rozmiar w pamici 1 bajt

Rozdzia 3. Typy danych

37

Opis Pozwala zapisa rok z kalendarza gregoriaskiego. Parametr rozmiar umoliwia zapisywanie roku dwu- lub czterocyfrowo. Zakres YEAR(4) rozciga si od 1900 do 2155, dla YEAR(2) od 1970 do 2069. Domylnie przyjmowane jest YEAR(4).

Typy zoone
Zoone typy danych MySQL, ENUM i SET, s po prostu specjalnymi przypadkami typw acuchowych. Opisujemy je osobno, gdy s bardziej zoone pojciowo i stanowi wprowadzenie do typw danych SQL3, ktre by moe MySQL bdzie obsugiwa w przyszoci.

ENUM
ENUM(warto1, warto2, ...)

Rozmiar w pamici 1 255 elementw: 1 bajt 255 65 535 elementw: 2 bajty Opis Typ danych ENUM pozwala zapisywa jeden z wielu zdefiniowanych wczeniej acuchw. Przy tworzeniu kolumny typu ENUM podaje si list dopuszczalnych jej wartoci. Dane mog by do tej kolumny wstawiane i aktualizowane jedynie z tej listy; kada prba wstawienia wartoci spoza niej powoduje wstawienie pustego acucha.

38

MySQL. Leksykon kieszonkowy

Do listy dopuszczalnych wartoci mona si odwoywa przez indeks, przy czym pierwszy element otrzymuje numer 0. Na przykad:
SELECT COLID FROM TBL WHERE COLENUM = 0;

Jeli COLID jest kolumn z kluczem gwnym, a COLENUM kolumn typu ENUM, taka instrukcja SQL spowoduje pobranie kluczy gwnych wszystkich wierszy, dla ktrych COLENUM jest pierwsz wartoci z listy. Analogicznie, sortowanie wzgldem kolumn ENUM powoduje sortowanie wedug indeksu, nie acucha. Najwiksza moliwa liczba elementw kolumny ENUM to 65 535.

SET
SET(warto1, warto2, ...)

Rozmiar w pamici 1 8 elementw: 1 bajt 9 16 elementw: 2 bajty 17 24 elementy: 3 bajty 25 32 elementy: 4 bajty 33 64 elementy: 8 bajtw Opis Lista wartoci wybieranych z okrelonego wczeniej zbioru. Pole moe zawiera dowoln liczb acuchw wskazanych w instrukcji SET, szczeglnie moe nie zawiera adnej takiej wartoci. SET jest podobny do ENUM, ale kade pole moe zawiera wicej ni jedn z podanych wartoci. Dane typu SET nie s jednak zapisywane za pomoc indeksw, ale w zoonej mapie bitowej. Jeli dany jest zbir SET, zawierajcy elementy: Mandarynka, Pomidor,
Rozdzia 3. Typy danych | 39

Gruszka i Banan, kady z tych elementw jest reprezentowany jako

wczony bit w bajcie, jak to pokazano w tabeli 3.1.


Tabela 3.1. Reprezentacja zbioru elementw w MySQL
Element
Mandarynka Pomidor Gruszka Banan

Warto dziesitna
1 2 4 8

Zapis bitowy
0001 0010 0100 1000

W powyszym przykadzie zapisanie jednoczenie wartoci Mandarynka i Gruszka wymaga uycia wartoci 5 (bitowo 0101). W kolumnie SET mona zapisa najwyej 64 wartoci. Wprawdzie t sam warto mona w jednym wyraeniu SQL wpisa wielokrotnie, ale w bazie danych warto ta zostanie zapisana raz.

40

MySQL. Leksykon kieszonkowy

MySQL. Leksykon kieszonkowy. II wydanie


Autor: George Reese Tumaczenie: Tomasz mijewski ISBN: 978-83-246-1385-4 Tytu oryginau: MySQL Pocket Reference, 2nd Ed Format: B6, stron: 160 MySQL to jeden z najpopularniejszych systemw zarzdzania bazami danych Rozprowadzany na zasadzie open source, MySQL jest wykorzystywany jako zaplecze bazodanowe setek tysicy serwisw WWW, sklepw internetowych, blogw i galerii. Coraz czciej sigaj po niego take twrcy rozbudowanych aplikacji korporacyjnych, poszukujcy stabilnej, bezpiecznej i wydajnej platformy do przechowywania danych. W najnowszej wersji, oznaczonej symbolem 5.0, dodano wiele od dawna oczekiwanych funkcji, w tym procedury skadowane, wyzwalacze, kursory i widoki. Poprawiono take mechanizmy skadowania danych. Jeli jeste administratorem lub programist baz danych, ksika MySQL. Leksykon kieszonkowy. II wydanie bdzie dla Ciebie nieocenion pomoc. W skondensowanej formie przedstawiono w niej wszystkie najistotniejsze zagadnienia zwizane z instalacj i konfiguracj tego systemu, a take z zarzdzaniem nim i wykorzystywaniem go. Znajdziesz tu omwienie typw danych, polece jzyka SQL, funkcji i rodzajw tabel. Przeczytasz take o replikacji, procedurach skadowanych, narzdziach dostpnych z wiersza polece i wyzwalaczach.
Pobieranie i instalacja MySQL Replikacja danych Narzdzia wiersza polece Typy danych Polecenia SQL Operatory Procedury skadowane

Dziki tej ksice Twoja praca z MySQL stanie si szybsza i efektywniejsza Wydawnictwo Helion ul. Kociuszki 1c 44-100 Gliwice tel. 032 230 98 63 e-mail: helion@helion.pl

Spis treci

Wstp ............................................................................................5 MySQL 5 ........................................................................................7


Widoki Trygery Procedury skadowane Kursory Nowe mechanizmy skadowania danych Zdarzenia bazy danych 7 7 7 8 8 9

1. Instalacja ..................................................................................... 10
Pobieranie MySQL Konfiguracja Uruchomienie Ustawianie hasa gwnego Replikacja 10 11 14 15 15

2. Narzdzia wiersza polece ........................................................ 18 3. Typy danych ................................................................................22


Liczby acuchy 23 29

4. SQL .............................................................................................. 41
Rozrnianie wielkoci liter Literay Identyfikatory Komentarze Instrukcje Zasady dotyczce transakcji 41 42 43 45 46 106

5. Operatory .................................................................................. 108


Priorytety operatorw Operatory arytmetyczne Operatory porwnania Operatory logiczne 108 109 109 111

6. Funkcje .......................................................................................113
Funkcje agregujce Funkcje oglnego przeznaczenia 113 115

7. Rodzaje tabel ............................................................................ 137 8. Procedury i funkcje skadowane .............................................. 138


Parametry Logika Kursory Obsuga zdarze i warunki 138 139 143 144

9. Trygery ...................................................................................... 146 Skorowidz ................................................................................. 147

MySQL. Leksykon kieszonkowy

Rozdzia 3. Typy danych


We wszystkich typach danych nawiasami kwadratowymi ([]) oznaczane s fragmenty opcjonalne. Poniszy przykad pokazuje sposb prezentacji typu BIGINT, opisanego dalej w tym rozdziale:
BIGINT[(wielko_pokazywana)]

Oznacza to, e sowo BIGINT moe wystpi samodzielnie lub z pokazywan wartoci. Uycie kursywy wskazuje, e nie naley wpisywa sowa wielko_pokazywana, ale poda wasn warto. Oto przykady uycia:
BIGINT BIGINT(20)

Poza typem BIGINT take wiele innych typw danych MySQL uwzgldnia deklaracj rozmiaru wywietlania. Jeli nie powiedziano inaczej, musi to by liczba od 1 do 255. W wersjach MySQL starszych ni wersja 5, baza danych w niektrych przypadkach zmieniaa podany typ kolumny, nie informujc o tym uytkownika. Obecnie takie podmiany nie maj ju miejsca.
VARCHAR -> CHAR

Jeli podana kolumna VARCHAR ma rozmiar mniejszy od czterech znakw, jest przeksztacana w kolumn CHAR.
CHAR -> VARCHAR

Jeli tabela zawiera co najmniej jedn kolumn o zmiennej dugoci, wszystkie kolumny typu CHAR dusze ni trzy znaki s zamieniane na VARCHAR.

Rozmiar wywietlania TIMESTAMP Rozmiar wywietlania pl TIMESTAMP musi by zawsze wielkoci parzyst od 2 do 14. Rozmiar rwny 0 lub wikszy od 14 powoduje przyjcie 14. Wszelkie liczby nieparzyste s zamieniane na nastpn liczb parzyst.

22

MySQL. Leksykon kieszonkowy

Liczby
MySQL obsuguje liczbowe typy danych zgodne z ANSI SQL 2. Typy te dzielimy na cakowitoliczbowe, dziesitne i zmiennoprzecinkowe. W ramach tych grup dzielimy typy dalej, wedug zajmowanej przez nie pamici. W przypadku typw liczbowych mona poda rozmiar wywietlania, ktry wpywa na sposb pokazywania przez MySQL wynikw. Rozmiar ten nie ma adnego zwizku z wielkoci pamici zajmowanej przez dany typ. Dodatkowo w przypadku liczb zmiennoprzecinkowych i dziesitnych mona poda liczb cyfr znajdujcych si za kropk dziesitn. Wtedy liczba cyfr powinna nalee do zakresu od 0 do 30, czyli by co najmniej o dwa mniejsza od rozmiaru wywietlania. Jeli warunek ten nie zostanie dotrzymany, MySQL automatycznie zmieni liczb cyfr tak, aby bya mniejsza o dwa od rozmiaru wywietlania. Przykadowo, MySQL automatycznie zmieni FLOAT(6,5) na FLOAT(7,5). Prba wstawienia do kolumny wartoci przekraczajcej dopuszczalny zakres tej kolumny powoduje obcicie tej wartoci do najmniejszej (dla liczb ujemnych) lub najwikszej (dla liczb dodatnich) wartoci dla danej kolumny dopuszczalnej. Jeli takie obcicie jest robione podczas wykonywania instrukcji ALTER TABLE, LOAD DATA INFILE, UPDATE lub wielowierszowej instrukcji INSERT, MySQL pokazuje ostrzeenie. Wyjtkiem jest korzystanie z MySQL w wersji 5 lub nowszej w trybie penej zgodnoci ze standardem SQL, gdy wtedy w przypadku instrukcji INSERT i UPDATE zgaszany jest bd. Atrybutu AUTO_INCREMENT mona uy do co najwyej jednej kolumny cakowitoliczbowej w tabeli. Atrybut UNSIGNED moe by czony z dowolnym liczbowym typem danych. Uycie tego atrybutu powoduje, e do kolumny nie mona wpisywa liczb ujemnych. Atrybut ZEROFILL nakazuje wypenienie kolumny od lewej

Rozdzia 3. Typy danych

23

strony zerami podczas wywietlania jej wartoci. O liczbie tych zer decyduje szeroko wywietlania danej kolumny.

BIGINT
BIGINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Najwikszy z typw cakowitoliczbowych, pozwalajcy zapisywa liczby od 9 223 372 036 854 775 808 do 9 223 372 036 854 775 807 (jeli bez znaku, to od 0 do 18 446 744 073 709 551 615). Z uwagi na sposb realizacji dziaa na liczbach tego typu, naley unika operacji na liczbach BIGINT bez znaku wikszych ni 9 223 372 036 854 775 807, gdy moe to zaowocowa nieprawidowymi wynikami.

BIT
BIT[(bity)]

Rozmiar w pamici w przyblieniu bity bitw+7 lub 8 bitw Opis W wersjach MySQL 5.0.3 i starszych, pola typu BIT dziaay tak samo, jak TINYINT(1). Omawiany typ pola pozwala przechowywa ustalon liczb bitw. Jeli podana zostanie wielko bitw mniejsza od dozwolonej, MySQL wypeni zerami bity od lewej strony.
24 | MySQL. Leksykon kieszonkowy

DEC
Synonim typu DECIMAL.

DECIMAL
DECIMAL[(dokadno, [skala])] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici rnie Opis Pozwala zapisywa liczby zmiennoprzecinkowe w sytuacjach, kiedy istotna jest dokadno na przykad przy operowaniu kwotami pienidzy. Stosujc typ DECIMAL, trzeba poda dwa jego parametry, dokadno i skal. Dokadno to liczba znaczcych cyfr, za skala to liczba znaczcych cyfr po kropce dziesitnej. Przykadowo, kolumna SALDO typu DECIMAL(9,2) pozwoliaby zapisywa liczby dziewiciocyfrowe, przy czym na prawo od kropki dziesitnej mogyby by dwie cyfry. Zakres dopuszczalnych liczb to w takiej sytuacji od 9 999 999,99 do 9 999 999,99. Jeli podana zostanie liczba zawierajca wicej cyfr po przecinku, ni przewiduje to definicja, liczba zostanie zaokrglona. Wartoci spoza zakresu DECIMAL s obcinane tak, aby si w nim zmieciy. W wersjach MySQL starszych ni 5, wartoci DECIMAL nie byy zapisywane jako liczby zmiennoprzecinkowe, lecz jako acuchy znakw. Na kad cyfr zuywany by jeden znak w przypadku skali wikszej od 0, poza tym jeden dodatkowy znak zuywany jest w przypadku liczb ujemnych. Jeli skala wynosi 0, liczby nie maj czci uamkowej. SQL zgodnie z norm ANSI pozwala pomija dokadno i (lub) skal. Jeli brak dokadnoci, przyjmowane jest ustawienie

Rozdzia 3. Typy danych

25

domylne charakterystyczne dla implementacji. Jeli brak skali, przyjmowane jest zero. W MySQL domylna warto dokadnoci to 10.

DOUBLE
DOUBLE[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Liczba zmiennoprzecinkowa podwjnej precyzji. Ten typ danych pozwala zapisywa due wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 1,7976931348623157E+308 do 2,2250738585072014E308, 0 oraz wartoci dodatnie od 2,2250738585072014E308 do 1,7976931348623157E+308.

DOUBLE PRECISION
Synonim DOUBLE.

FLOAT
FLOAT[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 4 bajty

26

MySQL. Leksykon kieszonkowy

Opis Liczba zmiennoprzecinkowa pojedynczej precyzji. Ten typ danych pozwala zapisywa mae wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 3,402823466E+38 do 1,175494351E38, 0 oraz wartoci dodatnie od 1,175494351E38 do 3,402823466E+38.

INT
INT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 4 bajty Opis Podstawowy rodzaj liczb cakowitych od 2 147 483 648 do 2 147 483 647 (lub od 0 do 4 294 967 295 w przypadku liczb bez znaku).

INTEGER
Synonim INT.

MEDIUMINT
MEDIUMINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

27

Opis Liczby cakowite od 8 388 608 do 8 388 607 (lub od 0 do 16 777 215 w przypadku liczb bez znaku).

NUMERIC
Synonim DECIMAL.

REAL
Synonim DOUBLE.

SMALLINT
SMALLINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 2 bajty Opis Liczby cakowite z zakresu od 32 768 do 32 767 (od 0 do 65 535 w przypadku liczb bez znaku).

TINYINT
TINYINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 1 bajt

28

MySQL. Leksykon kieszonkowy

Opis Liczby cakowite od 128 do 127 (od 0 do 255 w przypadku liczb bez znaku).

acuchy
MySQL obsuguje dwie kategorie acuchw: acuchy tekstowe oraz acuchy binarne. Obie kategorie maj swoje specyficzne typy do obsugi rnych wielkoci pl i rnych sposobw porwnywania wartoci. W zalenoci od sposobu porwnywania, mona uwzgldnia bd nie wielko liter, mona te porwnywa dane binarnie (bajt po bajcie). Kiedy nazwa typu tekstowego (jak CHAR, VARCHAR i inne) zostanie oznaczona sowem kluczowym BINARY, kolumna pozostaje kolumn tekstow, ale dane s porwnywane ze sob binarnie.

BINARY
BINARY(rozmiar)

Rozmiar wedug rozmiar, w zakresie od 0 do 255 Rozmiar w pamici


rozmiar bajtw

Opis Typ danych BINARY to binarny odpowiednik typu CHAR. Podstawowa rnica midzy tymi dwoma typami polega na tym, e pole typu BINARY zawiera dane binarne, wielko tych danych jest mierzona nie w znakach, lecz w bajtach. acuchy zawierajce

Rozdzia 3. Typy danych

29

mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie znakami 0x00 (wersja MySQL 5.0.5 i nowsze) lub spacjami (wersje starsze).

BLOB
Binarny odpowiednik typu TEXT.

CHAR
CHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar wedug rozmiar, do 255 Rozmiar w pamici zaleny od rozmiaru i od uytego zestawu znakw Opis Pole tekstowe ustalonej dugoci. acuchy zawierajce mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie spacjami. Podczas pobierania danych z bazy te dodatkowe spacje s usuwane. Pola CHAR(0) zostay zachowane w celu zapewnienia zgodnoci ze starymi systemami, w ktrych w kolumnach nie s zapisywane adne wartoci.

CHARACTER
Synonim CHAR.

30

MySQL. Leksykon kieszonkowy

CHARACTER VARYING
Synonim VARCHAR.

LONGBLOB
Binarny odpowiednik LONGTEXT.

LONGTEXT
LONGTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 4 294 295 Rozmiar w pamici Dugo wartoci+4 bajty Opis Typ pozwala zapisywa due wartoci tekstowe. Teoretyczne ograniczenie rozmiaru tekstu to ponad 4 GB, ale praktycznymi ograniczeniami s ograniczenia protokou komunikacyjnego MySQL oraz ilo pamici przeznaczonej na komunikacj na serwerze i na stacji klienckiej.

MEDIUMBLOB
Binarna posta MEDIUMTEXT.

MEDIUMTEXT
MEDIUMTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozdzia 3. Typy danych

31

Rozmiar 0 do 16 777 215 Rozmiar w pamici Dugo wartoci+3 bajty Opis Typ pozwala zapisywa redniej wielkoci wartoci tekstowe.

NCHAR
Synonim CHAR.

NATIONAL CHAR
Synonim CHAR.

NATIONAL CHARACTER
Synonim CHAR.

NATIONAL VARCHAR
Synonim VARCHAR.

TEXT
TEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 65 535

32

MySQL. Leksykon kieszonkowy

Rozmiar w pamici Dugo wartoci tekstowej+2 bajty Opis Typ pozwala zapisywa typowe wartoci tekstowe.

TINYBLOB
Binarny odpowiednik TINYTEXT.

TINYTEXT
TINYTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 255 Rozmiar w pamici Dugo wartoci tekstowej+1 bajt Opis Pozwala zapisywa krtkie dane tekstowe.

VARBINARY
VARBINARY(rozmiar)

Rozmiar Wedug parametru rozmiar

Rozdzia 3. Typy danych

33

Rozmiar w pamici
rozmiar bajtw

Opis Jest to binarna odmiana typu VARCHAR. Podstawowa rnica polega na tym, e zapisywane s dane binarne, a rozmiar pola mierzony jest w bajtach, nie w znakach. Wielkoci typu VARBINARY, w przeciwiestwie do wartoci typu BINARY, nie s niczym dopeniane.

VARCHAR
VARCHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar Wskazana przez rozmiar warto z zakresu do 65 532 (od 1 do 255 w wersjach wczeniejszych ni MySQL 5); rozmiar wskazuje rzeczywist wielko kolumny i jest ograniczony przez dopuszczaln wielko wiersza w znakach; to, ile miejsca faktycznie bdzie potrzebne, zaley zatem od zestawu znakw uytego w danej kolumnie Rozmiar w pamici Zaley od liczby znakw wskazanych jako rozmiar oraz od liczby bajtw potrzebnych do zapisu poszczeglnych znakw w uytym mechanizmie kodowania znakw Opis Pozwala zapisywa wartoci tekstowe zmiennej dugoci. W wersjach poprzedzajcych MySQL 5 z wartoci VARCHAR usuwane s spacje kocowe; wersja MySQL 5 i nowsze standardowo nie usuwaj spacji kocowych.

34

MySQL. Leksykon kieszonkowy

Daty
Typy datowe MySQL s wyjtkowo elastycznym narzdziem, pozwalajcym zapisywa wszelki informacje dzienne. MySQL jest bardzo tolerancyjny i zakada, e to aplikacja, a nie baza danych, ma sprawdza poprawno tych danych. MySQL sprawdza jedynie, czy miesic nie wykracza poza zakres 0 12 i czy dzie nie wykracza poza zakres 0 31. Wobec tego z punktu widzenia MySQL 31 lutego 2001 roku jest poprawn dat. Bardziej przydatn wartoci jest data 0 lutego 2001 roku; cyfra zero moe zastpowa t cz daty, ktrej dokadnie nie znamy. MySQL 5 jest jednak ju baz danych nieco bardziej restrykcyjn co do wartoci, jakie mona zapisywa w polach datowych. Wprawdzie MySQL dopuszcza do du swobod formatw wejciowych dat, to naley stara si w aplikacjach daty formatowa zgodnie z formatem wewntrznym MySQL w celu uniknicia nieporozumie. MySQL zawsze zakada, e rok jest pierwszym elementem po lewej stronie daty. Jeli w operacji SQL podana zostanie nieprawidowa warto daty, MySQL wstawi w jej miejsce zero. MySQL w kontekcie liczb cakowitych automatycznie konwertuje daty i czas na liczby cakowite.

DATE
DATE

Format
YYYY-MM-DD (2001-01-01)

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

35

Opis Data kalendarza gregoriaskiego z zakresu od 1 stycznia 1000 roku ('1000-01-01') do 31 grudnia 9999 roku ('9999-12-31').

DATETIME
DATETIME

Format
YYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 8 bajtw Opis Zapisuje czas z zakresu od 00:00:00 1 stycznia 1000 roku ('100001-01 00:00:00') do 23:59:59 31 grudnia 9999 ('9999-12-31 23:59:59') wedug kalendarza gregoriaskiego.

TIME
TIME

Format
hh:mm:ss (06:00:00)

Rozmiar w pamici 3 bajty Opis Zapisuje czas od pnocy ('00:00:00') do sekundy przed pnoc ('23:59:59').
36 | MySQL. Leksykon kieszonkowy

TIMESTAMP
TIMESTAMP[(rozmiar_wywietlania)]

Format
YYYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 4 bajty Opis Zapis chwili z dokadnoci do sekundy od pnocy 1 stycznia 1970 roku do minuty przed pnoc 31 grudnia 2037 roku. Podstawowym zastosowaniem tego typu jest rejestracja modyfikacji tabel. Przy wstawianiu do takiej kolumny wartoci NULL wstawiane s aktualna data i czas. W przypadku modyfikowania jakiejkolwiek wartoci w wierszu z kolumn TIMESTAMP pierwsza kolumna tego typu zostanie zaktualizowana biec dat i czasem. Format danych TIMESTAMP znany z wczeniejszych wersji MySQL, do 4.1 wcznie, w wersji 5.1 nie jest ju obsugiwany.

YEAR
YEAR[(rozmiar)]

Format
YYYY (2001)

Rozmiar w pamici 1 bajt

Rozdzia 3. Typy danych

37

Opis Pozwala zapisa rok z kalendarza gregoriaskiego. Parametr rozmiar umoliwia zapisywanie roku dwu- lub czterocyfrowo. Zakres YEAR(4) rozciga si od 1900 do 2155, dla YEAR(2) od 1970 do 2069. Domylnie przyjmowane jest YEAR(4).

Typy zoone
Zoone typy danych MySQL, ENUM i SET, s po prostu specjalnymi przypadkami typw acuchowych. Opisujemy je osobno, gdy s bardziej zoone pojciowo i stanowi wprowadzenie do typw danych SQL3, ktre by moe MySQL bdzie obsugiwa w przyszoci.

ENUM
ENUM(warto1, warto2, ...)

Rozmiar w pamici 1 255 elementw: 1 bajt 255 65 535 elementw: 2 bajty Opis Typ danych ENUM pozwala zapisywa jeden z wielu zdefiniowanych wczeniej acuchw. Przy tworzeniu kolumny typu ENUM podaje si list dopuszczalnych jej wartoci. Dane mog by do tej kolumny wstawiane i aktualizowane jedynie z tej listy; kada prba wstawienia wartoci spoza niej powoduje wstawienie pustego acucha.

38

MySQL. Leksykon kieszonkowy

Do listy dopuszczalnych wartoci mona si odwoywa przez indeks, przy czym pierwszy element otrzymuje numer 0. Na przykad:
SELECT COLID FROM TBL WHERE COLENUM = 0;

Jeli COLID jest kolumn z kluczem gwnym, a COLENUM kolumn typu ENUM, taka instrukcja SQL spowoduje pobranie kluczy gwnych wszystkich wierszy, dla ktrych COLENUM jest pierwsz wartoci z listy. Analogicznie, sortowanie wzgldem kolumn ENUM powoduje sortowanie wedug indeksu, nie acucha. Najwiksza moliwa liczba elementw kolumny ENUM to 65 535.

SET
SET(warto1, warto2, ...)

Rozmiar w pamici 1 8 elementw: 1 bajt 9 16 elementw: 2 bajty 17 24 elementy: 3 bajty 25 32 elementy: 4 bajty 33 64 elementy: 8 bajtw Opis Lista wartoci wybieranych z okrelonego wczeniej zbioru. Pole moe zawiera dowoln liczb acuchw wskazanych w instrukcji SET, szczeglnie moe nie zawiera adnej takiej wartoci. SET jest podobny do ENUM, ale kade pole moe zawiera wicej ni jedn z podanych wartoci. Dane typu SET nie s jednak zapisywane za pomoc indeksw, ale w zoonej mapie bitowej. Jeli dany jest zbir SET, zawierajcy elementy: Mandarynka, Pomidor,
Rozdzia 3. Typy danych | 39

Gruszka i Banan, kady z tych elementw jest reprezentowany jako

wczony bit w bajcie, jak to pokazano w tabeli 3.1.


Tabela 3.1. Reprezentacja zbioru elementw w MySQL
Element
Mandarynka Pomidor Gruszka Banan

Warto dziesitna
1 2 4 8

Zapis bitowy
0001 0010 0100 1000

W powyszym przykadzie zapisanie jednoczenie wartoci Mandarynka i Gruszka wymaga uycia wartoci 5 (bitowo 0101). W kolumnie SET mona zapisa najwyej 64 wartoci. Wprawdzie t sam warto mona w jednym wyraeniu SQL wpisa wielokrotnie, ale w bazie danych warto ta zostanie zapisana raz.

40

MySQL. Leksykon kieszonkowy

4. SQL .............................................................................................. 41
Rozrnianie wielkoci liter Literay Identyfikatory Komentarze Instrukcje Zasady dotyczce transakcji 41 42 43 45 46 106

5. Operatory .................................................................................. 108


Priorytety operatorw Operatory arytmetyczne Operatory porwnania Operatory logiczne 108 109 109 111

6. Funkcje .......................................................................................113
Funkcje agregujce Funkcje oglnego przeznaczenia 113 115

7. Rodzaje tabel ............................................................................ 137 8. Procedury i funkcje skadowane .............................................. 138


Parametry Logika Kursory Obsuga zdarze i warunki 138 139 143 144

9. Trygery ...................................................................................... 146 Skorowidz ................................................................................. 147

MySQL. Leksykon kieszonkowy

Rozdzia 3. Typy danych


We wszystkich typach danych nawiasami kwadratowymi ([]) oznaczane s fragmenty opcjonalne. Poniszy przykad pokazuje sposb prezentacji typu BIGINT, opisanego dalej w tym rozdziale:
BIGINT[(wielko_pokazywana)]

Oznacza to, e sowo BIGINT moe wystpi samodzielnie lub z pokazywan wartoci. Uycie kursywy wskazuje, e nie naley wpisywa sowa wielko_pokazywana, ale poda wasn warto. Oto przykady uycia:
BIGINT BIGINT(20)

Poza typem BIGINT take wiele innych typw danych MySQL uwzgldnia deklaracj rozmiaru wywietlania. Jeli nie powiedziano inaczej, musi to by liczba od 1 do 255. W wersjach MySQL starszych ni wersja 5, baza danych w niektrych przypadkach zmieniaa podany typ kolumny, nie informujc o tym uytkownika. Obecnie takie podmiany nie maj ju miejsca.
VARCHAR -> CHAR

Jeli podana kolumna VARCHAR ma rozmiar mniejszy od czterech znakw, jest przeksztacana w kolumn CHAR.
CHAR -> VARCHAR

Jeli tabela zawiera co najmniej jedn kolumn o zmiennej dugoci, wszystkie kolumny typu CHAR dusze ni trzy znaki s zamieniane na VARCHAR.

Rozmiar wywietlania TIMESTAMP Rozmiar wywietlania pl TIMESTAMP musi by zawsze wielkoci parzyst od 2 do 14. Rozmiar rwny 0 lub wikszy od 14 powoduje przyjcie 14. Wszelkie liczby nieparzyste s zamieniane na nastpn liczb parzyst.

22

MySQL. Leksykon kieszonkowy

Liczby
MySQL obsuguje liczbowe typy danych zgodne z ANSI SQL 2. Typy te dzielimy na cakowitoliczbowe, dziesitne i zmiennoprzecinkowe. W ramach tych grup dzielimy typy dalej, wedug zajmowanej przez nie pamici. W przypadku typw liczbowych mona poda rozmiar wywietlania, ktry wpywa na sposb pokazywania przez MySQL wynikw. Rozmiar ten nie ma adnego zwizku z wielkoci pamici zajmowanej przez dany typ. Dodatkowo w przypadku liczb zmiennoprzecinkowych i dziesitnych mona poda liczb cyfr znajdujcych si za kropk dziesitn. Wtedy liczba cyfr powinna nalee do zakresu od 0 do 30, czyli by co najmniej o dwa mniejsza od rozmiaru wywietlania. Jeli warunek ten nie zostanie dotrzymany, MySQL automatycznie zmieni liczb cyfr tak, aby bya mniejsza o dwa od rozmiaru wywietlania. Przykadowo, MySQL automatycznie zmieni FLOAT(6,5) na FLOAT(7,5). Prba wstawienia do kolumny wartoci przekraczajcej dopuszczalny zakres tej kolumny powoduje obcicie tej wartoci do najmniejszej (dla liczb ujemnych) lub najwikszej (dla liczb dodatnich) wartoci dla danej kolumny dopuszczalnej. Jeli takie obcicie jest robione podczas wykonywania instrukcji ALTER TABLE, LOAD DATA INFILE, UPDATE lub wielowierszowej instrukcji INSERT, MySQL pokazuje ostrzeenie. Wyjtkiem jest korzystanie z MySQL w wersji 5 lub nowszej w trybie penej zgodnoci ze standardem SQL, gdy wtedy w przypadku instrukcji INSERT i UPDATE zgaszany jest bd. Atrybutu AUTO_INCREMENT mona uy do co najwyej jednej kolumny cakowitoliczbowej w tabeli. Atrybut UNSIGNED moe by czony z dowolnym liczbowym typem danych. Uycie tego atrybutu powoduje, e do kolumny nie mona wpisywa liczb ujemnych. Atrybut ZEROFILL nakazuje wypenienie kolumny od lewej

Rozdzia 3. Typy danych

23

strony zerami podczas wywietlania jej wartoci. O liczbie tych zer decyduje szeroko wywietlania danej kolumny.

BIGINT
BIGINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Najwikszy z typw cakowitoliczbowych, pozwalajcy zapisywa liczby od 9 223 372 036 854 775 808 do 9 223 372 036 854 775 807 (jeli bez znaku, to od 0 do 18 446 744 073 709 551 615). Z uwagi na sposb realizacji dziaa na liczbach tego typu, naley unika operacji na liczbach BIGINT bez znaku wikszych ni 9 223 372 036 854 775 807, gdy moe to zaowocowa nieprawidowymi wynikami.

BIT
BIT[(bity)]

Rozmiar w pamici w przyblieniu bity bitw+7 lub 8 bitw Opis W wersjach MySQL 5.0.3 i starszych, pola typu BIT dziaay tak samo, jak TINYINT(1). Omawiany typ pola pozwala przechowywa ustalon liczb bitw. Jeli podana zostanie wielko bitw mniejsza od dozwolonej, MySQL wypeni zerami bity od lewej strony.
24 | MySQL. Leksykon kieszonkowy

DEC
Synonim typu DECIMAL.

DECIMAL
DECIMAL[(dokadno, [skala])] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici rnie Opis Pozwala zapisywa liczby zmiennoprzecinkowe w sytuacjach, kiedy istotna jest dokadno na przykad przy operowaniu kwotami pienidzy. Stosujc typ DECIMAL, trzeba poda dwa jego parametry, dokadno i skal. Dokadno to liczba znaczcych cyfr, za skala to liczba znaczcych cyfr po kropce dziesitnej. Przykadowo, kolumna SALDO typu DECIMAL(9,2) pozwoliaby zapisywa liczby dziewiciocyfrowe, przy czym na prawo od kropki dziesitnej mogyby by dwie cyfry. Zakres dopuszczalnych liczb to w takiej sytuacji od 9 999 999,99 do 9 999 999,99. Jeli podana zostanie liczba zawierajca wicej cyfr po przecinku, ni przewiduje to definicja, liczba zostanie zaokrglona. Wartoci spoza zakresu DECIMAL s obcinane tak, aby si w nim zmieciy. W wersjach MySQL starszych ni 5, wartoci DECIMAL nie byy zapisywane jako liczby zmiennoprzecinkowe, lecz jako acuchy znakw. Na kad cyfr zuywany by jeden znak w przypadku skali wikszej od 0, poza tym jeden dodatkowy znak zuywany jest w przypadku liczb ujemnych. Jeli skala wynosi 0, liczby nie maj czci uamkowej. SQL zgodnie z norm ANSI pozwala pomija dokadno i (lub) skal. Jeli brak dokadnoci, przyjmowane jest ustawienie

Rozdzia 3. Typy danych

25

domylne charakterystyczne dla implementacji. Jeli brak skali, przyjmowane jest zero. W MySQL domylna warto dokadnoci to 10.

DOUBLE
DOUBLE[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Liczba zmiennoprzecinkowa podwjnej precyzji. Ten typ danych pozwala zapisywa due wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 1,7976931348623157E+308 do 2,2250738585072014E308, 0 oraz wartoci dodatnie od 2,2250738585072014E308 do 1,7976931348623157E+308.

DOUBLE PRECISION
Synonim DOUBLE.

FLOAT
FLOAT[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 4 bajty

26

MySQL. Leksykon kieszonkowy

Opis Liczba zmiennoprzecinkowa pojedynczej precyzji. Ten typ danych pozwala zapisywa mae wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 3,402823466E+38 do 1,175494351E38, 0 oraz wartoci dodatnie od 1,175494351E38 do 3,402823466E+38.

INT
INT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 4 bajty Opis Podstawowy rodzaj liczb cakowitych od 2 147 483 648 do 2 147 483 647 (lub od 0 do 4 294 967 295 w przypadku liczb bez znaku).

INTEGER
Synonim INT.

MEDIUMINT
MEDIUMINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

27

Opis Liczby cakowite od 8 388 608 do 8 388 607 (lub od 0 do 16 777 215 w przypadku liczb bez znaku).

NUMERIC
Synonim DECIMAL.

REAL
Synonim DOUBLE.

SMALLINT
SMALLINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 2 bajty Opis Liczby cakowite z zakresu od 32 768 do 32 767 (od 0 do 65 535 w przypadku liczb bez znaku).

TINYINT
TINYINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 1 bajt

28

MySQL. Leksykon kieszonkowy

Opis Liczby cakowite od 128 do 127 (od 0 do 255 w przypadku liczb bez znaku).

acuchy
MySQL obsuguje dwie kategorie acuchw: acuchy tekstowe oraz acuchy binarne. Obie kategorie maj swoje specyficzne typy do obsugi rnych wielkoci pl i rnych sposobw porwnywania wartoci. W zalenoci od sposobu porwnywania, mona uwzgldnia bd nie wielko liter, mona te porwnywa dane binarnie (bajt po bajcie). Kiedy nazwa typu tekstowego (jak CHAR, VARCHAR i inne) zostanie oznaczona sowem kluczowym BINARY, kolumna pozostaje kolumn tekstow, ale dane s porwnywane ze sob binarnie.

BINARY
BINARY(rozmiar)

Rozmiar wedug rozmiar, w zakresie od 0 do 255 Rozmiar w pamici


rozmiar bajtw

Opis Typ danych BINARY to binarny odpowiednik typu CHAR. Podstawowa rnica midzy tymi dwoma typami polega na tym, e pole typu BINARY zawiera dane binarne, wielko tych danych jest mierzona nie w znakach, lecz w bajtach. acuchy zawierajce

Rozdzia 3. Typy danych

29

mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie znakami 0x00 (wersja MySQL 5.0.5 i nowsze) lub spacjami (wersje starsze).

BLOB
Binarny odpowiednik typu TEXT.

CHAR
CHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar wedug rozmiar, do 255 Rozmiar w pamici zaleny od rozmiaru i od uytego zestawu znakw Opis Pole tekstowe ustalonej dugoci. acuchy zawierajce mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie spacjami. Podczas pobierania danych z bazy te dodatkowe spacje s usuwane. Pola CHAR(0) zostay zachowane w celu zapewnienia zgodnoci ze starymi systemami, w ktrych w kolumnach nie s zapisywane adne wartoci.

CHARACTER
Synonim CHAR.

30

MySQL. Leksykon kieszonkowy

CHARACTER VARYING
Synonim VARCHAR.

LONGBLOB
Binarny odpowiednik LONGTEXT.

LONGTEXT
LONGTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 4 294 295 Rozmiar w pamici Dugo wartoci+4 bajty Opis Typ pozwala zapisywa due wartoci tekstowe. Teoretyczne ograniczenie rozmiaru tekstu to ponad 4 GB, ale praktycznymi ograniczeniami s ograniczenia protokou komunikacyjnego MySQL oraz ilo pamici przeznaczonej na komunikacj na serwerze i na stacji klienckiej.

MEDIUMBLOB
Binarna posta MEDIUMTEXT.

MEDIUMTEXT
MEDIUMTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozdzia 3. Typy danych

31

Rozmiar 0 do 16 777 215 Rozmiar w pamici Dugo wartoci+3 bajty Opis Typ pozwala zapisywa redniej wielkoci wartoci tekstowe.

NCHAR
Synonim CHAR.

NATIONAL CHAR
Synonim CHAR.

NATIONAL CHARACTER
Synonim CHAR.

NATIONAL VARCHAR
Synonim VARCHAR.

TEXT
TEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 65 535

32

MySQL. Leksykon kieszonkowy

Rozmiar w pamici Dugo wartoci tekstowej+2 bajty Opis Typ pozwala zapisywa typowe wartoci tekstowe.

TINYBLOB
Binarny odpowiednik TINYTEXT.

TINYTEXT
TINYTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 255 Rozmiar w pamici Dugo wartoci tekstowej+1 bajt Opis Pozwala zapisywa krtkie dane tekstowe.

VARBINARY
VARBINARY(rozmiar)

Rozmiar Wedug parametru rozmiar

Rozdzia 3. Typy danych

33

Rozmiar w pamici
rozmiar bajtw

Opis Jest to binarna odmiana typu VARCHAR. Podstawowa rnica polega na tym, e zapisywane s dane binarne, a rozmiar pola mierzony jest w bajtach, nie w znakach. Wielkoci typu VARBINARY, w przeciwiestwie do wartoci typu BINARY, nie s niczym dopeniane.

VARCHAR
VARCHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar Wskazana przez rozmiar warto z zakresu do 65 532 (od 1 do 255 w wersjach wczeniejszych ni MySQL 5); rozmiar wskazuje rzeczywist wielko kolumny i jest ograniczony przez dopuszczaln wielko wiersza w znakach; to, ile miejsca faktycznie bdzie potrzebne, zaley zatem od zestawu znakw uytego w danej kolumnie Rozmiar w pamici Zaley od liczby znakw wskazanych jako rozmiar oraz od liczby bajtw potrzebnych do zapisu poszczeglnych znakw w uytym mechanizmie kodowania znakw Opis Pozwala zapisywa wartoci tekstowe zmiennej dugoci. W wersjach poprzedzajcych MySQL 5 z wartoci VARCHAR usuwane s spacje kocowe; wersja MySQL 5 i nowsze standardowo nie usuwaj spacji kocowych.

34

MySQL. Leksykon kieszonkowy

Daty
Typy datowe MySQL s wyjtkowo elastycznym narzdziem, pozwalajcym zapisywa wszelki informacje dzienne. MySQL jest bardzo tolerancyjny i zakada, e to aplikacja, a nie baza danych, ma sprawdza poprawno tych danych. MySQL sprawdza jedynie, czy miesic nie wykracza poza zakres 0 12 i czy dzie nie wykracza poza zakres 0 31. Wobec tego z punktu widzenia MySQL 31 lutego 2001 roku jest poprawn dat. Bardziej przydatn wartoci jest data 0 lutego 2001 roku; cyfra zero moe zastpowa t cz daty, ktrej dokadnie nie znamy. MySQL 5 jest jednak ju baz danych nieco bardziej restrykcyjn co do wartoci, jakie mona zapisywa w polach datowych. Wprawdzie MySQL dopuszcza do du swobod formatw wejciowych dat, to naley stara si w aplikacjach daty formatowa zgodnie z formatem wewntrznym MySQL w celu uniknicia nieporozumie. MySQL zawsze zakada, e rok jest pierwszym elementem po lewej stronie daty. Jeli w operacji SQL podana zostanie nieprawidowa warto daty, MySQL wstawi w jej miejsce zero. MySQL w kontekcie liczb cakowitych automatycznie konwertuje daty i czas na liczby cakowite.

DATE
DATE

Format
YYYY-MM-DD (2001-01-01)

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

35

Opis Data kalendarza gregoriaskiego z zakresu od 1 stycznia 1000 roku ('1000-01-01') do 31 grudnia 9999 roku ('9999-12-31').

DATETIME
DATETIME

Format
YYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 8 bajtw Opis Zapisuje czas z zakresu od 00:00:00 1 stycznia 1000 roku ('100001-01 00:00:00') do 23:59:59 31 grudnia 9999 ('9999-12-31 23:59:59') wedug kalendarza gregoriaskiego.

TIME
TIME

Format
hh:mm:ss (06:00:00)

Rozmiar w pamici 3 bajty Opis Zapisuje czas od pnocy ('00:00:00') do sekundy przed pnoc ('23:59:59').
36 | MySQL. Leksykon kieszonkowy

TIMESTAMP
TIMESTAMP[(rozmiar_wywietlania)]

Format
YYYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 4 bajty Opis Zapis chwili z dokadnoci do sekundy od pnocy 1 stycznia 1970 roku do minuty przed pnoc 31 grudnia 2037 roku. Podstawowym zastosowaniem tego typu jest rejestracja modyfikacji tabel. Przy wstawianiu do takiej kolumny wartoci NULL wstawiane s aktualna data i czas. W przypadku modyfikowania jakiejkolwiek wartoci w wierszu z kolumn TIMESTAMP pierwsza kolumna tego typu zostanie zaktualizowana biec dat i czasem. Format danych TIMESTAMP znany z wczeniejszych wersji MySQL, do 4.1 wcznie, w wersji 5.1 nie jest ju obsugiwany.

YEAR
YEAR[(rozmiar)]

Format
YYYY (2001)

Rozmiar w pamici 1 bajt

Rozdzia 3. Typy danych

37

Opis Pozwala zapisa rok z kalendarza gregoriaskiego. Parametr rozmiar umoliwia zapisywanie roku dwu- lub czterocyfrowo. Zakres YEAR(4) rozciga si od 1900 do 2155, dla YEAR(2) od 1970 do 2069. Domylnie przyjmowane jest YEAR(4).

Typy zoone
Zoone typy danych MySQL, ENUM i SET, s po prostu specjalnymi przypadkami typw acuchowych. Opisujemy je osobno, gdy s bardziej zoone pojciowo i stanowi wprowadzenie do typw danych SQL3, ktre by moe MySQL bdzie obsugiwa w przyszoci.

ENUM
ENUM(warto1, warto2, ...)

Rozmiar w pamici 1 255 elementw: 1 bajt 255 65 535 elementw: 2 bajty Opis Typ danych ENUM pozwala zapisywa jeden z wielu zdefiniowanych wczeniej acuchw. Przy tworzeniu kolumny typu ENUM podaje si list dopuszczalnych jej wartoci. Dane mog by do tej kolumny wstawiane i aktualizowane jedynie z tej listy; kada prba wstawienia wartoci spoza niej powoduje wstawienie pustego acucha.

38

MySQL. Leksykon kieszonkowy

Do listy dopuszczalnych wartoci mona si odwoywa przez indeks, przy czym pierwszy element otrzymuje numer 0. Na przykad:
SELECT COLID FROM TBL WHERE COLENUM = 0;

Jeli COLID jest kolumn z kluczem gwnym, a COLENUM kolumn typu ENUM, taka instrukcja SQL spowoduje pobranie kluczy gwnych wszystkich wierszy, dla ktrych COLENUM jest pierwsz wartoci z listy. Analogicznie, sortowanie wzgldem kolumn ENUM powoduje sortowanie wedug indeksu, nie acucha. Najwiksza moliwa liczba elementw kolumny ENUM to 65 535.

SET
SET(warto1, warto2, ...)

Rozmiar w pamici 1 8 elementw: 1 bajt 9 16 elementw: 2 bajty 17 24 elementy: 3 bajty 25 32 elementy: 4 bajty 33 64 elementy: 8 bajtw Opis Lista wartoci wybieranych z okrelonego wczeniej zbioru. Pole moe zawiera dowoln liczb acuchw wskazanych w instrukcji SET, szczeglnie moe nie zawiera adnej takiej wartoci. SET jest podobny do ENUM, ale kade pole moe zawiera wicej ni jedn z podanych wartoci. Dane typu SET nie s jednak zapisywane za pomoc indeksw, ale w zoonej mapie bitowej. Jeli dany jest zbir SET, zawierajcy elementy: Mandarynka, Pomidor,
Rozdzia 3. Typy danych | 39

Gruszka i Banan, kady z tych elementw jest reprezentowany jako

wczony bit w bajcie, jak to pokazano w tabeli 3.1.


Tabela 3.1. Reprezentacja zbioru elementw w MySQL
Element
Mandarynka Pomidor Gruszka Banan

Warto dziesitna
1 2 4 8

Zapis bitowy
0001 0010 0100 1000

W powyszym przykadzie zapisanie jednoczenie wartoci Mandarynka i Gruszka wymaga uycia wartoci 5 (bitowo 0101). W kolumnie SET mona zapisa najwyej 64 wartoci. Wprawdzie t sam warto mona w jednym wyraeniu SQL wpisa wielokrotnie, ale w bazie danych warto ta zostanie zapisana raz.

40

MySQL. Leksykon kieszonkowy

4. SQL .............................................................................................. 41
Rozrnianie wielkoci liter Literay Identyfikatory Komentarze Instrukcje Zasady dotyczce transakcji 41 42 43 45 46 106

5. Operatory .................................................................................. 108


Priorytety operatorw Operatory arytmetyczne Operatory porwnania Operatory logiczne 108 109 109 111

6. Funkcje .......................................................................................113
Funkcje agregujce Funkcje oglnego przeznaczenia 113 115

7. Rodzaje tabel ............................................................................ 137 8. Procedury i funkcje skadowane .............................................. 138


Parametry Logika Kursory Obsuga zdarze i warunki 138 139 143 144

9. Trygery ...................................................................................... 146 Skorowidz ................................................................................. 147

MySQL. Leksykon kieszonkowy

Rozdzia 3. Typy danych


We wszystkich typach danych nawiasami kwadratowymi ([]) oznaczane s fragmenty opcjonalne. Poniszy przykad pokazuje sposb prezentacji typu BIGINT, opisanego dalej w tym rozdziale:
BIGINT[(wielko_pokazywana)]

Oznacza to, e sowo BIGINT moe wystpi samodzielnie lub z pokazywan wartoci. Uycie kursywy wskazuje, e nie naley wpisywa sowa wielko_pokazywana, ale poda wasn warto. Oto przykady uycia:
BIGINT BIGINT(20)

Poza typem BIGINT take wiele innych typw danych MySQL uwzgldnia deklaracj rozmiaru wywietlania. Jeli nie powiedziano inaczej, musi to by liczba od 1 do 255. W wersjach MySQL starszych ni wersja 5, baza danych w niektrych przypadkach zmieniaa podany typ kolumny, nie informujc o tym uytkownika. Obecnie takie podmiany nie maj ju miejsca.
VARCHAR -> CHAR

Jeli podana kolumna VARCHAR ma rozmiar mniejszy od czterech znakw, jest przeksztacana w kolumn CHAR.
CHAR -> VARCHAR

Jeli tabela zawiera co najmniej jedn kolumn o zmiennej dugoci, wszystkie kolumny typu CHAR dusze ni trzy znaki s zamieniane na VARCHAR.

Rozmiar wywietlania TIMESTAMP Rozmiar wywietlania pl TIMESTAMP musi by zawsze wielkoci parzyst od 2 do 14. Rozmiar rwny 0 lub wikszy od 14 powoduje przyjcie 14. Wszelkie liczby nieparzyste s zamieniane na nastpn liczb parzyst.

22

MySQL. Leksykon kieszonkowy

Liczby
MySQL obsuguje liczbowe typy danych zgodne z ANSI SQL 2. Typy te dzielimy na cakowitoliczbowe, dziesitne i zmiennoprzecinkowe. W ramach tych grup dzielimy typy dalej, wedug zajmowanej przez nie pamici. W przypadku typw liczbowych mona poda rozmiar wywietlania, ktry wpywa na sposb pokazywania przez MySQL wynikw. Rozmiar ten nie ma adnego zwizku z wielkoci pamici zajmowanej przez dany typ. Dodatkowo w przypadku liczb zmiennoprzecinkowych i dziesitnych mona poda liczb cyfr znajdujcych si za kropk dziesitn. Wtedy liczba cyfr powinna nalee do zakresu od 0 do 30, czyli by co najmniej o dwa mniejsza od rozmiaru wywietlania. Jeli warunek ten nie zostanie dotrzymany, MySQL automatycznie zmieni liczb cyfr tak, aby bya mniejsza o dwa od rozmiaru wywietlania. Przykadowo, MySQL automatycznie zmieni FLOAT(6,5) na FLOAT(7,5). Prba wstawienia do kolumny wartoci przekraczajcej dopuszczalny zakres tej kolumny powoduje obcicie tej wartoci do najmniejszej (dla liczb ujemnych) lub najwikszej (dla liczb dodatnich) wartoci dla danej kolumny dopuszczalnej. Jeli takie obcicie jest robione podczas wykonywania instrukcji ALTER TABLE, LOAD DATA INFILE, UPDATE lub wielowierszowej instrukcji INSERT, MySQL pokazuje ostrzeenie. Wyjtkiem jest korzystanie z MySQL w wersji 5 lub nowszej w trybie penej zgodnoci ze standardem SQL, gdy wtedy w przypadku instrukcji INSERT i UPDATE zgaszany jest bd. Atrybutu AUTO_INCREMENT mona uy do co najwyej jednej kolumny cakowitoliczbowej w tabeli. Atrybut UNSIGNED moe by czony z dowolnym liczbowym typem danych. Uycie tego atrybutu powoduje, e do kolumny nie mona wpisywa liczb ujemnych. Atrybut ZEROFILL nakazuje wypenienie kolumny od lewej

Rozdzia 3. Typy danych

23

strony zerami podczas wywietlania jej wartoci. O liczbie tych zer decyduje szeroko wywietlania danej kolumny.

BIGINT
BIGINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Najwikszy z typw cakowitoliczbowych, pozwalajcy zapisywa liczby od 9 223 372 036 854 775 808 do 9 223 372 036 854 775 807 (jeli bez znaku, to od 0 do 18 446 744 073 709 551 615). Z uwagi na sposb realizacji dziaa na liczbach tego typu, naley unika operacji na liczbach BIGINT bez znaku wikszych ni 9 223 372 036 854 775 807, gdy moe to zaowocowa nieprawidowymi wynikami.

BIT
BIT[(bity)]

Rozmiar w pamici w przyblieniu bity bitw+7 lub 8 bitw Opis W wersjach MySQL 5.0.3 i starszych, pola typu BIT dziaay tak samo, jak TINYINT(1). Omawiany typ pola pozwala przechowywa ustalon liczb bitw. Jeli podana zostanie wielko bitw mniejsza od dozwolonej, MySQL wypeni zerami bity od lewej strony.
24 | MySQL. Leksykon kieszonkowy

DEC
Synonim typu DECIMAL.

DECIMAL
DECIMAL[(dokadno, [skala])] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici rnie Opis Pozwala zapisywa liczby zmiennoprzecinkowe w sytuacjach, kiedy istotna jest dokadno na przykad przy operowaniu kwotami pienidzy. Stosujc typ DECIMAL, trzeba poda dwa jego parametry, dokadno i skal. Dokadno to liczba znaczcych cyfr, za skala to liczba znaczcych cyfr po kropce dziesitnej. Przykadowo, kolumna SALDO typu DECIMAL(9,2) pozwoliaby zapisywa liczby dziewiciocyfrowe, przy czym na prawo od kropki dziesitnej mogyby by dwie cyfry. Zakres dopuszczalnych liczb to w takiej sytuacji od 9 999 999,99 do 9 999 999,99. Jeli podana zostanie liczba zawierajca wicej cyfr po przecinku, ni przewiduje to definicja, liczba zostanie zaokrglona. Wartoci spoza zakresu DECIMAL s obcinane tak, aby si w nim zmieciy. W wersjach MySQL starszych ni 5, wartoci DECIMAL nie byy zapisywane jako liczby zmiennoprzecinkowe, lecz jako acuchy znakw. Na kad cyfr zuywany by jeden znak w przypadku skali wikszej od 0, poza tym jeden dodatkowy znak zuywany jest w przypadku liczb ujemnych. Jeli skala wynosi 0, liczby nie maj czci uamkowej. SQL zgodnie z norm ANSI pozwala pomija dokadno i (lub) skal. Jeli brak dokadnoci, przyjmowane jest ustawienie

Rozdzia 3. Typy danych

25

domylne charakterystyczne dla implementacji. Jeli brak skali, przyjmowane jest zero. W MySQL domylna warto dokadnoci to 10.

DOUBLE
DOUBLE[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Liczba zmiennoprzecinkowa podwjnej precyzji. Ten typ danych pozwala zapisywa due wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 1,7976931348623157E+308 do 2,2250738585072014E308, 0 oraz wartoci dodatnie od 2,2250738585072014E308 do 1,7976931348623157E+308.

DOUBLE PRECISION
Synonim DOUBLE.

FLOAT
FLOAT[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 4 bajty

26

MySQL. Leksykon kieszonkowy

Opis Liczba zmiennoprzecinkowa pojedynczej precyzji. Ten typ danych pozwala zapisywa mae wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 3,402823466E+38 do 1,175494351E38, 0 oraz wartoci dodatnie od 1,175494351E38 do 3,402823466E+38.

INT
INT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 4 bajty Opis Podstawowy rodzaj liczb cakowitych od 2 147 483 648 do 2 147 483 647 (lub od 0 do 4 294 967 295 w przypadku liczb bez znaku).

INTEGER
Synonim INT.

MEDIUMINT
MEDIUMINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

27

Opis Liczby cakowite od 8 388 608 do 8 388 607 (lub od 0 do 16 777 215 w przypadku liczb bez znaku).

NUMERIC
Synonim DECIMAL.

REAL
Synonim DOUBLE.

SMALLINT
SMALLINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 2 bajty Opis Liczby cakowite z zakresu od 32 768 do 32 767 (od 0 do 65 535 w przypadku liczb bez znaku).

TINYINT
TINYINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 1 bajt

28

MySQL. Leksykon kieszonkowy

Opis Liczby cakowite od 128 do 127 (od 0 do 255 w przypadku liczb bez znaku).

acuchy
MySQL obsuguje dwie kategorie acuchw: acuchy tekstowe oraz acuchy binarne. Obie kategorie maj swoje specyficzne typy do obsugi rnych wielkoci pl i rnych sposobw porwnywania wartoci. W zalenoci od sposobu porwnywania, mona uwzgldnia bd nie wielko liter, mona te porwnywa dane binarnie (bajt po bajcie). Kiedy nazwa typu tekstowego (jak CHAR, VARCHAR i inne) zostanie oznaczona sowem kluczowym BINARY, kolumna pozostaje kolumn tekstow, ale dane s porwnywane ze sob binarnie.

BINARY
BINARY(rozmiar)

Rozmiar wedug rozmiar, w zakresie od 0 do 255 Rozmiar w pamici


rozmiar bajtw

Opis Typ danych BINARY to binarny odpowiednik typu CHAR. Podstawowa rnica midzy tymi dwoma typami polega na tym, e pole typu BINARY zawiera dane binarne, wielko tych danych jest mierzona nie w znakach, lecz w bajtach. acuchy zawierajce

Rozdzia 3. Typy danych

29

mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie znakami 0x00 (wersja MySQL 5.0.5 i nowsze) lub spacjami (wersje starsze).

BLOB
Binarny odpowiednik typu TEXT.

CHAR
CHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar wedug rozmiar, do 255 Rozmiar w pamici zaleny od rozmiaru i od uytego zestawu znakw Opis Pole tekstowe ustalonej dugoci. acuchy zawierajce mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie spacjami. Podczas pobierania danych z bazy te dodatkowe spacje s usuwane. Pola CHAR(0) zostay zachowane w celu zapewnienia zgodnoci ze starymi systemami, w ktrych w kolumnach nie s zapisywane adne wartoci.

CHARACTER
Synonim CHAR.

30

MySQL. Leksykon kieszonkowy

CHARACTER VARYING
Synonim VARCHAR.

LONGBLOB
Binarny odpowiednik LONGTEXT.

LONGTEXT
LONGTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 4 294 295 Rozmiar w pamici Dugo wartoci+4 bajty Opis Typ pozwala zapisywa due wartoci tekstowe. Teoretyczne ograniczenie rozmiaru tekstu to ponad 4 GB, ale praktycznymi ograniczeniami s ograniczenia protokou komunikacyjnego MySQL oraz ilo pamici przeznaczonej na komunikacj na serwerze i na stacji klienckiej.

MEDIUMBLOB
Binarna posta MEDIUMTEXT.

MEDIUMTEXT
MEDIUMTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozdzia 3. Typy danych

31

Rozmiar 0 do 16 777 215 Rozmiar w pamici Dugo wartoci+3 bajty Opis Typ pozwala zapisywa redniej wielkoci wartoci tekstowe.

NCHAR
Synonim CHAR.

NATIONAL CHAR
Synonim CHAR.

NATIONAL CHARACTER
Synonim CHAR.

NATIONAL VARCHAR
Synonim VARCHAR.

TEXT
TEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 65 535

32

MySQL. Leksykon kieszonkowy

Rozmiar w pamici Dugo wartoci tekstowej+2 bajty Opis Typ pozwala zapisywa typowe wartoci tekstowe.

TINYBLOB
Binarny odpowiednik TINYTEXT.

TINYTEXT
TINYTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 255 Rozmiar w pamici Dugo wartoci tekstowej+1 bajt Opis Pozwala zapisywa krtkie dane tekstowe.

VARBINARY
VARBINARY(rozmiar)

Rozmiar Wedug parametru rozmiar

Rozdzia 3. Typy danych

33

Rozmiar w pamici
rozmiar bajtw

Opis Jest to binarna odmiana typu VARCHAR. Podstawowa rnica polega na tym, e zapisywane s dane binarne, a rozmiar pola mierzony jest w bajtach, nie w znakach. Wielkoci typu VARBINARY, w przeciwiestwie do wartoci typu BINARY, nie s niczym dopeniane.

VARCHAR
VARCHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar Wskazana przez rozmiar warto z zakresu do 65 532 (od 1 do 255 w wersjach wczeniejszych ni MySQL 5); rozmiar wskazuje rzeczywist wielko kolumny i jest ograniczony przez dopuszczaln wielko wiersza w znakach; to, ile miejsca faktycznie bdzie potrzebne, zaley zatem od zestawu znakw uytego w danej kolumnie Rozmiar w pamici Zaley od liczby znakw wskazanych jako rozmiar oraz od liczby bajtw potrzebnych do zapisu poszczeglnych znakw w uytym mechanizmie kodowania znakw Opis Pozwala zapisywa wartoci tekstowe zmiennej dugoci. W wersjach poprzedzajcych MySQL 5 z wartoci VARCHAR usuwane s spacje kocowe; wersja MySQL 5 i nowsze standardowo nie usuwaj spacji kocowych.

34

MySQL. Leksykon kieszonkowy

Daty
Typy datowe MySQL s wyjtkowo elastycznym narzdziem, pozwalajcym zapisywa wszelki informacje dzienne. MySQL jest bardzo tolerancyjny i zakada, e to aplikacja, a nie baza danych, ma sprawdza poprawno tych danych. MySQL sprawdza jedynie, czy miesic nie wykracza poza zakres 0 12 i czy dzie nie wykracza poza zakres 0 31. Wobec tego z punktu widzenia MySQL 31 lutego 2001 roku jest poprawn dat. Bardziej przydatn wartoci jest data 0 lutego 2001 roku; cyfra zero moe zastpowa t cz daty, ktrej dokadnie nie znamy. MySQL 5 jest jednak ju baz danych nieco bardziej restrykcyjn co do wartoci, jakie mona zapisywa w polach datowych. Wprawdzie MySQL dopuszcza do du swobod formatw wejciowych dat, to naley stara si w aplikacjach daty formatowa zgodnie z formatem wewntrznym MySQL w celu uniknicia nieporozumie. MySQL zawsze zakada, e rok jest pierwszym elementem po lewej stronie daty. Jeli w operacji SQL podana zostanie nieprawidowa warto daty, MySQL wstawi w jej miejsce zero. MySQL w kontekcie liczb cakowitych automatycznie konwertuje daty i czas na liczby cakowite.

DATE
DATE

Format
YYYY-MM-DD (2001-01-01)

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

35

Opis Data kalendarza gregoriaskiego z zakresu od 1 stycznia 1000 roku ('1000-01-01') do 31 grudnia 9999 roku ('9999-12-31').

DATETIME
DATETIME

Format
YYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 8 bajtw Opis Zapisuje czas z zakresu od 00:00:00 1 stycznia 1000 roku ('100001-01 00:00:00') do 23:59:59 31 grudnia 9999 ('9999-12-31 23:59:59') wedug kalendarza gregoriaskiego.

TIME
TIME

Format
hh:mm:ss (06:00:00)

Rozmiar w pamici 3 bajty Opis Zapisuje czas od pnocy ('00:00:00') do sekundy przed pnoc ('23:59:59').
36 | MySQL. Leksykon kieszonkowy

TIMESTAMP
TIMESTAMP[(rozmiar_wywietlania)]

Format
YYYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 4 bajty Opis Zapis chwili z dokadnoci do sekundy od pnocy 1 stycznia 1970 roku do minuty przed pnoc 31 grudnia 2037 roku. Podstawowym zastosowaniem tego typu jest rejestracja modyfikacji tabel. Przy wstawianiu do takiej kolumny wartoci NULL wstawiane s aktualna data i czas. W przypadku modyfikowania jakiejkolwiek wartoci w wierszu z kolumn TIMESTAMP pierwsza kolumna tego typu zostanie zaktualizowana biec dat i czasem. Format danych TIMESTAMP znany z wczeniejszych wersji MySQL, do 4.1 wcznie, w wersji 5.1 nie jest ju obsugiwany.

YEAR
YEAR[(rozmiar)]

Format
YYYY (2001)

Rozmiar w pamici 1 bajt

Rozdzia 3. Typy danych

37

Opis Pozwala zapisa rok z kalendarza gregoriaskiego. Parametr rozmiar umoliwia zapisywanie roku dwu- lub czterocyfrowo. Zakres YEAR(4) rozciga si od 1900 do 2155, dla YEAR(2) od 1970 do 2069. Domylnie przyjmowane jest YEAR(4).

Typy zoone
Zoone typy danych MySQL, ENUM i SET, s po prostu specjalnymi przypadkami typw acuchowych. Opisujemy je osobno, gdy s bardziej zoone pojciowo i stanowi wprowadzenie do typw danych SQL3, ktre by moe MySQL bdzie obsugiwa w przyszoci.

ENUM
ENUM(warto1, warto2, ...)

Rozmiar w pamici 1 255 elementw: 1 bajt 255 65 535 elementw: 2 bajty Opis Typ danych ENUM pozwala zapisywa jeden z wielu zdefiniowanych wczeniej acuchw. Przy tworzeniu kolumny typu ENUM podaje si list dopuszczalnych jej wartoci. Dane mog by do tej kolumny wstawiane i aktualizowane jedynie z tej listy; kada prba wstawienia wartoci spoza niej powoduje wstawienie pustego acucha.

38

MySQL. Leksykon kieszonkowy

Do listy dopuszczalnych wartoci mona si odwoywa przez indeks, przy czym pierwszy element otrzymuje numer 0. Na przykad:
SELECT COLID FROM TBL WHERE COLENUM = 0;

Jeli COLID jest kolumn z kluczem gwnym, a COLENUM kolumn typu ENUM, taka instrukcja SQL spowoduje pobranie kluczy gwnych wszystkich wierszy, dla ktrych COLENUM jest pierwsz wartoci z listy. Analogicznie, sortowanie wzgldem kolumn ENUM powoduje sortowanie wedug indeksu, nie acucha. Najwiksza moliwa liczba elementw kolumny ENUM to 65 535.

SET
SET(warto1, warto2, ...)

Rozmiar w pamici 1 8 elementw: 1 bajt 9 16 elementw: 2 bajty 17 24 elementy: 3 bajty 25 32 elementy: 4 bajty 33 64 elementy: 8 bajtw Opis Lista wartoci wybieranych z okrelonego wczeniej zbioru. Pole moe zawiera dowoln liczb acuchw wskazanych w instrukcji SET, szczeglnie moe nie zawiera adnej takiej wartoci. SET jest podobny do ENUM, ale kade pole moe zawiera wicej ni jedn z podanych wartoci. Dane typu SET nie s jednak zapisywane za pomoc indeksw, ale w zoonej mapie bitowej. Jeli dany jest zbir SET, zawierajcy elementy: Mandarynka, Pomidor,
Rozdzia 3. Typy danych | 39

Gruszka i Banan, kady z tych elementw jest reprezentowany jako

wczony bit w bajcie, jak to pokazano w tabeli 3.1.


Tabela 3.1. Reprezentacja zbioru elementw w MySQL
Element
Mandarynka Pomidor Gruszka Banan

Warto dziesitna
1 2 4 8

Zapis bitowy
0001 0010 0100 1000

W powyszym przykadzie zapisanie jednoczenie wartoci Mandarynka i Gruszka wymaga uycia wartoci 5 (bitowo 0101). W kolumnie SET mona zapisa najwyej 64 wartoci. Wprawdzie t sam warto mona w jednym wyraeniu SQL wpisa wielokrotnie, ale w bazie danych warto ta zostanie zapisana raz.

40

MySQL. Leksykon kieszonkowy

4. SQL .............................................................................................. 41
Rozrnianie wielkoci liter Literay Identyfikatory Komentarze Instrukcje Zasady dotyczce transakcji 41 42 43 45 46 106

5. Operatory .................................................................................. 108


Priorytety operatorw Operatory arytmetyczne Operatory porwnania Operatory logiczne 108 109 109 111

6. Funkcje .......................................................................................113
Funkcje agregujce Funkcje oglnego przeznaczenia 113 115

7. Rodzaje tabel ............................................................................ 137 8. Procedury i funkcje skadowane .............................................. 138


Parametry Logika Kursory Obsuga zdarze i warunki 138 139 143 144

9. Trygery ...................................................................................... 146 Skorowidz ................................................................................. 147

MySQL. Leksykon kieszonkowy

Rozdzia 3. Typy danych


We wszystkich typach danych nawiasami kwadratowymi ([]) oznaczane s fragmenty opcjonalne. Poniszy przykad pokazuje sposb prezentacji typu BIGINT, opisanego dalej w tym rozdziale:
BIGINT[(wielko_pokazywana)]

Oznacza to, e sowo BIGINT moe wystpi samodzielnie lub z pokazywan wartoci. Uycie kursywy wskazuje, e nie naley wpisywa sowa wielko_pokazywana, ale poda wasn warto. Oto przykady uycia:
BIGINT BIGINT(20)

Poza typem BIGINT take wiele innych typw danych MySQL uwzgldnia deklaracj rozmiaru wywietlania. Jeli nie powiedziano inaczej, musi to by liczba od 1 do 255. W wersjach MySQL starszych ni wersja 5, baza danych w niektrych przypadkach zmieniaa podany typ kolumny, nie informujc o tym uytkownika. Obecnie takie podmiany nie maj ju miejsca.
VARCHAR -> CHAR

Jeli podana kolumna VARCHAR ma rozmiar mniejszy od czterech znakw, jest przeksztacana w kolumn CHAR.
CHAR -> VARCHAR

Jeli tabela zawiera co najmniej jedn kolumn o zmiennej dugoci, wszystkie kolumny typu CHAR dusze ni trzy znaki s zamieniane na VARCHAR.

Rozmiar wywietlania TIMESTAMP Rozmiar wywietlania pl TIMESTAMP musi by zawsze wielkoci parzyst od 2 do 14. Rozmiar rwny 0 lub wikszy od 14 powoduje przyjcie 14. Wszelkie liczby nieparzyste s zamieniane na nastpn liczb parzyst.

22

MySQL. Leksykon kieszonkowy

Liczby
MySQL obsuguje liczbowe typy danych zgodne z ANSI SQL 2. Typy te dzielimy na cakowitoliczbowe, dziesitne i zmiennoprzecinkowe. W ramach tych grup dzielimy typy dalej, wedug zajmowanej przez nie pamici. W przypadku typw liczbowych mona poda rozmiar wywietlania, ktry wpywa na sposb pokazywania przez MySQL wynikw. Rozmiar ten nie ma adnego zwizku z wielkoci pamici zajmowanej przez dany typ. Dodatkowo w przypadku liczb zmiennoprzecinkowych i dziesitnych mona poda liczb cyfr znajdujcych si za kropk dziesitn. Wtedy liczba cyfr powinna nalee do zakresu od 0 do 30, czyli by co najmniej o dwa mniejsza od rozmiaru wywietlania. Jeli warunek ten nie zostanie dotrzymany, MySQL automatycznie zmieni liczb cyfr tak, aby bya mniejsza o dwa od rozmiaru wywietlania. Przykadowo, MySQL automatycznie zmieni FLOAT(6,5) na FLOAT(7,5). Prba wstawienia do kolumny wartoci przekraczajcej dopuszczalny zakres tej kolumny powoduje obcicie tej wartoci do najmniejszej (dla liczb ujemnych) lub najwikszej (dla liczb dodatnich) wartoci dla danej kolumny dopuszczalnej. Jeli takie obcicie jest robione podczas wykonywania instrukcji ALTER TABLE, LOAD DATA INFILE, UPDATE lub wielowierszowej instrukcji INSERT, MySQL pokazuje ostrzeenie. Wyjtkiem jest korzystanie z MySQL w wersji 5 lub nowszej w trybie penej zgodnoci ze standardem SQL, gdy wtedy w przypadku instrukcji INSERT i UPDATE zgaszany jest bd. Atrybutu AUTO_INCREMENT mona uy do co najwyej jednej kolumny cakowitoliczbowej w tabeli. Atrybut UNSIGNED moe by czony z dowolnym liczbowym typem danych. Uycie tego atrybutu powoduje, e do kolumny nie mona wpisywa liczb ujemnych. Atrybut ZEROFILL nakazuje wypenienie kolumny od lewej

Rozdzia 3. Typy danych

23

strony zerami podczas wywietlania jej wartoci. O liczbie tych zer decyduje szeroko wywietlania danej kolumny.

BIGINT
BIGINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Najwikszy z typw cakowitoliczbowych, pozwalajcy zapisywa liczby od 9 223 372 036 854 775 808 do 9 223 372 036 854 775 807 (jeli bez znaku, to od 0 do 18 446 744 073 709 551 615). Z uwagi na sposb realizacji dziaa na liczbach tego typu, naley unika operacji na liczbach BIGINT bez znaku wikszych ni 9 223 372 036 854 775 807, gdy moe to zaowocowa nieprawidowymi wynikami.

BIT
BIT[(bity)]

Rozmiar w pamici w przyblieniu bity bitw+7 lub 8 bitw Opis W wersjach MySQL 5.0.3 i starszych, pola typu BIT dziaay tak samo, jak TINYINT(1). Omawiany typ pola pozwala przechowywa ustalon liczb bitw. Jeli podana zostanie wielko bitw mniejsza od dozwolonej, MySQL wypeni zerami bity od lewej strony.
24 | MySQL. Leksykon kieszonkowy

DEC
Synonim typu DECIMAL.

DECIMAL
DECIMAL[(dokadno, [skala])] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici rnie Opis Pozwala zapisywa liczby zmiennoprzecinkowe w sytuacjach, kiedy istotna jest dokadno na przykad przy operowaniu kwotami pienidzy. Stosujc typ DECIMAL, trzeba poda dwa jego parametry, dokadno i skal. Dokadno to liczba znaczcych cyfr, za skala to liczba znaczcych cyfr po kropce dziesitnej. Przykadowo, kolumna SALDO typu DECIMAL(9,2) pozwoliaby zapisywa liczby dziewiciocyfrowe, przy czym na prawo od kropki dziesitnej mogyby by dwie cyfry. Zakres dopuszczalnych liczb to w takiej sytuacji od 9 999 999,99 do 9 999 999,99. Jeli podana zostanie liczba zawierajca wicej cyfr po przecinku, ni przewiduje to definicja, liczba zostanie zaokrglona. Wartoci spoza zakresu DECIMAL s obcinane tak, aby si w nim zmieciy. W wersjach MySQL starszych ni 5, wartoci DECIMAL nie byy zapisywane jako liczby zmiennoprzecinkowe, lecz jako acuchy znakw. Na kad cyfr zuywany by jeden znak w przypadku skali wikszej od 0, poza tym jeden dodatkowy znak zuywany jest w przypadku liczb ujemnych. Jeli skala wynosi 0, liczby nie maj czci uamkowej. SQL zgodnie z norm ANSI pozwala pomija dokadno i (lub) skal. Jeli brak dokadnoci, przyjmowane jest ustawienie

Rozdzia 3. Typy danych

25

domylne charakterystyczne dla implementacji. Jeli brak skali, przyjmowane jest zero. W MySQL domylna warto dokadnoci to 10.

DOUBLE
DOUBLE[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Liczba zmiennoprzecinkowa podwjnej precyzji. Ten typ danych pozwala zapisywa due wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 1,7976931348623157E+308 do 2,2250738585072014E308, 0 oraz wartoci dodatnie od 2,2250738585072014E308 do 1,7976931348623157E+308.

DOUBLE PRECISION
Synonim DOUBLE.

FLOAT
FLOAT[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 4 bajty

26

MySQL. Leksykon kieszonkowy

Opis Liczba zmiennoprzecinkowa pojedynczej precyzji. Ten typ danych pozwala zapisywa mae wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 3,402823466E+38 do 1,175494351E38, 0 oraz wartoci dodatnie od 1,175494351E38 do 3,402823466E+38.

INT
INT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 4 bajty Opis Podstawowy rodzaj liczb cakowitych od 2 147 483 648 do 2 147 483 647 (lub od 0 do 4 294 967 295 w przypadku liczb bez znaku).

INTEGER
Synonim INT.

MEDIUMINT
MEDIUMINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

27

Opis Liczby cakowite od 8 388 608 do 8 388 607 (lub od 0 do 16 777 215 w przypadku liczb bez znaku).

NUMERIC
Synonim DECIMAL.

REAL
Synonim DOUBLE.

SMALLINT
SMALLINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 2 bajty Opis Liczby cakowite z zakresu od 32 768 do 32 767 (od 0 do 65 535 w przypadku liczb bez znaku).

TINYINT
TINYINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 1 bajt

28

MySQL. Leksykon kieszonkowy

Opis Liczby cakowite od 128 do 127 (od 0 do 255 w przypadku liczb bez znaku).

acuchy
MySQL obsuguje dwie kategorie acuchw: acuchy tekstowe oraz acuchy binarne. Obie kategorie maj swoje specyficzne typy do obsugi rnych wielkoci pl i rnych sposobw porwnywania wartoci. W zalenoci od sposobu porwnywania, mona uwzgldnia bd nie wielko liter, mona te porwnywa dane binarnie (bajt po bajcie). Kiedy nazwa typu tekstowego (jak CHAR, VARCHAR i inne) zostanie oznaczona sowem kluczowym BINARY, kolumna pozostaje kolumn tekstow, ale dane s porwnywane ze sob binarnie.

BINARY
BINARY(rozmiar)

Rozmiar wedug rozmiar, w zakresie od 0 do 255 Rozmiar w pamici


rozmiar bajtw

Opis Typ danych BINARY to binarny odpowiednik typu CHAR. Podstawowa rnica midzy tymi dwoma typami polega na tym, e pole typu BINARY zawiera dane binarne, wielko tych danych jest mierzona nie w znakach, lecz w bajtach. acuchy zawierajce

Rozdzia 3. Typy danych

29

mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie znakami 0x00 (wersja MySQL 5.0.5 i nowsze) lub spacjami (wersje starsze).

BLOB
Binarny odpowiednik typu TEXT.

CHAR
CHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar wedug rozmiar, do 255 Rozmiar w pamici zaleny od rozmiaru i od uytego zestawu znakw Opis Pole tekstowe ustalonej dugoci. acuchy zawierajce mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie spacjami. Podczas pobierania danych z bazy te dodatkowe spacje s usuwane. Pola CHAR(0) zostay zachowane w celu zapewnienia zgodnoci ze starymi systemami, w ktrych w kolumnach nie s zapisywane adne wartoci.

CHARACTER
Synonim CHAR.

30

MySQL. Leksykon kieszonkowy

CHARACTER VARYING
Synonim VARCHAR.

LONGBLOB
Binarny odpowiednik LONGTEXT.

LONGTEXT
LONGTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 4 294 295 Rozmiar w pamici Dugo wartoci+4 bajty Opis Typ pozwala zapisywa due wartoci tekstowe. Teoretyczne ograniczenie rozmiaru tekstu to ponad 4 GB, ale praktycznymi ograniczeniami s ograniczenia protokou komunikacyjnego MySQL oraz ilo pamici przeznaczonej na komunikacj na serwerze i na stacji klienckiej.

MEDIUMBLOB
Binarna posta MEDIUMTEXT.

MEDIUMTEXT
MEDIUMTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozdzia 3. Typy danych

31

Rozmiar 0 do 16 777 215 Rozmiar w pamici Dugo wartoci+3 bajty Opis Typ pozwala zapisywa redniej wielkoci wartoci tekstowe.

NCHAR
Synonim CHAR.

NATIONAL CHAR
Synonim CHAR.

NATIONAL CHARACTER
Synonim CHAR.

NATIONAL VARCHAR
Synonim VARCHAR.

TEXT
TEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 65 535

32

MySQL. Leksykon kieszonkowy

Rozmiar w pamici Dugo wartoci tekstowej+2 bajty Opis Typ pozwala zapisywa typowe wartoci tekstowe.

TINYBLOB
Binarny odpowiednik TINYTEXT.

TINYTEXT
TINYTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 255 Rozmiar w pamici Dugo wartoci tekstowej+1 bajt Opis Pozwala zapisywa krtkie dane tekstowe.

VARBINARY
VARBINARY(rozmiar)

Rozmiar Wedug parametru rozmiar

Rozdzia 3. Typy danych

33

Rozmiar w pamici
rozmiar bajtw

Opis Jest to binarna odmiana typu VARCHAR. Podstawowa rnica polega na tym, e zapisywane s dane binarne, a rozmiar pola mierzony jest w bajtach, nie w znakach. Wielkoci typu VARBINARY, w przeciwiestwie do wartoci typu BINARY, nie s niczym dopeniane.

VARCHAR
VARCHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar Wskazana przez rozmiar warto z zakresu do 65 532 (od 1 do 255 w wersjach wczeniejszych ni MySQL 5); rozmiar wskazuje rzeczywist wielko kolumny i jest ograniczony przez dopuszczaln wielko wiersza w znakach; to, ile miejsca faktycznie bdzie potrzebne, zaley zatem od zestawu znakw uytego w danej kolumnie Rozmiar w pamici Zaley od liczby znakw wskazanych jako rozmiar oraz od liczby bajtw potrzebnych do zapisu poszczeglnych znakw w uytym mechanizmie kodowania znakw Opis Pozwala zapisywa wartoci tekstowe zmiennej dugoci. W wersjach poprzedzajcych MySQL 5 z wartoci VARCHAR usuwane s spacje kocowe; wersja MySQL 5 i nowsze standardowo nie usuwaj spacji kocowych.

34

MySQL. Leksykon kieszonkowy

Daty
Typy datowe MySQL s wyjtkowo elastycznym narzdziem, pozwalajcym zapisywa wszelki informacje dzienne. MySQL jest bardzo tolerancyjny i zakada, e to aplikacja, a nie baza danych, ma sprawdza poprawno tych danych. MySQL sprawdza jedynie, czy miesic nie wykracza poza zakres 0 12 i czy dzie nie wykracza poza zakres 0 31. Wobec tego z punktu widzenia MySQL 31 lutego 2001 roku jest poprawn dat. Bardziej przydatn wartoci jest data 0 lutego 2001 roku; cyfra zero moe zastpowa t cz daty, ktrej dokadnie nie znamy. MySQL 5 jest jednak ju baz danych nieco bardziej restrykcyjn co do wartoci, jakie mona zapisywa w polach datowych. Wprawdzie MySQL dopuszcza do du swobod formatw wejciowych dat, to naley stara si w aplikacjach daty formatowa zgodnie z formatem wewntrznym MySQL w celu uniknicia nieporozumie. MySQL zawsze zakada, e rok jest pierwszym elementem po lewej stronie daty. Jeli w operacji SQL podana zostanie nieprawidowa warto daty, MySQL wstawi w jej miejsce zero. MySQL w kontekcie liczb cakowitych automatycznie konwertuje daty i czas na liczby cakowite.

DATE
DATE

Format
YYYY-MM-DD (2001-01-01)

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

35

Opis Data kalendarza gregoriaskiego z zakresu od 1 stycznia 1000 roku ('1000-01-01') do 31 grudnia 9999 roku ('9999-12-31').

DATETIME
DATETIME

Format
YYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 8 bajtw Opis Zapisuje czas z zakresu od 00:00:00 1 stycznia 1000 roku ('100001-01 00:00:00') do 23:59:59 31 grudnia 9999 ('9999-12-31 23:59:59') wedug kalendarza gregoriaskiego.

TIME
TIME

Format
hh:mm:ss (06:00:00)

Rozmiar w pamici 3 bajty Opis Zapisuje czas od pnocy ('00:00:00') do sekundy przed pnoc ('23:59:59').
36 | MySQL. Leksykon kieszonkowy

TIMESTAMP
TIMESTAMP[(rozmiar_wywietlania)]

Format
YYYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 4 bajty Opis Zapis chwili z dokadnoci do sekundy od pnocy 1 stycznia 1970 roku do minuty przed pnoc 31 grudnia 2037 roku. Podstawowym zastosowaniem tego typu jest rejestracja modyfikacji tabel. Przy wstawianiu do takiej kolumny wartoci NULL wstawiane s aktualna data i czas. W przypadku modyfikowania jakiejkolwiek wartoci w wierszu z kolumn TIMESTAMP pierwsza kolumna tego typu zostanie zaktualizowana biec dat i czasem. Format danych TIMESTAMP znany z wczeniejszych wersji MySQL, do 4.1 wcznie, w wersji 5.1 nie jest ju obsugiwany.

YEAR
YEAR[(rozmiar)]

Format
YYYY (2001)

Rozmiar w pamici 1 bajt

Rozdzia 3. Typy danych

37

Opis Pozwala zapisa rok z kalendarza gregoriaskiego. Parametr rozmiar umoliwia zapisywanie roku dwu- lub czterocyfrowo. Zakres YEAR(4) rozciga si od 1900 do 2155, dla YEAR(2) od 1970 do 2069. Domylnie przyjmowane jest YEAR(4).

Typy zoone
Zoone typy danych MySQL, ENUM i SET, s po prostu specjalnymi przypadkami typw acuchowych. Opisujemy je osobno, gdy s bardziej zoone pojciowo i stanowi wprowadzenie do typw danych SQL3, ktre by moe MySQL bdzie obsugiwa w przyszoci.

ENUM
ENUM(warto1, warto2, ...)

Rozmiar w pamici 1 255 elementw: 1 bajt 255 65 535 elementw: 2 bajty Opis Typ danych ENUM pozwala zapisywa jeden z wielu zdefiniowanych wczeniej acuchw. Przy tworzeniu kolumny typu ENUM podaje si list dopuszczalnych jej wartoci. Dane mog by do tej kolumny wstawiane i aktualizowane jedynie z tej listy; kada prba wstawienia wartoci spoza niej powoduje wstawienie pustego acucha.

38

MySQL. Leksykon kieszonkowy

Do listy dopuszczalnych wartoci mona si odwoywa przez indeks, przy czym pierwszy element otrzymuje numer 0. Na przykad:
SELECT COLID FROM TBL WHERE COLENUM = 0;

Jeli COLID jest kolumn z kluczem gwnym, a COLENUM kolumn typu ENUM, taka instrukcja SQL spowoduje pobranie kluczy gwnych wszystkich wierszy, dla ktrych COLENUM jest pierwsz wartoci z listy. Analogicznie, sortowanie wzgldem kolumn ENUM powoduje sortowanie wedug indeksu, nie acucha. Najwiksza moliwa liczba elementw kolumny ENUM to 65 535.

SET
SET(warto1, warto2, ...)

Rozmiar w pamici 1 8 elementw: 1 bajt 9 16 elementw: 2 bajty 17 24 elementy: 3 bajty 25 32 elementy: 4 bajty 33 64 elementy: 8 bajtw Opis Lista wartoci wybieranych z okrelonego wczeniej zbioru. Pole moe zawiera dowoln liczb acuchw wskazanych w instrukcji SET, szczeglnie moe nie zawiera adnej takiej wartoci. SET jest podobny do ENUM, ale kade pole moe zawiera wicej ni jedn z podanych wartoci. Dane typu SET nie s jednak zapisywane za pomoc indeksw, ale w zoonej mapie bitowej. Jeli dany jest zbir SET, zawierajcy elementy: Mandarynka, Pomidor,
Rozdzia 3. Typy danych | 39

Gruszka i Banan, kady z tych elementw jest reprezentowany jako

wczony bit w bajcie, jak to pokazano w tabeli 3.1.


Tabela 3.1. Reprezentacja zbioru elementw w MySQL
Element
Mandarynka Pomidor Gruszka Banan

Warto dziesitna
1 2 4 8

Zapis bitowy
0001 0010 0100 1000

W powyszym przykadzie zapisanie jednoczenie wartoci Mandarynka i Gruszka wymaga uycia wartoci 5 (bitowo 0101). W kolumnie SET mona zapisa najwyej 64 wartoci. Wprawdzie t sam warto mona w jednym wyraeniu SQL wpisa wielokrotnie, ale w bazie danych warto ta zostanie zapisana raz.

40

MySQL. Leksykon kieszonkowy

4. SQL .............................................................................................. 41
Rozrnianie wielkoci liter Literay Identyfikatory Komentarze Instrukcje Zasady dotyczce transakcji 41 42 43 45 46 106

5. Operatory .................................................................................. 108


Priorytety operatorw Operatory arytmetyczne Operatory porwnania Operatory logiczne 108 109 109 111

6. Funkcje .......................................................................................113
Funkcje agregujce Funkcje oglnego przeznaczenia 113 115

7. Rodzaje tabel ............................................................................ 137 8. Procedury i funkcje skadowane .............................................. 138


Parametry Logika Kursory Obsuga zdarze i warunki 138 139 143 144

9. Trygery ...................................................................................... 146 Skorowidz ................................................................................. 147

MySQL. Leksykon kieszonkowy

Rozdzia 3. Typy danych


We wszystkich typach danych nawiasami kwadratowymi ([]) oznaczane s fragmenty opcjonalne. Poniszy przykad pokazuje sposb prezentacji typu BIGINT, opisanego dalej w tym rozdziale:
BIGINT[(wielko_pokazywana)]

Oznacza to, e sowo BIGINT moe wystpi samodzielnie lub z pokazywan wartoci. Uycie kursywy wskazuje, e nie naley wpisywa sowa wielko_pokazywana, ale poda wasn warto. Oto przykady uycia:
BIGINT BIGINT(20)

Poza typem BIGINT take wiele innych typw danych MySQL uwzgldnia deklaracj rozmiaru wywietlania. Jeli nie powiedziano inaczej, musi to by liczba od 1 do 255. W wersjach MySQL starszych ni wersja 5, baza danych w niektrych przypadkach zmieniaa podany typ kolumny, nie informujc o tym uytkownika. Obecnie takie podmiany nie maj ju miejsca.
VARCHAR -> CHAR

Jeli podana kolumna VARCHAR ma rozmiar mniejszy od czterech znakw, jest przeksztacana w kolumn CHAR.
CHAR -> VARCHAR

Jeli tabela zawiera co najmniej jedn kolumn o zmiennej dugoci, wszystkie kolumny typu CHAR dusze ni trzy znaki s zamieniane na VARCHAR.

Rozmiar wywietlania TIMESTAMP Rozmiar wywietlania pl TIMESTAMP musi by zawsze wielkoci parzyst od 2 do 14. Rozmiar rwny 0 lub wikszy od 14 powoduje przyjcie 14. Wszelkie liczby nieparzyste s zamieniane na nastpn liczb parzyst.

22

MySQL. Leksykon kieszonkowy

Liczby
MySQL obsuguje liczbowe typy danych zgodne z ANSI SQL 2. Typy te dzielimy na cakowitoliczbowe, dziesitne i zmiennoprzecinkowe. W ramach tych grup dzielimy typy dalej, wedug zajmowanej przez nie pamici. W przypadku typw liczbowych mona poda rozmiar wywietlania, ktry wpywa na sposb pokazywania przez MySQL wynikw. Rozmiar ten nie ma adnego zwizku z wielkoci pamici zajmowanej przez dany typ. Dodatkowo w przypadku liczb zmiennoprzecinkowych i dziesitnych mona poda liczb cyfr znajdujcych si za kropk dziesitn. Wtedy liczba cyfr powinna nalee do zakresu od 0 do 30, czyli by co najmniej o dwa mniejsza od rozmiaru wywietlania. Jeli warunek ten nie zostanie dotrzymany, MySQL automatycznie zmieni liczb cyfr tak, aby bya mniejsza o dwa od rozmiaru wywietlania. Przykadowo, MySQL automatycznie zmieni FLOAT(6,5) na FLOAT(7,5). Prba wstawienia do kolumny wartoci przekraczajcej dopuszczalny zakres tej kolumny powoduje obcicie tej wartoci do najmniejszej (dla liczb ujemnych) lub najwikszej (dla liczb dodatnich) wartoci dla danej kolumny dopuszczalnej. Jeli takie obcicie jest robione podczas wykonywania instrukcji ALTER TABLE, LOAD DATA INFILE, UPDATE lub wielowierszowej instrukcji INSERT, MySQL pokazuje ostrzeenie. Wyjtkiem jest korzystanie z MySQL w wersji 5 lub nowszej w trybie penej zgodnoci ze standardem SQL, gdy wtedy w przypadku instrukcji INSERT i UPDATE zgaszany jest bd. Atrybutu AUTO_INCREMENT mona uy do co najwyej jednej kolumny cakowitoliczbowej w tabeli. Atrybut UNSIGNED moe by czony z dowolnym liczbowym typem danych. Uycie tego atrybutu powoduje, e do kolumny nie mona wpisywa liczb ujemnych. Atrybut ZEROFILL nakazuje wypenienie kolumny od lewej

Rozdzia 3. Typy danych

23

strony zerami podczas wywietlania jej wartoci. O liczbie tych zer decyduje szeroko wywietlania danej kolumny.

BIGINT
BIGINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Najwikszy z typw cakowitoliczbowych, pozwalajcy zapisywa liczby od 9 223 372 036 854 775 808 do 9 223 372 036 854 775 807 (jeli bez znaku, to od 0 do 18 446 744 073 709 551 615). Z uwagi na sposb realizacji dziaa na liczbach tego typu, naley unika operacji na liczbach BIGINT bez znaku wikszych ni 9 223 372 036 854 775 807, gdy moe to zaowocowa nieprawidowymi wynikami.

BIT
BIT[(bity)]

Rozmiar w pamici w przyblieniu bity bitw+7 lub 8 bitw Opis W wersjach MySQL 5.0.3 i starszych, pola typu BIT dziaay tak samo, jak TINYINT(1). Omawiany typ pola pozwala przechowywa ustalon liczb bitw. Jeli podana zostanie wielko bitw mniejsza od dozwolonej, MySQL wypeni zerami bity od lewej strony.
24 | MySQL. Leksykon kieszonkowy

DEC
Synonim typu DECIMAL.

DECIMAL
DECIMAL[(dokadno, [skala])] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici rnie Opis Pozwala zapisywa liczby zmiennoprzecinkowe w sytuacjach, kiedy istotna jest dokadno na przykad przy operowaniu kwotami pienidzy. Stosujc typ DECIMAL, trzeba poda dwa jego parametry, dokadno i skal. Dokadno to liczba znaczcych cyfr, za skala to liczba znaczcych cyfr po kropce dziesitnej. Przykadowo, kolumna SALDO typu DECIMAL(9,2) pozwoliaby zapisywa liczby dziewiciocyfrowe, przy czym na prawo od kropki dziesitnej mogyby by dwie cyfry. Zakres dopuszczalnych liczb to w takiej sytuacji od 9 999 999,99 do 9 999 999,99. Jeli podana zostanie liczba zawierajca wicej cyfr po przecinku, ni przewiduje to definicja, liczba zostanie zaokrglona. Wartoci spoza zakresu DECIMAL s obcinane tak, aby si w nim zmieciy. W wersjach MySQL starszych ni 5, wartoci DECIMAL nie byy zapisywane jako liczby zmiennoprzecinkowe, lecz jako acuchy znakw. Na kad cyfr zuywany by jeden znak w przypadku skali wikszej od 0, poza tym jeden dodatkowy znak zuywany jest w przypadku liczb ujemnych. Jeli skala wynosi 0, liczby nie maj czci uamkowej. SQL zgodnie z norm ANSI pozwala pomija dokadno i (lub) skal. Jeli brak dokadnoci, przyjmowane jest ustawienie

Rozdzia 3. Typy danych

25

domylne charakterystyczne dla implementacji. Jeli brak skali, przyjmowane jest zero. W MySQL domylna warto dokadnoci to 10.

DOUBLE
DOUBLE[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Liczba zmiennoprzecinkowa podwjnej precyzji. Ten typ danych pozwala zapisywa due wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 1,7976931348623157E+308 do 2,2250738585072014E308, 0 oraz wartoci dodatnie od 2,2250738585072014E308 do 1,7976931348623157E+308.

DOUBLE PRECISION
Synonim DOUBLE.

FLOAT
FLOAT[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 4 bajty

26

MySQL. Leksykon kieszonkowy

Opis Liczba zmiennoprzecinkowa pojedynczej precyzji. Ten typ danych pozwala zapisywa mae wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 3,402823466E+38 do 1,175494351E38, 0 oraz wartoci dodatnie od 1,175494351E38 do 3,402823466E+38.

INT
INT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 4 bajty Opis Podstawowy rodzaj liczb cakowitych od 2 147 483 648 do 2 147 483 647 (lub od 0 do 4 294 967 295 w przypadku liczb bez znaku).

INTEGER
Synonim INT.

MEDIUMINT
MEDIUMINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

27

Opis Liczby cakowite od 8 388 608 do 8 388 607 (lub od 0 do 16 777 215 w przypadku liczb bez znaku).

NUMERIC
Synonim DECIMAL.

REAL
Synonim DOUBLE.

SMALLINT
SMALLINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 2 bajty Opis Liczby cakowite z zakresu od 32 768 do 32 767 (od 0 do 65 535 w przypadku liczb bez znaku).

TINYINT
TINYINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 1 bajt

28

MySQL. Leksykon kieszonkowy

Opis Liczby cakowite od 128 do 127 (od 0 do 255 w przypadku liczb bez znaku).

acuchy
MySQL obsuguje dwie kategorie acuchw: acuchy tekstowe oraz acuchy binarne. Obie kategorie maj swoje specyficzne typy do obsugi rnych wielkoci pl i rnych sposobw porwnywania wartoci. W zalenoci od sposobu porwnywania, mona uwzgldnia bd nie wielko liter, mona te porwnywa dane binarnie (bajt po bajcie). Kiedy nazwa typu tekstowego (jak CHAR, VARCHAR i inne) zostanie oznaczona sowem kluczowym BINARY, kolumna pozostaje kolumn tekstow, ale dane s porwnywane ze sob binarnie.

BINARY
BINARY(rozmiar)

Rozmiar wedug rozmiar, w zakresie od 0 do 255 Rozmiar w pamici


rozmiar bajtw

Opis Typ danych BINARY to binarny odpowiednik typu CHAR. Podstawowa rnica midzy tymi dwoma typami polega na tym, e pole typu BINARY zawiera dane binarne, wielko tych danych jest mierzona nie w znakach, lecz w bajtach. acuchy zawierajce

Rozdzia 3. Typy danych

29

mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie znakami 0x00 (wersja MySQL 5.0.5 i nowsze) lub spacjami (wersje starsze).

BLOB
Binarny odpowiednik typu TEXT.

CHAR
CHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar wedug rozmiar, do 255 Rozmiar w pamici zaleny od rozmiaru i od uytego zestawu znakw Opis Pole tekstowe ustalonej dugoci. acuchy zawierajce mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie spacjami. Podczas pobierania danych z bazy te dodatkowe spacje s usuwane. Pola CHAR(0) zostay zachowane w celu zapewnienia zgodnoci ze starymi systemami, w ktrych w kolumnach nie s zapisywane adne wartoci.

CHARACTER
Synonim CHAR.

30

MySQL. Leksykon kieszonkowy

CHARACTER VARYING
Synonim VARCHAR.

LONGBLOB
Binarny odpowiednik LONGTEXT.

LONGTEXT
LONGTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 4 294 295 Rozmiar w pamici Dugo wartoci+4 bajty Opis Typ pozwala zapisywa due wartoci tekstowe. Teoretyczne ograniczenie rozmiaru tekstu to ponad 4 GB, ale praktycznymi ograniczeniami s ograniczenia protokou komunikacyjnego MySQL oraz ilo pamici przeznaczonej na komunikacj na serwerze i na stacji klienckiej.

MEDIUMBLOB
Binarna posta MEDIUMTEXT.

MEDIUMTEXT
MEDIUMTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozdzia 3. Typy danych

31

Rozmiar 0 do 16 777 215 Rozmiar w pamici Dugo wartoci+3 bajty Opis Typ pozwala zapisywa redniej wielkoci wartoci tekstowe.

NCHAR
Synonim CHAR.

NATIONAL CHAR
Synonim CHAR.

NATIONAL CHARACTER
Synonim CHAR.

NATIONAL VARCHAR
Synonim VARCHAR.

TEXT
TEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 65 535

32

MySQL. Leksykon kieszonkowy

Rozmiar w pamici Dugo wartoci tekstowej+2 bajty Opis Typ pozwala zapisywa typowe wartoci tekstowe.

TINYBLOB
Binarny odpowiednik TINYTEXT.

TINYTEXT
TINYTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 255 Rozmiar w pamici Dugo wartoci tekstowej+1 bajt Opis Pozwala zapisywa krtkie dane tekstowe.

VARBINARY
VARBINARY(rozmiar)

Rozmiar Wedug parametru rozmiar

Rozdzia 3. Typy danych

33

Rozmiar w pamici
rozmiar bajtw

Opis Jest to binarna odmiana typu VARCHAR. Podstawowa rnica polega na tym, e zapisywane s dane binarne, a rozmiar pola mierzony jest w bajtach, nie w znakach. Wielkoci typu VARBINARY, w przeciwiestwie do wartoci typu BINARY, nie s niczym dopeniane.

VARCHAR
VARCHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar Wskazana przez rozmiar warto z zakresu do 65 532 (od 1 do 255 w wersjach wczeniejszych ni MySQL 5); rozmiar wskazuje rzeczywist wielko kolumny i jest ograniczony przez dopuszczaln wielko wiersza w znakach; to, ile miejsca faktycznie bdzie potrzebne, zaley zatem od zestawu znakw uytego w danej kolumnie Rozmiar w pamici Zaley od liczby znakw wskazanych jako rozmiar oraz od liczby bajtw potrzebnych do zapisu poszczeglnych znakw w uytym mechanizmie kodowania znakw Opis Pozwala zapisywa wartoci tekstowe zmiennej dugoci. W wersjach poprzedzajcych MySQL 5 z wartoci VARCHAR usuwane s spacje kocowe; wersja MySQL 5 i nowsze standardowo nie usuwaj spacji kocowych.

34

MySQL. Leksykon kieszonkowy

Daty
Typy datowe MySQL s wyjtkowo elastycznym narzdziem, pozwalajcym zapisywa wszelki informacje dzienne. MySQL jest bardzo tolerancyjny i zakada, e to aplikacja, a nie baza danych, ma sprawdza poprawno tych danych. MySQL sprawdza jedynie, czy miesic nie wykracza poza zakres 0 12 i czy dzie nie wykracza poza zakres 0 31. Wobec tego z punktu widzenia MySQL 31 lutego 2001 roku jest poprawn dat. Bardziej przydatn wartoci jest data 0 lutego 2001 roku; cyfra zero moe zastpowa t cz daty, ktrej dokadnie nie znamy. MySQL 5 jest jednak ju baz danych nieco bardziej restrykcyjn co do wartoci, jakie mona zapisywa w polach datowych. Wprawdzie MySQL dopuszcza do du swobod formatw wejciowych dat, to naley stara si w aplikacjach daty formatowa zgodnie z formatem wewntrznym MySQL w celu uniknicia nieporozumie. MySQL zawsze zakada, e rok jest pierwszym elementem po lewej stronie daty. Jeli w operacji SQL podana zostanie nieprawidowa warto daty, MySQL wstawi w jej miejsce zero. MySQL w kontekcie liczb cakowitych automatycznie konwertuje daty i czas na liczby cakowite.

DATE
DATE

Format
YYYY-MM-DD (2001-01-01)

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

35

Opis Data kalendarza gregoriaskiego z zakresu od 1 stycznia 1000 roku ('1000-01-01') do 31 grudnia 9999 roku ('9999-12-31').

DATETIME
DATETIME

Format
YYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 8 bajtw Opis Zapisuje czas z zakresu od 00:00:00 1 stycznia 1000 roku ('100001-01 00:00:00') do 23:59:59 31 grudnia 9999 ('9999-12-31 23:59:59') wedug kalendarza gregoriaskiego.

TIME
TIME

Format
hh:mm:ss (06:00:00)

Rozmiar w pamici 3 bajty Opis Zapisuje czas od pnocy ('00:00:00') do sekundy przed pnoc ('23:59:59').
36 | MySQL. Leksykon kieszonkowy

TIMESTAMP
TIMESTAMP[(rozmiar_wywietlania)]

Format
YYYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 4 bajty Opis Zapis chwili z dokadnoci do sekundy od pnocy 1 stycznia 1970 roku do minuty przed pnoc 31 grudnia 2037 roku. Podstawowym zastosowaniem tego typu jest rejestracja modyfikacji tabel. Przy wstawianiu do takiej kolumny wartoci NULL wstawiane s aktualna data i czas. W przypadku modyfikowania jakiejkolwiek wartoci w wierszu z kolumn TIMESTAMP pierwsza kolumna tego typu zostanie zaktualizowana biec dat i czasem. Format danych TIMESTAMP znany z wczeniejszych wersji MySQL, do 4.1 wcznie, w wersji 5.1 nie jest ju obsugiwany.

YEAR
YEAR[(rozmiar)]

Format
YYYY (2001)

Rozmiar w pamici 1 bajt

Rozdzia 3. Typy danych

37

Opis Pozwala zapisa rok z kalendarza gregoriaskiego. Parametr rozmiar umoliwia zapisywanie roku dwu- lub czterocyfrowo. Zakres YEAR(4) rozciga si od 1900 do 2155, dla YEAR(2) od 1970 do 2069. Domylnie przyjmowane jest YEAR(4).

Typy zoone
Zoone typy danych MySQL, ENUM i SET, s po prostu specjalnymi przypadkami typw acuchowych. Opisujemy je osobno, gdy s bardziej zoone pojciowo i stanowi wprowadzenie do typw danych SQL3, ktre by moe MySQL bdzie obsugiwa w przyszoci.

ENUM
ENUM(warto1, warto2, ...)

Rozmiar w pamici 1 255 elementw: 1 bajt 255 65 535 elementw: 2 bajty Opis Typ danych ENUM pozwala zapisywa jeden z wielu zdefiniowanych wczeniej acuchw. Przy tworzeniu kolumny typu ENUM podaje si list dopuszczalnych jej wartoci. Dane mog by do tej kolumny wstawiane i aktualizowane jedynie z tej listy; kada prba wstawienia wartoci spoza niej powoduje wstawienie pustego acucha.

38

MySQL. Leksykon kieszonkowy

Do listy dopuszczalnych wartoci mona si odwoywa przez indeks, przy czym pierwszy element otrzymuje numer 0. Na przykad:
SELECT COLID FROM TBL WHERE COLENUM = 0;

Jeli COLID jest kolumn z kluczem gwnym, a COLENUM kolumn typu ENUM, taka instrukcja SQL spowoduje pobranie kluczy gwnych wszystkich wierszy, dla ktrych COLENUM jest pierwsz wartoci z listy. Analogicznie, sortowanie wzgldem kolumn ENUM powoduje sortowanie wedug indeksu, nie acucha. Najwiksza moliwa liczba elementw kolumny ENUM to 65 535.

SET
SET(warto1, warto2, ...)

Rozmiar w pamici 1 8 elementw: 1 bajt 9 16 elementw: 2 bajty 17 24 elementy: 3 bajty 25 32 elementy: 4 bajty 33 64 elementy: 8 bajtw Opis Lista wartoci wybieranych z okrelonego wczeniej zbioru. Pole moe zawiera dowoln liczb acuchw wskazanych w instrukcji SET, szczeglnie moe nie zawiera adnej takiej wartoci. SET jest podobny do ENUM, ale kade pole moe zawiera wicej ni jedn z podanych wartoci. Dane typu SET nie s jednak zapisywane za pomoc indeksw, ale w zoonej mapie bitowej. Jeli dany jest zbir SET, zawierajcy elementy: Mandarynka, Pomidor,
Rozdzia 3. Typy danych | 39

Gruszka i Banan, kady z tych elementw jest reprezentowany jako

wczony bit w bajcie, jak to pokazano w tabeli 3.1.


Tabela 3.1. Reprezentacja zbioru elementw w MySQL
Element
Mandarynka Pomidor Gruszka Banan

Warto dziesitna
1 2 4 8

Zapis bitowy
0001 0010 0100 1000

W powyszym przykadzie zapisanie jednoczenie wartoci Mandarynka i Gruszka wymaga uycia wartoci 5 (bitowo 0101). W kolumnie SET mona zapisa najwyej 64 wartoci. Wprawdzie t sam warto mona w jednym wyraeniu SQL wpisa wielokrotnie, ale w bazie danych warto ta zostanie zapisana raz.

40

MySQL. Leksykon kieszonkowy

4. SQL .............................................................................................. 41
Rozrnianie wielkoci liter Literay Identyfikatory Komentarze Instrukcje Zasady dotyczce transakcji 41 42 43 45 46 106

5. Operatory .................................................................................. 108


Priorytety operatorw Operatory arytmetyczne Operatory porwnania Operatory logiczne 108 109 109 111

6. Funkcje .......................................................................................113
Funkcje agregujce Funkcje oglnego przeznaczenia 113 115

7. Rodzaje tabel ............................................................................ 137 8. Procedury i funkcje skadowane .............................................. 138


Parametry Logika Kursory Obsuga zdarze i warunki 138 139 143 144

9. Trygery ...................................................................................... 146 Skorowidz ................................................................................. 147

MySQL. Leksykon kieszonkowy

Rozdzia 3. Typy danych


We wszystkich typach danych nawiasami kwadratowymi ([]) oznaczane s fragmenty opcjonalne. Poniszy przykad pokazuje sposb prezentacji typu BIGINT, opisanego dalej w tym rozdziale:
BIGINT[(wielko_pokazywana)]

Oznacza to, e sowo BIGINT moe wystpi samodzielnie lub z pokazywan wartoci. Uycie kursywy wskazuje, e nie naley wpisywa sowa wielko_pokazywana, ale poda wasn warto. Oto przykady uycia:
BIGINT BIGINT(20)

Poza typem BIGINT take wiele innych typw danych MySQL uwzgldnia deklaracj rozmiaru wywietlania. Jeli nie powiedziano inaczej, musi to by liczba od 1 do 255. W wersjach MySQL starszych ni wersja 5, baza danych w niektrych przypadkach zmieniaa podany typ kolumny, nie informujc o tym uytkownika. Obecnie takie podmiany nie maj ju miejsca.
VARCHAR -> CHAR

Jeli podana kolumna VARCHAR ma rozmiar mniejszy od czterech znakw, jest przeksztacana w kolumn CHAR.
CHAR -> VARCHAR

Jeli tabela zawiera co najmniej jedn kolumn o zmiennej dugoci, wszystkie kolumny typu CHAR dusze ni trzy znaki s zamieniane na VARCHAR.

Rozmiar wywietlania TIMESTAMP Rozmiar wywietlania pl TIMESTAMP musi by zawsze wielkoci parzyst od 2 do 14. Rozmiar rwny 0 lub wikszy od 14 powoduje przyjcie 14. Wszelkie liczby nieparzyste s zamieniane na nastpn liczb parzyst.

22

MySQL. Leksykon kieszonkowy

Liczby
MySQL obsuguje liczbowe typy danych zgodne z ANSI SQL 2. Typy te dzielimy na cakowitoliczbowe, dziesitne i zmiennoprzecinkowe. W ramach tych grup dzielimy typy dalej, wedug zajmowanej przez nie pamici. W przypadku typw liczbowych mona poda rozmiar wywietlania, ktry wpywa na sposb pokazywania przez MySQL wynikw. Rozmiar ten nie ma adnego zwizku z wielkoci pamici zajmowanej przez dany typ. Dodatkowo w przypadku liczb zmiennoprzecinkowych i dziesitnych mona poda liczb cyfr znajdujcych si za kropk dziesitn. Wtedy liczba cyfr powinna nalee do zakresu od 0 do 30, czyli by co najmniej o dwa mniejsza od rozmiaru wywietlania. Jeli warunek ten nie zostanie dotrzymany, MySQL automatycznie zmieni liczb cyfr tak, aby bya mniejsza o dwa od rozmiaru wywietlania. Przykadowo, MySQL automatycznie zmieni FLOAT(6,5) na FLOAT(7,5). Prba wstawienia do kolumny wartoci przekraczajcej dopuszczalny zakres tej kolumny powoduje obcicie tej wartoci do najmniejszej (dla liczb ujemnych) lub najwikszej (dla liczb dodatnich) wartoci dla danej kolumny dopuszczalnej. Jeli takie obcicie jest robione podczas wykonywania instrukcji ALTER TABLE, LOAD DATA INFILE, UPDATE lub wielowierszowej instrukcji INSERT, MySQL pokazuje ostrzeenie. Wyjtkiem jest korzystanie z MySQL w wersji 5 lub nowszej w trybie penej zgodnoci ze standardem SQL, gdy wtedy w przypadku instrukcji INSERT i UPDATE zgaszany jest bd. Atrybutu AUTO_INCREMENT mona uy do co najwyej jednej kolumny cakowitoliczbowej w tabeli. Atrybut UNSIGNED moe by czony z dowolnym liczbowym typem danych. Uycie tego atrybutu powoduje, e do kolumny nie mona wpisywa liczb ujemnych. Atrybut ZEROFILL nakazuje wypenienie kolumny od lewej

Rozdzia 3. Typy danych

23

strony zerami podczas wywietlania jej wartoci. O liczbie tych zer decyduje szeroko wywietlania danej kolumny.

BIGINT
BIGINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Najwikszy z typw cakowitoliczbowych, pozwalajcy zapisywa liczby od 9 223 372 036 854 775 808 do 9 223 372 036 854 775 807 (jeli bez znaku, to od 0 do 18 446 744 073 709 551 615). Z uwagi na sposb realizacji dziaa na liczbach tego typu, naley unika operacji na liczbach BIGINT bez znaku wikszych ni 9 223 372 036 854 775 807, gdy moe to zaowocowa nieprawidowymi wynikami.

BIT
BIT[(bity)]

Rozmiar w pamici w przyblieniu bity bitw+7 lub 8 bitw Opis W wersjach MySQL 5.0.3 i starszych, pola typu BIT dziaay tak samo, jak TINYINT(1). Omawiany typ pola pozwala przechowywa ustalon liczb bitw. Jeli podana zostanie wielko bitw mniejsza od dozwolonej, MySQL wypeni zerami bity od lewej strony.
24 | MySQL. Leksykon kieszonkowy

DEC
Synonim typu DECIMAL.

DECIMAL
DECIMAL[(dokadno, [skala])] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici rnie Opis Pozwala zapisywa liczby zmiennoprzecinkowe w sytuacjach, kiedy istotna jest dokadno na przykad przy operowaniu kwotami pienidzy. Stosujc typ DECIMAL, trzeba poda dwa jego parametry, dokadno i skal. Dokadno to liczba znaczcych cyfr, za skala to liczba znaczcych cyfr po kropce dziesitnej. Przykadowo, kolumna SALDO typu DECIMAL(9,2) pozwoliaby zapisywa liczby dziewiciocyfrowe, przy czym na prawo od kropki dziesitnej mogyby by dwie cyfry. Zakres dopuszczalnych liczb to w takiej sytuacji od 9 999 999,99 do 9 999 999,99. Jeli podana zostanie liczba zawierajca wicej cyfr po przecinku, ni przewiduje to definicja, liczba zostanie zaokrglona. Wartoci spoza zakresu DECIMAL s obcinane tak, aby si w nim zmieciy. W wersjach MySQL starszych ni 5, wartoci DECIMAL nie byy zapisywane jako liczby zmiennoprzecinkowe, lecz jako acuchy znakw. Na kad cyfr zuywany by jeden znak w przypadku skali wikszej od 0, poza tym jeden dodatkowy znak zuywany jest w przypadku liczb ujemnych. Jeli skala wynosi 0, liczby nie maj czci uamkowej. SQL zgodnie z norm ANSI pozwala pomija dokadno i (lub) skal. Jeli brak dokadnoci, przyjmowane jest ustawienie

Rozdzia 3. Typy danych

25

domylne charakterystyczne dla implementacji. Jeli brak skali, przyjmowane jest zero. W MySQL domylna warto dokadnoci to 10.

DOUBLE
DOUBLE[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Liczba zmiennoprzecinkowa podwjnej precyzji. Ten typ danych pozwala zapisywa due wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 1,7976931348623157E+308 do 2,2250738585072014E308, 0 oraz wartoci dodatnie od 2,2250738585072014E308 do 1,7976931348623157E+308.

DOUBLE PRECISION
Synonim DOUBLE.

FLOAT
FLOAT[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 4 bajty

26

MySQL. Leksykon kieszonkowy

Opis Liczba zmiennoprzecinkowa pojedynczej precyzji. Ten typ danych pozwala zapisywa mae wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 3,402823466E+38 do 1,175494351E38, 0 oraz wartoci dodatnie od 1,175494351E38 do 3,402823466E+38.

INT
INT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 4 bajty Opis Podstawowy rodzaj liczb cakowitych od 2 147 483 648 do 2 147 483 647 (lub od 0 do 4 294 967 295 w przypadku liczb bez znaku).

INTEGER
Synonim INT.

MEDIUMINT
MEDIUMINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

27

Opis Liczby cakowite od 8 388 608 do 8 388 607 (lub od 0 do 16 777 215 w przypadku liczb bez znaku).

NUMERIC
Synonim DECIMAL.

REAL
Synonim DOUBLE.

SMALLINT
SMALLINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 2 bajty Opis Liczby cakowite z zakresu od 32 768 do 32 767 (od 0 do 65 535 w przypadku liczb bez znaku).

TINYINT
TINYINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 1 bajt

28

MySQL. Leksykon kieszonkowy

Opis Liczby cakowite od 128 do 127 (od 0 do 255 w przypadku liczb bez znaku).

acuchy
MySQL obsuguje dwie kategorie acuchw: acuchy tekstowe oraz acuchy binarne. Obie kategorie maj swoje specyficzne typy do obsugi rnych wielkoci pl i rnych sposobw porwnywania wartoci. W zalenoci od sposobu porwnywania, mona uwzgldnia bd nie wielko liter, mona te porwnywa dane binarnie (bajt po bajcie). Kiedy nazwa typu tekstowego (jak CHAR, VARCHAR i inne) zostanie oznaczona sowem kluczowym BINARY, kolumna pozostaje kolumn tekstow, ale dane s porwnywane ze sob binarnie.

BINARY
BINARY(rozmiar)

Rozmiar wedug rozmiar, w zakresie od 0 do 255 Rozmiar w pamici


rozmiar bajtw

Opis Typ danych BINARY to binarny odpowiednik typu CHAR. Podstawowa rnica midzy tymi dwoma typami polega na tym, e pole typu BINARY zawiera dane binarne, wielko tych danych jest mierzona nie w znakach, lecz w bajtach. acuchy zawierajce

Rozdzia 3. Typy danych

29

mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie znakami 0x00 (wersja MySQL 5.0.5 i nowsze) lub spacjami (wersje starsze).

BLOB
Binarny odpowiednik typu TEXT.

CHAR
CHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar wedug rozmiar, do 255 Rozmiar w pamici zaleny od rozmiaru i od uytego zestawu znakw Opis Pole tekstowe ustalonej dugoci. acuchy zawierajce mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie spacjami. Podczas pobierania danych z bazy te dodatkowe spacje s usuwane. Pola CHAR(0) zostay zachowane w celu zapewnienia zgodnoci ze starymi systemami, w ktrych w kolumnach nie s zapisywane adne wartoci.

CHARACTER
Synonim CHAR.

30

MySQL. Leksykon kieszonkowy

CHARACTER VARYING
Synonim VARCHAR.

LONGBLOB
Binarny odpowiednik LONGTEXT.

LONGTEXT
LONGTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 4 294 295 Rozmiar w pamici Dugo wartoci+4 bajty Opis Typ pozwala zapisywa due wartoci tekstowe. Teoretyczne ograniczenie rozmiaru tekstu to ponad 4 GB, ale praktycznymi ograniczeniami s ograniczenia protokou komunikacyjnego MySQL oraz ilo pamici przeznaczonej na komunikacj na serwerze i na stacji klienckiej.

MEDIUMBLOB
Binarna posta MEDIUMTEXT.

MEDIUMTEXT
MEDIUMTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozdzia 3. Typy danych

31

Rozmiar 0 do 16 777 215 Rozmiar w pamici Dugo wartoci+3 bajty Opis Typ pozwala zapisywa redniej wielkoci wartoci tekstowe.

NCHAR
Synonim CHAR.

NATIONAL CHAR
Synonim CHAR.

NATIONAL CHARACTER
Synonim CHAR.

NATIONAL VARCHAR
Synonim VARCHAR.

TEXT
TEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 65 535

32

MySQL. Leksykon kieszonkowy

Rozmiar w pamici Dugo wartoci tekstowej+2 bajty Opis Typ pozwala zapisywa typowe wartoci tekstowe.

TINYBLOB
Binarny odpowiednik TINYTEXT.

TINYTEXT
TINYTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 255 Rozmiar w pamici Dugo wartoci tekstowej+1 bajt Opis Pozwala zapisywa krtkie dane tekstowe.

VARBINARY
VARBINARY(rozmiar)

Rozmiar Wedug parametru rozmiar

Rozdzia 3. Typy danych

33

Rozmiar w pamici
rozmiar bajtw

Opis Jest to binarna odmiana typu VARCHAR. Podstawowa rnica polega na tym, e zapisywane s dane binarne, a rozmiar pola mierzony jest w bajtach, nie w znakach. Wielkoci typu VARBINARY, w przeciwiestwie do wartoci typu BINARY, nie s niczym dopeniane.

VARCHAR
VARCHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar Wskazana przez rozmiar warto z zakresu do 65 532 (od 1 do 255 w wersjach wczeniejszych ni MySQL 5); rozmiar wskazuje rzeczywist wielko kolumny i jest ograniczony przez dopuszczaln wielko wiersza w znakach; to, ile miejsca faktycznie bdzie potrzebne, zaley zatem od zestawu znakw uytego w danej kolumnie Rozmiar w pamici Zaley od liczby znakw wskazanych jako rozmiar oraz od liczby bajtw potrzebnych do zapisu poszczeglnych znakw w uytym mechanizmie kodowania znakw Opis Pozwala zapisywa wartoci tekstowe zmiennej dugoci. W wersjach poprzedzajcych MySQL 5 z wartoci VARCHAR usuwane s spacje kocowe; wersja MySQL 5 i nowsze standardowo nie usuwaj spacji kocowych.

34

MySQL. Leksykon kieszonkowy

Daty
Typy datowe MySQL s wyjtkowo elastycznym narzdziem, pozwalajcym zapisywa wszelki informacje dzienne. MySQL jest bardzo tolerancyjny i zakada, e to aplikacja, a nie baza danych, ma sprawdza poprawno tych danych. MySQL sprawdza jedynie, czy miesic nie wykracza poza zakres 0 12 i czy dzie nie wykracza poza zakres 0 31. Wobec tego z punktu widzenia MySQL 31 lutego 2001 roku jest poprawn dat. Bardziej przydatn wartoci jest data 0 lutego 2001 roku; cyfra zero moe zastpowa t cz daty, ktrej dokadnie nie znamy. MySQL 5 jest jednak ju baz danych nieco bardziej restrykcyjn co do wartoci, jakie mona zapisywa w polach datowych. Wprawdzie MySQL dopuszcza do du swobod formatw wejciowych dat, to naley stara si w aplikacjach daty formatowa zgodnie z formatem wewntrznym MySQL w celu uniknicia nieporozumie. MySQL zawsze zakada, e rok jest pierwszym elementem po lewej stronie daty. Jeli w operacji SQL podana zostanie nieprawidowa warto daty, MySQL wstawi w jej miejsce zero. MySQL w kontekcie liczb cakowitych automatycznie konwertuje daty i czas na liczby cakowite.

DATE
DATE

Format
YYYY-MM-DD (2001-01-01)

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

35

Opis Data kalendarza gregoriaskiego z zakresu od 1 stycznia 1000 roku ('1000-01-01') do 31 grudnia 9999 roku ('9999-12-31').

DATETIME
DATETIME

Format
YYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 8 bajtw Opis Zapisuje czas z zakresu od 00:00:00 1 stycznia 1000 roku ('100001-01 00:00:00') do 23:59:59 31 grudnia 9999 ('9999-12-31 23:59:59') wedug kalendarza gregoriaskiego.

TIME
TIME

Format
hh:mm:ss (06:00:00)

Rozmiar w pamici 3 bajty Opis Zapisuje czas od pnocy ('00:00:00') do sekundy przed pnoc ('23:59:59').
36 | MySQL. Leksykon kieszonkowy

TIMESTAMP
TIMESTAMP[(rozmiar_wywietlania)]

Format
YYYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 4 bajty Opis Zapis chwili z dokadnoci do sekundy od pnocy 1 stycznia 1970 roku do minuty przed pnoc 31 grudnia 2037 roku. Podstawowym zastosowaniem tego typu jest rejestracja modyfikacji tabel. Przy wstawianiu do takiej kolumny wartoci NULL wstawiane s aktualna data i czas. W przypadku modyfikowania jakiejkolwiek wartoci w wierszu z kolumn TIMESTAMP pierwsza kolumna tego typu zostanie zaktualizowana biec dat i czasem. Format danych TIMESTAMP znany z wczeniejszych wersji MySQL, do 4.1 wcznie, w wersji 5.1 nie jest ju obsugiwany.

YEAR
YEAR[(rozmiar)]

Format
YYYY (2001)

Rozmiar w pamici 1 bajt

Rozdzia 3. Typy danych

37

Opis Pozwala zapisa rok z kalendarza gregoriaskiego. Parametr rozmiar umoliwia zapisywanie roku dwu- lub czterocyfrowo. Zakres YEAR(4) rozciga si od 1900 do 2155, dla YEAR(2) od 1970 do 2069. Domylnie przyjmowane jest YEAR(4).

Typy zoone
Zoone typy danych MySQL, ENUM i SET, s po prostu specjalnymi przypadkami typw acuchowych. Opisujemy je osobno, gdy s bardziej zoone pojciowo i stanowi wprowadzenie do typw danych SQL3, ktre by moe MySQL bdzie obsugiwa w przyszoci.

ENUM
ENUM(warto1, warto2, ...)

Rozmiar w pamici 1 255 elementw: 1 bajt 255 65 535 elementw: 2 bajty Opis Typ danych ENUM pozwala zapisywa jeden z wielu zdefiniowanych wczeniej acuchw. Przy tworzeniu kolumny typu ENUM podaje si list dopuszczalnych jej wartoci. Dane mog by do tej kolumny wstawiane i aktualizowane jedynie z tej listy; kada prba wstawienia wartoci spoza niej powoduje wstawienie pustego acucha.

38

MySQL. Leksykon kieszonkowy

Do listy dopuszczalnych wartoci mona si odwoywa przez indeks, przy czym pierwszy element otrzymuje numer 0. Na przykad:
SELECT COLID FROM TBL WHERE COLENUM = 0;

Jeli COLID jest kolumn z kluczem gwnym, a COLENUM kolumn typu ENUM, taka instrukcja SQL spowoduje pobranie kluczy gwnych wszystkich wierszy, dla ktrych COLENUM jest pierwsz wartoci z listy. Analogicznie, sortowanie wzgldem kolumn ENUM powoduje sortowanie wedug indeksu, nie acucha. Najwiksza moliwa liczba elementw kolumny ENUM to 65 535.

SET
SET(warto1, warto2, ...)

Rozmiar w pamici 1 8 elementw: 1 bajt 9 16 elementw: 2 bajty 17 24 elementy: 3 bajty 25 32 elementy: 4 bajty 33 64 elementy: 8 bajtw Opis Lista wartoci wybieranych z okrelonego wczeniej zbioru. Pole moe zawiera dowoln liczb acuchw wskazanych w instrukcji SET, szczeglnie moe nie zawiera adnej takiej wartoci. SET jest podobny do ENUM, ale kade pole moe zawiera wicej ni jedn z podanych wartoci. Dane typu SET nie s jednak zapisywane za pomoc indeksw, ale w zoonej mapie bitowej. Jeli dany jest zbir SET, zawierajcy elementy: Mandarynka, Pomidor,
Rozdzia 3. Typy danych | 39

Gruszka i Banan, kady z tych elementw jest reprezentowany jako

wczony bit w bajcie, jak to pokazano w tabeli 3.1.


Tabela 3.1. Reprezentacja zbioru elementw w MySQL
Element
Mandarynka Pomidor Gruszka Banan

Warto dziesitna
1 2 4 8

Zapis bitowy
0001 0010 0100 1000

W powyszym przykadzie zapisanie jednoczenie wartoci Mandarynka i Gruszka wymaga uycia wartoci 5 (bitowo 0101). W kolumnie SET mona zapisa najwyej 64 wartoci. Wprawdzie t sam warto mona w jednym wyraeniu SQL wpisa wielokrotnie, ale w bazie danych warto ta zostanie zapisana raz.

40

MySQL. Leksykon kieszonkowy

4. SQL .............................................................................................. 41
Rozrnianie wielkoci liter Literay Identyfikatory Komentarze Instrukcje Zasady dotyczce transakcji 41 42 43 45 46 106

5. Operatory .................................................................................. 108


Priorytety operatorw Operatory arytmetyczne Operatory porwnania Operatory logiczne 108 109 109 111

6. Funkcje .......................................................................................113
Funkcje agregujce Funkcje oglnego przeznaczenia 113 115

7. Rodzaje tabel ............................................................................ 137 8. Procedury i funkcje skadowane .............................................. 138


Parametry Logika Kursory Obsuga zdarze i warunki 138 139 143 144

9. Trygery ...................................................................................... 146 Skorowidz ................................................................................. 147

MySQL. Leksykon kieszonkowy

Rozdzia 3. Typy danych


We wszystkich typach danych nawiasami kwadratowymi ([]) oznaczane s fragmenty opcjonalne. Poniszy przykad pokazuje sposb prezentacji typu BIGINT, opisanego dalej w tym rozdziale:
BIGINT[(wielko_pokazywana)]

Oznacza to, e sowo BIGINT moe wystpi samodzielnie lub z pokazywan wartoci. Uycie kursywy wskazuje, e nie naley wpisywa sowa wielko_pokazywana, ale poda wasn warto. Oto przykady uycia:
BIGINT BIGINT(20)

Poza typem BIGINT take wiele innych typw danych MySQL uwzgldnia deklaracj rozmiaru wywietlania. Jeli nie powiedziano inaczej, musi to by liczba od 1 do 255. W wersjach MySQL starszych ni wersja 5, baza danych w niektrych przypadkach zmieniaa podany typ kolumny, nie informujc o tym uytkownika. Obecnie takie podmiany nie maj ju miejsca.
VARCHAR -> CHAR

Jeli podana kolumna VARCHAR ma rozmiar mniejszy od czterech znakw, jest przeksztacana w kolumn CHAR.
CHAR -> VARCHAR

Jeli tabela zawiera co najmniej jedn kolumn o zmiennej dugoci, wszystkie kolumny typu CHAR dusze ni trzy znaki s zamieniane na VARCHAR.

Rozmiar wywietlania TIMESTAMP Rozmiar wywietlania pl TIMESTAMP musi by zawsze wielkoci parzyst od 2 do 14. Rozmiar rwny 0 lub wikszy od 14 powoduje przyjcie 14. Wszelkie liczby nieparzyste s zamieniane na nastpn liczb parzyst.

22

MySQL. Leksykon kieszonkowy

Liczby
MySQL obsuguje liczbowe typy danych zgodne z ANSI SQL 2. Typy te dzielimy na cakowitoliczbowe, dziesitne i zmiennoprzecinkowe. W ramach tych grup dzielimy typy dalej, wedug zajmowanej przez nie pamici. W przypadku typw liczbowych mona poda rozmiar wywietlania, ktry wpywa na sposb pokazywania przez MySQL wynikw. Rozmiar ten nie ma adnego zwizku z wielkoci pamici zajmowanej przez dany typ. Dodatkowo w przypadku liczb zmiennoprzecinkowych i dziesitnych mona poda liczb cyfr znajdujcych si za kropk dziesitn. Wtedy liczba cyfr powinna nalee do zakresu od 0 do 30, czyli by co najmniej o dwa mniejsza od rozmiaru wywietlania. Jeli warunek ten nie zostanie dotrzymany, MySQL automatycznie zmieni liczb cyfr tak, aby bya mniejsza o dwa od rozmiaru wywietlania. Przykadowo, MySQL automatycznie zmieni FLOAT(6,5) na FLOAT(7,5). Prba wstawienia do kolumny wartoci przekraczajcej dopuszczalny zakres tej kolumny powoduje obcicie tej wartoci do najmniejszej (dla liczb ujemnych) lub najwikszej (dla liczb dodatnich) wartoci dla danej kolumny dopuszczalnej. Jeli takie obcicie jest robione podczas wykonywania instrukcji ALTER TABLE, LOAD DATA INFILE, UPDATE lub wielowierszowej instrukcji INSERT, MySQL pokazuje ostrzeenie. Wyjtkiem jest korzystanie z MySQL w wersji 5 lub nowszej w trybie penej zgodnoci ze standardem SQL, gdy wtedy w przypadku instrukcji INSERT i UPDATE zgaszany jest bd. Atrybutu AUTO_INCREMENT mona uy do co najwyej jednej kolumny cakowitoliczbowej w tabeli. Atrybut UNSIGNED moe by czony z dowolnym liczbowym typem danych. Uycie tego atrybutu powoduje, e do kolumny nie mona wpisywa liczb ujemnych. Atrybut ZEROFILL nakazuje wypenienie kolumny od lewej

Rozdzia 3. Typy danych

23

strony zerami podczas wywietlania jej wartoci. O liczbie tych zer decyduje szeroko wywietlania danej kolumny.

BIGINT
BIGINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Najwikszy z typw cakowitoliczbowych, pozwalajcy zapisywa liczby od 9 223 372 036 854 775 808 do 9 223 372 036 854 775 807 (jeli bez znaku, to od 0 do 18 446 744 073 709 551 615). Z uwagi na sposb realizacji dziaa na liczbach tego typu, naley unika operacji na liczbach BIGINT bez znaku wikszych ni 9 223 372 036 854 775 807, gdy moe to zaowocowa nieprawidowymi wynikami.

BIT
BIT[(bity)]

Rozmiar w pamici w przyblieniu bity bitw+7 lub 8 bitw Opis W wersjach MySQL 5.0.3 i starszych, pola typu BIT dziaay tak samo, jak TINYINT(1). Omawiany typ pola pozwala przechowywa ustalon liczb bitw. Jeli podana zostanie wielko bitw mniejsza od dozwolonej, MySQL wypeni zerami bity od lewej strony.
24 | MySQL. Leksykon kieszonkowy

DEC
Synonim typu DECIMAL.

DECIMAL
DECIMAL[(dokadno, [skala])] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici rnie Opis Pozwala zapisywa liczby zmiennoprzecinkowe w sytuacjach, kiedy istotna jest dokadno na przykad przy operowaniu kwotami pienidzy. Stosujc typ DECIMAL, trzeba poda dwa jego parametry, dokadno i skal. Dokadno to liczba znaczcych cyfr, za skala to liczba znaczcych cyfr po kropce dziesitnej. Przykadowo, kolumna SALDO typu DECIMAL(9,2) pozwoliaby zapisywa liczby dziewiciocyfrowe, przy czym na prawo od kropki dziesitnej mogyby by dwie cyfry. Zakres dopuszczalnych liczb to w takiej sytuacji od 9 999 999,99 do 9 999 999,99. Jeli podana zostanie liczba zawierajca wicej cyfr po przecinku, ni przewiduje to definicja, liczba zostanie zaokrglona. Wartoci spoza zakresu DECIMAL s obcinane tak, aby si w nim zmieciy. W wersjach MySQL starszych ni 5, wartoci DECIMAL nie byy zapisywane jako liczby zmiennoprzecinkowe, lecz jako acuchy znakw. Na kad cyfr zuywany by jeden znak w przypadku skali wikszej od 0, poza tym jeden dodatkowy znak zuywany jest w przypadku liczb ujemnych. Jeli skala wynosi 0, liczby nie maj czci uamkowej. SQL zgodnie z norm ANSI pozwala pomija dokadno i (lub) skal. Jeli brak dokadnoci, przyjmowane jest ustawienie

Rozdzia 3. Typy danych

25

domylne charakterystyczne dla implementacji. Jeli brak skali, przyjmowane jest zero. W MySQL domylna warto dokadnoci to 10.

DOUBLE
DOUBLE[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Liczba zmiennoprzecinkowa podwjnej precyzji. Ten typ danych pozwala zapisywa due wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 1,7976931348623157E+308 do 2,2250738585072014E308, 0 oraz wartoci dodatnie od 2,2250738585072014E308 do 1,7976931348623157E+308.

DOUBLE PRECISION
Synonim DOUBLE.

FLOAT
FLOAT[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 4 bajty

26

MySQL. Leksykon kieszonkowy

Opis Liczba zmiennoprzecinkowa pojedynczej precyzji. Ten typ danych pozwala zapisywa mae wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 3,402823466E+38 do 1,175494351E38, 0 oraz wartoci dodatnie od 1,175494351E38 do 3,402823466E+38.

INT
INT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 4 bajty Opis Podstawowy rodzaj liczb cakowitych od 2 147 483 648 do 2 147 483 647 (lub od 0 do 4 294 967 295 w przypadku liczb bez znaku).

INTEGER
Synonim INT.

MEDIUMINT
MEDIUMINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

27

Opis Liczby cakowite od 8 388 608 do 8 388 607 (lub od 0 do 16 777 215 w przypadku liczb bez znaku).

NUMERIC
Synonim DECIMAL.

REAL
Synonim DOUBLE.

SMALLINT
SMALLINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 2 bajty Opis Liczby cakowite z zakresu od 32 768 do 32 767 (od 0 do 65 535 w przypadku liczb bez znaku).

TINYINT
TINYINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 1 bajt

28

MySQL. Leksykon kieszonkowy

Opis Liczby cakowite od 128 do 127 (od 0 do 255 w przypadku liczb bez znaku).

acuchy
MySQL obsuguje dwie kategorie acuchw: acuchy tekstowe oraz acuchy binarne. Obie kategorie maj swoje specyficzne typy do obsugi rnych wielkoci pl i rnych sposobw porwnywania wartoci. W zalenoci od sposobu porwnywania, mona uwzgldnia bd nie wielko liter, mona te porwnywa dane binarnie (bajt po bajcie). Kiedy nazwa typu tekstowego (jak CHAR, VARCHAR i inne) zostanie oznaczona sowem kluczowym BINARY, kolumna pozostaje kolumn tekstow, ale dane s porwnywane ze sob binarnie.

BINARY
BINARY(rozmiar)

Rozmiar wedug rozmiar, w zakresie od 0 do 255 Rozmiar w pamici


rozmiar bajtw

Opis Typ danych BINARY to binarny odpowiednik typu CHAR. Podstawowa rnica midzy tymi dwoma typami polega na tym, e pole typu BINARY zawiera dane binarne, wielko tych danych jest mierzona nie w znakach, lecz w bajtach. acuchy zawierajce

Rozdzia 3. Typy danych

29

mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie znakami 0x00 (wersja MySQL 5.0.5 i nowsze) lub spacjami (wersje starsze).

BLOB
Binarny odpowiednik typu TEXT.

CHAR
CHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar wedug rozmiar, do 255 Rozmiar w pamici zaleny od rozmiaru i od uytego zestawu znakw Opis Pole tekstowe ustalonej dugoci. acuchy zawierajce mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie spacjami. Podczas pobierania danych z bazy te dodatkowe spacje s usuwane. Pola CHAR(0) zostay zachowane w celu zapewnienia zgodnoci ze starymi systemami, w ktrych w kolumnach nie s zapisywane adne wartoci.

CHARACTER
Synonim CHAR.

30

MySQL. Leksykon kieszonkowy

CHARACTER VARYING
Synonim VARCHAR.

LONGBLOB
Binarny odpowiednik LONGTEXT.

LONGTEXT
LONGTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 4 294 295 Rozmiar w pamici Dugo wartoci+4 bajty Opis Typ pozwala zapisywa due wartoci tekstowe. Teoretyczne ograniczenie rozmiaru tekstu to ponad 4 GB, ale praktycznymi ograniczeniami s ograniczenia protokou komunikacyjnego MySQL oraz ilo pamici przeznaczonej na komunikacj na serwerze i na stacji klienckiej.

MEDIUMBLOB
Binarna posta MEDIUMTEXT.

MEDIUMTEXT
MEDIUMTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozdzia 3. Typy danych

31

Rozmiar 0 do 16 777 215 Rozmiar w pamici Dugo wartoci+3 bajty Opis Typ pozwala zapisywa redniej wielkoci wartoci tekstowe.

NCHAR
Synonim CHAR.

NATIONAL CHAR
Synonim CHAR.

NATIONAL CHARACTER
Synonim CHAR.

NATIONAL VARCHAR
Synonim VARCHAR.

TEXT
TEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 65 535

32

MySQL. Leksykon kieszonkowy

Rozmiar w pamici Dugo wartoci tekstowej+2 bajty Opis Typ pozwala zapisywa typowe wartoci tekstowe.

TINYBLOB
Binarny odpowiednik TINYTEXT.

TINYTEXT
TINYTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 255 Rozmiar w pamici Dugo wartoci tekstowej+1 bajt Opis Pozwala zapisywa krtkie dane tekstowe.

VARBINARY
VARBINARY(rozmiar)

Rozmiar Wedug parametru rozmiar

Rozdzia 3. Typy danych

33

Rozmiar w pamici
rozmiar bajtw

Opis Jest to binarna odmiana typu VARCHAR. Podstawowa rnica polega na tym, e zapisywane s dane binarne, a rozmiar pola mierzony jest w bajtach, nie w znakach. Wielkoci typu VARBINARY, w przeciwiestwie do wartoci typu BINARY, nie s niczym dopeniane.

VARCHAR
VARCHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar Wskazana przez rozmiar warto z zakresu do 65 532 (od 1 do 255 w wersjach wczeniejszych ni MySQL 5); rozmiar wskazuje rzeczywist wielko kolumny i jest ograniczony przez dopuszczaln wielko wiersza w znakach; to, ile miejsca faktycznie bdzie potrzebne, zaley zatem od zestawu znakw uytego w danej kolumnie Rozmiar w pamici Zaley od liczby znakw wskazanych jako rozmiar oraz od liczby bajtw potrzebnych do zapisu poszczeglnych znakw w uytym mechanizmie kodowania znakw Opis Pozwala zapisywa wartoci tekstowe zmiennej dugoci. W wersjach poprzedzajcych MySQL 5 z wartoci VARCHAR usuwane s spacje kocowe; wersja MySQL 5 i nowsze standardowo nie usuwaj spacji kocowych.

34

MySQL. Leksykon kieszonkowy

Daty
Typy datowe MySQL s wyjtkowo elastycznym narzdziem, pozwalajcym zapisywa wszelki informacje dzienne. MySQL jest bardzo tolerancyjny i zakada, e to aplikacja, a nie baza danych, ma sprawdza poprawno tych danych. MySQL sprawdza jedynie, czy miesic nie wykracza poza zakres 0 12 i czy dzie nie wykracza poza zakres 0 31. Wobec tego z punktu widzenia MySQL 31 lutego 2001 roku jest poprawn dat. Bardziej przydatn wartoci jest data 0 lutego 2001 roku; cyfra zero moe zastpowa t cz daty, ktrej dokadnie nie znamy. MySQL 5 jest jednak ju baz danych nieco bardziej restrykcyjn co do wartoci, jakie mona zapisywa w polach datowych. Wprawdzie MySQL dopuszcza do du swobod formatw wejciowych dat, to naley stara si w aplikacjach daty formatowa zgodnie z formatem wewntrznym MySQL w celu uniknicia nieporozumie. MySQL zawsze zakada, e rok jest pierwszym elementem po lewej stronie daty. Jeli w operacji SQL podana zostanie nieprawidowa warto daty, MySQL wstawi w jej miejsce zero. MySQL w kontekcie liczb cakowitych automatycznie konwertuje daty i czas na liczby cakowite.

DATE
DATE

Format
YYYY-MM-DD (2001-01-01)

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

35

Opis Data kalendarza gregoriaskiego z zakresu od 1 stycznia 1000 roku ('1000-01-01') do 31 grudnia 9999 roku ('9999-12-31').

DATETIME
DATETIME

Format
YYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 8 bajtw Opis Zapisuje czas z zakresu od 00:00:00 1 stycznia 1000 roku ('100001-01 00:00:00') do 23:59:59 31 grudnia 9999 ('9999-12-31 23:59:59') wedug kalendarza gregoriaskiego.

TIME
TIME

Format
hh:mm:ss (06:00:00)

Rozmiar w pamici 3 bajty Opis Zapisuje czas od pnocy ('00:00:00') do sekundy przed pnoc ('23:59:59').
36 | MySQL. Leksykon kieszonkowy

TIMESTAMP
TIMESTAMP[(rozmiar_wywietlania)]

Format
YYYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 4 bajty Opis Zapis chwili z dokadnoci do sekundy od pnocy 1 stycznia 1970 roku do minuty przed pnoc 31 grudnia 2037 roku. Podstawowym zastosowaniem tego typu jest rejestracja modyfikacji tabel. Przy wstawianiu do takiej kolumny wartoci NULL wstawiane s aktualna data i czas. W przypadku modyfikowania jakiejkolwiek wartoci w wierszu z kolumn TIMESTAMP pierwsza kolumna tego typu zostanie zaktualizowana biec dat i czasem. Format danych TIMESTAMP znany z wczeniejszych wersji MySQL, do 4.1 wcznie, w wersji 5.1 nie jest ju obsugiwany.

YEAR
YEAR[(rozmiar)]

Format
YYYY (2001)

Rozmiar w pamici 1 bajt

Rozdzia 3. Typy danych

37

Opis Pozwala zapisa rok z kalendarza gregoriaskiego. Parametr rozmiar umoliwia zapisywanie roku dwu- lub czterocyfrowo. Zakres YEAR(4) rozciga si od 1900 do 2155, dla YEAR(2) od 1970 do 2069. Domylnie przyjmowane jest YEAR(4).

Typy zoone
Zoone typy danych MySQL, ENUM i SET, s po prostu specjalnymi przypadkami typw acuchowych. Opisujemy je osobno, gdy s bardziej zoone pojciowo i stanowi wprowadzenie do typw danych SQL3, ktre by moe MySQL bdzie obsugiwa w przyszoci.

ENUM
ENUM(warto1, warto2, ...)

Rozmiar w pamici 1 255 elementw: 1 bajt 255 65 535 elementw: 2 bajty Opis Typ danych ENUM pozwala zapisywa jeden z wielu zdefiniowanych wczeniej acuchw. Przy tworzeniu kolumny typu ENUM podaje si list dopuszczalnych jej wartoci. Dane mog by do tej kolumny wstawiane i aktualizowane jedynie z tej listy; kada prba wstawienia wartoci spoza niej powoduje wstawienie pustego acucha.

38

MySQL. Leksykon kieszonkowy

Do listy dopuszczalnych wartoci mona si odwoywa przez indeks, przy czym pierwszy element otrzymuje numer 0. Na przykad:
SELECT COLID FROM TBL WHERE COLENUM = 0;

Jeli COLID jest kolumn z kluczem gwnym, a COLENUM kolumn typu ENUM, taka instrukcja SQL spowoduje pobranie kluczy gwnych wszystkich wierszy, dla ktrych COLENUM jest pierwsz wartoci z listy. Analogicznie, sortowanie wzgldem kolumn ENUM powoduje sortowanie wedug indeksu, nie acucha. Najwiksza moliwa liczba elementw kolumny ENUM to 65 535.

SET
SET(warto1, warto2, ...)

Rozmiar w pamici 1 8 elementw: 1 bajt 9 16 elementw: 2 bajty 17 24 elementy: 3 bajty 25 32 elementy: 4 bajty 33 64 elementy: 8 bajtw Opis Lista wartoci wybieranych z okrelonego wczeniej zbioru. Pole moe zawiera dowoln liczb acuchw wskazanych w instrukcji SET, szczeglnie moe nie zawiera adnej takiej wartoci. SET jest podobny do ENUM, ale kade pole moe zawiera wicej ni jedn z podanych wartoci. Dane typu SET nie s jednak zapisywane za pomoc indeksw, ale w zoonej mapie bitowej. Jeli dany jest zbir SET, zawierajcy elementy: Mandarynka, Pomidor,
Rozdzia 3. Typy danych | 39

Gruszka i Banan, kady z tych elementw jest reprezentowany jako

wczony bit w bajcie, jak to pokazano w tabeli 3.1.


Tabela 3.1. Reprezentacja zbioru elementw w MySQL
Element
Mandarynka Pomidor Gruszka Banan

Warto dziesitna
1 2 4 8

Zapis bitowy
0001 0010 0100 1000

W powyszym przykadzie zapisanie jednoczenie wartoci Mandarynka i Gruszka wymaga uycia wartoci 5 (bitowo 0101). W kolumnie SET mona zapisa najwyej 64 wartoci. Wprawdzie t sam warto mona w jednym wyraeniu SQL wpisa wielokrotnie, ale w bazie danych warto ta zostanie zapisana raz.

40

MySQL. Leksykon kieszonkowy

4. SQL .............................................................................................. 41
Rozrnianie wielkoci liter Literay Identyfikatory Komentarze Instrukcje Zasady dotyczce transakcji 41 42 43 45 46 106

5. Operatory .................................................................................. 108


Priorytety operatorw Operatory arytmetyczne Operatory porwnania Operatory logiczne 108 109 109 111

6. Funkcje .......................................................................................113
Funkcje agregujce Funkcje oglnego przeznaczenia 113 115

7. Rodzaje tabel ............................................................................ 137 8. Procedury i funkcje skadowane .............................................. 138


Parametry Logika Kursory Obsuga zdarze i warunki 138 139 143 144

9. Trygery ...................................................................................... 146 Skorowidz ................................................................................. 147

MySQL. Leksykon kieszonkowy

Rozdzia 3. Typy danych


We wszystkich typach danych nawiasami kwadratowymi ([]) oznaczane s fragmenty opcjonalne. Poniszy przykad pokazuje sposb prezentacji typu BIGINT, opisanego dalej w tym rozdziale:
BIGINT[(wielko_pokazywana)]

Oznacza to, e sowo BIGINT moe wystpi samodzielnie lub z pokazywan wartoci. Uycie kursywy wskazuje, e nie naley wpisywa sowa wielko_pokazywana, ale poda wasn warto. Oto przykady uycia:
BIGINT BIGINT(20)

Poza typem BIGINT take wiele innych typw danych MySQL uwzgldnia deklaracj rozmiaru wywietlania. Jeli nie powiedziano inaczej, musi to by liczba od 1 do 255. W wersjach MySQL starszych ni wersja 5, baza danych w niektrych przypadkach zmieniaa podany typ kolumny, nie informujc o tym uytkownika. Obecnie takie podmiany nie maj ju miejsca.
VARCHAR -> CHAR

Jeli podana kolumna VARCHAR ma rozmiar mniejszy od czterech znakw, jest przeksztacana w kolumn CHAR.
CHAR -> VARCHAR

Jeli tabela zawiera co najmniej jedn kolumn o zmiennej dugoci, wszystkie kolumny typu CHAR dusze ni trzy znaki s zamieniane na VARCHAR.

Rozmiar wywietlania TIMESTAMP Rozmiar wywietlania pl TIMESTAMP musi by zawsze wielkoci parzyst od 2 do 14. Rozmiar rwny 0 lub wikszy od 14 powoduje przyjcie 14. Wszelkie liczby nieparzyste s zamieniane na nastpn liczb parzyst.

22

MySQL. Leksykon kieszonkowy

Liczby
MySQL obsuguje liczbowe typy danych zgodne z ANSI SQL 2. Typy te dzielimy na cakowitoliczbowe, dziesitne i zmiennoprzecinkowe. W ramach tych grup dzielimy typy dalej, wedug zajmowanej przez nie pamici. W przypadku typw liczbowych mona poda rozmiar wywietlania, ktry wpywa na sposb pokazywania przez MySQL wynikw. Rozmiar ten nie ma adnego zwizku z wielkoci pamici zajmowanej przez dany typ. Dodatkowo w przypadku liczb zmiennoprzecinkowych i dziesitnych mona poda liczb cyfr znajdujcych si za kropk dziesitn. Wtedy liczba cyfr powinna nalee do zakresu od 0 do 30, czyli by co najmniej o dwa mniejsza od rozmiaru wywietlania. Jeli warunek ten nie zostanie dotrzymany, MySQL automatycznie zmieni liczb cyfr tak, aby bya mniejsza o dwa od rozmiaru wywietlania. Przykadowo, MySQL automatycznie zmieni FLOAT(6,5) na FLOAT(7,5). Prba wstawienia do kolumny wartoci przekraczajcej dopuszczalny zakres tej kolumny powoduje obcicie tej wartoci do najmniejszej (dla liczb ujemnych) lub najwikszej (dla liczb dodatnich) wartoci dla danej kolumny dopuszczalnej. Jeli takie obcicie jest robione podczas wykonywania instrukcji ALTER TABLE, LOAD DATA INFILE, UPDATE lub wielowierszowej instrukcji INSERT, MySQL pokazuje ostrzeenie. Wyjtkiem jest korzystanie z MySQL w wersji 5 lub nowszej w trybie penej zgodnoci ze standardem SQL, gdy wtedy w przypadku instrukcji INSERT i UPDATE zgaszany jest bd. Atrybutu AUTO_INCREMENT mona uy do co najwyej jednej kolumny cakowitoliczbowej w tabeli. Atrybut UNSIGNED moe by czony z dowolnym liczbowym typem danych. Uycie tego atrybutu powoduje, e do kolumny nie mona wpisywa liczb ujemnych. Atrybut ZEROFILL nakazuje wypenienie kolumny od lewej

Rozdzia 3. Typy danych

23

strony zerami podczas wywietlania jej wartoci. O liczbie tych zer decyduje szeroko wywietlania danej kolumny.

BIGINT
BIGINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Najwikszy z typw cakowitoliczbowych, pozwalajcy zapisywa liczby od 9 223 372 036 854 775 808 do 9 223 372 036 854 775 807 (jeli bez znaku, to od 0 do 18 446 744 073 709 551 615). Z uwagi na sposb realizacji dziaa na liczbach tego typu, naley unika operacji na liczbach BIGINT bez znaku wikszych ni 9 223 372 036 854 775 807, gdy moe to zaowocowa nieprawidowymi wynikami.

BIT
BIT[(bity)]

Rozmiar w pamici w przyblieniu bity bitw+7 lub 8 bitw Opis W wersjach MySQL 5.0.3 i starszych, pola typu BIT dziaay tak samo, jak TINYINT(1). Omawiany typ pola pozwala przechowywa ustalon liczb bitw. Jeli podana zostanie wielko bitw mniejsza od dozwolonej, MySQL wypeni zerami bity od lewej strony.
24 | MySQL. Leksykon kieszonkowy

DEC
Synonim typu DECIMAL.

DECIMAL
DECIMAL[(dokadno, [skala])] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici rnie Opis Pozwala zapisywa liczby zmiennoprzecinkowe w sytuacjach, kiedy istotna jest dokadno na przykad przy operowaniu kwotami pienidzy. Stosujc typ DECIMAL, trzeba poda dwa jego parametry, dokadno i skal. Dokadno to liczba znaczcych cyfr, za skala to liczba znaczcych cyfr po kropce dziesitnej. Przykadowo, kolumna SALDO typu DECIMAL(9,2) pozwoliaby zapisywa liczby dziewiciocyfrowe, przy czym na prawo od kropki dziesitnej mogyby by dwie cyfry. Zakres dopuszczalnych liczb to w takiej sytuacji od 9 999 999,99 do 9 999 999,99. Jeli podana zostanie liczba zawierajca wicej cyfr po przecinku, ni przewiduje to definicja, liczba zostanie zaokrglona. Wartoci spoza zakresu DECIMAL s obcinane tak, aby si w nim zmieciy. W wersjach MySQL starszych ni 5, wartoci DECIMAL nie byy zapisywane jako liczby zmiennoprzecinkowe, lecz jako acuchy znakw. Na kad cyfr zuywany by jeden znak w przypadku skali wikszej od 0, poza tym jeden dodatkowy znak zuywany jest w przypadku liczb ujemnych. Jeli skala wynosi 0, liczby nie maj czci uamkowej. SQL zgodnie z norm ANSI pozwala pomija dokadno i (lub) skal. Jeli brak dokadnoci, przyjmowane jest ustawienie

Rozdzia 3. Typy danych

25

domylne charakterystyczne dla implementacji. Jeli brak skali, przyjmowane jest zero. W MySQL domylna warto dokadnoci to 10.

DOUBLE
DOUBLE[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Liczba zmiennoprzecinkowa podwjnej precyzji. Ten typ danych pozwala zapisywa due wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 1,7976931348623157E+308 do 2,2250738585072014E308, 0 oraz wartoci dodatnie od 2,2250738585072014E308 do 1,7976931348623157E+308.

DOUBLE PRECISION
Synonim DOUBLE.

FLOAT
FLOAT[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 4 bajty

26

MySQL. Leksykon kieszonkowy

Opis Liczba zmiennoprzecinkowa pojedynczej precyzji. Ten typ danych pozwala zapisywa mae wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 3,402823466E+38 do 1,175494351E38, 0 oraz wartoci dodatnie od 1,175494351E38 do 3,402823466E+38.

INT
INT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 4 bajty Opis Podstawowy rodzaj liczb cakowitych od 2 147 483 648 do 2 147 483 647 (lub od 0 do 4 294 967 295 w przypadku liczb bez znaku).

INTEGER
Synonim INT.

MEDIUMINT
MEDIUMINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

27

Opis Liczby cakowite od 8 388 608 do 8 388 607 (lub od 0 do 16 777 215 w przypadku liczb bez znaku).

NUMERIC
Synonim DECIMAL.

REAL
Synonim DOUBLE.

SMALLINT
SMALLINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 2 bajty Opis Liczby cakowite z zakresu od 32 768 do 32 767 (od 0 do 65 535 w przypadku liczb bez znaku).

TINYINT
TINYINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 1 bajt

28

MySQL. Leksykon kieszonkowy

Opis Liczby cakowite od 128 do 127 (od 0 do 255 w przypadku liczb bez znaku).

acuchy
MySQL obsuguje dwie kategorie acuchw: acuchy tekstowe oraz acuchy binarne. Obie kategorie maj swoje specyficzne typy do obsugi rnych wielkoci pl i rnych sposobw porwnywania wartoci. W zalenoci od sposobu porwnywania, mona uwzgldnia bd nie wielko liter, mona te porwnywa dane binarnie (bajt po bajcie). Kiedy nazwa typu tekstowego (jak CHAR, VARCHAR i inne) zostanie oznaczona sowem kluczowym BINARY, kolumna pozostaje kolumn tekstow, ale dane s porwnywane ze sob binarnie.

BINARY
BINARY(rozmiar)

Rozmiar wedug rozmiar, w zakresie od 0 do 255 Rozmiar w pamici


rozmiar bajtw

Opis Typ danych BINARY to binarny odpowiednik typu CHAR. Podstawowa rnica midzy tymi dwoma typami polega na tym, e pole typu BINARY zawiera dane binarne, wielko tych danych jest mierzona nie w znakach, lecz w bajtach. acuchy zawierajce

Rozdzia 3. Typy danych

29

mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie znakami 0x00 (wersja MySQL 5.0.5 i nowsze) lub spacjami (wersje starsze).

BLOB
Binarny odpowiednik typu TEXT.

CHAR
CHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar wedug rozmiar, do 255 Rozmiar w pamici zaleny od rozmiaru i od uytego zestawu znakw Opis Pole tekstowe ustalonej dugoci. acuchy zawierajce mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie spacjami. Podczas pobierania danych z bazy te dodatkowe spacje s usuwane. Pola CHAR(0) zostay zachowane w celu zapewnienia zgodnoci ze starymi systemami, w ktrych w kolumnach nie s zapisywane adne wartoci.

CHARACTER
Synonim CHAR.

30

MySQL. Leksykon kieszonkowy

CHARACTER VARYING
Synonim VARCHAR.

LONGBLOB
Binarny odpowiednik LONGTEXT.

LONGTEXT
LONGTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 4 294 295 Rozmiar w pamici Dugo wartoci+4 bajty Opis Typ pozwala zapisywa due wartoci tekstowe. Teoretyczne ograniczenie rozmiaru tekstu to ponad 4 GB, ale praktycznymi ograniczeniami s ograniczenia protokou komunikacyjnego MySQL oraz ilo pamici przeznaczonej na komunikacj na serwerze i na stacji klienckiej.

MEDIUMBLOB
Binarna posta MEDIUMTEXT.

MEDIUMTEXT
MEDIUMTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozdzia 3. Typy danych

31

Rozmiar 0 do 16 777 215 Rozmiar w pamici Dugo wartoci+3 bajty Opis Typ pozwala zapisywa redniej wielkoci wartoci tekstowe.

NCHAR
Synonim CHAR.

NATIONAL CHAR
Synonim CHAR.

NATIONAL CHARACTER
Synonim CHAR.

NATIONAL VARCHAR
Synonim VARCHAR.

TEXT
TEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 65 535

32

MySQL. Leksykon kieszonkowy

Rozmiar w pamici Dugo wartoci tekstowej+2 bajty Opis Typ pozwala zapisywa typowe wartoci tekstowe.

TINYBLOB
Binarny odpowiednik TINYTEXT.

TINYTEXT
TINYTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 255 Rozmiar w pamici Dugo wartoci tekstowej+1 bajt Opis Pozwala zapisywa krtkie dane tekstowe.

VARBINARY
VARBINARY(rozmiar)

Rozmiar Wedug parametru rozmiar

Rozdzia 3. Typy danych

33

Rozmiar w pamici
rozmiar bajtw

Opis Jest to binarna odmiana typu VARCHAR. Podstawowa rnica polega na tym, e zapisywane s dane binarne, a rozmiar pola mierzony jest w bajtach, nie w znakach. Wielkoci typu VARBINARY, w przeciwiestwie do wartoci typu BINARY, nie s niczym dopeniane.

VARCHAR
VARCHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar Wskazana przez rozmiar warto z zakresu do 65 532 (od 1 do 255 w wersjach wczeniejszych ni MySQL 5); rozmiar wskazuje rzeczywist wielko kolumny i jest ograniczony przez dopuszczaln wielko wiersza w znakach; to, ile miejsca faktycznie bdzie potrzebne, zaley zatem od zestawu znakw uytego w danej kolumnie Rozmiar w pamici Zaley od liczby znakw wskazanych jako rozmiar oraz od liczby bajtw potrzebnych do zapisu poszczeglnych znakw w uytym mechanizmie kodowania znakw Opis Pozwala zapisywa wartoci tekstowe zmiennej dugoci. W wersjach poprzedzajcych MySQL 5 z wartoci VARCHAR usuwane s spacje kocowe; wersja MySQL 5 i nowsze standardowo nie usuwaj spacji kocowych.

34

MySQL. Leksykon kieszonkowy

Daty
Typy datowe MySQL s wyjtkowo elastycznym narzdziem, pozwalajcym zapisywa wszelki informacje dzienne. MySQL jest bardzo tolerancyjny i zakada, e to aplikacja, a nie baza danych, ma sprawdza poprawno tych danych. MySQL sprawdza jedynie, czy miesic nie wykracza poza zakres 0 12 i czy dzie nie wykracza poza zakres 0 31. Wobec tego z punktu widzenia MySQL 31 lutego 2001 roku jest poprawn dat. Bardziej przydatn wartoci jest data 0 lutego 2001 roku; cyfra zero moe zastpowa t cz daty, ktrej dokadnie nie znamy. MySQL 5 jest jednak ju baz danych nieco bardziej restrykcyjn co do wartoci, jakie mona zapisywa w polach datowych. Wprawdzie MySQL dopuszcza do du swobod formatw wejciowych dat, to naley stara si w aplikacjach daty formatowa zgodnie z formatem wewntrznym MySQL w celu uniknicia nieporozumie. MySQL zawsze zakada, e rok jest pierwszym elementem po lewej stronie daty. Jeli w operacji SQL podana zostanie nieprawidowa warto daty, MySQL wstawi w jej miejsce zero. MySQL w kontekcie liczb cakowitych automatycznie konwertuje daty i czas na liczby cakowite.

DATE
DATE

Format
YYYY-MM-DD (2001-01-01)

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

35

Opis Data kalendarza gregoriaskiego z zakresu od 1 stycznia 1000 roku ('1000-01-01') do 31 grudnia 9999 roku ('9999-12-31').

DATETIME
DATETIME

Format
YYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 8 bajtw Opis Zapisuje czas z zakresu od 00:00:00 1 stycznia 1000 roku ('100001-01 00:00:00') do 23:59:59 31 grudnia 9999 ('9999-12-31 23:59:59') wedug kalendarza gregoriaskiego.

TIME
TIME

Format
hh:mm:ss (06:00:00)

Rozmiar w pamici 3 bajty Opis Zapisuje czas od pnocy ('00:00:00') do sekundy przed pnoc ('23:59:59').
36 | MySQL. Leksykon kieszonkowy

TIMESTAMP
TIMESTAMP[(rozmiar_wywietlania)]

Format
YYYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 4 bajty Opis Zapis chwili z dokadnoci do sekundy od pnocy 1 stycznia 1970 roku do minuty przed pnoc 31 grudnia 2037 roku. Podstawowym zastosowaniem tego typu jest rejestracja modyfikacji tabel. Przy wstawianiu do takiej kolumny wartoci NULL wstawiane s aktualna data i czas. W przypadku modyfikowania jakiejkolwiek wartoci w wierszu z kolumn TIMESTAMP pierwsza kolumna tego typu zostanie zaktualizowana biec dat i czasem. Format danych TIMESTAMP znany z wczeniejszych wersji MySQL, do 4.1 wcznie, w wersji 5.1 nie jest ju obsugiwany.

YEAR
YEAR[(rozmiar)]

Format
YYYY (2001)

Rozmiar w pamici 1 bajt

Rozdzia 3. Typy danych

37

Opis Pozwala zapisa rok z kalendarza gregoriaskiego. Parametr rozmiar umoliwia zapisywanie roku dwu- lub czterocyfrowo. Zakres YEAR(4) rozciga si od 1900 do 2155, dla YEAR(2) od 1970 do 2069. Domylnie przyjmowane jest YEAR(4).

Typy zoone
Zoone typy danych MySQL, ENUM i SET, s po prostu specjalnymi przypadkami typw acuchowych. Opisujemy je osobno, gdy s bardziej zoone pojciowo i stanowi wprowadzenie do typw danych SQL3, ktre by moe MySQL bdzie obsugiwa w przyszoci.

ENUM
ENUM(warto1, warto2, ...)

Rozmiar w pamici 1 255 elementw: 1 bajt 255 65 535 elementw: 2 bajty Opis Typ danych ENUM pozwala zapisywa jeden z wielu zdefiniowanych wczeniej acuchw. Przy tworzeniu kolumny typu ENUM podaje si list dopuszczalnych jej wartoci. Dane mog by do tej kolumny wstawiane i aktualizowane jedynie z tej listy; kada prba wstawienia wartoci spoza niej powoduje wstawienie pustego acucha.

38

MySQL. Leksykon kieszonkowy

Do listy dopuszczalnych wartoci mona si odwoywa przez indeks, przy czym pierwszy element otrzymuje numer 0. Na przykad:
SELECT COLID FROM TBL WHERE COLENUM = 0;

Jeli COLID jest kolumn z kluczem gwnym, a COLENUM kolumn typu ENUM, taka instrukcja SQL spowoduje pobranie kluczy gwnych wszystkich wierszy, dla ktrych COLENUM jest pierwsz wartoci z listy. Analogicznie, sortowanie wzgldem kolumn ENUM powoduje sortowanie wedug indeksu, nie acucha. Najwiksza moliwa liczba elementw kolumny ENUM to 65 535.

SET
SET(warto1, warto2, ...)

Rozmiar w pamici 1 8 elementw: 1 bajt 9 16 elementw: 2 bajty 17 24 elementy: 3 bajty 25 32 elementy: 4 bajty 33 64 elementy: 8 bajtw Opis Lista wartoci wybieranych z okrelonego wczeniej zbioru. Pole moe zawiera dowoln liczb acuchw wskazanych w instrukcji SET, szczeglnie moe nie zawiera adnej takiej wartoci. SET jest podobny do ENUM, ale kade pole moe zawiera wicej ni jedn z podanych wartoci. Dane typu SET nie s jednak zapisywane za pomoc indeksw, ale w zoonej mapie bitowej. Jeli dany jest zbir SET, zawierajcy elementy: Mandarynka, Pomidor,
Rozdzia 3. Typy danych | 39

Gruszka i Banan, kady z tych elementw jest reprezentowany jako

wczony bit w bajcie, jak to pokazano w tabeli 3.1.


Tabela 3.1. Reprezentacja zbioru elementw w MySQL
Element
Mandarynka Pomidor Gruszka Banan

Warto dziesitna
1 2 4 8

Zapis bitowy
0001 0010 0100 1000

W powyszym przykadzie zapisanie jednoczenie wartoci Mandarynka i Gruszka wymaga uycia wartoci 5 (bitowo 0101). W kolumnie SET mona zapisa najwyej 64 wartoci. Wprawdzie t sam warto mona w jednym wyraeniu SQL wpisa wielokrotnie, ale w bazie danych warto ta zostanie zapisana raz.

40

MySQL. Leksykon kieszonkowy

4. SQL .............................................................................................. 41
Rozrnianie wielkoci liter Literay Identyfikatory Komentarze Instrukcje Zasady dotyczce transakcji 41 42 43 45 46 106

5. Operatory .................................................................................. 108


Priorytety operatorw Operatory arytmetyczne Operatory porwnania Operatory logiczne 108 109 109 111

6. Funkcje .......................................................................................113
Funkcje agregujce Funkcje oglnego przeznaczenia 113 115

7. Rodzaje tabel ............................................................................ 137 8. Procedury i funkcje skadowane .............................................. 138


Parametry Logika Kursory Obsuga zdarze i warunki 138 139 143 144

9. Trygery ...................................................................................... 146 Skorowidz ................................................................................. 147

MySQL. Leksykon kieszonkowy

Rozdzia 3. Typy danych


We wszystkich typach danych nawiasami kwadratowymi ([]) oznaczane s fragmenty opcjonalne. Poniszy przykad pokazuje sposb prezentacji typu BIGINT, opisanego dalej w tym rozdziale:
BIGINT[(wielko_pokazywana)]

Oznacza to, e sowo BIGINT moe wystpi samodzielnie lub z pokazywan wartoci. Uycie kursywy wskazuje, e nie naley wpisywa sowa wielko_pokazywana, ale poda wasn warto. Oto przykady uycia:
BIGINT BIGINT(20)

Poza typem BIGINT take wiele innych typw danych MySQL uwzgldnia deklaracj rozmiaru wywietlania. Jeli nie powiedziano inaczej, musi to by liczba od 1 do 255. W wersjach MySQL starszych ni wersja 5, baza danych w niektrych przypadkach zmieniaa podany typ kolumny, nie informujc o tym uytkownika. Obecnie takie podmiany nie maj ju miejsca.
VARCHAR -> CHAR

Jeli podana kolumna VARCHAR ma rozmiar mniejszy od czterech znakw, jest przeksztacana w kolumn CHAR.
CHAR -> VARCHAR

Jeli tabela zawiera co najmniej jedn kolumn o zmiennej dugoci, wszystkie kolumny typu CHAR dusze ni trzy znaki s zamieniane na VARCHAR.

Rozmiar wywietlania TIMESTAMP Rozmiar wywietlania pl TIMESTAMP musi by zawsze wielkoci parzyst od 2 do 14. Rozmiar rwny 0 lub wikszy od 14 powoduje przyjcie 14. Wszelkie liczby nieparzyste s zamieniane na nastpn liczb parzyst.

22

MySQL. Leksykon kieszonkowy

Liczby
MySQL obsuguje liczbowe typy danych zgodne z ANSI SQL 2. Typy te dzielimy na cakowitoliczbowe, dziesitne i zmiennoprzecinkowe. W ramach tych grup dzielimy typy dalej, wedug zajmowanej przez nie pamici. W przypadku typw liczbowych mona poda rozmiar wywietlania, ktry wpywa na sposb pokazywania przez MySQL wynikw. Rozmiar ten nie ma adnego zwizku z wielkoci pamici zajmowanej przez dany typ. Dodatkowo w przypadku liczb zmiennoprzecinkowych i dziesitnych mona poda liczb cyfr znajdujcych si za kropk dziesitn. Wtedy liczba cyfr powinna nalee do zakresu od 0 do 30, czyli by co najmniej o dwa mniejsza od rozmiaru wywietlania. Jeli warunek ten nie zostanie dotrzymany, MySQL automatycznie zmieni liczb cyfr tak, aby bya mniejsza o dwa od rozmiaru wywietlania. Przykadowo, MySQL automatycznie zmieni FLOAT(6,5) na FLOAT(7,5). Prba wstawienia do kolumny wartoci przekraczajcej dopuszczalny zakres tej kolumny powoduje obcicie tej wartoci do najmniejszej (dla liczb ujemnych) lub najwikszej (dla liczb dodatnich) wartoci dla danej kolumny dopuszczalnej. Jeli takie obcicie jest robione podczas wykonywania instrukcji ALTER TABLE, LOAD DATA INFILE, UPDATE lub wielowierszowej instrukcji INSERT, MySQL pokazuje ostrzeenie. Wyjtkiem jest korzystanie z MySQL w wersji 5 lub nowszej w trybie penej zgodnoci ze standardem SQL, gdy wtedy w przypadku instrukcji INSERT i UPDATE zgaszany jest bd. Atrybutu AUTO_INCREMENT mona uy do co najwyej jednej kolumny cakowitoliczbowej w tabeli. Atrybut UNSIGNED moe by czony z dowolnym liczbowym typem danych. Uycie tego atrybutu powoduje, e do kolumny nie mona wpisywa liczb ujemnych. Atrybut ZEROFILL nakazuje wypenienie kolumny od lewej

Rozdzia 3. Typy danych

23

strony zerami podczas wywietlania jej wartoci. O liczbie tych zer decyduje szeroko wywietlania danej kolumny.

BIGINT
BIGINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Najwikszy z typw cakowitoliczbowych, pozwalajcy zapisywa liczby od 9 223 372 036 854 775 808 do 9 223 372 036 854 775 807 (jeli bez znaku, to od 0 do 18 446 744 073 709 551 615). Z uwagi na sposb realizacji dziaa na liczbach tego typu, naley unika operacji na liczbach BIGINT bez znaku wikszych ni 9 223 372 036 854 775 807, gdy moe to zaowocowa nieprawidowymi wynikami.

BIT
BIT[(bity)]

Rozmiar w pamici w przyblieniu bity bitw+7 lub 8 bitw Opis W wersjach MySQL 5.0.3 i starszych, pola typu BIT dziaay tak samo, jak TINYINT(1). Omawiany typ pola pozwala przechowywa ustalon liczb bitw. Jeli podana zostanie wielko bitw mniejsza od dozwolonej, MySQL wypeni zerami bity od lewej strony.
24 | MySQL. Leksykon kieszonkowy

DEC
Synonim typu DECIMAL.

DECIMAL
DECIMAL[(dokadno, [skala])] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici rnie Opis Pozwala zapisywa liczby zmiennoprzecinkowe w sytuacjach, kiedy istotna jest dokadno na przykad przy operowaniu kwotami pienidzy. Stosujc typ DECIMAL, trzeba poda dwa jego parametry, dokadno i skal. Dokadno to liczba znaczcych cyfr, za skala to liczba znaczcych cyfr po kropce dziesitnej. Przykadowo, kolumna SALDO typu DECIMAL(9,2) pozwoliaby zapisywa liczby dziewiciocyfrowe, przy czym na prawo od kropki dziesitnej mogyby by dwie cyfry. Zakres dopuszczalnych liczb to w takiej sytuacji od 9 999 999,99 do 9 999 999,99. Jeli podana zostanie liczba zawierajca wicej cyfr po przecinku, ni przewiduje to definicja, liczba zostanie zaokrglona. Wartoci spoza zakresu DECIMAL s obcinane tak, aby si w nim zmieciy. W wersjach MySQL starszych ni 5, wartoci DECIMAL nie byy zapisywane jako liczby zmiennoprzecinkowe, lecz jako acuchy znakw. Na kad cyfr zuywany by jeden znak w przypadku skali wikszej od 0, poza tym jeden dodatkowy znak zuywany jest w przypadku liczb ujemnych. Jeli skala wynosi 0, liczby nie maj czci uamkowej. SQL zgodnie z norm ANSI pozwala pomija dokadno i (lub) skal. Jeli brak dokadnoci, przyjmowane jest ustawienie

Rozdzia 3. Typy danych

25

domylne charakterystyczne dla implementacji. Jeli brak skali, przyjmowane jest zero. W MySQL domylna warto dokadnoci to 10.

DOUBLE
DOUBLE[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 8 bajtw Opis Liczba zmiennoprzecinkowa podwjnej precyzji. Ten typ danych pozwala zapisywa due wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 1,7976931348623157E+308 do 2,2250738585072014E308, 0 oraz wartoci dodatnie od 2,2250738585072014E308 do 1,7976931348623157E+308.

DOUBLE PRECISION
Synonim DOUBLE.

FLOAT
FLOAT[(rozmiar_wywietlany, cyfr)] [ZEROFILL]

Rozmiar w pamici 4 bajty

26

MySQL. Leksykon kieszonkowy

Opis Liczba zmiennoprzecinkowa pojedynczej precyzji. Ten typ danych pozwala zapisywa mae wartoci zmiennoprzecinkowe. W kolumnach tego typu mona zapisa wartoci ujemne od 3,402823466E+38 do 1,175494351E38, 0 oraz wartoci dodatnie od 1,175494351E38 do 3,402823466E+38.

INT
INT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 4 bajty Opis Podstawowy rodzaj liczb cakowitych od 2 147 483 648 do 2 147 483 647 (lub od 0 do 4 294 967 295 w przypadku liczb bez znaku).

INTEGER
Synonim INT.

MEDIUMINT
MEDIUMINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

27

Opis Liczby cakowite od 8 388 608 do 8 388 607 (lub od 0 do 16 777 215 w przypadku liczb bez znaku).

NUMERIC
Synonim DECIMAL.

REAL
Synonim DOUBLE.

SMALLINT
SMALLINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 2 bajty Opis Liczby cakowite z zakresu od 32 768 do 32 767 (od 0 do 65 535 w przypadku liczb bez znaku).

TINYINT
TINYINT[(rozmiar_wywietlany)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]

Rozmiar w pamici 1 bajt

28

MySQL. Leksykon kieszonkowy

Opis Liczby cakowite od 128 do 127 (od 0 do 255 w przypadku liczb bez znaku).

acuchy
MySQL obsuguje dwie kategorie acuchw: acuchy tekstowe oraz acuchy binarne. Obie kategorie maj swoje specyficzne typy do obsugi rnych wielkoci pl i rnych sposobw porwnywania wartoci. W zalenoci od sposobu porwnywania, mona uwzgldnia bd nie wielko liter, mona te porwnywa dane binarnie (bajt po bajcie). Kiedy nazwa typu tekstowego (jak CHAR, VARCHAR i inne) zostanie oznaczona sowem kluczowym BINARY, kolumna pozostaje kolumn tekstow, ale dane s porwnywane ze sob binarnie.

BINARY
BINARY(rozmiar)

Rozmiar wedug rozmiar, w zakresie od 0 do 255 Rozmiar w pamici


rozmiar bajtw

Opis Typ danych BINARY to binarny odpowiednik typu CHAR. Podstawowa rnica midzy tymi dwoma typami polega na tym, e pole typu BINARY zawiera dane binarne, wielko tych danych jest mierzona nie w znakach, lecz w bajtach. acuchy zawierajce

Rozdzia 3. Typy danych

29

mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie znakami 0x00 (wersja MySQL 5.0.5 i nowsze) lub spacjami (wersje starsze).

BLOB
Binarny odpowiednik typu TEXT.

CHAR
CHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar wedug rozmiar, do 255 Rozmiar w pamici zaleny od rozmiaru i od uytego zestawu znakw Opis Pole tekstowe ustalonej dugoci. acuchy zawierajce mniej znakw, ni to wynika z rozmiaru kolumny, wypeniane s po prawej stronie spacjami. Podczas pobierania danych z bazy te dodatkowe spacje s usuwane. Pola CHAR(0) zostay zachowane w celu zapewnienia zgodnoci ze starymi systemami, w ktrych w kolumnach nie s zapisywane adne wartoci.

CHARACTER
Synonim CHAR.

30

MySQL. Leksykon kieszonkowy

CHARACTER VARYING
Synonim VARCHAR.

LONGBLOB
Binarny odpowiednik LONGTEXT.

LONGTEXT
LONGTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 4 294 295 Rozmiar w pamici Dugo wartoci+4 bajty Opis Typ pozwala zapisywa due wartoci tekstowe. Teoretyczne ograniczenie rozmiaru tekstu to ponad 4 GB, ale praktycznymi ograniczeniami s ograniczenia protokou komunikacyjnego MySQL oraz ilo pamici przeznaczonej na komunikacj na serwerze i na stacji klienckiej.

MEDIUMBLOB
Binarna posta MEDIUMTEXT.

MEDIUMTEXT
MEDIUMTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozdzia 3. Typy danych

31

Rozmiar 0 do 16 777 215 Rozmiar w pamici Dugo wartoci+3 bajty Opis Typ pozwala zapisywa redniej wielkoci wartoci tekstowe.

NCHAR
Synonim CHAR.

NATIONAL CHAR
Synonim CHAR.

NATIONAL CHARACTER
Synonim CHAR.

NATIONAL VARCHAR
Synonim VARCHAR.

TEXT
TEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 65 535

32

MySQL. Leksykon kieszonkowy

Rozmiar w pamici Dugo wartoci tekstowej+2 bajty Opis Typ pozwala zapisywa typowe wartoci tekstowe.

TINYBLOB
Binarny odpowiednik TINYTEXT.

TINYTEXT
TINYTEXT [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar 0 do 255 Rozmiar w pamici Dugo wartoci tekstowej+1 bajt Opis Pozwala zapisywa krtkie dane tekstowe.

VARBINARY
VARBINARY(rozmiar)

Rozmiar Wedug parametru rozmiar

Rozdzia 3. Typy danych

33

Rozmiar w pamici
rozmiar bajtw

Opis Jest to binarna odmiana typu VARCHAR. Podstawowa rnica polega na tym, e zapisywane s dane binarne, a rozmiar pola mierzony jest w bajtach, nie w znakach. Wielkoci typu VARBINARY, w przeciwiestwie do wartoci typu BINARY, nie s niczym dopeniane.

VARCHAR
VARCHAR(rozmiar) [BINARY] [CHARACTER SET zestaw] [COLLATE porwnywanie]

Rozmiar Wskazana przez rozmiar warto z zakresu do 65 532 (od 1 do 255 w wersjach wczeniejszych ni MySQL 5); rozmiar wskazuje rzeczywist wielko kolumny i jest ograniczony przez dopuszczaln wielko wiersza w znakach; to, ile miejsca faktycznie bdzie potrzebne, zaley zatem od zestawu znakw uytego w danej kolumnie Rozmiar w pamici Zaley od liczby znakw wskazanych jako rozmiar oraz od liczby bajtw potrzebnych do zapisu poszczeglnych znakw w uytym mechanizmie kodowania znakw Opis Pozwala zapisywa wartoci tekstowe zmiennej dugoci. W wersjach poprzedzajcych MySQL 5 z wartoci VARCHAR usuwane s spacje kocowe; wersja MySQL 5 i nowsze standardowo nie usuwaj spacji kocowych.

34

MySQL. Leksykon kieszonkowy

Daty
Typy datowe MySQL s wyjtkowo elastycznym narzdziem, pozwalajcym zapisywa wszelki informacje dzienne. MySQL jest bardzo tolerancyjny i zakada, e to aplikacja, a nie baza danych, ma sprawdza poprawno tych danych. MySQL sprawdza jedynie, czy miesic nie wykracza poza zakres 0 12 i czy dzie nie wykracza poza zakres 0 31. Wobec tego z punktu widzenia MySQL 31 lutego 2001 roku jest poprawn dat. Bardziej przydatn wartoci jest data 0 lutego 2001 roku; cyfra zero moe zastpowa t cz daty, ktrej dokadnie nie znamy. MySQL 5 jest jednak ju baz danych nieco bardziej restrykcyjn co do wartoci, jakie mona zapisywa w polach datowych. Wprawdzie MySQL dopuszcza do du swobod formatw wejciowych dat, to naley stara si w aplikacjach daty formatowa zgodnie z formatem wewntrznym MySQL w celu uniknicia nieporozumie. MySQL zawsze zakada, e rok jest pierwszym elementem po lewej stronie daty. Jeli w operacji SQL podana zostanie nieprawidowa warto daty, MySQL wstawi w jej miejsce zero. MySQL w kontekcie liczb cakowitych automatycznie konwertuje daty i czas na liczby cakowite.

DATE
DATE

Format
YYYY-MM-DD (2001-01-01)

Rozmiar w pamici 3 bajty

Rozdzia 3. Typy danych

35

Opis Data kalendarza gregoriaskiego z zakresu od 1 stycznia 1000 roku ('1000-01-01') do 31 grudnia 9999 roku ('9999-12-31').

DATETIME
DATETIME

Format
YYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 8 bajtw Opis Zapisuje czas z zakresu od 00:00:00 1 stycznia 1000 roku ('100001-01 00:00:00') do 23:59:59 31 grudnia 9999 ('9999-12-31 23:59:59') wedug kalendarza gregoriaskiego.

TIME
TIME

Format
hh:mm:ss (06:00:00)

Rozmiar w pamici 3 bajty Opis Zapisuje czas od pnocy ('00:00:00') do sekundy przed pnoc ('23:59:59').
36 | MySQL. Leksykon kieszonkowy

TIMESTAMP
TIMESTAMP[(rozmiar_wywietlania)]

Format
YYYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)

Rozmiar w pamici 4 bajty Opis Zapis chwili z dokadnoci do sekundy od pnocy 1 stycznia 1970 roku do minuty przed pnoc 31 grudnia 2037 roku. Podstawowym zastosowaniem tego typu jest rejestracja modyfikacji tabel. Przy wstawianiu do takiej kolumny wartoci NULL wstawiane s aktualna data i czas. W przypadku modyfikowania jakiejkolwiek wartoci w wierszu z kolumn TIMESTAMP pierwsza kolumna tego typu zostanie zaktualizowana biec dat i czasem. Format danych TIMESTAMP znany z wczeniejszych wersji MySQL, do 4.1 wcznie, w wersji 5.1 nie jest ju obsugiwany.

YEAR
YEAR[(rozmiar)]

Format
YYYY (2001)

Rozmiar w pamici 1 bajt

Rozdzia 3. Typy danych

37

Opis Pozwala zapisa rok z kalendarza gregoriaskiego. Parametr rozmiar umoliwia zapisywanie roku dwu- lub czterocyfrowo. Zakres YEAR(4) rozciga si od 1900 do 2155, dla YEAR(2) od 1970 do 2069. Domylnie przyjmowane jest YEAR(4).

Typy zoone
Zoone typy danych MySQL, ENUM i SET, s po prostu specjalnymi przypadkami typw acuchowych. Opisujemy je osobno, gdy s bardziej zoone pojciowo i stanowi wprowadzenie do typw danych SQL3, ktre by moe MySQL bdzie obsugiwa w przyszoci.

ENUM
ENUM(warto1, warto2, ...)

Rozmiar w pamici 1 255 elementw: 1 bajt 255 65 535 elementw: 2 bajty Opis Typ danych ENUM pozwala zapisywa jeden z wielu zdefiniowanych wczeniej acuchw. Przy tworzeniu kolumny typu ENUM podaje si list dopuszczalnych jej wartoci. Dane mog by do tej kolumny wstawiane i aktualizowane jedynie z tej listy; kada prba wstawienia wartoci spoza niej powoduje wstawienie pustego acucha.

38

MySQL. Leksykon kieszonkowy

Do listy dopuszczalnych wartoci mona si odwoywa przez indeks, przy czym pierwszy element otrzymuje numer 0. Na przykad:
SELECT COLID FROM TBL WHERE COLENUM = 0;

Jeli COLID jest kolumn z kluczem gwnym, a COLENUM kolumn typu ENUM, taka instrukcja SQL spowoduje pobranie kluczy gwnych wszystkich wierszy, dla ktrych COLENUM jest pierwsz wartoci z listy. Analogicznie, sortowanie wzgldem kolumn ENUM powoduje sortowanie wedug indeksu, nie acucha. Najwiksza moliwa liczba elementw kolumny ENUM to 65 535.

SET
SET(warto1, warto2, ...)

Rozmiar w pamici 1 8 elementw: 1 bajt 9 16 elementw: 2 bajty 17 24 elementy: 3 bajty 25 32 elementy: 4 bajty 33 64 elementy: 8 bajtw Opis Lista wartoci wybieranych z okrelonego wczeniej zbioru. Pole moe zawiera dowoln liczb acuchw wskazanych w instrukcji SET, szczeglnie moe nie zawiera adnej takiej wartoci. SET jest podobny do ENUM, ale kade pole moe zawiera wicej ni jedn z podanych wartoci. Dane typu SET nie s jednak zapisywane za pomoc indeksw, ale w zoonej mapie bitowej. Jeli dany jest zbir SET, zawierajcy elementy: Mandarynka, Pomidor,
Rozdzia 3. Typy danych | 39

Gruszka i Banan, kady z tych elementw jest reprezentowany jako

wczony bit w bajcie, jak to pokazano w tabeli 3.1.


Tabela 3.1. Reprezentacja zbioru elementw w MySQL
Element
Mandarynka Pomidor Gruszka Banan

Warto dziesitna
1 2 4 8

Zapis bitowy
0001 0010 0100 1000

W powyszym przykadzie zapisanie jednoczenie wartoci Mandarynka i Gruszka wymaga uycia wartoci 5 (bitowo 0101). W kolumnie SET mona zapisa najwyej 64 wartoci. Wprawdzie t sam warto mona w jednym wyraeniu SQL wpisa wielokrotnie, ale w bazie danych warto ta zostanie zapisana raz.

40

MySQL. Leksykon kieszonkowy

MySQL. Leksykon kieszonkowy. II wydanie


Autor: George Reese Tumaczenie: Tomasz mijewski ISBN: 978-83-246-1385-4 Tytu oryginau: MySQL Pocket Reference, 2nd Ed Format: B6, stron: 160 MySQL to jeden z najpopularniejszych systemw zarzdzania bazami danych Rozprowadzany na zasadzie open source, MySQL jest wykorzystywany jako zaplecze bazodanowe setek tysicy serwisw WWW, sklepw internetowych, blogw i galerii. Coraz czciej sigaj po niego take twrcy rozbudowanych aplikacji korporacyjnych, poszukujcy stabilnej, bezpiecznej i wydajnej platformy do przechowywania danych. W najnowszej wersji, oznaczonej symbolem 5.0, dodano wiele od dawna oczekiwanych funkcji, w tym procedury skadowane, wyzwalacze, kursory i widoki. Poprawiono take mechanizmy skadowania danych. Jeli jeste administratorem lub programist baz danych, ksika MySQL. Leksykon kieszonkowy. II wydanie bdzie dla Ciebie nieocenion pomoc. W skondensowanej formie przedstawiono w niej wszystkie najistotniejsze zagadnienia zwizane z instalacj i konfiguracj tego systemu, a take z zarzdzaniem nim i wykorzystywaniem go. Znajdziesz tu omwienie typw danych, polece jzyka SQL, funkcji i rodzajw tabel. Przeczytasz take o replikacji, procedurach skadowanych, narzdziach dostpnych z wiersza polece i wyzwalaczach.
Pobieranie i instalacja MySQL Replikacja danych Narzdzia wiersza polece Typy danych Polecenia SQL Operatory Procedury skadowane

Dziki tej ksice Twoja praca z MySQL stanie si szybsza i efektywniejsza Wydawnictwo Helion ul. Kociuszki 1c 44-100 Gliwice tel. 032 230 98 63 e-mail: helion@helion.pl

Spis treci

Wstp ............................................................................................5 MySQL 5 ........................................................................................7


Widoki Trygery Procedury skadowane Kursory Nowe mechanizmy skadowania danych Zdarzenia bazy danych 7 7 7 8 8 9

1. Instalacja ..................................................................................... 10
Pobieranie MySQL Konfiguracja Uruchomienie Ustawianie hasa gwnego Replikacja 10 11 14 15 15

2. Narzdzia wiersza polece ........................................................ 18 3. Typy danych ................................................................................22


Liczby acuchy 23 29

You might also like