8. diel - MS-SQL krok za krokom: Dátové typy a NULL
V predchádzajúcom cvičení, Riešené úlohy k 7. lekcii MS-SQL, sme si precvičili získané skúsenosti z predchádzajúcich lekcií.
Dnes sa v MS-SQL tutoriále 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 nášho on-line kurzu MS-SQL 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 MS-SQL) ich má samozrejme oveľa viac. Uveďme si
niekoľko tabuliek a predstavme si tie najdôležitejšie.
Celé čísla
Typ | Rozsah |
---|---|
TINYINT | 8bitové číslo |
SMALLINT | 16bitové číslo |
INT | 32b |
BIGINT | 64b |
Pozn.: Ak hľadáte dátový typ boolean (hodnoty true
/
false
), tak na ukladanie tejto hodnoty sa spravidla používa typ
BIT
(0/1).
Texty
Typ | Rozsah |
---|---|
NVARCHAR (max. počet znaků) | počet znaků jaký si zvolíte |
NCHAR (počet znaků) | pevný počet znaků jaký si zvolíte |
Už vieme, že existujú aj typy VARCHAR
a CHAR
.
Tie ale nepodporujú Unicode kódovanie a mohli by ste v nich mať problémy s
diakritikou. Preto ich nebudeme používať. N
v dátových typoch
označuje National, ako medzinárodné. Zaujímavá situácia nastane, keď
zapíšeme dátový typ ako NVARCHAR (MAX)
. V tejto chvíli je
dĺžka textu neobmedzená (prakticky je tam limit asi 2GB, čo jednou hodnotou
len ťažko zaplníme). Pre dlhé texty sa v minulosti používal typ
NTEXT
, ktorý je však teraz zastaraný.
Ostatné
Typ | Popis |
---|---|
DATE | Datum jako textový řetězec ve tvaru 'rrrr-mm-dd', rozsah od '0001-01-01' do '9999-12-31' |
TIME | Čas jako textový řetězec ve tvaru 'hh:mm:ss' |
DATETIME | Prakticky je to zřetězení data a času: 'rrrr-mm-dd hh: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
Dátové typy v databázach sa málinko odlišujú od dátových typov, ako
ich poznáme v programovacích jazykoch. Zatiaľ čo napríklad v jazyku C môže mať typ int
hodnoty len
nejakých -32 768 až 32 767 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é
hodnoty majú východiskovú hodnotu NULL
(ak im nenastavíme 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
. Datovému typu túto hodnotu môžeme
aj zakázať, viac ďalej.
Ak si spomínate, keď sme vytvárali databázu, odškrtávali sme Allow
Nulls. To zaistí, že sa nám do databázy NULL
nedostanú.
Skúsme si to:
INSERT INTO [Users] ([FirstName], [LastName]) VALUES ('Mister', 'Incomplete');
Výsledkom bude chyba, ktorá nám hovorí, že niektoré stĺpce
neumožňujú NULL
. Otvorte si designer tabuľky, zaškrtajte Allow
Nulls u všetkých stĺpcov okrem Id
, potvrďte tlačidlom Update a
následne tlačidlom Update Database. Teraz dotaz spustite znova. Keď sa teraz
pozriete do dát v tabuľke, na konci bude Pán Neúplný a bude mať v
nevyplnených stĺpcoch NULL
.
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 na rozdiel od východiskových hodnôt nezaberá
miesto.
NULL na strane aplikácie
Už sme si povedali o tom, že programovacie jazyky hodnotu NULL
spravidla nemajú (teda tie staticky typované). V jazykoch typovaných, ako je
napríklad Java alebo C#, musíme
použiť iné dátové typy. VC# môžeme ktorýkoľvek dátový typ označiť
ako NULLovateľný
a on pochopí, že v ňom môže byť aj NULL
. Používa sa na to
otáznik, typ je potom napr. int?
.
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 IDENTITY
.
Pozrime sa na ďalšie.
Název | Popis |
---|---|
IDENTITY | Jen pro čísla. Při vkládání řádku dejte této položce hodnotu
NULL a 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 (v každé tabulce max. jeden) 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é slová upresňujúce dátový typ sa vkladajú zaň, rovnako ako tomu
bolo pri IDENTITY
. Uveďme si nejaký príklad:
CREATE TABLE [Persons] ( [Id] INT NOT NULL IDENTITY(1, 1), [FirstName] CHAR(35) NOT NULL, PRIMARY KEY ([Id]) );
V nasledujúcom kvíze, Kvíz - Výber dát, radenie a dátové typy v MS-SQL, si vyskúšame nadobudnuté skúsenosti z predchádzajúcich lekcií.