Pouze tento týden sleva až 80 % na e-learning týkající se C# .NET. Zároveň využij akce až 50 % zdarma při nákupu e-learningu. Více informací:
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

6. diel - MySQL krok za krokom: Dátové typy a NULL

V minulej lekcii, MySQL krok za krokom: Import , sme si ukázali import databázy.

Dnes sa vrátime k dátovým typom, predstavíme si tabuľky tých najdôležitejších a povieme si niečo o hodnote NULL.

Dátové typy

Hneď na začiatku seriálu sme si uviedli niekoľko základných dátových typov. Vtedy som vám s nimi nechcel motať hlavu. Reč bola o typoch INT, VARCHAR a DATE. Databáza (konkrétne tu MySQL) ich má samozrejme omnoho viac. Uveďme si pár tabuliek a predstavme si tie najdôležitejšie. Nasledujúce tabuľky zostavil redaktor Mircosoft a obsahujú tie najpoužívanejšie dátové typy.

Celé čísla

typ rozsah
TINYINT 8-bitové číslo
SMALLINT 16-bitové číslo
MEDIUMINT 24b číslo
INT 32b
BIGINT 64b
Keď za typom uvedieme upresňujúce slovo unsigned, čísla budú bez znamienka (teda kladná), s rozsahom 0..2 počet bitov. Ak neuvedieme nič, čísla sú celá so znamienkom a rozsahom posunutým o polovicu do zápornej (teda napr. Namiesto 0..255 bude -127..128).

Pozn. ak hľadáte dátový typ boolean (hodnoty true / false), tak na ukladanie tejto hodnoty sa spravidla používa TINYINT (0/1).

Texty

typ rozsah
TINYTEXT max. 255 B
TEXT max. 64 KB (to je naozaj dlhý text, napríklad článku)
MEDIUMTEXT max. 2 24 B
LONGTEXT max. 2 32 B
VARCHAR (max. Počet znakov) počet znakov aký si zvolíte, max. 64 KB
CHAR (počet znakov) pevný počet znakov aký si zvolíte, max. 255
V ASCII textoch platí uvedenej maximálnej dĺžky priamo pre znaky (1 znak = 1 B). V kódovanie Unicode je potrebné počítať s tým, že jeden znak môže zabrať viac bytov.

Ostatné

typ rozsah
DATE Dátum ako textový reťazec v tvare 'rrrr-mm-dd', rozsah od '1000-01-01' do '9999-12-31'
TIME Čas ako textový reťazec v tvare 'hh: mm: ss'
DATETIME Prakticky je to zreťazenie dátumu a času: 'rrrr-mm-dd hh: mm: ss'
TIMESTAMP Navonok sa správa rovnako ako datetime, ale interne je to dword s počtom sekúnd uplynulých od 1.1.1970. Rozsah mu končí v januári 2038, takže tento typ moc neodporúčam a uvádzam ho len pre úplnosť.
BLOB a spol. Všeobecná dáta v binárnom tvare, použitie analogické k typom TEXT. Umožňujú do databázy ukladať napr. Obrázky alebo zvuky.
Hodnota NULL

Dátové typy v databázach sa málinko odlišujú od dátových typov, ako ich poznáme v programovacích jazykoch. Kým napríklad v céčku môže mať int hodnoty len nejakých -32.000 až +32.000 a nič okrem toho, databázový INT môže nadobúdať aj hodnoty NULL. NULL nemá vôbec nič spoločné s nulou (0), označuje to, že hodnota nebola ešte zadaná. Filozofia databáz je takto postavená, nezadaných hodnoty majú predvolenú hodnotu NULL (ak im nenastavíte inú) a každý dátový typ má okrem hodnôt, ktoré by sme v ňom očakávali, navyše možnú hodnotu NULL. Dátovému typu túto hodnotu môžeme aj zakázať, viac ďalej.

Od verzie MySQL 5.7 je potrebné pri vkladaní nového riadku buď uviesť hodnoty pre všetky stĺpce alebo aby tabuľka mala pre stĺpce, pre ktorých hodnoty neuvádzame, nastavené predvolené hodnoty. V opačnom prípade dotaz skončí chybovým hlásením #1364 - Field 'xxx' doesn't have a default value. V starších verziách pri vkladaní dát a neuvedenie nejakého stĺpčeku MySQL automaticky použila predvolenú hodnotu pre daný typ údajov. V prípade, že bol stĺpček nullovatelný, použila NULL, v opačnom prípade pre string prázdny reťazec, pre číslo nulu pod. Pretože sa stávalo, že človek zabudol nejaký stĺpec uviesť a nebol na to upozornený, toto správanie už ďalej neplatí.

