Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115 Číslo projektu:
CZ.1.07/1.5.00/34.0410
Číslo šablony:
V/2 - inovace směřující k rozvoji odborných kompetencí
Název materiálu:
Pracovní listy – Databáze
Ročník:
3. ročník (IT)
Identifikace materiálu:
BEL_52_DAT_PL19
Jméno autora:
Miloslav Bělský
Předmět:
Databáze
Tématický celek:
Integritní omezení – not null, pk, uk
Anotace:
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: CREATE TABLE zamestnanci ( jmeno VARCHAR2(50) CONSTRAINT zam_jmeno_nn NOT NULL, ...); Vytvoření bez názvu: CREATE TABLE zamestnanci ( 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: CREATE TABLE zamestnanci ( 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