Mikuláš je tady! Získej 90 % extra kreditů ZDARMA s promo kódem CERTIK90 při nákupu od 1199 kreditů. Pouze do neděle 7. 12. 2025! Zjisti více:
NOVINKA: Staň se datovým analytikem od 0 Kč a získej jistotu práce, lepší plat a nové kariérní možnosti. Více informací:

Lekce 8 - MS-SQL krok za krokem: Datové typy a NULL

V předešlém cvičení, Řešené úlohy k 7. lekci MS-SQL, jsme si procvičili nabyté zkušenosti z předchozích lekcí.

Dnes se v MS-SQL tutoriálu vrátíme k datovým typům, představíme si tabulky těch nejdůležitějších a řekneme si něco o hodnotě NULL.

Datové typy

Hned na začátku našeho on-line kurzu MS-SQL jsme si uvedli několik základních datových typů. Tehdy jsem vám s nimi nechtěl motat hlavu. Řeč byla o typech INT, VARCHAR a DATE. Databáze (konkrétně zde MS-SQL) jich má samozřejmě mnohem více. Uveďme si několik tabulek a představme si ty nejdůležitější.

Celá čísla

Pro celá čísla používáme tyto datové typy:

Typ Rozsah Velikost
TINYINT 0 až 255 8 bitů
SMALLINT -32 768 až 32 767 16 bitů
INT -2 147 483 648 až 2 147 483 647 32 bitů
BIGINT -9 223 372 036 854 775 808 až 9 223 372 036 854 775 807 64 bitů

Pokud hledáte datový typ boolean (hodnoty true/false), tak k ukládání této hodnoty se zpravidla používá typ BIT (0/1).

Texty

Již víme, že existují i typy VARCHAR a CHAR. Ty ale nepodporují Unicode kódování a mohli bychom v nich mít problémy s diakritikou. Proto místo nich budeme používat typy:

Typ Rozsah
NVARCHAR (max. počet znaků) počet znaků jaký si zvolíme
NCHAR (počet znaků) pevný počet znaků jaký si zvolíme

N v datových typech označuje National, jako mezinárodní. Zajímavá situace nastane, když zapíšeme datový typ jako NVARCHAR (MAX). V tuto chvíli je délka textu neomezená (prakticky je tam limit asi 2GB, což jednou hodnotou jen těžko zaplníme). Pro dlouhé texty se v minulosti používal typ NTEXT, který je ovšem nyní zastaralý.

Ostatní

Dále se nám budou ještě hodit následující datové typy:

Typ Popis
DATE Datum jako textový řetězec ve tvaru 'YYYY-MM-DD', rozsah od '0001-01-01' do '9999-12-31'
TIME Čas jako textový řetězec ve tvaru 'hh:mm:ss'
DATETIME2 Prakticky je to zřetězení data a času: 'YYYY-MM-DD hh:mm:ss' (případně 'YYYY-MM-DDThh:mm:ss')
BLOB a spol. Obecná data v binárním tvaru. Umožňují do databáze ukládat např. obrázky nebo jiné soubory.

Hodnota NULL

Datové typy v databázích se malinko odlišují od datových typů, jak je známe v programovacích jazycích. Zatímco třeba v jazyce C může mít typ int hodnoty jen nějakých -32 768 až 32 767 a nic kromě toho, databázový INT může nabývat i hodnoty NULL. NULL nemá vůbec nic společného s nulou (0), označuje to, že hodnota nebyla ještě zadána. Filozofie databází je takto postavena, nezadané hodnoty mají výchozí hodnotu NULL (pokud jim nenastavíme jinou) a každý datový typ má kromě hodnot, které bychom v něm očekávali, navíc možnou hodnotu NULL. Datovému typu tuto hodnotu můžeme i zakázat, více dále.

Pokud si vzpomínáme, když jsme vytvářeli databázi a tabulku Uzivatele, odškrtávali jsme Allow Nulls. To zajistí, že se nám do databáze NULL nedostanou. Zkusme si to. Zavolejme na naší tabulce Uzivatele tento příkaz:

INSERT INTO [Uzivatele] ([Jmeno], [Prijmeni]) VALUES ('Pan', 'Neuplny');

Výsledkem bude chyba, která nám říká , že některé sloupce neumožňují NULL:

