Klauzule CONSTRAINT

Omezení má podobnou funkci jako Index, může však být použita k nastavení Relace s jinou tabulkou.

Klauzule CONSTRAINT je použita v příkazech ALTER TABLE a CREATE TABLE k vytvoření nebo odstranění podmínek. Existují dva typy klauzule CONSTRAINT: jeden pro vytváření podmínky pro jedno pole a druhý pro vytváření podmínky pro více polí.

Poznámka : Databázový stroj Microsoft Access nepodporuje použití příkazu CONSTRAINT ani příkazů DDL (Data Definition Language) v databázích, které nejsou založeny na databázovém stroji Microsoft Access. V tomto případě použijte metodu Create objektu DAO (Data Access Objects).

Syntaxe

Podmínka pro jedno pole:

CONSTRAINT název {PRIMARY KEY | UNIQUE | NOT NULL |
REFERENCES cizí_tabulka [(cizí_pole1, cizí_pole2)]
[ON UPDATE CASCADE | SET NULL]
[ON DELETE CASCADE | SET NULL]}

Podmínka pro více polí:

CONSTRAINT název
{PRIMARY KEY (primární_klíč1[, primární_klíč2 [, ...]]) |
UNIQUE (jedinečný_klíč1[, jedinečný_klíč2 [, ...]]) |
NOT NULL (pole_bez_hodnoty_null1[, pole_bez_hodnoty_null2 [, ...]]) |
FOREIGN KEY [NO INDEX] (referenční_pole1[, referenční_pole2 [, ...]]) REFERENCES cizí_tabulka [(cizí_pole1 [, cizí_pole2 [, ...]])]
[ON UPDATE CASCADE | SET NULL]
[ON DELETE CASCADE | SET NULL]}

Klauzule CONSTRAINT má následující části:

Část

Popis

název

Název podmínky, která má být vytvořena.

primární_klíč1, primární_klíč2

Název pole nebo polí, která mají být určena jako Primární klíč.

jedinečný_klíč1, jedinečný_klíč2

Název pole nebo polí, která mají být určena jako jedinečný klíč.

pole_bez_hodnoty_null1, pole_bez_hodnoty_null2

Název pole nebo polí, ve kterých není povolena hodnota Null.

referenční_pole1, referenční_pole2

Název pole nebo polí Cizí klíč, který odkazuje na pole v jiné tabulce.

cizí_tabulka

Název Cizí tabulka obsahující pole určená parametry cizí_pole.

cizí_pole1, cizí_pole2

Názvy pole nebo polí v cizí tabulce určené parametry referenční_pole1, referenční_pole2. Tuto klauzuli je možné vynechat, pokud je odkazované pole primárním klíčem v cizí tabulce.


Poznámky

Syntaxe podmínky pro jedno pole se používá v klauzuli definice pole v příkazu ALTER TABLE nebo CREATE TABLE bezprostředně za určením typu dat daného pole.

Syntaxe podmínky pro více polí se používá, kdykoli je použito Rezervované slovo CONSTRAINT mimo klauzuli definice pole v příkazu ALTER TABLE nebo CREATE TABLE.

