8. diel - Oracle krok za krokom: Dátové typy a NULL
V minulej lekcii, Oracle krok za krokom: Radenie, Fetch a agregačné funkcie , sme sa dozvedeli niečo o radení ao agregačných funkciách.
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 Oracle) ich má samozrejme omnoho viac. Uveďme si pár tabuliek
a predstavme si tie najdôležitejšie. Nasledujúce tabuľky obsahujú tie
najpoužívanejšie dátové typy.
Celé čísla
Oracle (na rozdiel napr. Od MySQL) nevyužíva
celočíselné dátové typy ako TINYINT
, MEDIUMINT
a
BIGINT
. Z klasických celočíselných dátových typov je tu iba
SMALLINT
a INT
. Ostatné celočíselné dátové typy
nám nahrádza dátový typ NUMBER
, za ktorý sa potom do
zátvoriek udáva veľkosť (rozsah):
Typ (MySQL) | Typ (Oracle) | rozsah |
---|---|---|
TINYINT | NUMBER (3) | 8b |
SMALLINT | SMALLINT alebo NUMBER (5) | 16b |
MEDIUMINT | NUMBER (7) | 24b |
INT | INT alebo NUMBER (10) | 32b |
BIGINT | NUMBER (19) | 64b |
TRUE
/
FALSE
), tak na ukladanie tejto hodnoty sa spravidla používa
NUMBER(1,0)
.
Texty
typ | rozsah |
---|---|
VARCHAR2 (max. Počet znakov) | počet znakov aký si zvolíte, max. 32kB |
CHAR (počet znakov) | pevný počet znakov aký si zvolíte, max. 2kB |
CLOB | až 8 terabajtov |
NVARCHAR2 (max. Počet znakov) | rovnaký ako VARCHAR2, iba pre Unicode znaky |
NCHAR (počet znakov) | rovnaký ako CHAR, iba pre znaky Unicode |
NCLOB | rovnaký ako CLOB, iba pre znaky Unicode |
typ | rozsah |
---|---|
DATE | Dátum ako textový reťazec v tvare 'dd.mm.rr', rozsah od '1.1.4712' pnl do '31 .12.4712 'nl |
TIMESTAMP | Dátum is konkrétnym časom v tvare 'dd.mm.rr hh: mm: ss, ms' |
INTERVAL | Časový interval medzi dvoma dátumami |
BLOB atď. | Všeobecná dáta v binárnom tvare. Umožňujú do databázy ukladať napr. Obrázky alebo zvuky. |
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á. Dá sa povedať, že to je
prázdna hodnota. 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
.
Každému stĺpci v tabuľke môžeme tiež už pri tvorbe tabuľky
explicitne zakázať hodnotu NULL. Urobíme to pridaním slov
NOT NULL
za dátový typ stĺpca:
CREATE TABLE knihy ( knihy_ID INT PRIMARY KEY, nazev VARCHAR2(50) NOT NULL, autor VARCHAR2(50) );
Vidíme, že u primárneho kľúča NOT NULL
pridávať
nemusíme, ten totiž NULL
nikdy byť nemôže. U stĺpca
nazev
sme hodnotu NULL
explicitne zakázali, au
stĺpce autor
nechali povolenú.
Môžeme to teraz otestovať. Skúsme si spustiť nasledujúci dotaz:
INSERT INTO knihy(knihy_ID, nazev) VALUES (1, 'Střet Králů')
Všetko prebehlo v poriadku. Pri vložení zázname sme tu vynechali stĺpec
autor
, to ale nevadí, pretože ten hodnotu NULL obsahovať môže.
Skúsme si teraz otázku trochu upraviť:
INSERT INTO knihy(knihy_ID, autor) VALUES (2, 'George R.R. Martin')
výsledok:
Error starting at line : 1 in command - INSERT INTO knihy(knihy_ID, autor) VALUES (2, 'George R.R. Martin') Error report - ORA-01400: do ("NOVESCHEMA"."KNIHY"."NAZEV") nelze vložit hodnotu NULL
Z čoho už vidíme, že do stĺpca nazev
hodnotu NULL vložiť
nemôžeme.
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 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ť. Môžeme síce v nových verziách PHP určiť
dátový typ, ale nie je to podmienkou. 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 PRIMARY KEY
.
Pozrime sa na ďalšie.
Názov | popis |
---|---|
GENERATED ALWAYS AS IDENTITY (START WITH n INCREMENT BY m) | Pre automatické navyšovanie ID. Pri vkladaní riadku dajte tejto položke
hodnotu NULL a systém jej automaticky pridelí
hodnotu o m väčšia ako dal minulému riadku, pričom
začiatok tu bude číslo n . |
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 binárne dátové typy a položky s
GENERATED . |
V budúcej lekcii, Oracle krok za krokom: Otázky cez viac tabuliek (JOIN) , si pripravíme tabuľky a testovacie dáta pre jednoduchý redakčný systém, ako je potrebné tu na ITnetwork. Ďalšie diely totiž budeme robiť otázky cez viac tabuliek a tzv. Poddotazy. Tak bude váš arzenál základných databázových nástrojov kompletné pre tvorbu prakticky akejkoľvek aplikácie:)