Chyba při vkládání NULL hodnot - MS-SQL databáze krok za krokem

Otevřeme si designer tabulky Uzivatele, zaškrtněme Allow Nulls u všech sloupců kromě Id, potvrďme tlačítkem Update a následně tlačítkem Update Database:

Allow Nulls - MS-SQL databáze krok za krokem

Nyní stejný dotaz spusťme znovu:

INSERT INTO [Uzivatele] ([Jmeno], [Prijmeni]) VALUES ('Pan', 'Neuplny');

Když se nyní podíváme do dat v tabulce (pravým tlačítkem klikneme na tabulku a zvolíme View Data), na konci bude Pan Neúplný a bude mít v nevyplněných sloupcích NULL:

Hodnoty NULL v tabulce - MS-SQL databáze krok za krokem

Přínos hodnoty NULL

Asi se ptáte k čemu hodnota NULL vlastně je? Její přínos je v tom, že poznáme, jestli byla hodnota zadána. Např. při zadávání čísla neexistuje hodnota, podle které bychom poznali, že číslo není zadáno. Kdybychom si k tomuto určili hodnotu nula (0), nevíme, jestli uživatel číslo nezadal nebo zadal právě nulu. NULL mimo jiné i šetří místo v databázi, kde na rozdíl od výchozích hodnot nezabírá místo.

NULL na straně aplikace

Již jsme si řekli o tom, že programovací jazyky hodnotu NULL zpravidla nemají (tedy ty staticky typované). V jazycích typovaných, jako je třeba Java nebo C#, musíme použít jiné datové typy. V C# můžeme kterýkoli datový typ označit jako nullovatelný a on pochopí, že v něm může být i NULL. Používá se k tomu otazník, typ je potom např. int?.

Upřesňující informace k datovým typům

K datovým typům (chcete-li ke sloupcům) můžeme uvést několik upřesňujících informací. Již jsme se setkali s IDENTITY. Podívejme se na další:

Název Popis
IDENTITY Jen pro čísla. Pokud při vkládání řádku dáme této položce hodnotu NULL, databáze jí automaticky přidělí hodnotu o 1 větší než dala minulému řádku (přírůstek se teoreticky dá změnit, ale tím se nyní nebudeme zatěžovat). Výborná věc pro pohodlnou tvorbu unikátních identifikačních klíčů.
UNIQUE Říká, že nesmí existovat více řádků, které mají v této položce stejnou hodnotu (s výjimkou hodnoty NULL).
NOT NULL Udává, že daná hodnota nesmí být prázdná – nepůjde do ní vložit hodnota NULL.
PRIMARY KEY Určuje, že se tenhle sloupec bude používat jako primární klíč. Vhodné pro nějaké relativně krátké identifikační kódy, podle kterých budeme řádky nejčastěji hledat. Primární klíč je vždy NOT NULL a UNIQUE, i když to nenařídíme, dostane tyto vlastnosti implicitně.
DEFAULT hodnota Výchozí hodnota, kterou položka dostane, když ji při vkládání řádku neuvedeme.

Nová slova upřesňující datový typ se vkládají za něj, stejně jako tomu bylo u IDENTITY. Uveďme si nějaký příklad:

CREATE TABLE [Osoby] (
    [Id] INT PRIMARY KEY IDENTITY,
    [Jmeno] NVARCHAR(50) NOT NULL,
    [Email] NVARCHAR(100) UNIQUE,
    [Vek] SMALLINT NOT NULL DEFAULT 0
);

V následujícím kvízu, Kvíz - Výběr dat, řazení a datové typy v MS-SQL, si vyzkoušíme nabyté zkušenosti z předchozích lekcí.


 

Předchozí článek
Řešené úlohy k 7. lekci MS-SQL
Všechny články v sekci
MS-SQL databáze krok za krokem
Přeskočit článek
(nedoporučujeme)
Kvíz - Výběr dat, řazení a datové typy v MS-SQL
Článek pro vás napsal Michal Žůrek - misaz
Avatar
Uživatelské hodnocení:
416 hlasů
Autor se věnuje tvorbě aplikací pro počítače, mobilní telefony, mikroprocesory a tvorbě webových stránek a webových aplikací. Nejraději programuje ve Visual Basicu a TypeScript. Ovládá HTML, CSS, JavaScript, TypeScript, C# a Visual Basic.
Aktivity