Pomocí klauzule CONSTRAINT lze určit, že pole má vyhovovat jednomu z následujících typů podmínek:

  • Pomocí vyhrazeného slova UNIQUE lze pole určit jako jedinečný klíč. To znamená, že žádné dva záznamy v tabulce nemohou v daném poli obsahovat stejnou hodnotu. Jako jedinečný klíč lze určit libovolné pole nebo seznam polí. Pokud je jako jedinečný klíč určeno několik polí, musí být jedinečná kombinace všech polí indexu. V tomto případě tedy může několik záznamů obsahovat stejnou hodnotu v některém z polí indexu.

  • Pomocí vyhrazeného slova PRIMARY KEY lze jedno nebo několik polí v tabulce určit jako primární klíč. Všechny hodnoty primárního klíče musí být jedinečné a nesmí nabývat hodnoty Null. V jedné tabulce může být určen pouze jeden primární klíč.

    Poznámka : Podmínku PRIMARY KEY nepoužívejte pro tabulky, ve kterých je již primární klíč definován. Pokud tak učiníte, dojde k chybě.

  • Pomocí vyhrazeného slova FOREIGN KEY je možné pole určit jako cizí klíč. Pokud je primární klíč cizí tabulky tvořen více poli, je třeba použít definici podmínky založené na více polích a určit všechna pole s odkazy, název cizí tabulky a názvy odkazovaných polí v cizí tabulce, a to ve stejném pořadí jako pole s odkazy. Pokud odkazovaná pole tvoří primární klíč cizí tabulky, není třeba tato pole určovat. Podle výchozího nastavení databázový stroj považuje za odkazované pole právě primární klíč cizí tabulky.

    Podmínky cizího klíče určují speciální akce, které mají být provedeny při změně hodnoty odpovídajícího primárního klíče:

  • Můžete určit akce, které mají být provedeny v cizí tabulce na základě odpovídající akce provedené s primárním klíčem v tabulce, pro niž je klauzule CONSTRAINT definována. Například lze použít následující definici pro tabulku Zákazníci:

CREATE TABLE Zákazníci (CustId INTEGER PRIMARY KEY, CLstNm NCHAR VARYING (50))

V následující definici tabulky Objednávky je definována relace cizího klíče pomocí odkazu na primární klíč tabulky Zákazníci:

CREATE TABLE Objednávky (OrderId INTEGER PRIMARY KEY, CustId INTEGER, OrderNotes NCHAR VARYING (255), CONSTRAINT FKOrdersCustId FOREIGN KEY (CustId) REFERENCES Zákazníci ON UPDATE CASCADE ON DELETE CASCADE

Obě klauzule ON UPDATE CASCADE a ON DELETE CASCADE jsou definovány pro cizí klíč. Klauzule ON UPDATE CASCADE znamená, že v případě aktualizace identifikátoru zákazníka (KódZákazníka) v tabulce Zákazníci bude aktualizace předána v rámci tabulky Objednávky. Každá objednávka obsahující odpovídající hodnotu identifikátoru zákazníka bude automaticky aktualizována na novou hodnotu. Klauzule ON DELETE CASCADE znamená, že v případě odstranění zákazníka z tabulky Zákazníci budou v tabulce Objednávky odstraněny také všechny řádky obsahující stejnou hodnotu identifikátoru zákazníka.

V následující alternativní definici tabulky Objednávky je namísto akce CASCADE použita akce SET NULL:

CREATE TABLE Objednávky (OrderId INTEGER PRIMARY KEY, CustId INTEGER, OrderNotes NCHAR VARYING (255), CONSTRAINT FKOrdersCustId FOREIGN KEY (CustId) REFERENCES Zákazníci ON UPDATE SET NULL ON DELETE SET NULL

Klauzule ON UPDATE SET NULL znamená, že v případě aktualizace identifikátoru zákazníka (KódZákazníka) v tabulce Zákazníci budou hodnoty odpovídajícího cizího klíče v tabulce Objednávky automaticky nastaveny na hodnotu NULL. Podobně klauzule ON DELETE SET NULL znamená, že v případě odstranění zákazníka z tabulky Zákazníci budou všechny odpovídající cizí klíče v tabulce Objednávky automaticky nastaveny na hodnotu NULL.

Automatickému vytváření indexů pro cizí klíče lze zabránit pomocí modifikátoru NO INDEX. Tato forma definice cizího klíče by měla být použita pouze v případech, kdy by hodnoty výsledného indexu byly často duplicitní. V případě, kdy jsou hodnoty v indexu cizího klíče často duplicitní, může být použití indexu méně efektivní než prosté prohledání tabulky. Údržba tohoto typu indexu při vkládání a odstraňování řádků z tabulky snižuje výkon a nepřináší žádné výhody.



Sdílení Facebook Facebook Twitter Twitter E-mail E-mail

Byly tyto informace užitečné?

Výborně! Je ještě něco dalšího, co byste nám chtěli dát vědět?

Jak bychom ho mohli vylepšit?

Děkujeme vám za zpětnou vazbu.

×