Klauzule CONSTRAINT

Omezení je podobné indexu, ačkoli se dá použít také k vytvoření relace s jinou tabulkou.

Klauzule CONSTRAINT se v příkazech ALTER TABLE a CREATE TABLE používá k vytvoření nebo odstranění omezení. Klauzule CONSTRAINT má dva typy: jeden pro vytvoření omezení u jednoho pole a druhý pro vytvoření omezení u více než jednoho pole.

Poznámka: U jiných než accessových databází nepodporuje databázový stroj Microsoft Access použití klauzule CONSTRAINT ani žádných příkazů jazyka DDL (Data Definition Language). Místo toho používejte metody Create rozhraní DAO.

Syntaxe

Omezení jednoho 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]}

Omezení více polí:

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

Klauzule CONSTRAINT se skládá z těchto částí:

Část

Popis

název

Název omezení, které se má vytvořit

primární1, primární2

Název pole nebo polí, která se mají označit jako primární klíč

jedinečný1, jedinečný2

Název pole nebo polí, která se mají označit jako jedinečný klíč

ne_null1, ne_null2

Název pole nebo polí, která jsou omezená na jiné hodnoty než Null

odkaz1, odkaz2

Název pole nebo polí cizího klíče, která odkazují na pole v jiné tabulce

cizí_tabulka

Název cizí tabulky obsahující pole určená cizím_polem

cizí_pole1, cizí_pole2

Název pole nebo polí v cizí_tabulce určených odkazem1, odkazem2 (Pokud jsou odkazovaná pole primárním klíčem cizí_tabulky, můžete tuto klauzuli vynechat.)


Poznámky

Syntaxe pro omezení jednoho pole se používá v klauzuli definice pole příkazu ALTER TABLE nebo CREATE TABLE bezprostředně za specifikací datového typu tohoto pole.

Syntaxe pro omezení více polí se používá vždycky při použití rezervovaného slova CONSTRAINT vně klauzule definice pole v příkazu ALTER TABLE nebo CREATE TABLE.

Pomocí klauzule CONSTRAINT můžete pole označit jedním z následujících typů omezení:

  • Rezervovaným slovem UNIQUE označíte pole jako jedinečný klíč. To znamená, že žádné dva záznamy v tabulce nemají v tomto poli stejnou hodnotu. Jako jedinečné můžete omezit jakékoli pole nebo seznam polí. Pokud je jako jedinečný klíč označené omezení více polí, musí být zkombinované hodnoty všech polí v indexu jedinečné, i když dva nebo více záznamů mají stejnou hodnotu jenom v jednom z těchto polí.

  • Rezervovaným slovem PRIMARY KEY označíte jedno pole nebo sadu polí v tabulce jako primární klíč. Všechny hodnoty v primárním klíči musí být jedinečné a nesmí nabývat hodnoty Null, přičemž tabulka může obsahovat jenom jeden primární klíč.

    Poznámka: Nenastavujte omezení PRIMARY KEY u tabulky, která primární klíč už obsahuje, jinak dojde k chybě.

  • Rezervovaným slovem FOREIGN KEY označíte pole jako cizí klíč. Pokud se primární klíč cizí tabulky skládá z více než jednoho pole, musíte použít definici omezení více polí a uvést všechna odkazující pole, název cizí tabulky a názvy odkazovaných polí v cizí tabulce ve stejném pořadí, v jakém jsou uvedena odkazující pole. Pokud jsou odkazovaná pole primárním klíčem cizí tabulky, nemusíte tato odkazovaná pole zadávat. Databázový stroj se standardně chová tak, jako kdyby odkazovanými poli byl primární klíč cizí tabulky.

    Omezení cizího klíče definují specifické akce, které se mají provést, když se změní hodnota odpovídajícího primárního klíče:

  • Můžete určit akce, které se mají provést s cizí tabulkou na základě odpovídající akce provedené s primárním klíčem v tabulce, u které je definovaná klauzule CONSTRAINT. Podívejte se například na následující definici tabulky Customers:

CREATE TABLE Customers (CustId INTEGER PRIMARY KEY, CLstNm NCHAR VARYING (50))

Podívejte se na následující definici tabulky Orders, která definuje relaci cizího klíče odkazující na primární klíč tabulky Customers:

CREATE TABLE Orders (OrderId INTEGER PRIMARY KEY, CustId INTEGER, OrderNotes NCHAR VARYING (255), CONSTRAINT FKOrdersCustId FOREIGN KEY (CustId) REFERENCES Customers ON UPDATE CASCADE ON DELETE CASCADE

U cizího klíče je definovaná klauzule ON UPDATE CASCADE i ON DELETE CASCADE. Klauzule ON UPDATE CASCADE znamená, že pokud se v tabulce Customers aktualizuje identifikátor zákazníka (CustId), přenese se tato aktualizace do tabulky Orders. Každá objednávka obsahující odpovídající hodnotu identifikátoru zákazníka se automaticky aktualizuje na novou hodnotu. Klauzule ON DELETE CASCADE znamená, že pokud se z tabulky Customers odstraní nějaký zákazník, odstraní se zároveň všechny řádky v tabulce Orders obsahující stejnou hodnotu identifikátoru zákazníka.

Podívejte se na následující odlišnou definici tabulky Orders, která místo akce CASCADE používá akci SET NULL:

CREATE TABLE Orders (OrderId INTEGER PRIMARY KEY, CustId INTEGER, OrderNotes NCHAR VARYING (255), CONSTRAINT FKOrdersCustId FOREIGN KEY (CustId) REFERENCES Customers ON UPDATE SET NULL ON DELETE SET NULL

Klauzule ON UPDATE SET NULL znamená, že pokud se v tabulce Customers aktualizuje identifikátor zákazníka (CustId), nastaví se odpovídající hodnoty cizího klíče v tabulce Orders automaticky na hodnotu NULL. Klauzule ON DELETE SET NULL podobně znamená, že pokud se z tabulky Customers odstraní nějaký uživatel, všechny odpovídající cizí klíče v tabulce Orders se automaticky nastaví na hodnotu NULL.

Pomocí modifikátoru NO INDEX můžete zabránit automatickému vytváření indexů pro cizí klíče. Tato forma definice cizího klíče by se měla používat jenom v případech, kdy by výsledné indexové hodnoty byly často duplicitní. Tam, kde jsou hodnoty v indexu cizího klíče často duplicitní, může být použití indexu méně efektivní než prosté procházení tabulky. Udržování tohoto typu indexu, kdy se v tabulce vkládají a odstraňují řádky, snižuje výkon a nepřináší žádný užitek.



Rozšiřte své dovednosti s Office
Projít školení
Získejte nové funkce jako první
Připojte se k účastníkům programu Office Insiders

Byly tyto informace užitečné?

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

Děkujeme vám za váš názor. Vypadá to, že bude užitečné, když vás spojíme s některým z našich agentů z podpory Office.

×