Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115 Číslo projektu: Číslo šablony: Název materiálu: Ročník: Identifikace materiálu: Jméno autora: Předmět: Tématický celek: Anotace: CZ.1.07/1.5.00/34.0410 V/2 - inovace směřující k rozvoji odborných kompetencí Pracovní listy Databáze 3. ročník (IT) BEL_52_DAT_PL19 Miloslav Bělský Databáze Integritní omezení not null, pk, uk Obsahem tohoto pracovního listu je využití integritních omezení not null, primární klíč, unikátní klíč. Datum: 24. 03. 2014 19-1
Databáze Pracovní list č. 19 Omezení NOT NULL, PRIMARY KEY, UNIQUE Cíl Naučit se vkládat vhodná omezení na jednotlivé sloupce tabulky. Pochopit smysl těchto omezení a jejich správného používání. (Pro omezení se používá anglický termín CONSTRAINT.) Výklad Jednotlivá omezení můžeme do tabulky vložit již při jejím vytváření pak budou omezení součástí příkazu CREATE TABLE. Pokud chceme dodatečně některá omezení upravit, přidat nebo odstranit, musíme použít příkaz ALTER TABLE. Rozeznáváme následující omezení: NOT NULL zajišťuje, že sloupec bude vždy obsahovat konkrétní hodnotu. PRIMARY KEY (primární klíč) slouží jako identifikátor každého řádku. UNIQUE (unikátní klíč) podobný primárnímu klíči. Zajišťuje jedinečnost hodnot v daném sloupci. Každá tabulka může obsahovat libovolný počet unikátních klíčů. Existuje ještě další omezení tzv. cizí klíč (FOREIGN KEY). O tomto omezení bude následující pracovní list. NOT NULL Jestliže chceme zajistit, aby libovolný sloupec musel vždy obsahovat konkrétní hodnotu, nastavíme u něj omezení NOT NULL. Každé omezení lze pojmenovat. Usnadní nám to další práci především mazání. Vytvoření s názvem: jmeno VARCHAR2(50) CONSTRAINT zam_jmeno_nn NOT NULL,...); Vytvoření bez názvu: jmeno VARCHAR2(50) NOT NULL,...); 19-2
Pokud neuvedete název omezení, bude přidělen systémem a pro případné smazání je třeba systémový název zjistit! Dodatečné přidání ALTER TABLE nazev_tabulky MODIFY nazev_sloupce NOT NULL; Zrušení: ALTER TABLE nazev_tabulky DROP CONSTRAINT nazev; PRIMARY KEY (PK) Primární klíč může být v tabulce jen jeden a musí obsahovat jedinečné hodnoty. Skládá se z jednoho nebo více sloupců. Lze jej definovat přímo za sloupcem nebo až na konci vytvoření tabulky. Hranaté závorky značí nepovinnou část! Vytvoření přímo za sloupcem: id NUMBER(8) [CONSTRAINT zam_id_pk] PRIMARY KEY Vytvoření na konci CREATE TABLE: id NUMBER(8),..., [CONSTRAINT zam_id_pk] PRIMARY KEY(id) ); Pokud se PK skládá z více než jednoho sloupce, pak je nutné použít druhý způsob a do závorky vypsat všechny součásti PK oddělené čárkami. Vytvoření UNIQUE (UK) provádíme úplně stejně, jen místo slov PRIMARY KEY píšeme UNIQUE. Rušení PK, UK provádíme stejně jako v případě NOT NULL. Primární klíč je možné zrušit i bez uvedení názvu: ALTER TABLE nazev_tabulky DROP PRIMARY KEY; Úprava omezení Jestliže jsme omezení zapomněli nadefinovat, přidáme ho dodatečně pomocí příkazu ALTER TABLE dle následující syntaxe: ALTER TABLE nazev_tabulky ADD [CONSTRAINT nazev] PRIMARY KEY(nazev_sloupce,...); ALTER TABLE nazev_tabulky ADD [CONSTRAINT nazev] UNIQUE(nazev_sloupce,...); 19-3
Příklady k procvičení Vytvářejte dotazy podle následujícího zadání. Pod každým úkolem je prostor na poznámky: 1. Vytvořte tabulku CD se sloupci id 6-ti ciferné číslo, nazev 50 znaků, producent 50 znaků, rok_vydani 4 ciferné číslo. Nevytvářejte žádná omezení. 2. Do tabulky CD vložte 5 záznamů tak, aby se alespoň u dvou sloupců shodovalo id a aby alespoň jeden název byl prázdný. 3. Přidejte do tabulky primární klíč na sloupec id. Pokud dojde k chybě, odstraňte problém a přidání PK opakujte. 4. Na sloupce nazev, producent a rok_vydani přidejte omezení NOT NULL. Pokud opět dojde k nějaké chybě, odstraňte problém a pokračujte ve vkládání omezení. 5. Na sloupec nazev vložte unikátní klíč. 6. Vložená omezení otestujte tak, že se pokusíte vložit řádky, které budou jednotlivá omezení porušovat. 19-4
7. Vytvořte tabulku uzivatele a rovnou definujte požadovaná omezení. Tabulka bude obsahovat sloupce: jmeno, prijmeni, heslo, email, ban. U každého sloupce zvolte vhodný datový typ. Sloupce jmeno a prijmeni budou primárním klíčem. všechny sloupce kromě banu budou NOT NULL. Sloupec email bude unikátním klíčem. 8. Do tabulky uzivatele přidejte NOT NULL sloupec datum_registrace. Pokud se setkáte s problémem, pokuste se situaci vyřešit. 9. Vytvořte kopii tabulky uzivatele. Zkontrolujte a zapište si, která omezení byla zkopírována a která nikoliv. 10. Z tabulky uzivatele odstraňte primární klíč (je nevhodně zvoleny). 11. Přidejte do tabulky sloupec id, který bude primárním klíčem. 19-5