Portál AbcLinuxu, 12. říjen 2005 10:16
Články - Návody - Tvorba databází v MySQL - III
Celý třetí díl seriálu je zasvěcen datovým typům a modifikátorům sloupců.
Při návrhu databáze musíte určit datové typy sloupců. V tomto díle seriálu se s datovými typy sloupců, které můžete používat v MySQL, seznámíte. Dále se dozvíte, co to jsou modifikátory sloupců.
Datový typ je atribut sloupce, který určuje, jaké hodnoty se budou moci do daného sloupce zapisovat. Každý sloupec může tedy uchovávat hodnoty pouze jednoho, předem určeného typu.
Před tím, než se vrhnete na studium datových typů, je třeba, abyste chápali pojem prázdná hodnota. Jestliže se ve sloupci záznamu nachází prázdná hodnota, znamená to, že v něm nic není. Nula je hodnota jako každá jiná, a proto není prázdná hodnota
Číselné datové typy dovolují uchovávat pouze čísla. Rozlišujeme dva základní typy číselných typů. A to číselné typy, které dovolují uchovávání celých čísel a číselné typy, které dovolují uchovávání desetinných čísel. Jednotlivé podtypy se liší intervalem ukládatelných hodnot.
Proč ale potřebujeme takové množství datových typů? Definujete-li sloupec
jako datový typ BIGINT
, bude mít jakékoli uložené číslo do takového
sloupce 64 míst ve dvojkové soustavě. Pokud tedy uložíte do takového sloupce
číslo 1, uloží se vám do něj 63 nul a jedna jednička na konci. To je ale značně
neefektivní, a proto se k ukládání malých čísel používá datový typ
SMALLINT
.
MySQL zpracovává číselné datové typy rychleji, než ostatní datové typy.
INT
Číselné datové typy typu INT
slouží k ukládání celých čísel.
Pokud při jejich definici použijete modifikátor UNSIGNED
(např.
UNSIGNED INT
), nebudete moci do takového sloupce ukládat záporné
hodnoty, zato se velikost nejvyššího uložitelného čísla zdvojnásobí.
Jsou to datové typy FLOAT, DOUBLE, DECIMAL
. MySQL umožňuje
omezit počet cifer desitinného čísla. V definici FLOAT (M, D)
určuje M
celkovou délku čísla a D
délku čísla za
desetinnou čárkou.
Datový typ DECIMAL
se používá k ukládání velmi velkých čísel a
měn, protože nemá prakticky žádné velikostní omezení a zaručuje požadovanou
přesnost.
Název typu | Interval | Bez znaménka | Paměťový prostor |
TINYINT |
<-128; 127> | <0; 255> | 1 bajt |
SMALLINT |
<-32768; 32767> | <0; 65535> | 2 bajty |
MEDIUMINT |
<-8388608; 8388607> | <0; 16777215> | 3 bajty |
INT |
<-2147483648; 2147483647> | <0; 4294967295> | 4 bajty |
BIGINT |
<-9223372036854775808; 9223372036854775807> | <0; 18446744073709550615> | 8 bajtů |
FLOAT(M, D) |
Liší se podle použitých hodnot | Liší se podle použitých hodnot | 4 bajty |
DOUBLE(M, D) |
Liší se podle použitých hodnot | Liší se podle použitých hodnot | 8 bajtů |
DECIMAL(M, D) |
Liší se podle použitých hodnot | Liší se podle použitých hodnot | M+2 bajty |
Textové datové typy umožňují ukládat textové řetězce. Textový řetězec je
množina znaků (např. "Pivovarská 69"
).
Seznam textových datových typů je v následující tabulce:
Název typu | Maximální velikost | Paměťový prostor |
CHAR(X) |
255 bajtů |
X bajtů |
VARCHAR(X) |
255 bajtů |
X+1 bajt |
TINYTEXT |
255 bajtů |
X+1 bajt |
TINYBLOB |
255 bajtů |
X+2 bajty |
TEXT |
65535 bajtů |
X+2 bajty |
BLOB |
65535 bajtů |
X+2 bajty |
MEDIUMTEXT |
1,6 MB |
X+3 bajty |
MEDIUMBLOB |
1,6 MB |
X+3 bajty |
LONGTEXT |
4,2 GB |
X+4 bajty |
LONGBLOB |
4,2 GB |
X+4 bajty |
CHAR
a VARCHAR
CHAR
definuje sloupec pevné délky. Znamená to, že pokud
nadeklarujeme sloupec jako CHAR(8)
, budou všechny do něj uložené
hodnoty dlouhé 8 bajtů. Když do takového sloupce uložíte tři znaky, MySQL
automaticky doplní chybějící znaky.
Naopak VARCHAR
definuje sloupec proměnné délky. Pokud do sloupce
definovaného jako VARCHAR(8)
uložíte 3 znaky, bude se celková délka
sloupce rovnat 4 bajty (délka pole + 1)
.
Výhoda sloupců deklarovaných jako CHAR
je to, že jsou rychlejší,
nevýhodou je zase nevyužité místo.
V jedné tabulce nemohou být sloupce deklarované jako CHAR
společně se sloupci deklarovanými jako VARCHAR
. Stane-li se to,
MySQL převede všechny sloupce CHAR
na sloupce VARCHAR
.
Pokud jsou ale sloupce VARCHAR
deklarovány na 4 znaky a méně,
převede je MySQL naopak na datový typ CHAR
.
TEXT
a BLOB
TEXT
a BLOB
jsou datové typy proměnné délky - jsou
to vlastně velmi rozsáhlé obdoby typu VARCHAR.
Do sloupců s datovým
typem TEXT
a BLOB
je vhodné ukládat například obsah
značky <TEXTAREA>
ve formuláři WWW.
Do sloupců typu TEXT
a BLOB
můžete ukládat i celé
soubory. Nevýhodou těchto datových polí je ale jejich rychlost a velikost, která
může vést k fragmentaci. Pokud tedy chcete v databázi ukládat rozsáhlé soubory
(např. obrázky), je většinou lepší ukládat je v nějakém adresáři a v databázi
ukládat jen odkazy na umístění těchto souborů.
Jsou to datové typy ENUM
a SET
. Do těchto datových
typů můžete ukládat pouze informace určené při deklaraci. Vypadají a chovají se
jako řetězce, ale v databázích MySQL se ukládají jako čísla. Jejich zpracování
je proto velmi rychlé.
ENUM
Sloupec typu ENUM
může uchovávat pouze jednu z hodnot
deklarovaných ve jmenovitém seznamu přípustných hodnot. Datový typ
ENUM
je vhodný například k uchovávání informací získaných z
rozbalovacích seznamů na stránkách WWW. Sloupec typu ENUM
musí
obsahovat hodnotu uvedenou ve jmenovitém seznamu nebo prázdnou hodnotu.
Příklad deklarace sloupce s datovým typem ENUM
:
CREATE TABLE Test(
Vratit ENUM("A", "N") DEFAULT
"N",
Barva ENUM("Cerna", "Cervena", "Bila")
)
pokud do sloupce Vratit
nezadáte žádnou hodnotu, uloží se do něj
N
SET
Sloupec typu SET
může na rozdíl od sloupce datového typu
ENUM
uchovávat jednu nebo víc hodnot deklarovaných ve jmenovitém
seznamu přípustných hodnot. Je proto vhodný například pro uchovávání informací
získaných ze zaškrtávacích formulářů u stránek WWW.
Příklad deklarace sloupců s datovými typy SET
:
CREATE TABLE Test(
Zajmy SET("Lyzovani", "Programovani",
"Linux"));
Při vkládání nového záznamu do sloupce typu SET je třeba vkládané hodnoty zabalit mezi uvozovky a oddělit čárkou.
INSERT INTO TEST (Zajmy) values ("Lyzovani,
Programovani");
Do polí typu SET proto nevkládejte hodnoty obsahující čárky!
O těchto datových typech si povíme v nějakém z příštích dílů seriálu.
Modifikátory sloupců jsou klíčová slova, která upravují chování sloupců tabulky.
AUTO_INCREMENT
(Automatické číslo)Modifikátor AUTO_INCREMENT
lze použít na sloupce typů
INT
. Hodnota sloupce označeného tímto modifikátorem se po přidání
nového záznamu vždy zvýší o 1. Hodnota prvního sloupce v prvním záznamu je 1.
Hodnota tohoto sloupce bude tedy v každém záznamu jiná. Modifikátor
AUTO_INCREMENT
je výborný nástroj pro vytváření jedinečných
hodnot.
Každá tabulka může obsahovat pouze jeden sloupec s modifikátorem
AUTO_INCREMENT.
Do sloupce s modifikátorem AUTO_INCREMENT
můžete při vložení
nového záznamu ukládat hodnoty NULL
, 0
, nebo můžete
uložení hodnoty zcela vynechat. Pokud zadáte číslo, které už v databázi
existuje, program vypíše chybové hlášení a záznam neuloží. Pokud číslo v
databázi ještě neexistuje, číslo do záznamu uloží a příště vloží do databáze
číslo o 1 větší. Počáteční hodnotu sloupce s modifikátorem
AUTO_INCREMENT
můžete určit i při deklaraci.
Poslední uložené číslo modifikátorem AUTO_INCREMENT
zjistíte
pomocí funkce LAST_INSERT_ID()
. Tato funkce vrátí poslední vámi
uložené číslo. Pokud by jako poslední uložil automatické číslo jiný uživatel,
funkce stejně vrátí to vámi uložené.
Pokud by hodnota sloupce měla přesáhnout maximální povolenou hodnotu datového typu příslušného sloupce, MySQL nahlásí chybu.
ZEROFILL
Modifikátor ZEROFILL
se používá k zobrazení vedoucích nul.
Chcete-li číslo 7
zobrazit jako jako 00007
, musíte
příslušný sloupec deklarovat jako INT(5) ZEROFILL.
BINARY
Modifikátor BINARY
lze použít na sloupce typu CHAR
a VARCHAR
. Pokud nadeklarujeme sloupec s modifikátorem
BINARY
, budou řetězce uložené v těchto sloupcích rozlišovat
malá/velká písmena.
DEFAULT
DEFAULT
lze použít na
všechny typy kromě BLOB
a TEXT
. Umožňuje změnit
implicitní hodnotu sloupce (tj. hodnotu, kterou bude mít sloupec, pokud do něj
nic neuložíte). Implicitně je výchozí hodnota sloupce NULL
.
Modifikátor použijete například takto:
CREATE TABLE Test(Zeme char(2) NOT NULL DEFAULT "CZ");
NULL, NOT NULL
Určují, zda je zadání hodnoty do příslušného sloupce povinné. Pole s
modifikátorem NOT NULL
musí obsahovat hodnotu. Hodnota
NULL
je absolutně prázdná. Prázdný řetězec "" není
NULL
!
PRIMARY KEY
(primární klíč)Sloupec označený modifikátorem PRIMARY KEY
jedinečným způsobem
identifikuje každý záznam tabulky. Primární klíč nedovoluje hodnoty
NULL
. Sloupec označený tímto modifikátorem nesmí obsahovat
duplicitní hodnoty (musí být jedinečný - musí obsahovat vždy jiné hodnoty).
Primární klíč by měla obsahovat každá tabulka.
(Více, nejen o primárních klíčích, se dočtete v jednom z příštích pokračování.)
UNIQUE
Sloupec označený identifikátorem UNIQUE
nesmí obsahovat
duplicitní hodnoty.
Dnes jste se dozvěděli, že rozlišujeme číselné datové typy, textové datové typy, výčtové datové typy, datové typy, které se používají k uchovávání datumu a času, a že modifikátory sloupců jsou klíčová slova, která upravují chování sloupců tabulky.
Po přečtení dnešního dílu byste měli být schopni vymodelovat a následně vytvořit databázi.
Příští díl je věnován klíčům a zamykání záznamů. Naučíte se tedy správně používat klíče, využívat zabudované fulltextové vyhledávání a seznámíte se s problematikou zamykání záznamů.
ISSN 1214-1267, (c) 1999-2005 Stickfish s.r.o.