Ak napr. Príkazom INSERT vložíme užívateľa a vyplníme len niektoré hodnoty, do ďalších hodnôt sa vloží NULL. Skúsme si to:

INSERT INTO `uzivatele` (`jmeno`, `prijmeni`) VALUES ('Pan', 'Neuplny');

výsledok:

Vloženie užívateľov s nezadanými hodnotami do MySQL databázy

Tabuľku uzivatele sme vytvorili pomocou SQL dotazu CREATE TABLE. Ak tabuľku naklikáte cez phpMyAdmin, zakáže nám v stĺpcoch hodnotu NULL a nenastaví predvolené hodnoty, museli by sme si teda NULL povoliť a nastaviť ho ako predvolenú hodnotu. Toto je možné kedykoľvek zmeniť editáciou konkrétneho stĺpčeku v záložke Štruktúra.

Prínos hodnoty NULL

Asi sa pýtate na čo hodnota NULL vlastne je? Jej prínos je v tom, že spoznáme, či bola hodnota zadaná. Napr. pri zadávaní čísla neexistuje hodnota, podľa ktorej by sme poznali, že číslo nie je zadané. Keby sme si k tomuto určili hodnotu nula (0), nevieme, či používateľ číslo nezadal alebo zadal práve nulu. NULL okrem iného aj šetrí miesto v databáze, kde narozdiel od pôvodnej hodnoty nezaberá miesto.

NULL na strane aplikácie

Už sme si povedali o tom, že programovacie jazyky hodnotu NULL spravidla nemajú (teda tie staticky typizovanej). V jazykoch ako je potrebné dynamické PHP nemusíme dátový typ vôbec riešiť, aj keď je dobré vedieť, že sa na NULL môžeme spýtať, keď to budeme potrebovať. V jazykoch typovaných, ako je potrebné Java alebo C #, musíme použiť iné dátové typy. VC # môžeme ktorýkoľvek dátový typ označiť ako NULLovatelný a on pochopí, že v ňom môže byť aj NULL. V Jave budeme používať obaľovacej dátové typy s veľkými písmenami, teda napr. Pre čísla miesto int použijeme Integer.

Upresňujúce informácie k dátovým typom

K dátovým typom (ak chcete k stĺpcom) môžeme uviesť niekoľko upresňujúcich informácií. Už sme sa stretli s AUTO_INCREMENT. Pozrime sa na ďalšie.

Názov popis
AUTO_INCREMENT: Len pre čísla. Pri vkladaní riadku dajte tejto položke hodnotu NULL a systém jej automaticky pridelí hodnotu o 1 väčšia ako dal minulému riadku (prírastok sa teoreticky dá zmeniť, ale tým sa teraz nebudeme zaťažovať). Výborná vec pre pohodlnú tvorbu unikátnych identifikačných kľúčov.
UNIQUE Hovorí, že nesmie existovať viac riadkov, ktoré majú v tejto položke rovnakú hodnotu (s výnimkou hodnoty NULL). Zmysel to má iba u kľúčov.
NOT NULL Tahle hodnota nesmie byť prázdna - nepôjde do nej vložiť hodnota NULL.
PRIMARY KEY Tým sa určí, že sa tento stĺpec (v každej tabuľke max. Jeden) bude používať ako kľúč. Vhodné pre nejaké relatívne krátkej identifikačné kódy, podľa ktorých budeme riadky najčastejšie hľadať. Primárny kľúč je vždy NOT NULL a UNIQUE; aj keď to nenařídíme, dostane tyhle vlastnosti implicitne.
DEFAULT hodnota Východisková hodnota, ktorú položka dostane, keď ju pri vkladaní riadku neuvedieme. Nefunguje na Texty, BLOB a položky s AUTO_INCREMENT.
Nové slová upresňujúce dátový typ sa vkladajú za neho, rovnako ako tomu bolo u AUTO_INCREMENT. Uveďme si nejaký príklad:
CREATE TABLE `uzivatele` (
    uzivatele_id MEDIUMINT NOT NULL AUTO_INCREMENT,
    jmeno CHAR(35) NOT NULL,
    PRIMARY KEY (uzivatele_id)
);

 

Predchádzajúci článok
MySQL krok za krokom: Import
Všetky články v sekcii
MySQL databázy krok za krokom
Preskočiť článok
(neodporúčame)
Kvíz - Tvorba, mazanie, vkladanie, import a export dát v MySQL
Článok pre vás napísal David Čápka
Avatar
Užívateľské hodnotenie:
2 hlasov
David je zakladatelem ITnetwork a programování se profesionálně věnuje 13 let. Má rád Nirvanu, nemovitosti a svobodu podnikání.
Unicorn university David sa informačné technológie naučil na Unicorn University - prestížnej súkromnej vysokej škole IT a ekonómie.
Aktivity